diff options
author | Máximo Cuadros <mcuadros@gmail.com> | 2018-09-10 10:37:17 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-09-10 10:37:17 +0200 |
commit | a2d62f58ea626bb9f41de6431f6f18ca92cf78a0 (patch) | |
tree | b00ec92fd6347cc9298dc07a23f661fa46a414f3 /plumbing/format | |
parent | 208b3c3c32beaab14ebb7adf162fc136c939e99c (diff) | |
parent | 80170bd73d5d6298ea6d40c66987fcde8148f1e8 (diff) | |
download | go-git-a2d62f58ea626bb9f41de6431f6f18ca92cf78a0.tar.gz |
Merge pull request #932 from flant/fix-negative-range-info
Fix `fatal: corrupt patch` error in unified diff format
Diffstat (limited to 'plumbing/format')
-rw-r--r-- | plumbing/format/diff/unified_encoder.go | 8 | ||||
-rw-r--r-- | plumbing/format/diff/unified_encoder_test.go | 37 |
2 files changed, 43 insertions, 2 deletions
diff --git a/plumbing/format/diff/unified_encoder.go b/plumbing/format/diff/unified_encoder.go index 58edd95..8bd6d8a 100644 --- a/plumbing/format/diff/unified_encoder.go +++ b/plumbing/format/diff/unified_encoder.go @@ -237,9 +237,13 @@ func (c *hunksGenerator) addLineNumbers(la, lb int, linesBefore int, i int, op O // we need to search for a reference for the next diff switch { case linesBefore != 0 && c.ctxLines != 0: - clb = lb - c.ctxLines + 1 + if lb > c.ctxLines { + clb = lb - c.ctxLines + 1 + } else { + clb = 1 + } case c.ctxLines == 0: - clb = lb - c.ctxLines + clb = lb case i != len(c.chunks)-1: next := c.chunks[i+1] if next.Type() == op || next.Type() == Equal { diff --git a/plumbing/format/diff/unified_encoder_test.go b/plumbing/format/diff/unified_encoder_test.go index 0e419ca..7736af1 100644 --- a/plumbing/format/diff/unified_encoder_test.go +++ b/plumbing/format/diff/unified_encoder_test.go @@ -155,6 +155,43 @@ var fixtures []*fixture = []*fixture{{ filePatches: []testFilePatch{{ from: &testFile{ mode: filemode.Regular, + path: "README.md", + seed: "hello\nworld\n", + }, + to: &testFile{ + mode: filemode.Regular, + path: "README.md", + seed: "hello\nbug\n", + }, + chunks: []testChunk{{ + content: "hello", + op: Equal, + }, { + content: "world", + op: Delete, + }, { + content: "bug", + op: Add, + }}, + }}, + }, + desc: "positive negative number", + context: 2, + diff: `diff --git a/README.md b/README.md +index 94954abda49de8615a048f8d2e64b5de848e27a1..f3dad9514629b9ff9136283ae331ad1fc95748a8 100644 +--- a/README.md ++++ b/README.md +@@ -1,2 +1,2 @@ + hello +-world ++bug +`, +}, { + patch: testPatch{ + message: "", + filePatches: []testFilePatch{{ + from: &testFile{ + mode: filemode.Regular, path: "test.txt", seed: "test", }, |