summaryrefslogtreecommitdiffstats
path: root/services/f3/driver/repository.go
diff options
context:
space:
mode:
Diffstat (limited to 'services/f3/driver/repository.go')
-rw-r--r--services/f3/driver/repository.go101
1 files changed, 101 insertions, 0 deletions
diff --git a/services/f3/driver/repository.go b/services/f3/driver/repository.go
new file mode 100644
index 0000000..da968b4
--- /dev/null
+++ b/services/f3/driver/repository.go
@@ -0,0 +1,101 @@
+// Copyright Earl Warren <contact@earl-warren.org>
+// Copyright Loïc Dachary <loic@dachary.org>
+// SPDX-License-Identifier: MIT
+
+package driver
+
+import (
+ "context"
+
+ repo_model "code.gitea.io/gitea/models/repo"
+
+ "code.forgejo.org/f3/gof3/v3/f3"
+ helpers_repository "code.forgejo.org/f3/gof3/v3/forges/helpers/repository"
+ f3_tree "code.forgejo.org/f3/gof3/v3/tree/f3"
+ "code.forgejo.org/f3/gof3/v3/tree/generic"
+)
+
+var _ f3_tree.ForgeDriverInterface = &repository{}
+
+type repository struct {
+ common
+
+ name string
+ h helpers_repository.Interface
+
+ f *f3.Repository
+}
+
+func (o *repository) SetNative(repository any) {
+ o.name = repository.(string)
+}
+
+func (o *repository) GetNativeID() string {
+ return o.name
+}
+
+func (o *repository) NewFormat() f3.Interface {
+ return &f3.Repository{}
+}
+
+func (o *repository) ToFormat() f3.Interface {
+ return &f3.Repository{
+ Common: f3.NewCommon(o.GetNativeID()),
+ Name: o.GetNativeID(),
+ FetchFunc: o.f.FetchFunc,
+ }
+}
+
+func (o *repository) FromFormat(content f3.Interface) {
+ f := content.Clone().(*f3.Repository)
+ o.f = f
+ o.f.SetID(f.Name)
+ o.name = f.Name
+}
+
+func (o *repository) Get(ctx context.Context) bool {
+ return o.h.Get(ctx)
+}
+
+func (o *repository) Put(ctx context.Context) generic.NodeID {
+ return o.upsert(ctx)
+}
+
+func (o *repository) Patch(ctx context.Context) {
+ o.upsert(ctx)
+}
+
+func (o *repository) upsert(ctx context.Context) generic.NodeID {
+ o.Trace("%s", o.GetNativeID())
+ o.h.Upsert(ctx, o.f)
+ return generic.NewNodeID(o.f.Name)
+}
+
+func (o *repository) SetFetchFunc(fetchFunc func(ctx context.Context, destination string)) {
+ o.f.FetchFunc = fetchFunc
+}
+
+func (o *repository) getURL() string {
+ owner := f3_tree.GetOwnerName(o.GetNode())
+ repoName := f3_tree.GetProjectName(o.GetNode())
+ if o.f.GetID() == f3.RepositoryNameWiki {
+ repoName += ".wiki"
+ }
+ return repo_model.RepoPath(owner, repoName)
+}
+
+func (o *repository) GetRepositoryURL() string {
+ return o.getURL()
+}
+
+func (o *repository) GetRepositoryPushURL() string {
+ return o.getURL()
+}
+
+func newRepository(_ context.Context) generic.NodeDriverInterface {
+ r := &repository{
+ f: &f3.Repository{},
+ }
+ r.h = helpers_repository.NewHelper(r)
+ return r
+}