diff --git a/.gopmfile b/.gopmfile index 0d9429e82..b13868918 100644 --- a/.gopmfile +++ b/.gopmfile @@ -18,7 +18,7 @@ github.com/go-xorm/core = commit:5bf745d github.com/go-xorm/xorm = commit:c6c7056 github.com/gogits/chardet = commit:2404f77 github.com/gogits/cron = commit:7f3990a -github.com/gogits/git-module = commit:18dd87d +github.com/gogits/git-module = commit:efc90b5 github.com/gogits/go-gogs-client = commit:d1020b4 github.com/issue9/identicon = commit:d36b545 github.com/jaytaylor/html2text = commit:52d9b78 diff --git a/README.md b/README.md index b0f27d9d6..33e45fa75 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ Gogs - Go Git Service [![Build Status](https://travis-ci.org/gogits/gogs.svg?bra ![](https://github.com/gogits/gogs/blob/master/public/img/gogs-large-resize.png?raw=true) -##### Current tip version: 0.9.72 (see [Releases](https://github.com/gogits/gogs/releases) for binary versions) +##### Current tip version: 0.9.73 (see [Releases](https://github.com/gogits/gogs/releases) for binary versions) | Web | UI | Preview | |:-------------:|:-------:|:-------:| diff --git a/cmd/web.go b/cmd/web.go index ca3504313..78fadd225 100644 --- a/cmd/web.go +++ b/cmd/web.go @@ -87,7 +87,7 @@ func checkVersion() { {"github.com/go-macaron/toolbox", toolbox.Version, "0.1.0"}, {"gopkg.in/ini.v1", ini.Version, "1.8.4"}, {"gopkg.in/macaron.v1", macaron.Version, "1.1.7"}, - {"github.com/gogits/git-module", git.Version, "0.3.4"}, + {"github.com/gogits/git-module", git.Version, "0.3.5"}, {"github.com/gogits/go-gogs-client", gogs.Version, "0.10.3"}, } for _, c := range checkers { diff --git a/glide.lock b/glide.lock index d2adb5121..a7561fbc7 100644 --- a/glide.lock +++ b/glide.lock @@ -41,7 +41,7 @@ imports: - name: github.com/gogits/cron version: 7f3990acf1833faa5ebd0e86f0a4c72a4b5eba3c - name: github.com/gogits/git-module - version: 18dd87dc5eac9ee7076133c8363803f2192d5713 + version: efc90b5ea1f7b7e404673dcc19674b2a6856e0d3 - name: github.com/gogits/go-gogs-client version: d1020b4da5474f7533f5b11084dcfd5536cf2e71 - name: github.com/issue9/identicon diff --git a/gogs.go b/gogs.go index 679f1236c..9be19ff48 100644 --- a/gogs.go +++ b/gogs.go @@ -17,7 +17,7 @@ import ( "github.com/gogits/gogs/modules/setting" ) -const APP_VER = "0.9.72.0811" +const APP_VER = "0.9.73.0811" func init() { runtime.GOMAXPROCS(runtime.NumCPU()) diff --git a/models/repo.go b/models/repo.go index 8266b8f14..afa8d23b2 100644 --- a/models/repo.go +++ b/models/repo.go @@ -659,47 +659,21 @@ type MigrateRepoOptions struct { RemoteAddr string } -func isGitRepoURL(repoURL string, timeout time.Duration) bool { - cmd := git.NewCommand("ls-remote") - cmd.AddArguments("-q", "-h", repoURL, "HEAD") - res, err := cmd.RunTimeout(timeout) - if err != nil { - return false - } - if strings.Contains(res, "fatal") || strings.Contains(res, "not found") { - return false - } - return true -} - -func wikiRemoteURL(remote string, timeout time.Duration) string { - wikiRemoteStd := remote - wikiRemoteBitBucket := remote - /* - GitHub, GitLab, Gogs: NAME.wiki.git - BitBucket: NAME.git/wiki - */ - gitSuffixed := strings.HasSuffix(remote, ".git") - if gitSuffixed { - wikiRemoteStd = wikiRemoteStd[:len(wikiRemoteStd)-4] - wikiRemoteBitBucket += "/wiki" - } else { - wikiRemoteBitBucket += ".git/wiki" - } - wikiRemoteStd += ".wiki.git" - isBB := strings.Contains(remote, "bitbucket") - if isBB { - if isGitRepoURL(wikiRemoteBitBucket, timeout) { - return wikiRemoteBitBucket - } else if isGitRepoURL(wikiRemoteStd, timeout) { - return wikiRemoteStd +/* + GitHub, GitLab, Gogs: *.wiki.git + BitBucket: *.git/wiki +*/ +var commonWikiURLSuffixes = []string{".wiki.git", ".git/wiki"} + +// wikiRemoteURL returns accessible repository URL for wiki if exists. +// Otherwise, it returns an empty string. +func wikiRemoteURL(remote string) string { + remote = strings.TrimSuffix(remote, ".git") + for _, suffix := range commonWikiURLSuffixes { + wikiURL := remote + suffix + if git.IsRepoURLAccessible(wikiURL) { + return wikiURL } - return "" - } - if isGitRepoURL(wikiRemoteStd, timeout) { - return wikiRemoteStd - } else if isGitRepoURL(wikiRemoteBitBucket, timeout) { - return wikiRemoteBitBucket } return "" } @@ -733,25 +707,26 @@ func MigrateRepository(u *User, opts MigrateRepoOptions) (*Repository, error) { repo.NumWatches = 1 } - gitTimeout := time.Duration(setting.Git.Timeout.Migrate) * time.Second + migrateTimeout := time.Duration(setting.Git.Timeout.Migrate) * time.Second + os.RemoveAll(repoPath) if err = git.Clone(opts.RemoteAddr, repoPath, git.CloneRepoOptions{ Mirror: true, Quiet: true, - Timeout: gitTimeout, + Timeout: migrateTimeout, }); err != nil { return repo, fmt.Errorf("Clone: %v", err) } - wikiRemotePath := wikiRemoteURL(opts.RemoteAddr, gitTimeout) - if wikiRemotePath != "" { + wikiRemotePath := wikiRemoteURL(opts.RemoteAddr) + if len(wikiRemotePath) > 0 { os.RemoveAll(wikiPath) if err = git.Clone(wikiRemotePath, wikiPath, git.CloneRepoOptions{ Mirror: true, Quiet: true, - Timeout: gitTimeout, + Timeout: migrateTimeout, }); err != nil { - log.Info("Clone wiki failed: %v", err) + log.Info("Clone wiki: %v", err) } } @@ -797,40 +772,38 @@ func MigrateRepository(u *User, opts MigrateRepoOptions) (*Repository, error) { return CleanUpMigrateInfo(repo) } -// Finish migrating repository with things that don't need to be done for mirrors. +// cleanUpMigrateGitConfig removes mirror info which prevents "push --all". +// This also removes possible user credentials. +func cleanUpMigrateGitConfig(configPath string) error { + cfg, err := ini.Load(configPath) + if err != nil { + return fmt.Errorf("open config file: %v", err) + } + cfg.DeleteSection("remote \"origin\"") + if err = cfg.SaveToIndent(configPath, "\t"); err != nil { + return fmt.Errorf("save config file: %v", err) + } + return nil +} + +// Finish migrating repository and/or wiki with things that don't need to be done for mirrors. func CleanUpMigrateInfo(repo *Repository) (*Repository, error) { repoPath := repo.RepoPath() - hasWiki := repo.HasWiki() - if err := createUpdateHook(repoPath); err != nil { return repo, fmt.Errorf("createUpdateHook: %v", err) } - if hasWiki { - if err := createUpdateHook(repoPath); err != nil { - return repo, fmt.Errorf("createUpdateHook: %v", err) + if repo.HasWiki() { + if err := createUpdateHook(repo.WikiPath()); err != nil { + return repo, fmt.Errorf("createUpdateHook (wiki): %v", err) } } - // Clean up mirror info which prevents "push --all". - // This also removes possible user credentials. - configPath := repo.GitConfigPath() - cfg, err := ini.Load(configPath) - if err != nil { - return repo, fmt.Errorf("open config file: %v", err) - } - cfg.DeleteSection("remote \"origin\"") - if err = cfg.SaveToIndent(configPath, "\t"); err != nil { - return repo, fmt.Errorf("save config file: %v", err) + if err := cleanUpMigrateGitConfig(repo.GitConfigPath()); err != nil { + return repo, fmt.Errorf("cleanUpMigrateGitConfig: %v", err) } - if hasWiki { - wikiConfigPath := filepath.Join(repo.WikiPath(), "config") - cfg, err = ini.Load(wikiConfigPath) - if err != nil { - return repo, fmt.Errorf("open wiki config file: %v", err) - } - cfg.DeleteSection("remote \"origin\"") - if err = cfg.SaveToIndent(wikiConfigPath, "\t"); err != nil { - return repo, fmt.Errorf("save wiki config file: %v", err) + if repo.HasWiki() { + if err := cleanUpMigrateGitConfig(path.Join(repo.WikiPath(), "config")); err != nil { + return repo, fmt.Errorf("cleanUpMigrateGitConfig (wiki): %v", err) } } diff --git a/models/wiki.go b/models/wiki.go index 39fb96dd5..6809c2882 100644 --- a/models/wiki.go +++ b/models/wiki.go @@ -105,6 +105,8 @@ func (repo *Repository) InitWiki() error { if err := git.InitRepository(repo.WikiPath(), true); err != nil { return fmt.Errorf("InitRepository: %v", err) + } else if err = createUpdateHook(repo.WikiPath()); err != nil { + return fmt.Errorf("createUpdateHook: %v", err) } return nil } diff --git a/modules/context/repo.go b/modules/context/repo.go index ea3b445e3..af1888148 100644 --- a/modules/context/repo.go +++ b/modules/context/repo.go @@ -223,7 +223,6 @@ func RepoAssignment(args ...bool) macaron.Handler { ctx.Data["IsRepositoryOwner"] = ctx.Repo.IsOwner() ctx.Data["IsRepositoryAdmin"] = ctx.Repo.IsAdmin() ctx.Data["IsRepositoryWriter"] = ctx.Repo.IsWriter() - ctx.Data["IsRepositoryMirror"] = repo.IsMirror ctx.Data["DisableSSH"] = setting.SSH.Disabled ctx.Data["CloneLink"] = repo.CloneLink() diff --git a/templates/.VERSION b/templates/.VERSION index b7b3158c0..2253172e1 100644 --- a/templates/.VERSION +++ b/templates/.VERSION @@ -1 +1 @@ -0.9.72.0811 \ No newline at end of file +0.9.73.0811 \ No newline at end of file diff --git a/templates/repo/wiki/start.tmpl b/templates/repo/wiki/start.tmpl index 674199198..1b8d52a58 100644 --- a/templates/repo/wiki/start.tmpl +++ b/templates/repo/wiki/start.tmpl @@ -6,7 +6,7 @@

{{.i18n.Tr "repo.wiki.welcome"}}

{{.i18n.Tr "repo.wiki.welcome_desc"}}

- {{if and .IsRepositoryWriter (not .IsRepositoryMirror)}} + {{if and .IsRepositoryWriter (not .Repository.IsMirror)}} {{.i18n.Tr "repo.wiki.create_first_page"}} {{end}} diff --git a/templates/repo/wiki/view.tmpl b/templates/repo/wiki/view.tmpl index 9bc6ece76..ff828789c 100644 --- a/templates/repo/wiki/view.tmpl +++ b/templates/repo/wiki/view.tmpl @@ -46,7 +46,7 @@
{{.title}} - {{if and .IsRepositoryWriter (not .IsRepositoryMirror)}} + {{if and .IsRepositoryWriter (not .Repository.IsMirror)}}
{{.i18n.Tr "repo.wiki.edit_page_button"}} {{.i18n.Tr "repo.wiki.new_page_button"}}