fork of go-gitdiff with jj support

Compare changes

Choose any two refs to compare.

+2 -2
.github/workflows/go.yml
··· 18 18 uses: actions/checkout@v4 19 19 20 20 - name: Lint 21 - uses: golangci/golangci-lint-action@v6 21 + uses: golangci/golangci-lint-action@v7 22 22 with: 23 - version: v1.59 23 + version: v2.0 24 24 25 25 - name: Test 26 26 run: go test -v ./...
+38 -37
.golangci.yml
··· 1 + version: "2" 2 + 1 3 run: 2 4 tests: false 3 5 4 6 linters: 5 - disable-all: true 7 + default: none 6 8 enable: 7 9 - errcheck 8 - - gofmt 9 - - goimports 10 10 - govet 11 11 - ineffassign 12 12 - misspell 13 13 - revive 14 - - typecheck 15 14 - unconvert 16 15 - unused 16 + settings: 17 + errcheck: 18 + exclude-functions: 19 + - (*github.com/bluekeyes/go-gitdiff/gitdiff.formatter).Write 20 + - (*github.com/bluekeyes/go-gitdiff/gitdiff.formatter).WriteString 21 + - (*github.com/bluekeyes/go-gitdiff/gitdiff.formatter).WriteByte 22 + - fmt.Fprintf(*github.com/bluekeyes/go-gitdiff/gitdiff.formatter) 23 + revive: 24 + rules: 25 + - name: context-keys-type 26 + - name: time-naming 27 + - name: var-declaration 28 + - name: unexported-return 29 + - name: errorf 30 + - name: blank-imports 31 + - name: context-as-argument 32 + - name: dot-imports 33 + - name: error-return 34 + - name: error-strings 35 + - name: error-naming 36 + - name: exported 37 + - name: increment-decrement 38 + - name: var-naming 39 + - name: package-comments 40 + - name: range 41 + - name: receiver-naming 42 + - name: indent-error-flow 17 43 18 - issues: 19 - exclude-use-default: false 20 - 21 - linters-settings: 22 - errcheck: 23 - exclude-functions: 24 - - (*github.com/bluekeyes/go-gitdiff/gitdiff.formatter).Write 25 - - (*github.com/bluekeyes/go-gitdiff/gitdiff.formatter).WriteString 26 - - (*github.com/bluekeyes/go-gitdiff/gitdiff.formatter).WriteByte 27 - - fmt.Fprintf(*github.com/bluekeyes/go-gitdiff/gitdiff.formatter) 28 - goimports: 29 - local-prefixes: github.com/bluekeyes/go-gitdiff 30 - revive: 31 - rules: 32 - # enable all rules from golint 33 - - name: context-keys-type 34 - - name: time-naming 35 - - name: var-declaration 36 - - name: unexported-return 37 - - name: errorf 38 - - name: blank-imports 39 - - name: context-as-argument 40 - - name: dot-imports 41 - - name: error-return 42 - - name: error-strings 43 - - name: error-naming 44 - - name: exported 45 - - name: increment-decrement 46 - - name: var-naming 47 - - name: package-comments 48 - - name: range 49 - - name: receiver-naming 50 - - name: indent-error-flow 44 + formatters: 45 + enable: 46 + - gofmt 47 + - goimports 48 + settings: 49 + goimports: 50 + local-prefixes: 51 + - github.com/bluekeyes/go-gitdiff
+1 -1
README.md
··· 4 4 5 5 A Go library for parsing and applying patches generated by `git diff`, `git 6 6 show`, and `git format-patch`. It can also parse and apply unified diffs 7 - generated by the standard `diff` tool. 7 + generated by the standard GNU `diff` tool. 8 8 9 9 It supports standard line-oriented text patches and Git binary patches, and 10 10 aims to parse anything accepted by the `git apply` command.
+1
gitdiff/apply_test.go
··· 22 22 "changeStart": {Files: getApplyFiles("text_fragment_change_start")}, 23 23 "changeMiddle": {Files: getApplyFiles("text_fragment_change_middle")}, 24 24 "changeEnd": {Files: getApplyFiles("text_fragment_change_end")}, 25 + "changeEndEOL": {Files: getApplyFiles("text_fragment_change_end_eol")}, 25 26 "changeExact": {Files: getApplyFiles("text_fragment_change_exact")}, 26 27 "changeSingleNoEOL": {Files: getApplyFiles("text_fragment_change_single_noeol")}, 27 28
+5 -1
gitdiff/format.go
··· 169 169 170 170 if f.IsBinary { 171 171 if f.BinaryFragment == nil { 172 - fm.WriteString("Binary files fmer\n") 172 + fm.WriteString("Binary files ") 173 + fm.WriteQuotedName("a/" + aName) 174 + fm.WriteString(" and ") 175 + fm.WriteQuotedName("b/" + bName) 176 + fm.WriteString(" differ\n") 173 177 } else { 174 178 fm.WriteString("GIT binary patch\n") 175 179 fm.FormatBinaryFragment(f.BinaryFragment)
+1
gitdiff/format_roundtrip_test.go
··· 31 31 // data is slightly different when re-encoded by Go. 32 32 {File: "binary_modify.patch", SkipTextCompare: true}, 33 33 {File: "binary_new.patch", SkipTextCompare: true}, 34 + {File: "binary_modify_nodata.patch"}, 34 35 } 35 36 36 37 for _, patch := range patches {
+13
gitdiff/patch_header.go
··· 52 52 // line, that line will be removed and everything after it will be 53 53 // placed in BodyAppendix. 54 54 BodyAppendix string 55 + 56 + // All headers completely unparsed 57 + RawHeaders map[string][]string 55 58 } 56 59 57 60 // Message returns the commit message for the header. The message consists of ··· 237 240 break 238 241 } 239 242 243 + items := strings.SplitN(line, ":", 2) 244 + 245 + // we have "key: value" 246 + if len(items) == 2 { 247 + key := items[0] 248 + val := items[1] 249 + h.RawHeaders[key] = append(h.RawHeaders[key], val) 250 + } 251 + 240 252 switch { 241 253 case strings.HasPrefix(line, authorPrefix): 242 254 u, err := ParsePatchIdentity(line[len(authorPrefix):]) ··· 361 373 } 362 374 363 375 h := &PatchHeader{} 376 + h.RawHeaders = msg.Header 364 377 365 378 if strings.HasPrefix(mailLine, mailHeaderPrefix) { 366 379 mailLine = strings.TrimPrefix(mailLine, mailHeaderPrefix)
+3
gitdiff/testdata/apply/text_fragment_change_end_eol.out
··· 1 + line 1 2 + line 2 3 + line 3
+10
gitdiff/testdata/apply/text_fragment_change_end_eol.patch
··· 1 + diff --git a/gitdiff/testdata/apply/text_fragment_remove_last_eol.src b/gitdiff/testdata/apply/text_fragment_remove_last_eol.src 2 + index a92d664..8cf2f17 100644 3 + --- a/gitdiff/testdata/apply/text_fragment_remove_last_eol.src 4 + +++ b/gitdiff/testdata/apply/text_fragment_remove_last_eol.src 5 + @@ -1,3 +1,3 @@ 6 + line 1 7 + line 2 8 + -line 3 9 + +line 3 10 + \ No newline at end of file
+3
gitdiff/testdata/apply/text_fragment_change_end_eol.src
··· 1 + line 1 2 + line 2 3 + line 3
+3
gitdiff/testdata/string/binary_modify_nodata.patch
··· 1 + diff --git a/file.bin b/file.bin 2 + index a7f4d5d..bdc9a70 100644 3 + Binary files a/file.bin and b/file.bin differ