diff --git a/parser.go b/parser.go index 70cdcdd..f547d5b 100644 --- a/parser.go +++ b/parser.go @@ -33,7 +33,7 @@ type ChangeList []ContentChange // Hunk is a line that starts with @@. // Each hunk shows one area where the files differ // Unified format hunks look like this: -// @@ from-file-line-numbers to-file-line-numbers @@ +// @@ from-file-line-numbers to-file-line-numbers @@( context)? // // line-from-either-file // line-from-either-file… @@ -45,6 +45,7 @@ type Hunk struct { CountOld int `json:"count_old"` StartLineNumberNew int `json:"start_line_number_new"` CountNew int `json:"count_new"` + Context string `json:"context,omitempty"` } func (changes *ChangeList) IsSignificant() bool { @@ -57,7 +58,7 @@ func (changes *ChangeList) IsSignificant() bool { } func NewHunk(line string) (Hunk, error) { - namedHunkRegex := regexp.MustCompile(`(?m)^@@ -(?P\d+),?(?P\d+)? \+(?P\d+),?(?P\d+)? @@`) + namedHunkRegex := regexp.MustCompile(`(?m)^@@ -(?P\d+),?(?P\d+)? \+(?P\d+),?(?P\d+)? @@ ?(?P.*)?`) match := namedHunkRegex.FindStringSubmatch(line) result := make(map[string]string) for i, name := range namedHunkRegex.SubexpNames() { @@ -86,6 +87,7 @@ func NewHunk(line string) (Hunk, error) { CountOld: countOld, StartLineNumberNew: startLineNumberNew, CountNew: countNew, + Context: result["context"], }, nil } diff --git a/testdata/significant/add.diff b/testdata/significant/add.diff index b40e2de..f8ff1db 100644 --- a/testdata/significant/add.diff +++ b/testdata/significant/add.diff @@ -3,5 +3,5 @@ new file mode 100644 index 0000000..7898192 --- /dev/null +++ b/a.txt -@@ -0,0 +1 @@ +@@ -0,0 +1 @@ test context +a diff --git a/testdata/significant/add.diff.msg b/testdata/significant/add.diff.msg index 67952c4..4826ec3 100755 --- a/testdata/significant/add.diff.msg +++ b/testdata/significant/add.diff.msg @@ -1 +1 @@ -significant diff &git_diff_parser.FileDiff{FromFile:"a.txt", ToFile:"a.txt", Type:"modify", IsBinary:false, NewMode:"100644", Hunks:[]git_diff_parser.Hunk{git_diff_parser.Hunk{ChangeList:git_diff_parser.ChangeList{git_diff_parser.ContentChange{Type:"add", From:"", To:"a"}, git_diff_parser.ContentChange{Type:"", From:"", To:""}}, StartLineNumberOld:0, CountOld:0, StartLineNumberNew:1, CountNew:1}}, BinaryPatch:[]git_diff_parser.BinaryPatch(nil)} \ No newline at end of file +significant diff &git_diff_parser.FileDiff{FromFile:"a.txt", ToFile:"a.txt", Type:"modify", IsBinary:false, NewMode:"100644", Hunks:[]git_diff_parser.Hunk{git_diff_parser.Hunk{ChangeList:git_diff_parser.ChangeList{git_diff_parser.ContentChange{Type:"add", From:"", To:"a"}, git_diff_parser.ContentChange{Type:"", From:"", To:""}}, StartLineNumberOld:0, CountOld:0, StartLineNumberNew:1, CountNew:1, Context:"test context"}}, BinaryPatch:[]git_diff_parser.BinaryPatch(nil)} \ No newline at end of file