diff --git a/services/gitdiff/gitdiff.go b/services/gitdiff/gitdiff.go index 4e1cff0c04..53f50a018d 100644 --- a/services/gitdiff/gitdiff.go +++ b/services/gitdiff/gitdiff.go @@ -78,7 +78,7 @@ const ( type DiffLine struct { LeftIdx int // line number, 1-based RightIdx int // line number, 1-based - Match int // line number, 1-based + Match int // the diff matched index. -1: no match. 0: plain and no need to match. >0: for add/del, "Lines" slice index of the other side Type DiffLineType Content string Comments issues_model.CommentList // related PR code comments @@ -206,8 +206,17 @@ type DiffSection struct { Lines []*DiffLine } +func (diffSection *DiffSection) GetLine(idx int) *DiffLine { + if idx <= 0 { + return nil + } + return diffSection.Lines[idx] +} + // GetLine gets a specific line by type (add or del) and file line number -func (diffSection *DiffSection) GetLine(lineType DiffLineType, idx int) *DiffLine { +// This algorithm is not quite right. +// Actually now we have "Match" field, it is always right, so use it instead in new GetLine +func (diffSection *DiffSection) getLineLegacy(lineType DiffLineType, idx int) *DiffLine { //nolint:unused var ( difference = 0 addCount = 0 @@ -327,10 +336,10 @@ func (diffSection *DiffSection) GetComputedInlineDiffFor(diffLine *DiffLine, loc case DiffLineSection: return getLineContent(diffLine.Content[1:], locale) case DiffLineAdd: - compareDiffLine := diffSection.GetLine(DiffLineDel, diffLine.RightIdx) + compareDiffLine := diffSection.GetLine(diffLine.Match) return diffSection.getDiffLineForRender(DiffLineAdd, compareDiffLine, diffLine, locale) case DiffLineDel: - compareDiffLine := diffSection.GetLine(DiffLineAdd, diffLine.LeftIdx) + compareDiffLine := diffSection.GetLine(diffLine.Match) return diffSection.getDiffLineForRender(DiffLineDel, diffLine, compareDiffLine, locale) default: // Plain // TODO: there was an "if" check: `if diffLine.Content >strings.IndexByte(" +-", diffLine.Content[0]) > -1 { ... } else { ... }` diff --git a/services/gitdiff/highlightdiff_test.go b/services/gitdiff/highlightdiff_test.go index 16649682b4..c2584dc622 100644 --- a/services/gitdiff/highlightdiff_test.go +++ b/services/gitdiff/highlightdiff_test.go @@ -23,6 +23,16 @@ func TestDiffWithHighlight(t *testing.T) { assert.Equal(t, `x bar y`, string(outAdd)) }) + t.Run("CleanUp", func(t *testing.T) { + hcd := newHighlightCodeDiff() + codeA := template.HTML(`this is updated comment`) + outDel := hcd.diffLineWithHighlight(DiffLineDel, codeA, codeB) + assert.Equal(t, `a comment`, string(outDel)) + outAdd := hcd.diffLineWithHighlight(DiffLineAdd, codeA, codeB) + assert.Equal(t, `updated comment`, string(outAdd)) + }) + t.Run("OpenCloseTags", func(t *testing.T) { hcd := newHighlightCodeDiff() hcd.placeholderTokenMap['O'], hcd.placeholderTokenMap['C'] = "", ""