4a52c1b1244d9b10334b6e67bdd68cda43586935

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

Message

fix(backend): cache repo rename

Diff

 1diff --git a/server/backend/file/file.go b/server/backend/file/file.go
 2index dfb80526172c31df5976ab7838b0098261765e04..cf0b368feb147df29de5ae0b52ea03c50c553985 100644
 3--- a/server/backend/file/file.go
 4+++ b/server/backend/file/file.go
 5@@ -650,16 +650,29 @@ func (fb *FileBackend) DeleteRepository(repo string) error {
 6 //
 7 // It implements backend.Backend.
 8 func (fb *FileBackend) RenameRepository(oldName string, newName string) error {
 9-	oldName = filepath.Join(fb.reposPath(), utils.SanitizeRepo(oldName)+".git")
10-	newName = filepath.Join(fb.reposPath(), utils.SanitizeRepo(newName)+".git")
11-	if _, err := os.Stat(oldName); errors.Is(err, os.ErrNotExist) {
12-		return fmt.Errorf("repository %q does not exist", strings.TrimSuffix(filepath.Base(oldName), ".git"))
13+	oldName = utils.SanitizeRepo(oldName)
14+	oldRepo := filepath.Join(fb.reposPath(), oldName+".git")
15+	newName = utils.SanitizeRepo(newName)
16+	newRepo := filepath.Join(fb.reposPath(), newName+".git")
17+	if _, err := os.Stat(oldRepo); errors.Is(err, os.ErrNotExist) {
18+		return fmt.Errorf("repository %q does not exist", strings.TrimSuffix(filepath.Base(oldRepo), ".git"))
19 	}
20-	if _, err := os.Stat(newName); err == nil {
21-		return fmt.Errorf("repository %q already exists", strings.TrimSuffix(filepath.Base(newName), ".git"))
22+	if _, err := os.Stat(newRepo); err == nil {
23+		return fmt.Errorf("repository %q already exists", strings.TrimSuffix(filepath.Base(newRepo), ".git"))
24 	}
25 
26-	return os.Rename(oldName, newName)
27+	if err := os.Rename(oldRepo, newRepo); err != nil {
28+		return err
29+	}
30+
31+	// Update cache.
32+	if r, ok := fb.repos[oldName]; ok {
33+		r.path = newRepo
34+		delete(fb.repos, oldName)
35+		fb.repos[newName] = r
36+	}
37+
38+	return nil
39 }
40 
41 // Repository finds the given repository.