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.