diff options
Diffstat (limited to 'modules/middleware/repo.go')
-rw-r--r-- | modules/middleware/repo.go | 65 |
1 files changed, 30 insertions, 35 deletions
diff --git a/modules/middleware/repo.go b/modules/middleware/repo.go index 0b519a6b..c7481743 100644 --- a/modules/middleware/repo.go +++ b/modules/middleware/repo.go @@ -7,11 +7,10 @@ package middleware import ( "fmt" "net/url" + "path" "strings" - "github.com/Unknwon/macaron" - "github.com/mcuadros/go-version" - "github.com/mssola/user_agent" + "gopkg.in/macaron.v1" "github.com/gogits/gogs/models" "github.com/gogits/gogs/modules/git" @@ -19,26 +18,21 @@ import ( "github.com/gogits/gogs/modules/setting" ) -const ( - FIREFOX_COPY_SUPPORT = "41.0" - CHROME_COPY_SUPPORT = "43.0.2356" -) - func ApiRepoAssignment() macaron.Handler { return func(ctx *Context) { userName := ctx.Params(":username") repoName := ctx.Params(":reponame") var ( - u *models.User - err error + owner *models.User + err error ) // Check if the user is the same as the repository owner. if ctx.IsSigned && ctx.User.LowerName == strings.ToLower(userName) { - u = ctx.User + owner = ctx.User } else { - u, err = models.GetUserByName(userName) + owner, err = models.GetUserByName(userName) if err != nil { if models.IsErrUserNotExist(err) { ctx.Error(404) @@ -48,10 +42,10 @@ func ApiRepoAssignment() macaron.Handler { return } } - ctx.Repo.Owner = u + ctx.Repo.Owner = owner // Get repository. - repo, err := models.GetRepositoryByName(u.Id, repoName) + repo, err := models.GetRepositoryByName(owner.Id, repoName) if err != nil { if models.IsErrRepoNotExist(err) { ctx.Error(404) @@ -85,6 +79,11 @@ func ApiRepoAssignment() macaron.Handler { // RepoRef handles repository reference name including those contain `/`. func RepoRef() macaron.Handler { return func(ctx *Context) { + // Empty repository does not have reference information. + if ctx.Repo.Repository.IsBare { + return + } + var ( refName string err error @@ -117,7 +116,7 @@ func RepoRef() macaron.Handler { ctx.Handle(500, "GetCommitOfBranch", err) return } - ctx.Repo.CommitID = ctx.Repo.Commit.Id.String() + ctx.Repo.CommitID = ctx.Repo.Commit.ID.String() ctx.Repo.IsBranch = true } else { @@ -148,7 +147,7 @@ func RepoRef() macaron.Handler { ctx.Handle(500, "GetCommitOfBranch", err) return } - ctx.Repo.CommitID = ctx.Repo.Commit.Id.String() + ctx.Repo.CommitID = ctx.Repo.Commit.ID.String() } else if ctx.Repo.GitRepo.IsTagExist(refName) { ctx.Repo.IsTag = true @@ -157,7 +156,7 @@ func RepoRef() macaron.Handler { ctx.Handle(500, "GetCommitOfTag", err) return } - ctx.Repo.CommitID = ctx.Repo.Commit.Id.String() + ctx.Repo.CommitID = ctx.Repo.Commit.ID.String() } else if len(refName) == 40 { ctx.Repo.IsCommit = true ctx.Repo.CommitID = refName @@ -234,8 +233,8 @@ func RepoAssignment(redirect bool, args ...bool) macaron.Handler { } var ( - u *models.User - err error + owner *models.User + err error ) userName := ctx.Params(":username") @@ -247,9 +246,9 @@ func RepoAssignment(redirect bool, args ...bool) macaron.Handler { // Check if the user is the same as the repository owner if ctx.IsSigned && ctx.User.LowerName == strings.ToLower(userName) { - u = ctx.User + owner = ctx.User } else { - u, err = models.GetUserByName(userName) + owner, err = models.GetUserByName(userName) if err != nil { if models.IsErrUserNotExist(err) { ctx.Handle(404, "GetUserByName", err) @@ -259,10 +258,10 @@ func RepoAssignment(redirect bool, args ...bool) macaron.Handler { return } } - ctx.Repo.Owner = u + ctx.Repo.Owner = owner // Get repository. - repo, err := models.GetRepositoryByName(u.Id, repoName) + repo, err := models.GetRepositoryByName(owner.Id, repoName) if err != nil { if models.IsErrRepoNotExist(err) { ctx.Handle(404, "GetRepositoryByName", err) @@ -331,7 +330,7 @@ func RepoAssignment(redirect bool, args ...bool) macaron.Handler { } } - ctx.Data["Title"] = u.Name + "/" + repo.Name + ctx.Data["Title"] = owner.Name + "/" + repo.Name ctx.Data["Repository"] = repo ctx.Data["Owner"] = ctx.Repo.Repository.Owner ctx.Data["IsRepositoryOwner"] = ctx.Repo.IsOwner() @@ -345,10 +344,6 @@ func RepoAssignment(redirect bool, args ...bool) macaron.Handler { } ctx.Data["CloneLink"] = ctx.Repo.CloneLink - if ctx.Query("go-get") == "1" { - ctx.Data["GoGetImport"] = fmt.Sprintf("%s/%s/%s", setting.Domain, u.Name, repo.Name) - } - if ctx.IsSigned { ctx.Data["IsWatchingRepo"] = models.IsWatching(ctx.User.Id, repo.ID) ctx.Data["IsStaringRepo"] = models.IsStaring(ctx.User.Id, repo.ID) @@ -390,12 +385,12 @@ func RepoAssignment(redirect bool, args ...bool) macaron.Handler { ctx.Data["BranchName"] = ctx.Repo.BranchName ctx.Data["CommitID"] = ctx.Repo.CommitID - userAgent := ctx.Req.Header.Get("User-Agent") - ua := user_agent.New(userAgent) - browserName, browserVer := ua.Browser() - - ctx.Data["BrowserSupportsCopy"] = (browserName == "Chrome" && version.Compare(browserVer, CHROME_COPY_SUPPORT, ">=")) || - (browserName == "Firefox" && version.Compare(browserVer, FIREFOX_COPY_SUPPORT, ">=")) + if ctx.Query("go-get") == "1" { + ctx.Data["GoGetImport"] = path.Join(setting.Domain, setting.AppSubUrl, owner.Name, repo.Name) + prefix := path.Join(setting.AppUrl, owner.Name, repo.Name, "src", ctx.Repo.BranchName) + ctx.Data["GoDocDirectory"] = prefix + "{/dir}" + ctx.Data["GoDocFile"] = prefix + "{/dir}/{file}#L{line}" + } } } @@ -416,7 +411,7 @@ func RequireRepoAdmin() macaron.Handler { // GitHookService checks if repository Git hooks service has been enabled. func GitHookService() macaron.Handler { return func(ctx *Context) { - if !ctx.User.AllowGitHook && !ctx.User.IsAdmin { + if !ctx.User.CanEditGitHook() { ctx.Handle(404, "GitHookService", nil) return } |