diff options
author | Andrey Nering <andrey.nering@gmail.com> | 2016-01-08 10:50:25 -0200 |
---|---|---|
committer | Andrey Nering <andrey.nering@gmail.com> | 2016-01-08 16:33:27 -0200 |
commit | 697b0e2aba454325d5b70736823440e1db2c40ba (patch) | |
tree | 5ab7278b91a869b1f524e8c9bbeebcd04c9dae40 /models/git_diff.go | |
parent | bf11ad19eab0de5aef297a21ed58c6cd811a137c (diff) | |
download | gitea-697b0e2aba454325d5b70736823440e1db2c40ba.tar.gz gitea-697b0e2aba454325d5b70736823440e1db2c40ba.zip |
Fix: now highlights in diff view are getting the correct lines.
Diffstat (limited to 'models/git_diff.go')
-rw-r--r-- | models/git_diff.go | 40 |
1 files changed, 18 insertions, 22 deletions
diff --git a/models/git_diff.go b/models/git_diff.go index ec1fc1890b..bfbc9c73a0 100644 --- a/models/git_diff.go +++ b/models/git_diff.go @@ -77,28 +77,24 @@ func diffToHtml(diffRecord []diffmatchpatch.Diff, lineType DiffLineType) templat return template.HTML(result) } -func (diffSection *DiffSection) GetLeftLine(idx int, sliceIdx int) *DiffLine { - for i, diffLine := range diffSection.Lines { - if diffLine.LeftIdx == idx && diffLine.RightIdx == 0 { - // ignore if the lines are too far from each other - if i > sliceIdx-5 && i < sliceIdx+5 { - return diffLine - } else { - return nil - } +// get an specific line by type (add or del) and file line number +func (diffSection *DiffSection) GetLine(lineType DiffLineType, idx int) *DiffLine { + difference := 0 + + for _, diffLine := range diffSection.Lines { + if diffLine.Type == DIFF_LINE_PLAIN { + // get the difference of line numbers between ADD and DEL versions + difference = diffLine.RightIdx - diffLine.LeftIdx + continue } - } - return nil -} -func (diffSection *DiffSection) GetRightLine(idx int, sliceIdx int) *DiffLine { - for i, diffLine := range diffSection.Lines { - if diffLine.RightIdx == idx && diffLine.LeftIdx == 0 { - // ignore if the lines are too far from each other - if i > sliceIdx-5 && i < sliceIdx+5 { + if lineType == DIFF_LINE_DEL { + if diffLine.RightIdx == 0 && diffLine.LeftIdx == idx - difference { + return diffLine + } + } else if lineType == DIFF_LINE_ADD { + if diffLine.LeftIdx == 0 && diffLine.RightIdx == idx + difference { return diffLine - } else { - return nil } } } @@ -107,7 +103,7 @@ func (diffSection *DiffSection) GetRightLine(idx int, sliceIdx int) *DiffLine { // computes diff of each diff line and set the HTML on diffLine.ParsedContent func (diffSection *DiffSection) ComputeLinesDiff() { - for i, diffLine := range diffSection.Lines { + for _, diffLine := range diffSection.Lines { var compareDiffLine *DiffLine var diff1, diff2 string @@ -121,14 +117,14 @@ func (diffSection *DiffSection) ComputeLinesDiff() { // try to find equivalent diff line. ignore, otherwise if diffLine.Type == DIFF_LINE_ADD { - compareDiffLine = diffSection.GetLeftLine(diffLine.RightIdx, i) + compareDiffLine = diffSection.GetLine(DIFF_LINE_DEL, diffLine.RightIdx) if compareDiffLine == nil { continue } diff1 = compareDiffLine.Content diff2 = diffLine.Content } else { - compareDiffLine = diffSection.GetRightLine(diffLine.LeftIdx, i) + compareDiffLine = diffSection.GetLine(DIFF_LINE_ADD, diffLine.LeftIdx) if compareDiffLine == nil { continue } |