fix(diff): load both blobs of renamed files for diff rendering (#39969) (#39992)

Backport #39969

Co-authored-by: schop-rob <49682405+schop-rob@users.noreply.github.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: wxiaoguang <wxiaoguang@gmail.com>
This commit is contained in:
authored and GitHub committed 2026-10-24 14:05:09 +00:00
1 parent 85a85878c7
commit 9d335e8783
2 files changed
+40 -3

No files matched your search

+37
View File
@@ -116,3 +116,40 @@ func TestGetDiffForRender(t *testing.T) {
assert.Equal(t, exp, actual, "idx=%d", idx)
}
}
func TestGetDiffForRenderRenamedFile(t *testing.T) {
repoDir := filepath.Join(t.TempDir(), "temp-repo")
require.NoError(t, git.InitRepositoryLocal(t.Context(), repoDir, false, git.Sha1ObjectFormat.Name()))
gitRepo, err := git.OpenRepositoryLocal(t.Context(), repoDir)
require.NoError(t, err)
defer gitRepo.Close()
content := "id,name\n1,Alice\n2,Bob\n"
require.NoError(t, git.ForceFastImport(t.Context(), gitRepo, []git.FastImportCommit{
{Ref: "refs/heads/b1", Files: []git.FastImportFile{{Path: "original/sample.csv", Content: content}}},
{Ref: "refs/heads/b2", Files: []git.FastImportFile{{Path: "moved/sample.csv", Content: content}}},
}))
beforeCommit, err := gitRepo.GetBranchCommit(t.Context(), "b1")
require.NoError(t, err)
afterCommit, err := gitRepo.GetBranchCommit(t.Context(), "b2")
require.NoError(t, err)
diff, err := GetDiffForRender(t.Context(), "/any/repo-link", gitRepo, &DiffOptions{
BeforeCommitID: beforeCommit.ID.String(),
AfterCommitID: afterCommit.ID.String(),
MaxLines: setting.Git.MaxGitDiffLines,
MaxLineCharacters: setting.Git.MaxGitDiffLineCharacters,
MaxFiles: setting.Git.MaxGitDiffFiles,
})
require.NoError(t, err)
require.Len(t, diff.Files, 1)
// the CSV diff of a renamed file needs both blobs, otherwise it panics
diffFile := diff.Files[0]
assert.Equal(t, DiffFileRename, diffFile.Type)
assert.True(t, diffFile.IsBlobTypeCsv)
assert.NotNil(t, diffFile.LeftBlob)
assert.NotNil(t, diffFile.RightBlob)
}