summaryrefslogtreecommitdiffstats
path: root/services/f3/driver/repository.go
blob: da968b4c4758c67ccabd811cb4376d81b7e7bb3a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
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
}