mirror of
				https://gitee.com/gitea/gitea
				synced 2025-11-04 08:30:25 +08:00 
			
		
		
		
	Support direct comparison (git diff a..b) as well merge comparison (a...b) (#16635)
This PR changes the compare page to make the "..." in the between branches a clickable link. This changes the comparison type from "..." to "..". Similarly it makes the initial compare icon clickable to switch the head and base branches. Signed-off-by: Andrew Thornton <art27@cantab.net> Co-authored-by: Lauris BH <lauris@nix.lv> Co-authored-by: Lunny Xiao <xiaolunwen@gmail.com>
This commit is contained in:
		@@ -1217,7 +1217,7 @@ func readFileName(rd *strings.Reader) (string, bool) {
 | 
			
		||||
// GetDiffRangeWithWhitespaceBehavior builds a Diff between two commits of a repository.
 | 
			
		||||
// Passing the empty string as beforeCommitID returns a diff from the parent commit.
 | 
			
		||||
// The whitespaceBehavior is either an empty string or a git flag
 | 
			
		||||
func GetDiffRangeWithWhitespaceBehavior(gitRepo *git.Repository, beforeCommitID, afterCommitID string, maxLines, maxLineCharacters, maxFiles int, whitespaceBehavior string) (*Diff, error) {
 | 
			
		||||
func GetDiffRangeWithWhitespaceBehavior(gitRepo *git.Repository, beforeCommitID, afterCommitID string, maxLines, maxLineCharacters, maxFiles int, whitespaceBehavior string, directComparison bool) (*Diff, error) {
 | 
			
		||||
	repoPath := gitRepo.Path
 | 
			
		||||
 | 
			
		||||
	commit, err := gitRepo.GetCommit(afterCommitID)
 | 
			
		||||
@@ -1357,7 +1357,12 @@ func GetDiffRangeWithWhitespaceBehavior(gitRepo *git.Repository, beforeCommitID,
 | 
			
		||||
		return nil, fmt.Errorf("Wait: %v", err)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	shortstatArgs := []string{beforeCommitID + "..." + afterCommitID}
 | 
			
		||||
	separator := "..."
 | 
			
		||||
	if directComparison {
 | 
			
		||||
		separator = ".."
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	shortstatArgs := []string{beforeCommitID + separator + afterCommitID}
 | 
			
		||||
	if len(beforeCommitID) == 0 || beforeCommitID == git.EmptySHA {
 | 
			
		||||
		shortstatArgs = []string{git.EmptyTreeSHA, afterCommitID}
 | 
			
		||||
	}
 | 
			
		||||
@@ -1377,8 +1382,8 @@ func GetDiffRangeWithWhitespaceBehavior(gitRepo *git.Repository, beforeCommitID,
 | 
			
		||||
 | 
			
		||||
// GetDiffCommitWithWhitespaceBehavior builds a Diff representing the given commitID.
 | 
			
		||||
// The whitespaceBehavior is either an empty string or a git flag
 | 
			
		||||
func GetDiffCommitWithWhitespaceBehavior(gitRepo *git.Repository, commitID string, maxLines, maxLineCharacters, maxFiles int, whitespaceBehavior string) (*Diff, error) {
 | 
			
		||||
	return GetDiffRangeWithWhitespaceBehavior(gitRepo, "", commitID, maxLines, maxLineCharacters, maxFiles, whitespaceBehavior)
 | 
			
		||||
func GetDiffCommitWithWhitespaceBehavior(gitRepo *git.Repository, commitID string, maxLines, maxLineCharacters, maxFiles int, whitespaceBehavior string, directComparison bool) (*Diff, error) {
 | 
			
		||||
	return GetDiffRangeWithWhitespaceBehavior(gitRepo, "", commitID, maxLines, maxLineCharacters, maxFiles, whitespaceBehavior, directComparison)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// CommentAsDiff returns c.Patch as *Diff
 | 
			
		||||
 
 | 
			
		||||
@@ -523,7 +523,7 @@ func TestGetDiffRangeWithWhitespaceBehavior(t *testing.T) {
 | 
			
		||||
	defer gitRepo.Close()
 | 
			
		||||
	for _, behavior := range []string{"-w", "--ignore-space-at-eol", "-b", ""} {
 | 
			
		||||
		diffs, err := GetDiffRangeWithWhitespaceBehavior(gitRepo, "559c156f8e0178b71cb44355428f24001b08fc68", "bd7063cc7c04689c4d082183d32a604ed27a24f9",
 | 
			
		||||
			setting.Git.MaxGitDiffLines, setting.Git.MaxGitDiffLines, setting.Git.MaxGitDiffFiles, behavior)
 | 
			
		||||
			setting.Git.MaxGitDiffLines, setting.Git.MaxGitDiffLines, setting.Git.MaxGitDiffFiles, behavior, false)
 | 
			
		||||
		assert.NoError(t, err, fmt.Sprintf("Error when diff with %s", behavior))
 | 
			
		||||
		for _, f := range diffs.Files {
 | 
			
		||||
			assert.True(t, len(f.Sections) > 0, fmt.Sprintf("%s should have sections", f.Name))
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user