From 9fc9c1de98aff0329f358753ba5b2635dd522ac3 Mon Sep 17 00:00:00 2001 From: yisiliang Date: Mon, 6 Jul 2020 10:08:32 +0800 Subject: Update the wiki repository remote origin while update the mirror repository's Clone From URL (#12053) * update the wiki repository remote origin #12050 * wikiRemoteURL is under repo_module * export WikiRemoteURL func * remove redundant space and empty line Co-authored-by: Lauris BH Co-authored-by: techknowlogick --- modules/repository/repo.go | 6 +++--- services/mirror/mirror.go | 20 +++++++++++++++++++- 2 files changed, 22 insertions(+), 4 deletions(-) diff --git a/modules/repository/repo.go b/modules/repository/repo.go index d57b16c913..01d4701c71 100644 --- a/modules/repository/repo.go +++ b/modules/repository/repo.go @@ -27,9 +27,9 @@ import ( */ var commonWikiURLSuffixes = []string{".wiki.git", ".git/wiki"} -// wikiRemoteURL returns accessible repository URL for wiki if exists. +// WikiRemoteURL returns accessible repository URL for wiki if exists. // Otherwise, it returns an empty string. -func wikiRemoteURL(remote string) string { +func WikiRemoteURL(remote string) string { remote = strings.TrimSuffix(remote, ".git") for _, suffix := range commonWikiURLSuffixes { wikiURL := remote + suffix @@ -71,7 +71,7 @@ func MigrateRepositoryGitData(doer, u *models.User, repo *models.Repository, opt if opts.Wiki { wikiPath := models.WikiPath(u.Name, opts.RepoName) - wikiRemotePath := wikiRemoteURL(opts.CloneAddr) + wikiRemotePath := WikiRemoteURL(opts.CloneAddr) if len(wikiRemotePath) > 0 { if err := os.RemoveAll(wikiPath); err != nil { return repo, fmt.Errorf("Failed to remove %s: %v", wikiPath, err) diff --git a/services/mirror/mirror.go b/services/mirror/mirror.go index 165e7cd35b..7c12aa0858 100644 --- a/services/mirror/mirror.go +++ b/services/mirror/mirror.go @@ -100,7 +100,25 @@ func SaveAddress(m *models.Mirror, addr string) error { } _, err = git.NewCommand("remote", "add", "origin", "--mirror=fetch", addr).RunInDir(repoPath) - return err + if err != nil && !strings.HasPrefix(err.Error(), "exit status 128 - fatal: No such remote ") { + return err + } + + if m.Repo.HasWiki() { + wikiPath := m.Repo.WikiPath() + wikiRemotePath := repo_module.WikiRemoteURL(addr) + // Remove old origin of wiki + _, err := git.NewCommand("remote", "rm", "origin").RunInDir(wikiPath) + if err != nil && !strings.HasPrefix(err.Error(), "exit status 128 - fatal: No such remote ") { + return err + } + + _, err = git.NewCommand("remote", "add", "origin", "--mirror=fetch", wikiRemotePath).RunInDir(wikiPath) + if err != nil && !strings.HasPrefix(err.Error(), "exit status 128 - fatal: No such remote ") { + return err + } + } + return nil } // gitShortEmptySha Git short empty SHA -- cgit v1.2.3