From 66a148e398c3c944e2b79187c09ef0bb7bdfdd5e Mon Sep 17 00:00:00 2001
From: zeripath <art27@cantab.net>
Date: Tue, 16 Feb 2021 15:39:45 +0000
Subject: [PATCH] Restore detection of branches are equal on compare page
 (#14586)

Somehow the test for detecting if branches are equal broke
this PR restores this functionality.

Fix #14502

Signed-off-by: Andrew Thornton <art27@cantab.net>
---
 modules/git/repo_compare.go | 19 ++++++++++++++++---
 routers/repo/compare.go     | 26 ++------------------------
 2 files changed, 18 insertions(+), 27 deletions(-)

diff --git a/modules/git/repo_compare.go b/modules/git/repo_compare.go
index 5f92bc7714..3255e68392 100644
--- a/modules/git/repo_compare.go
+++ b/modules/git/repo_compare.go
@@ -20,9 +20,11 @@ import (
 
 // CompareInfo represents needed information for comparing references.
 type CompareInfo struct {
-	MergeBase string
-	Commits   *list.List
-	NumFiles  int
+	MergeBase    string
+	BaseCommitID string
+	HeadCommitID string
+	Commits      *list.List
+	NumFiles     int
 }
 
 // GetMergeBase checks and returns merge base of two branches and the reference used as base.
@@ -66,8 +68,18 @@ func (repo *Repository) GetCompareInfo(basePath, baseBranch, headBranch string)
 	}
 
 	compareInfo := new(CompareInfo)
+
+	compareInfo.HeadCommitID, err = GetFullCommitID(repo.Path, headBranch)
+	if err != nil {
+		compareInfo.HeadCommitID = headBranch
+	}
+
 	compareInfo.MergeBase, remoteBranch, err = repo.GetMergeBase(tmpRemote, baseBranch, headBranch)
 	if err == nil {
+		compareInfo.BaseCommitID, err = GetFullCommitID(repo.Path, remoteBranch)
+		if err != nil {
+			compareInfo.BaseCommitID = remoteBranch
+		}
 		// We have a common base - therefore we know that ... should work
 		logs, err := NewCommand("log", compareInfo.MergeBase+"..."+headBranch, prettyLogFormat).RunInDirBytes(repo.Path)
 		if err != nil {
@@ -83,6 +95,7 @@ func (repo *Repository) GetCompareInfo(basePath, baseBranch, headBranch string)
 		if err != nil {
 			compareInfo.MergeBase = remoteBranch
 		}
+		compareInfo.BaseCommitID = compareInfo.MergeBase
 	}
 
 	// Count number of changed files.
diff --git a/routers/repo/compare.go b/routers/repo/compare.go
index 4869e5919a..2eef20f5ff 100644
--- a/routers/repo/compare.go
+++ b/routers/repo/compare.go
@@ -423,18 +423,7 @@ func PrepareCompareDiff(
 	// Get diff information.
 	ctx.Data["CommitRepoLink"] = headRepo.Link()
 
-	headCommitID := headBranch
-	if ctx.Data["HeadIsCommit"] == false {
-		if ctx.Data["HeadIsTag"] == true {
-			headCommitID, err = headGitRepo.GetTagCommitID(headBranch)
-		} else {
-			headCommitID, err = headGitRepo.GetBranchCommitID(headBranch)
-		}
-		if err != nil {
-			ctx.ServerError("GetRefCommitID", err)
-			return false
-		}
-	}
+	headCommitID := compareInfo.HeadCommitID
 
 	ctx.Data["AfterCommitID"] = headCommitID
 
@@ -460,18 +449,7 @@ func PrepareCompareDiff(
 	}
 
 	baseGitRepo := ctx.Repo.GitRepo
-	baseCommitID := baseBranch
-	if ctx.Data["BaseIsCommit"] == false {
-		if ctx.Data["BaseIsTag"] == true {
-			baseCommitID, err = baseGitRepo.GetTagCommitID(baseBranch)
-		} else {
-			baseCommitID, err = baseGitRepo.GetBranchCommitID(baseBranch)
-		}
-		if err != nil {
-			ctx.ServerError("GetRefCommitID", err)
-			return false
-		}
-	}
+	baseCommitID := compareInfo.BaseCommitID
 
 	baseCommit, err := baseGitRepo.GetCommit(baseCommitID)
 	if err != nil {