Add documentation and example for CutDiffAroundLine

This commit is contained in:
Jonas Franz 2018-07-06 15:35:12 +02:00
parent 7f0eb69c88
commit 8a84f047cf
No known key found for this signature in database
GPG Key ID: 506AEEBE80BEDECD
2 changed files with 34 additions and 0 deletions

View File

@ -266,6 +266,9 @@ func isHeader(lof string) bool {
return strings.HasPrefix(lof, cmdDiffHead) || strings.HasPrefix(lof, "---") || strings.HasPrefix(lof, "+++")
}
// CutDiffAroundLine cuts a diff of a file in way that only the given line + numberOfLine above it will be shown
// it also recalculates hunks and adds the appropriate headers to the new diff.
// Warning: Only one-file diffs are allowed.
func CutDiffAroundLine(originalDiff io.Reader, line int64, old bool, numbersOfLine int) string {
if line == 0 || numbersOfLine == 0 {
// no line or num of lines => no diff
@ -337,6 +340,11 @@ func CutDiffAroundLine(originalDiff io.Reader, line int64, old bool, numbersOfLi
}
}
// No hunk found
if currentLine == 0 {
return ""
}
if len(hunk)-headerLines < numbersOfLine {
// No need to cut the hunk => return existing hunk
return strings.Join(hunk, "\n")

View File

@ -71,6 +71,32 @@ func TestCutDiffAroundLine(t *testing.T) {
emptyResult := CutDiffAroundLine(strings.NewReader(exampleDiff), 6, false, 0)
assert.Empty(t, emptyResult)
// Line is out of scope
emptyResult = CutDiffAroundLine(strings.NewReader(exampleDiff), 434, false, 0)
assert.Empty(t, emptyResult)
}
func BenchmarkCutDiffAroundLine(b *testing.B) {
for n := 0; n < b.N; n++ {
CutDiffAroundLine(strings.NewReader(exampleDiff), 3, true, 3)
}
}
func ExampleCutDiffAroundLine() {
const diff = `diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -1,3 +1,6 @@
# gitea-github-migrator
+
+ Build Status
- Latest Release
Docker Pulls
+ cut off
+ cut off`
result := CutDiffAroundLine(strings.NewReader(exampleDiff), 4, false, 3)
println(result)
}
func TestDiff_LoadComments(t *testing.T) {