From 441bdb33d131f07ab884e147d79e9e059d125a0a Mon Sep 17 00:00:00 2001 From: Sean Chittenden Date: Wed, 5 Dec 2018 22:02:01 -0800 Subject: [PATCH] Fix the skip-dirs option. Prior to this change the SkipDir runner was not skipping files such as `foo/bar/baz.go` with a `skip-dir` entry of `foo/bar` when the `run` command was invoked with an argument of `foo/...`. This is both a surprising and problematic behavior change. The pathology was: 1. `shouldPassIssue()` was receiving an input like `foo/bar/baz.go` 2. `shouldPassIssue()` would call `p.getLongestArgRelativeIssuePath()` which was returning `bar`, not `foo/bar` as expected. 3. The reason for this was because inside of `getLongestArgRelativeIssuePath()` it was trimming the prefix that matched the path prefix (e.g. `foo/`). If you have the file structure: - foo/bar/baz.go - bur/bar/baz.go There is no way to isolate `foo/bar` from `bur/baz` without strictly controlling both your `skip-dirs` configuration and the arguments to `run`. The rest of the logic to skip files that don't match `run`'s argument is valid, however the regexp should be evaluated based on the `filepath.Dir()` of the input (e.g. `foo/bar`) and not the truncated version of the issue's filepath. Fixes: #301 --- pkg/result/processors/skip_dirs.go | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/pkg/result/processors/skip_dirs.go b/pkg/result/processors/skip_dirs.go index b76878e7..2e4d263e 100644 --- a/pkg/result/processors/skip_dirs.go +++ b/pkg/result/processors/skip_dirs.go @@ -85,9 +85,7 @@ func (p *SkipDirs) getLongestArgRelativeIssuePath(i *result.Issue) string { continue } - relPath := strings.TrimPrefix(issueAbsPath, arg) - relPath = strings.TrimPrefix(relPath, string(filepath.Separator)) - return relPath + return i.FilePath() } p.log.Infof("Issue path %q isn't relative to any of run args", i.FilePath())