diff options
Diffstat (limited to 'modules/middleware/repo.go')
-rw-r--r-- | modules/middleware/repo.go | 35 |
1 files changed, 22 insertions, 13 deletions
diff --git a/modules/middleware/repo.go b/modules/middleware/repo.go index 82c1c2dbf6..07395df96a 100644 --- a/modules/middleware/repo.go +++ b/modules/middleware/repo.go @@ -40,7 +40,7 @@ func RepoAssignment(redirect bool, args ...bool) martini.Handler { userName := params["username"] repoName := params["reponame"] - branchName := params["branchname"] + refName := params["branchname"] // get repository owner ctx.Repo.IsOwner = ctx.IsSigned && ctx.User.LowerName == strings.ToLower(userName) @@ -149,26 +149,35 @@ func RepoAssignment(redirect bool, args ...bool) martini.Handler { // when repo is bare, not valid branch if !ctx.Repo.Repository.IsBare && validBranch { detect: - if len(branchName) > 0 { - // TODO check tag - if gitRepo.IsBranchExist(branchName) { + if len(refName) > 0 { + if gitRepo.IsBranchExist(refName) { ctx.Repo.IsBranch = true - ctx.Repo.BranchName = branchName + ctx.Repo.BranchName = refName - ctx.Repo.Commit, err = gitRepo.GetCommitOfBranch(branchName) + ctx.Repo.Commit, err = gitRepo.GetCommitOfBranch(refName) if err != nil { ctx.Handle(404, "RepoAssignment invalid branch", nil) return } + ctx.Repo.CommitId = ctx.Repo.Commit.Id.String() + + } else if gitRepo.IsTagExist(refName) { + ctx.Repo.IsBranch = true + ctx.Repo.BranchName = refName + ctx.Repo.Commit, err = gitRepo.GetCommitOfTag(refName) + if err != nil { + ctx.Handle(404, "RepoAssignment invalid tag", nil) + return + } ctx.Repo.CommitId = ctx.Repo.Commit.Id.String() - } else if len(branchName) == 40 { + } else if len(refName) == 40 { ctx.Repo.IsCommit = true - ctx.Repo.CommitId = branchName - ctx.Repo.BranchName = branchName + ctx.Repo.CommitId = refName + ctx.Repo.BranchName = refName - ctx.Repo.Commit, err = gitRepo.GetCommit(branchName) + ctx.Repo.Commit, err = gitRepo.GetCommit(refName) if err != nil { ctx.Handle(404, "RepoAssignment invalid commit", nil) return @@ -179,9 +188,9 @@ func RepoAssignment(redirect bool, args ...bool) martini.Handler { } } else { - branchName = ctx.Repo.Repository.DefaultBranch - if len(branchName) == 0 { - branchName = "master" + refName = ctx.Repo.Repository.DefaultBranch + if len(refName) == 0 { + refName = "master" } goto detect } |