fix(backend): delete repo when importing existing one

Ayman Bagabas created

Fixes: bb40f89b34de ("fix(server): bound the current context to the underlying operation")

Change summary

server/backend/sqlite/error.go  | 3 +++
server/backend/sqlite/sqlite.go | 4 ++++
2 files changed, 7 insertions(+)

Detailed changes

server/backend/sqlite/error.go 🔗

@@ -14,4 +14,7 @@ var (
 
 	// ErrRepoNotExist is returned when a repository does not exist.
 	ErrRepoNotExist = fmt.Errorf("repository does not exist")
+
+	// ErrRepoExist is returned when a repository already exists.
+	ErrRepoExist = fmt.Errorf("repository already exists")
 )

server/backend/sqlite/sqlite.go 🔗

@@ -184,6 +184,10 @@ func (d *SqliteBackend) ImportRepository(name string, remote string, opts backen
 	repo := name + ".git"
 	rp := filepath.Join(d.reposPath(), repo)
 
+	if _, err := os.Stat(rp); err == nil || os.IsExist(err) {
+		return nil, ErrRepoExist
+	}
+
 	copts := git.CloneOptions{
 		Bare:    true,
 		Mirror:  opts.Mirror,