From b627f1131b59172cf4a9f238fb89cd415cbc38e0 Mon Sep 17 00:00:00 2001
From: Wendell Sun <iwendellsun@gmail.com>
Date: Sun, 28 Jan 2018 01:54:26 +0800
Subject: [PATCH] Change local copy origin url after repository rename (#3399)

Fix #3378
---
 models/repo.go | 11 ++++++++++-
 1 file changed, 10 insertions(+), 1 deletion(-)

diff --git a/models/repo.go b/models/repo.go
index a9e116d6b..59d233678 100644
--- a/models/repo.go
+++ b/models/repo.go
@@ -1580,10 +1580,19 @@ func ChangeRepositoryName(u *User, oldRepoName, newRepoName string) (err error)
 	}
 
 	// Change repository directory name.
-	if err = os.Rename(repo.RepoPath(), RepoPath(u.Name, newRepoName)); err != nil {
+	newRepoPath := RepoPath(u.Name, newRepoName)
+	if err = os.Rename(repo.RepoPath(), newRepoPath); err != nil {
 		return fmt.Errorf("rename repository directory: %v", err)
 	}
 
+	localPath := repo.LocalCopyPath()
+	if com.IsExist(localPath) {
+		_, err := git.NewCommand("remote", "set-url", "origin", newRepoPath).RunInDir(localPath)
+		if err != nil {
+			return fmt.Errorf("git remote set-url origin %s: %v", newRepoPath, err)
+		}
+	}
+
 	wikiPath := repo.WikiPath()
 	if com.IsExist(wikiPath) {
 		if err = os.Rename(wikiPath, WikiPath(u.Name, newRepoName)); err != nil {