aboutsummaryrefslogtreecommitdiff
path: root/routers/repo/pull.go
diff options
context:
space:
mode:
Diffstat (limited to 'routers/repo/pull.go')
-rw-r--r--routers/repo/pull.go31
1 files changed, 19 insertions, 12 deletions
diff --git a/routers/repo/pull.go b/routers/repo/pull.go
index d649e3d7..d99d5c83 100644
--- a/routers/repo/pull.go
+++ b/routers/repo/pull.go
@@ -453,6 +453,7 @@ func ParseCompareInfo(ctx *context.Context) (*models.User, *models.Repository, *
return nil, nil, nil, nil, "", ""
}
headBranch = headInfos[1]
+ isSameRepo = headUser.ID == baseRepo.OwnerID
} else {
ctx.Handle(404, "CompareAndPullRequest", nil)
@@ -468,24 +469,30 @@ func ParseCompareInfo(ctx *context.Context) (*models.User, *models.Repository, *
return nil, nil, nil, nil, "", ""
}
- // Check if current user has fork of repository or in the same repository.
- headRepo, has := models.HasForkedRepo(headUser.ID, baseRepo.ID)
- if !has && !isSameRepo {
- log.Trace("ParseCompareInfo[%d]: does not have fork or in same repository", baseRepo.ID)
- ctx.Handle(404, "ParseCompareInfo", nil)
- return nil, nil, nil, nil, "", ""
- }
+ var (
+ headRepo *models.Repository
+ headGitRepo *git.Repository
+ )
+
+ // In case user included redundant head user name for comparison in same repository,
+ // no need to check the fork relation.
+ if !isSameRepo {
+ var has bool
+ headRepo, has = models.HasForkedRepo(headUser.ID, baseRepo.ID)
+ if !has {
+ log.Trace("ParseCompareInfo[%d]: does not have fork or in same repository", baseRepo.ID)
+ ctx.Handle(404, "ParseCompareInfo", nil)
+ return nil, nil, nil, nil, "", ""
+ }
- var headGitRepo *git.Repository
- if isSameRepo {
- headRepo = ctx.Repo.Repository
- headGitRepo = ctx.Repo.GitRepo
- } else {
headGitRepo, err = git.OpenRepository(models.RepoPath(headUser.Name, headRepo.Name))
if err != nil {
ctx.Handle(500, "OpenRepository", err)
return nil, nil, nil, nil, "", ""
}
+ } else {
+ headRepo = ctx.Repo.Repository
+ headGitRepo = ctx.Repo.GitRepo
}
if !ctx.User.IsWriterOfRepo(headRepo) && !ctx.User.IsAdmin {