From da5bf4eba40dd8f45576865c5ea8d4e66130fd7e Mon Sep 17 00:00:00 2001 From: Ayman Bagabas Date: Wed, 2 Aug 2023 14:48:45 -0400 Subject: [PATCH] fix: remove repo when stat mismatch Remove repo files when the repo doesn't exist in the database but exists in the filesystem --- server/backend/repo.go | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/server/backend/repo.go b/server/backend/repo.go index 119de3c92d4196267760222487b21545500d04ff..c9c6a7257e2674909cf7d8e44811a956d3562129 100644 --- a/server/backend/repo.go +++ b/server/backend/repo.go @@ -199,9 +199,17 @@ func (d *Backend) DeleteRepository(ctx context.Context, name string) error { // Delete repo from cache defer d.cache.Delete(name) - repom, err := d.store.GetRepoByName(ctx, tx, name) - if err != nil { - return db.WrapError(err) + repom, dberr := d.store.GetRepoByName(ctx, tx, name) + _, ferr := os.Stat(rp) + if dberr != nil && ferr != nil { + return proto.ErrRepoNotFound + } + + // If the repo is not in the database but the directory exists, remove it + if dberr != nil && ferr == nil { + return os.RemoveAll(rp) + } else if dberr != nil { + return db.WrapError(dberr) } repoID := strconv.FormatInt(repom.ID, 10)