I use difftastic as my custom diff tool (set as diff.external). This prevents golangci-lint's --new/--new-from-rev flags from functioning because my git diff output differs from the regular one. Fortunately, this can be easily fixed by passing a flag telling git not to use custom diff tools (--no-ext-diff). I've created a PR for revgrep that does exactly that: https://github.com/golangci/revgrep/pull/7
Recompiling golangci-lint with replace github.com/golangci/revgrep => github.com/danielslee/revgrep v0.0.0-20230828115018-3e4edc4a761e added to go.mod fixes the issue for me.
Can anyone look at the PR and merge it if possible?
Version of golangci-lint
```console
$ golangci-lint --version
golangci-lint has version 1.54.2 built with go1.21.0 from 411e0bbb on 2023-08-21T12:04:32Z
```
```console
$ golangci-lint cache clean
$ golangci-lint run -v 4s
INFO [config_reader] Config search paths: [./ /var/home/daniel/projects/golangci-lint /var/home/daniel/projects /var/home/daniel /var/home /var /]
INFO [config_reader] Used config file .golangci.yml
INFO [lintersdb] Active 31 linters: [bodyclose depguard dogsled dupl errcheck exportloopref funlen gochecknoinits goconst gocritic gocyclo gofmt goimports gomnd goprintffuncname gosec gosimple govet ineffassign lll misspell nakedret noctx nolintlint revive staticcheck stylecheck unconvert unparam unused whitespace]
INFO [loader] Go packages loading at mode 575 (name|exports_file|files|imports|types_sizes|compiled_files|deps) took 172.062307ms
INFO [runner/filename_unadjuster] Pre-built 0 adjustments in 7.452607ms
INFO [linters_context/goanalysis] analyzers took 19.519134399s with top 10 stages: gocritic: 12.895139816s, gosec: 610.314938ms, buildir: 605.779912ms, buildssa: 456.644902ms, goimports: 323.914061ms, dupl: 281.917519ms, gofmt: 220.392366ms, unparam: 137.080152ms, unused: 135.733579ms, S1038: 130.678959ms
INFO [runner/skip_dirs] Skipped 18 issues from dir internal/renameio by pattern internal/renameio
INFO [runner/skip_dirs] Skipped 79 issues from dir internal/cache by pattern internal/cache
INFO [runner/skip_dirs] Skipped 2 issues from dir internal/robustio by pattern internal/robustio
INFO [runner/skip_dirs] Skipped 2 issues from dir test/testdata_etc/abspath by pattern test/testdata_etc
INFO [runner/skip_dirs] Skipped 1 issues from dir test/testdata_etc/unused_exported/lib by pattern test/testdata_etc
INFO [runner] Issues before processing: 749, after processing: 1
INFO [runner] Processors filtering stat (out/in): path_shortener: 1/1, severity-rules: 1/1, cgo: 749/749, path_prettifier: 749/749, identifier_marker: 647/647, nolint: 214/399, max_same_issues: 1/1, source_code: 1/1, path_prefixer: 1/1, filename_unadjuster: 749/749, skip_dirs: 647/749, autogenerated_exclude: 647/647, exclude: 647/647, diff: 1/1, sort_results: 1/1, exclude-rules: 399/647, uniq_by_line: 1/214, max_per_file_from_linter: 1/1, max_from_linter: 1/1, fixer: 1/1, skip_files: 749/749
INFO [runner] processing took 30.685434ms with stages: exclude-rules: 16.126647ms, nolint: 7.472753ms, identifier_marker: 4.414998ms, path_prettifier: 1.350313ms, autogenerated_exclude: 1.075018ms, skip_dirs: 184.954µs, cgo: 25.369µs, filename_unadjuster: 15.696µs, source_code: 9.019µs, uniq_by_line: 6.672µs, max_same_issues: 1.222µs, path_shortener: 723ns, max_from_linter: 472ns, max_per_file_from_linter: 317ns, exclude: 304ns, fixer: 253ns, skip_files: 203ns, severity-rules: 190ns, sort_results: 155ns, diff: 90ns, path_prefixer: 66ns
INFO [runner] linters took 2.560594624s with stages: goanalysis_metalinter: 2.529871747s
cmd/golangci-lint/main.go:1: : # github.com/golangci/golangci-lint/cmd/golangci-lint
cmd/golangci-lint/main.go:22:9: unused declared and not used (typecheck)
package main
INFO File cache stats: 270 entries of total size 718.4KiB
INFO Memory: 29 samples, avg is 720.4MB, max is 940.3MB
INFO Execution took 2.74326455s
$ golangci-lint run -v --new
INFO [config_reader] Config search paths: [./ /var/home/daniel/projects/golangci-lint /var/home/daniel/projects /var/home/daniel /var/home /var /]
INFO [config_reader] Used config file .golangci.yml
INFO [lintersdb] Active 31 linters: [bodyclose depguard dogsled dupl errcheck exportloopref funlen gochecknoinits goconst gocritic gocyclo gofmt goimports gomnd goprintffuncname gosec gosimple govet ineffassign lll misspell nakedret noctx nolintlint revive staticcheck stylecheck unconvert unparam unused whitespace]
INFO [loader] Go packages loading at mode 575 (deps|exports_file|files|name|types_sizes|compiled_files|imports) took 934.865417ms
INFO [runner/filename_unadjuster] Pre-built 0 adjustments in 6.847528ms
INFO [linters_context/goanalysis] analyzers took 18.435084303s with top 10 stages: gocritic: 12.781307852s, buildir: 709.353212ms, gosec: 508.318534ms, buildssa: 349.076686ms, goimports: 240.937472ms, gofmt: 178.842058ms, dupl: 177.182692ms, S1038: 120.975454ms, unparam: 93.888317ms, unused: 91.604127ms
INFO [runner/skip_dirs] Skipped 18 issues from dir internal/renameio by pattern internal/renameio
INFO [runner/skip_dirs] Skipped 79 issues from dir internal/cache by pattern internal/cache
INFO [runner/skip_dirs] Skipped 2 issues from dir internal/robustio by pattern internal/robustio
INFO [runner/skip_dirs] Skipped 2 issues from dir test/testdata_etc/abspath by pattern test/testdata_etc
INFO [runner/skip_dirs] Skipped 1 issues from dir test/testdata_etc/unused_exported/lib by pattern test/testdata_etc
INFO [runner] Issues before processing: 749, after processing: 0
INFO [runner] Processors filtering stat (out/in): cgo: 749/749, filename_unadjuster: 749/749, exclude-rules: 399/647, nolint: 214/399, skip_files: 749/749, skip_dirs: 647/749, exclude: 647/647, uniq_by_line: 1/214, diff: 0/1, path_prettifier: 749/749, autogenerated_exclude: 647/647, identifier_marker: 647/647
INFO [runner] processing took 77.575312ms with stages: diff: 45.659095ms, exclude-rules: 16.921268ms, nolint: 7.574441ms, identifier_marker: 4.784369ms, path_prettifier: 1.351615ms, autogenerated_exclude: 1.049343ms, skip_dirs: 183.896µs, cgo: 24.967µs, filename_unadjuster: 16.153µs, uniq_by_line: 6.705µs, max_same_issues: 1.114µs, fixer: 522ns, skip_files: 373ns, sort_results: 283ns, max_per_file_from_linter: 216ns, exclude: 207ns, source_code: 189ns, severity-rules: 173ns, max_from_linter: 171ns, path_shortener: 150ns, path_prefixer: 62ns
INFO [runner] linters took 2.738648291s with stages: goanalysis_metalinter: 2.661030219s
INFO File cache stats: 269 entries of total size 717.5KiB
INFO Memory: 38 samples, avg is 584.6MB, max is 1006.2MB
INFO Execution took 3.684407023s
```
Golangci-lint run -v works fine. Golangci-lint run -v --new doesn't -- the issue doesn't show up. It does work fine if I remove my custom diff.external git setting.
A minimal reproducible example or link to a public repository
Welcome
Description of the problem
I use difftastic as my custom diff tool (set as
diff.external
). This prevents golangci-lint's --new/--new-from-rev flags from functioning because mygit diff
output differs from the regular one. Fortunately, this can be easily fixed by passing a flag telling git not to use custom diff tools (--no-ext-diff
). I've created a PR forrevgrep
that does exactly that: https://github.com/golangci/revgrep/pull/7Recompiling golangci-lint with
replace github.com/golangci/revgrep => github.com/danielslee/revgrep v0.0.0-20230828115018-3e4edc4a761e
added togo.mod
fixes the issue for me.Can anyone look at the PR and merge it if possible?
Version of golangci-lint
Configuration
Go environment
Verbose output of running
Golangci-lint run -v works fine. Golangci-lint run -v --new doesn't -- the issue doesn't show up. It does work fine if I remove my custom
diff.external
git setting.A minimal reproducible example or link to a public repository
Any repo. https://github.com/golangci/golangci-lint will do. Make some changes that trigger a warning and then use --new or --new-from-rev=master.
Validation