浏览代码

altered naming of Whitelist* to filter. Updated descriptions + added test to show it working. - DK

Signed-off-by: Andrew Kutta <andrew.kutta@gmail.com>
Andrew Kutta 6 年之前
父节点
当前提交
294aa06c19
共有 2 个文件被更改,包括 48 次插入16 次删除
  1. 16 14
      internal/plumbing/tree_diff.go
  2. 32 2
      internal/plumbing/tree_diff_test.go

+ 16 - 14
internal/plumbing/tree_diff.go

@@ -21,7 +21,7 @@ import (
 type TreeDiff struct {
 	core.NoopMerger
 	SkipDirs     []string
-	WhitelistDirs [] string
+	Filter       string
 	Languages    map[string]bool
 
 	previousTree *object.Tree
@@ -47,10 +47,10 @@ const (
 	// allLanguages denotes passing all files in.
 	allLanguages = "all"
 
-	// ConfigTreeDiffWhitelistedPrefixes is the name of the configuration option
+	// ConfigTreeDiffFilteredRegexes is the name of the configuration option
 	// (TreeDiff.Configure()) which allows to set whitelisted path prefixes -
 	// directories or complete file names.
-	ConfigTreeDiffWhitelistPrefixes = "TreeDiff.WhitelistedPrefixes"
+	ConfigTreeDiffFilterRegex = "TreeDiff.FilteredRegexes"
 )
 
 // defaultBlacklistedPrefixes is the list of file path prefixes which should be skipped by default.
@@ -104,13 +104,11 @@ func (treediff *TreeDiff) ListConfigurationOptions() []core.ConfigurationOption
 		Flag:        "languages",
 		Type:        core.StringsConfigurationOption,
 		Default:     []string{allLanguages} }, {
-	  Name:       ConfigTreeDiffWhitelistPrefixes,
-		Description: "List of whitelisted path prefixes (e.g. directories or specific files). " +
-			"Values are in the UNIX format (\"path/to/x\"). Values should *not* start with \"/\". " +
-			"Separated with commas \",\".",
-		Flag:        "whitelisted-prefixes",
+	  Name:       ConfigTreeDiffFilterRegex,
+    Description: "Will filter which files to analyze based on this Regex",
+		Flag:        "filter",
 		Type:        core.StringsConfigurationOption,
-		Default:     []string{}},
+		},
 	}
 	return options[:]
 }
@@ -130,8 +128,8 @@ func (treediff *TreeDiff) Configure(facts map[string]interface{}) {
 		treediff.Languages[allLanguages] = true
 	}
 
-	if val, exists := facts[ConfigTreeDiffWhitelistPrefixes].([]string); exists {
-		treediff.WhitelistDirs = val
+	if val, exists := facts[ConfigTreeDiffFilterRegex].(string); exists {
+		treediff.Filter = val
 	}
 }
 
@@ -214,9 +212,13 @@ OUTER:
 				continue OUTER
 			}
 		}
-    for _, dir := range treediff.WhitelistDirs {
-			matchedTo, _ := regexp.MatchString(dir, change.To.Name)
-			matchedFrom, _ := regexp.MatchString(dir, change.From.Name)
+		if treediff.Filter != "" {
+			matchedTo, err := regexp.MatchString(treediff.Filter, change.To.Name)
+			matchedFrom, _ := regexp.MatchString(treediff.Filter, change.From.Name)
+			if err != nil {
+				panic(err)
+			}
+
 			if !matchedTo && !matchedFrom {
 				continue OUTER
 			}

+ 32 - 2
internal/plumbing/tree_diff_test.go

@@ -25,7 +25,7 @@ func TestTreeDiffMeta(t *testing.T) {
 	assert.Equal(t, len(td.Provides()), 1)
 	assert.Equal(t, td.Provides()[0], DependencyTreeChanges)
 	opts := td.ListConfigurationOptions()
-	assert.Len(t, opts, 3)
+	assert.Len(t, opts, 4)
 }
 
 func TestTreeDiffRegistration(t *testing.T) {
@@ -143,6 +143,36 @@ func TestTreeDiffConsumeSkip(t *testing.T) {
 	assert.Equal(t, 31, len(changes))
 }
 
+func TestTreeDiffConsumeOnlyFilesThatMatchFilter(t *testing.T) {
+	// consume without skiping
+	td := fixtureTreeDiff()
+	assert.Contains(t, td.Languages, allLanguages)
+	commit, _ := test.Repository.CommitObject(plumbing.NewHash(
+		"aefdedf7cafa6ee110bae9a3910bf5088fdeb5a9"))
+	deps := map[string]interface{}{}
+	deps[core.DependencyCommit] = commit
+	prevCommit, _ := test.Repository.CommitObject(plumbing.NewHash(
+		"1e076dc56989bc6aa1ef5f55901696e9e01423d4"))
+	td.previousTree, _ = prevCommit.Tree()
+	res, err := td.Consume(deps)
+	assert.Nil(t, err)
+	assert.Equal(t, len(res), 1)
+	changes := res[DependencyTreeChanges].(object.Changes)
+	assert.Equal(t, 37, len(changes))
+
+	// consume with skipping
+	td = fixtureTreeDiff()
+	td.previousTree, _ = prevCommit.Tree()
+	td.Configure(map[string]interface{}{
+		ConfigTreeDiffFilterRegex: ".*go",
+	})
+	res, err = td.Consume(deps)
+	assert.Nil(t, err)
+	assert.Equal(t, len(res), 1)
+	changes = res[DependencyTreeChanges].(object.Changes)
+	assert.Equal(t, 27, len(changes))
+}
+
 func TestTreeDiffConsumeLanguageFilterFirst(t *testing.T) {
 	td := fixtureTreeDiff()
 	td.Configure(map[string]interface{}{ConfigTreeDiffLanguages: "Go"})
@@ -194,4 +224,4 @@ func TestTreeDiffFork(t *testing.T) {
 	assert.Equal(t, td1.SkipDirs, td2.SkipDirs)
 	assert.Equal(t, td1.previousTree, td2.previousTree)
 	td1.Merge([]core.PipelineItem{td2})
-}
+}