da5bf4eba40dd8f45576865c5ea8d4e66130fd7e

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

Message

fix: remove repo when stat mismatch

Remove repo files when the repo doesn't exist in the database but exists
in the filesystem

Diff

 1diff --git a/server/backend/repo.go b/server/backend/repo.go
 2index 119de3c92d4196267760222487b21545500d04ff..c9c6a7257e2674909cf7d8e44811a956d3562129 100644
 3--- a/server/backend/repo.go
 4+++ b/server/backend/repo.go
 5@@ -199,9 +199,17 @@ func (d *Backend) DeleteRepository(ctx context.Context, name string) error {
 6 		// Delete repo from cache
 7 		defer d.cache.Delete(name)
 8 
 9-		repom, err := d.store.GetRepoByName(ctx, tx, name)
10-		if err != nil {
11-			return db.WrapError(err)
12+		repom, dberr := d.store.GetRepoByName(ctx, tx, name)
13+		_, ferr := os.Stat(rp)
14+		if dberr != nil && ferr != nil {
15+			return proto.ErrRepoNotFound
16+		}
17+
18+		// If the repo is not in the database but the directory exists, remove it
19+		if dberr != nil && ferr == nil {
20+			return os.RemoveAll(rp)
21+		} else if dberr != nil {
22+			return db.WrapError(dberr)
23 		}
24 
25 		repoID := strconv.FormatInt(repom.ID, 10)