@@ -22,7 +22,7 @@ import (
2222// TreeDiff is a PipelineItem.
2323type TreeDiff struct {
2424 core.NoopMerger
25- SkipDirs []string
25+ SkipFiles []string
2626 NameFilter *regexp.Regexp
2727 Languages map[string]bool
2828
@@ -58,8 +58,8 @@ const (
5858var defaultBlacklistedPrefixes = []string{
5959 "vendor/",
6060 "vendors/",
61- "node_modules/",
6261 "package-lock.json",
62+ "Gopkg.lock",
6363}
6464
6565// Name of this PipelineItem. Uniquely identifies the type, used for mapping keys, etc.
@@ -85,11 +85,12 @@ func (treediff *TreeDiff) Requires() []string {
8585// ListConfigurationOptions returns the list of changeable public properties of this PipelineItem.
8686func (treediff *TreeDiff) ListConfigurationOptions() []core.ConfigurationOption {
8787 options := [...]core.ConfigurationOption{{
88- Name: ConfigTreeDiffEnableBlacklist,
89- Description: "Skip blacklisted directories.",
90- Flag: "skip-blacklist",
91- Type: core.BoolConfigurationOption,
92- Default: false}, {
88+ Name: ConfigTreeDiffEnableBlacklist,
89+ Description: "Skip blacklisted directories and vendored files (according to " +
90+ "src-d/enry.IsVendor).",
91+ Flag: "skip-blacklist",
92+ Type: core.BoolConfigurationOption,
93+ Default: false}, {
9394
9495 Name: ConfigTreeDiffBlacklistedPrefixes,
9596 Description: "List of blacklisted path prefixes (e.g. directories or specific files). " +
@@ -120,7 +121,7 @@ func (treediff *TreeDiff) ListConfigurationOptions() []core.ConfigurationOption
120121// Configure sets the properties previously published by ListConfigurationOptions().
121122func (treediff *TreeDiff) Configure(facts map[string]interface{}) error {
122123 if val, exists := facts[ConfigTreeDiffEnableBlacklist].(bool); exists && val {
123- treediff.SkipDirs = facts[ConfigTreeDiffBlacklistedPrefixes].([]string)
124+ treediff.SkipFiles = facts[ConfigTreeDiffBlacklistedPrefixes].([]string)
124125 }
125126 if val, exists := facts[ConfigTreeDiffLanguages].([]string); exists {
126127 treediff.Languages = map[string]bool{}
@@ -170,14 +171,14 @@ func (treediff *TreeDiff) Consume(deps map[string]interface{}) (map[string]inter
170171 if err != nil {
171172 return nil, err
172173 }
173- var diff object.Changes
174+ var diffs object.Changes
174175 if treediff.previousTree != nil {
175- diff , err = object.DiffTree(treediff.previousTree, tree)
176+ diffs , err = object.DiffTree(treediff.previousTree, tree)
176177 if err != nil {
177178 return nil, err
178179 }
179180 } else {
180- diff = []*object.Change{}
181+ diffs = []*object.Change{}
181182 err = func() error {
182183 fileIter := tree.Files()
183184 defer fileIter.Close()
@@ -196,7 +197,7 @@ func (treediff *TreeDiff) Consume(deps map[string]interface{}) (map[string]inter
196197 if !pass {
197198 continue
198199 }
199- diff = append(diff , &object.Change{
200+ diffs = append(diffs , &object.Change{
200201 To: object.ChangeEntry{Name: file.Name, Tree: tree, TreeEntry: object.TreeEntry{
201202 Name: file.Name, Mode: file.Mode, Hash: file.Hash}}})
202203 }
@@ -208,12 +209,19 @@ func (treediff *TreeDiff) Consume(deps map[string]interface{}) (map[string]inter
208209 }
209210 treediff.previousTree = tree
210211 treediff.previousCommit = commit.Hash
212+ diffs = treediff.filterDiffs(diffs)
213+ return map[string]interface{}{DependencyTreeChanges: diffs}, nil
214+ }
211215
216+ func (treediff *TreeDiff) filterDiffs(diffs object.Changes) object.Changes {
212217 // filter without allocation
213- filteredDiff := make([]* object.Change , 0, len(diff ))
218+ filteredDiffs := make(object.Changes , 0, len(diffs ))
214219OUTER:
215- for _, change := range diff {
216- for _, dir := range treediff.SkipDirs {
220+ for _, change := range diffs {
221+ if len(treediff.SkipFiles) > 0 && (enry.IsVendor(change.To.Name) || enry.IsVendor(change.From.Name)) {
222+ continue
223+ }
224+ for _, dir := range treediff.SkipFiles {
217225 if strings.HasPrefix(change.To.Name, dir) || strings.HasPrefix(change.From.Name, dir) {
218226 continue OUTER
219227 }
@@ -223,7 +231,7 @@ OUTER:
223231 matchedFrom := treediff.NameFilter.MatchString(change.From.Name)
224232
225233 if !matchedTo && !matchedFrom {
226- continue OUTER
234+ continue
227235 }
228236 }
229237 var changeEntry object.ChangeEntry
@@ -232,15 +240,12 @@ OUTER:
232240 } else {
233241 changeEntry = change.To
234242 }
235- pass, _ := treediff.checkLanguage(changeEntry.Name, changeEntry.TreeEntry.Hash)
236- if !pass {
243+ if pass, _ := treediff.checkLanguage(changeEntry.Name, changeEntry.TreeEntry.Hash); !pass {
237244 continue
238245 }
239- filteredDiff = append(filteredDiff , change)
246+ filteredDiffs = append(filteredDiffs , change)
240247 }
241-
242- diff = filteredDiff
243- return map[string]interface{}{DependencyTreeChanges: diff}, nil
248+ return filteredDiffs
244249}
245250
246251// Fork clones this PipelineItem.
0 commit comments