d64549c0365b0b35bc2aebe4333e9ee4a5fb5615
- Author
- Ayman Bagabas <ayman.bagabas@gmail.com>
- Committer
- Ayman Bagabas <ayman.bagabas@gmail.com>
- Date
Message
Diff
This diff is truncated to protect this page.
1diff --git a/server/backend/backend.go b/server/backend/backend.go
2index 0bc7d6f62fe26e5bfb9c38e3a024bed57cff0a25..e43b839411d11615faeadd4aac39394c2391c6c3 100644
3--- a/server/backend/backend.go
4+++ b/server/backend/backend.go
5@@ -41,10 +41,6 @@ type Backend interface {
6 DeleteRepository(name string) error
7 // RenameRepository renames a repository.
8 RenameRepository(oldName, newName string) error
9- // DefaultBranch returns the repository's default branch.
10- DefaultBranch(repo string) (string, error)
11- // SetDefaultBranch sets the default branch for a repository.
12- SetDefaultBranch(repo string, branch string) error
13
14 // Description returns the repo's description.
15 Description(repo string) string
16diff --git a/server/backend/file/file.go b/server/backend/file/file.go
17index 2bc66b3ac458c94724e5c46ef49f0868ea7e89b2..da8196d63d0688a97ed267aa9ae7d130a90867c0 100644
18--- a/server/backend/file/file.go
19+++ b/server/backend/file/file.go
20@@ -33,7 +33,6 @@ import (
21 "github.com/charmbracelet/soft-serve/git"
22 "github.com/charmbracelet/soft-serve/server/backend"
23 "github.com/charmbracelet/ssh"
24- gitm "github.com/gogs/git-module"
25 gossh "golang.org/x/crypto/ssh"
26 )
27
28@@ -421,6 +420,7 @@ func (fb *FileBackend) SetAnonAccess(level backend.AccessLevel) error {
29 //
30 // It implements backend.Backend.
31 func (fb *FileBackend) SetDescription(repo string, desc string) error {
32+ repo = sanatizeRepo(repo) + ".git"
33 f, err := os.OpenFile(filepath.Join(fb.reposPath(), repo, description), os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0600)
34 if err != nil {
35 return fmt.Errorf("failed to open description file: %w", err)
36@@ -501,6 +501,10 @@ func (fb *FileBackend) SetServerPort(port string) error {
37 func (fb *FileBackend) CreateRepository(name string, private bool) (backend.Repository, error) {
38 name = sanatizeRepo(name) + ".git"
39 rp := filepath.Join(fb.reposPath(), name)
40+ if _, err := os.Stat(rp); err == nil {
41+ return nil, os.ErrExist
42+ }
43+
44 if _, err := git.Init(rp, true); err != nil {
45 logger.Debug("failed to create repository", "err", err)
46 return nil, err
47@@ -524,9 +528,16 @@ func (fb *FileBackend) DeleteRepository(name string) error {
48 //
49 // It implements backend.Backend.
50 func (fb *FileBackend) RenameRepository(oldName string, newName string) error {
51- oldName = sanatizeRepo(oldName) + ".git"
52- newName = sanatizeRepo(newName) + ".git"
53- return os.Rename(filepath.Join(fb.reposPath(), oldName), filepath.Join(fb.reposPath(), newName))
54+ oldName = filepath.Join(fb.reposPath(), sanatizeRepo(oldName)+".git")
55+ newName = filepath.Join(fb.reposPath(), sanatizeRepo(newName)+".git")
56+ if _, err := os.Stat(oldName); errors.Is(err, os.ErrNotExist) {
57+ return fmt.Errorf("repository %q does not exist", strings.TrimSuffix(filepath.Base(oldName), ".git"))
58+ }
59+ if _, err := os.Stat(newName); err == nil {
60+ return fmt.Errorf("repository %q already exists", strings.TrimSuffix(filepath.Base(newName), ".git"))
61+ }
62+
63+ return os.Rename(oldName, newName)
64 }
65
66 // Repository finds the given repository.
67@@ -536,7 +547,10 @@ func (fb *FileBackend) Repository(repo string) (backend.Repository, error) {
68 repo = sanatizeRepo(repo) + ".git"
69 rp := filepath.Join(fb.reposPath(), repo)
70 _, err := os.Stat(rp)
71- if !errors.Is(err, os.ErrExist) {
72+ if err != nil {
73+ if errors.Is(err, os.ErrNotExist) {
74+ return nil, os.ErrNotExist
75+ }
76 return nil, err
77 }
78
79@@ -569,52 +583,3 @@ func (fb *FileBackend) Repositories() ([]backend.Repository, error) {
80
81 return repos, nil
82 }
83-
84-// DefaultBranch returns the default branch of the given repository.
85-//
86-// It implements backend.Backend.
87-func (fb *FileBackend) DefaultBranch(repo string) (string, error) {
88- rr, err := fb.Repository(repo)
89- if err != nil {
90- logger.Debug("failed to get default branch", "err", err)
91- return "", err
92- }
93-
94- r, err := rr.Repository()
95- if err != nil {
96- logger.Debug("failed to open repository for default branch", "err", err)
97- return "", err
98- }
99-
100- head, err := r.HEAD()
101- if err != nil {
102- logger.Debug("failed to get HEAD for default branch", "err", err)
103- return "", err
104- }
105-
106- return head.Name().Short(), nil
107-}
108-
109-// SetDefaultBranch sets the default branch for the given repository.
110-//
111-// It implements backend.Backend.
112-func (fb *FileBackend) SetDefaultBranch(repo string, branch string) error {
113- rr, err := fb.Repository(repo)
114- if err != nil {
115- logger.Debug("failed to get repository for default branch", "err", err)
116- return err
117- }
118-
119- r, err := rr.Repository()
120diff --git a/server/backend/file/repo.go b/server/backend/file/repo.go
121index 2a8c3c9d2367b8cb36630567ef31f5dd8cc955d5..0697b51d0d420fd462ab781819b9f841033b404c 100644
122--- a/server/backend/file/repo.go
123+++ b/server/backend/file/repo.go
124@@ -1,7 +1,6 @@
125 package file
126
127 import (
128- "errors"
129 "os"
130 "path/filepath"
131 "strings"
132@@ -39,7 +38,7 @@ func (r *Repo) Description() string {
133 return ""
134 }
135
136- return desc
137+ return strings.TrimSpace(desc)
138 }
139
140 // IsPrivate returns whether the repository is private.
141@@ -47,12 +46,12 @@ func (r *Repo) Description() string {
142 // It implements backend.Repository.
143 func (r *Repo) IsPrivate() bool {
144 _, err := os.Stat(filepath.Join(r.path, exportOk))
145- return errors.Is(err, os.ErrExist)
146+ return err != nil
147 }
148
149-// Repository returns the underlying git.Repository.
150+// Open returns the underlying git.Repository.
151 //
152 // It implements backend.Repository.
153-func (r *Repo) Repository() (*git.Repository, error) {
154+func (r *Repo) Open() (*git.Repository, error) {
155 return git.Open(r.path)
156 }
157diff --git a/server/backend/noop/noop.go b/server/backend/noop/noop.go
158index c85e2b54bc07a3f1885b3fe9c7ddfdaae625c44f..72c863b9503fedbba5215300b7cc222edd235ee1 100644
159--- a/server/backend/noop/noop.go
160+++ b/server/backend/noop/noop.go
161@@ -62,11 +62,6 @@ func (*Noop) CreateRepository(name string, private bool) (backend.Repository, er
162 return &repo{path: rp}, nil
163 }
164
165-// DefaultBranch implements backend.Backend
166-func (*Noop) DefaultBranch(repo string) (string, error) {
167- return "", ErrNotImpl
168-}
169-
170 // DeleteRepository implements backend.Backend
171 func (*Noop) DeleteRepository(name string) error {
172 return ErrNotImpl
173@@ -132,11 +127,6 @@ func (*Noop) SetAnonAccess(level backend.AccessLevel) error {
174 return ErrNotImpl
175 }
176
177-// SetDefaultBranch implements backend.Backend
178-func (*Noop) SetDefaultBranch(repo string, branch string) error {
179- return ErrNotImpl
180-}
181-
182 // SetDescription implements backend.Backend
183 func (*Noop) SetDescription(repo string, desc string) error {
184 return ErrNotImpl
185diff --git a/server/backend/noop/repo.go b/server/backend/noop/repo.go
186index 80cbbcf2ba563b19833c793df96f42cbb36b58bf..12d5394c0bd93c4ee328389600d10f922b4e501e 100644
187--- a/server/backend/noop/repo.go
188+++ b/server/backend/noop/repo.go
189@@ -27,6 +27,6 @@ func (*repo) Name() string {
190 }
191
192 // Repository implements backend.Repository
193-func (r *repo) Repository() (*git.Repository, error) {
194+func (r *repo) Open() (*git.Repository, error) {
195 return git.Open(r.path)
196 }
197diff --git a/server/backend/repo.go b/server/backend/repo.go
198index 846134b83e9873ae0874ad5e9f702ab7b801a78b..61bd6c1ea14c7378d84f03ec9bf23002900cd58f 100644
199--- a/server/backend/repo.go
200+++ b/server/backend/repo.go
201@@ -10,6 +10,6 @@ type Repository interface {
202 Description() string
203 // IsPrivate returns whether the repository is private.
204 IsPrivate() bool
205- // Repository returns the underlying git.Repository.
206- Repository() (*git.Repository, error)
207+ // Open returns the underlying git.Repository.
208+ Open() (*git.Repository, error)
209 }
210diff --git a/server/backend/utils.go b/server/backend/utils.go
211index 6f7d87b3239c3889607467e67d1e981713c0f5ab..ed68a88dd174521eccf8863feecc94154e0df44f 100644
212--- a/server/backend/utils.go
213+++ b/server/backend/utils.go
214@@ -12,7 +12,7 @@ import (
215 func LatestFile(r Repository, pattern string) (string, string, error) {
216 g := glob.MustCompile(pattern)
217 dir := filepath.Dir(pattern)
218- repo, err := r.Repository()
219+ repo, err := r.Open()
220 if err != nil {
221 return "", "", err
222 }