diff options
Diffstat (limited to 'routers/repo/pull.go')
-rw-r--r-- | routers/repo/pull.go | 31 |
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 { |