d64549c0365b0b35bc2aebe4333e9ee4a5fb5615

Author
Ayman Bagabas <ayman.bagabas@gmail.com>
Committer
Ayman Bagabas <ayman.bagabas@gmail.com>
Date

Message

fix(backend): repo doesn't exist

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 	}