From 1b3f1264c9f50c314dab7f04ecfd5e6a15bc1840 Mon Sep 17 00:00:00 2001 From: Mario Lubenka Date: Mon, 10 Jun 2019 14:46:59 +0200 Subject: [PATCH 1/3] Fixes diff on merged pull requests Signed-off-by: Mario Lubenka --- modules/git/repo_compare.go | 2 ++ routers/repo/pull.go | 16 ++++++++-------- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/modules/git/repo_compare.go b/modules/git/repo_compare.go index e7a1d72a8592b..f602c152671b4 100644 --- a/modules/git/repo_compare.go +++ b/modules/git/repo_compare.go @@ -47,6 +47,7 @@ func (repo *Repository) GetCompareInfo(basePath, baseBranch, headBranch string) remoteBranch string tmpRemote string ) + remoteBranch = baseBranch // We don't need a temporary remote for same repository. if repo.Path != basePath { @@ -56,6 +57,7 @@ func (repo *Repository) GetCompareInfo(basePath, baseBranch, headBranch string) return nil, fmt.Errorf("AddRemote: %v", err) } defer repo.RemoveRemote(tmpRemote) + remoteBranch = tmpRemote } compareInfo := new(CompareInfo) diff --git a/routers/repo/pull.go b/routers/repo/pull.go index 182f715545237..71c684356db2a 100644 --- a/routers/repo/pull.go +++ b/routers/repo/pull.go @@ -286,7 +286,7 @@ func PrepareMergedViewPullInfo(ctx *context.Context, issue *models.Issue) *git.C setMergeTarget(ctx, pull) ctx.Data["HasMerged"] = true - prInfo, err := ctx.Repo.GitRepo.GetCompareInfo(ctx.Repo.Repository.RepoPath(), + compareInfo, err := ctx.Repo.GitRepo.GetCompareInfo(ctx.Repo.Repository.RepoPath(), pull.MergeBase, pull.GetGitRefName()) if err != nil { @@ -301,9 +301,9 @@ func PrepareMergedViewPullInfo(ctx *context.Context, issue *models.Issue) *git.C ctx.ServerError("GetCompareInfo", err) return nil } - ctx.Data["NumCommits"] = prInfo.Commits.Len() - ctx.Data["NumFiles"] = prInfo.NumFiles - return prInfo + ctx.Data["NumCommits"] = compareInfo.Commits.Len() + ctx.Data["NumFiles"] = compareInfo.NumFiles + return compareInfo } // PrepareViewPullInfo show meta information for a pull request preview page @@ -336,7 +336,7 @@ func PrepareViewPullInfo(ctx *context.Context, issue *models.Issue) *git.Compare return nil } - prInfo, err := headGitRepo.GetCompareInfo(models.RepoPath(repo.Owner.Name, repo.Name), + compareInfo, err := headGitRepo.GetCompareInfo(models.RepoPath(repo.Owner.Name, repo.Name), pull.BaseBranch, pull.HeadBranch) if err != nil { if strings.Contains(err.Error(), "fatal: Not a valid object name") { @@ -361,9 +361,9 @@ func PrepareViewPullInfo(ctx *context.Context, issue *models.Issue) *git.Compare ctx.Data["ConflictedFiles"] = pull.ConflictedFiles } - ctx.Data["NumCommits"] = prInfo.Commits.Len() - ctx.Data["NumFiles"] = prInfo.NumFiles - return prInfo + ctx.Data["NumCommits"] = compareInfo.Commits.Len() + ctx.Data["NumFiles"] = compareInfo.NumFiles + return compareInfo } // ViewPullCommits show commits for a pull request From a35a295192d05f7bf69340f71e9729037f86cfc1 Mon Sep 17 00:00:00 2001 From: Mario Lubenka Date: Mon, 10 Jun 2019 17:01:48 +0200 Subject: [PATCH 2/3] Get merge info from remote branch before base branch Signed-off-by: Mario Lubenka --- modules/git/repo_compare.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/git/repo_compare.go b/modules/git/repo_compare.go index f602c152671b4..4ac7f2bf969bd 100644 --- a/modules/git/repo_compare.go +++ b/modules/git/repo_compare.go @@ -61,7 +61,7 @@ func (repo *Repository) GetCompareInfo(basePath, baseBranch, headBranch string) } compareInfo := new(CompareInfo) - compareInfo.MergeBase, err = repo.GetMergeBase(tmpRemote, baseBranch, headBranch) + compareInfo.MergeBase, err = repo.GetMergeBase(tmpRemote, remoteBranch, headBranch) if err == nil { // We have a common base logs, err := NewCommand("log", compareInfo.MergeBase+"..."+headBranch, prettyLogFormat).RunInDirBytes(repo.Path) From 2057bf00ecb47f7edfb328396ed11533551a0bb3 Mon Sep 17 00:00:00 2001 From: Mario Lubenka Date: Mon, 10 Jun 2019 17:23:50 +0200 Subject: [PATCH 3/3] Properly generate remoteBranch name used within GetCompareInfo Signed-off-by: Mario Lubenka --- models/pull.go | 2 +- modules/git/repo_compare.go | 10 ++++------ 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/models/pull.go b/models/pull.go index 5ac1126314d1a..1f03dd9b0f5a9 100644 --- a/models/pull.go +++ b/models/pull.go @@ -1144,7 +1144,7 @@ func (pr *PullRequest) UpdatePatch() (err error) { defer func() { headGitRepo.RemoveRemote(tmpRemote) }() - pr.MergeBase, err = headGitRepo.GetMergeBase(tmpRemote, pr.BaseBranch, pr.HeadBranch) + pr.MergeBase, _, err = headGitRepo.GetMergeBase(tmpRemote, pr.BaseBranch, pr.HeadBranch) if err != nil { return fmt.Errorf("GetMergeBase: %v", err) } else if err = pr.Update(); err != nil { diff --git a/modules/git/repo_compare.go b/modules/git/repo_compare.go index 4ac7f2bf969bd..42f0b9ad0cd76 100644 --- a/modules/git/repo_compare.go +++ b/modules/git/repo_compare.go @@ -22,8 +22,8 @@ type CompareInfo struct { NumFiles int } -// GetMergeBase checks and returns merge base of two branches. -func (repo *Repository) GetMergeBase(tmpRemote string, base, head string) (string, error) { +// GetMergeBase checks and returns merge base of two branches and the reference used as base. +func (repo *Repository) GetMergeBase(tmpRemote string, base, head string) (string, string, error) { if tmpRemote == "" { tmpRemote = "origin" } @@ -38,7 +38,7 @@ func (repo *Repository) GetMergeBase(tmpRemote string, base, head string) (strin } stdout, err := NewCommand("merge-base", base, head).RunInDir(repo.Path) - return strings.TrimSpace(stdout), err + return strings.TrimSpace(stdout), base, err } // GetCompareInfo generates and returns compare information between base and head branches of repositories. @@ -47,7 +47,6 @@ func (repo *Repository) GetCompareInfo(basePath, baseBranch, headBranch string) remoteBranch string tmpRemote string ) - remoteBranch = baseBranch // We don't need a temporary remote for same repository. if repo.Path != basePath { @@ -57,11 +56,10 @@ func (repo *Repository) GetCompareInfo(basePath, baseBranch, headBranch string) return nil, fmt.Errorf("AddRemote: %v", err) } defer repo.RemoveRemote(tmpRemote) - remoteBranch = tmpRemote } compareInfo := new(CompareInfo) - compareInfo.MergeBase, err = repo.GetMergeBase(tmpRemote, remoteBranch, headBranch) + compareInfo.MergeBase, remoteBranch, err = repo.GetMergeBase(tmpRemote, baseBranch, headBranch) if err == nil { // We have a common base logs, err := NewCommand("log", compareInfo.MergeBase+"..."+headBranch, prettyLogFormat).RunInDirBytes(repo.Path)