From 5077408d78971463a94f2037d78fa68f201bda48 Mon Sep 17 00:00:00 2001
From: Unknwon
Date: Thu, 11 Aug 2016 10:53:51 -0700
Subject: [PATCH] #3233 code cleanup and minor issue fix
---
.gopmfile | 2 +-
README.md | 2 +-
cmd/web.go | 2 +-
glide.lock | 2 +-
gogs.go | 2 +-
models/repo.go | 117 +++++++++++++--------------------
models/wiki.go | 2 +
modules/context/repo.go | 1 -
templates/.VERSION | 2 +-
templates/repo/wiki/start.tmpl | 2 +-
templates/repo/wiki/view.tmpl | 2 +-
11 files changed, 55 insertions(+), 81 deletions(-)
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
-}
+/*
+ GitHub, GitLab, Gogs: *.wiki.git
+ BitBucket: *.git/wiki
+*/
+var commonWikiURLSuffixes = []string{".wiki.git", ".git/wiki"}
-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
+// 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.
-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)
- }
- }
-
- // Clean up mirror info which prevents "push --all".
- // This also removes possible user credentials.
- configPath := repo.GitConfigPath()
+// 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 repo, fmt.Errorf("open config file: %v", err)
+ return 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)
+ return fmt.Errorf("save config file: %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)
+ 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()
+ 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)
}
- cfg.DeleteSection("remote \"origin\"")
- if err = cfg.SaveToIndent(wikiConfigPath, "\t"); err != nil {
- return repo, fmt.Errorf("save wiki config file: %v", err)
+ }
+
+ if err := cleanUpMigrateGitConfig(repo.GitConfigPath()); err != nil {
+ return repo, fmt.Errorf("cleanUpMigrateGitConfig: %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 @@