summaryrefslogtreecommitdiffstats
path: root/models/git_diff.go
diff options
context:
space:
mode:
authorAndrey Nering <andrey.nering@gmail.com>2016-01-27 18:54:08 -0200
committerAndrey Nering <andrey.nering@gmail.com>2016-01-27 18:54:08 -0200
commit5deb726f3fc5335b7391a28f6b21328b1335dd9e (patch)
tree03044e2fb9dfee8f6c8f77356d983936cceb105b /models/git_diff.go
parent93f40995b30b67e80e3fff36fe7e7ced756a13d8 (diff)
downloadgitea-5deb726f3fc5335b7391a28f6b21328b1335dd9e.tar.gz
gitea-5deb726f3fc5335b7391a28f6b21328b1335dd9e.zip
Refactoring of inline diff computing to prevent empty diff box. Fix #2489
Diffstat (limited to 'models/git_diff.go')
-rw-r--r--models/git_diff.go61
1 files changed, 30 insertions, 31 deletions
diff --git a/models/git_diff.go b/models/git_diff.go
index 1913ec46ea..e8bfe61027 100644
--- a/models/git_diff.go
+++ b/models/git_diff.go
@@ -51,7 +51,6 @@ type DiffLine struct {
RightIdx int
Type DiffLineType
Content string
- ParsedContent template.HTML
}
func (d *DiffLine) GetType() int {
@@ -112,42 +111,42 @@ func (diffSection *DiffSection) GetLine(lineType DiffLineType, idx int) *DiffLin
return nil
}
-// computes diff of each diff line and set the HTML on diffLine.ParsedContent
-func (diffSection *DiffSection) ComputeLinesDiff() {
- for _, diffLine := range diffSection.Lines {
- var compareDiffLine *DiffLine
- var diff1, diff2 string
+// computes inline diff for the given line
+func (diffSection *DiffSection) GetComputedInlineDiffFor(diffLine *DiffLine) template.HTML {
+ var compareDiffLine *DiffLine
+ var diff1, diff2 string
- diffLine.ParsedContent = template.HTML(html.EscapeString(diffLine.Content[1:]))
+ getDefaultReturn := func() template.HTML {
+ return template.HTML(html.EscapeString(diffLine.Content[1:]))
+ }
- // just compute diff for adds and removes
- if diffLine.Type != DIFF_LINE_ADD && diffLine.Type != DIFF_LINE_DEL {
- continue
- }
+ // just compute diff for adds and removes
+ if diffLine.Type != DIFF_LINE_ADD && diffLine.Type != DIFF_LINE_DEL {
+ return getDefaultReturn()
+ }
- // try to find equivalent diff line. ignore, otherwise
- if diffLine.Type == DIFF_LINE_ADD {
- compareDiffLine = diffSection.GetLine(DIFF_LINE_DEL, diffLine.RightIdx)
- if compareDiffLine == nil {
- continue
- }
- diff1 = compareDiffLine.Content
- diff2 = diffLine.Content
- } else {
- compareDiffLine = diffSection.GetLine(DIFF_LINE_ADD, diffLine.LeftIdx)
- if compareDiffLine == nil {
- continue
- }
- diff1 = diffLine.Content
- diff2 = compareDiffLine.Content
+ // try to find equivalent diff line. ignore, otherwise
+ if diffLine.Type == DIFF_LINE_ADD {
+ compareDiffLine = diffSection.GetLine(DIFF_LINE_DEL, diffLine.RightIdx)
+ if compareDiffLine == nil {
+ return getDefaultReturn()
+ }
+ diff1 = compareDiffLine.Content
+ diff2 = diffLine.Content
+ } else {
+ compareDiffLine = diffSection.GetLine(DIFF_LINE_ADD, diffLine.LeftIdx)
+ if compareDiffLine == nil {
+ return getDefaultReturn()
}
+ diff1 = diffLine.Content
+ diff2 = compareDiffLine.Content
+ }
- dmp := diffmatchpatch.New()
- diffRecord := dmp.DiffMain(diff1[1:], diff2[1:], true)
- diffRecord = dmp.DiffCleanupSemantic(diffRecord)
+ dmp := diffmatchpatch.New()
+ diffRecord := dmp.DiffMain(diff1[1:], diff2[1:], true)
+ diffRecord = dmp.DiffCleanupSemantic(diffRecord)
- diffLine.ParsedContent = diffToHTML(diffRecord, diffLine.Type)
- }
+ return diffToHTML(diffRecord, diffLine.Type)
}
type DiffFile struct {