Skip to content

Commit

Permalink
merger: error when multiple rules have the same name (bazel-contrib#855)
Browse files Browse the repository at this point in the history
  • Loading branch information
linzhp authored Aug 5, 2020
1 parent 6e34392 commit fefe5f0
Show file tree
Hide file tree
Showing 3 changed files with 44 additions and 8 deletions.
8 changes: 0 additions & 8 deletions merger/merger_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -935,14 +935,6 @@ func TestMatch(t *testing.T) {
gen: `go_library(name = "lib")`,
old: `cc_library(name = "lib")`,
wantError: true,
}, {
desc: "multiple_name_match",
gen: `go_library(name = "lib")`,
old: `
go_library(name = "lib")
go_library(name = "lib")
`,
wantError: true,
}, {
desc: "attr_match",
gen: `go_library(name = "x", importpath = "foo")`,
Expand Down
24 changes: 24 additions & 0 deletions rule/rule.go
Original file line number Diff line number Diff line change
Expand Up @@ -145,6 +145,9 @@ func LoadData(path, pkg string, data []byte) (*File, error) {
return nil, err
}
f := ScanAST(pkg, ast)
if err := checkFile(f); err != nil {
return nil, err
}
f.Content = data
return f, nil
}
Expand All @@ -157,6 +160,9 @@ func LoadWorkspaceData(path, pkg string, data []byte) (*File, error) {
return nil, err
}
f := ScanAST(pkg, ast)
if err := checkFile(f); err != nil {
return nil, err
}
f.Content = data
return f, nil
}
Expand All @@ -172,6 +178,9 @@ func LoadMacroData(path, pkg, defName string, data []byte) (*File, error) {
return nil, err
}
f := ScanASTBody(pkg, defName, ast)
if err := checkFile(f); err != nil {
return nil, err
}
f.Content = data
return f, nil
}
Expand Down Expand Up @@ -903,3 +912,18 @@ func (s byAttrName) Less(i, j int) bool {
func (s byAttrName) Swap(i, j int) {
s[i], s[j] = s[j], s[i]
}

func checkFile(f *File) error {
names := make(map[string]bool)
for _, r := range f.Rules {
name := r.Name()
if name == "" {
continue
}
if names[name] {
return fmt.Errorf("%s: multiple rules have the name %q", f.Path, name)
}
names[name] = true
}
return nil
}
20 changes: 20 additions & 0 deletions rule/rule_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -413,3 +413,23 @@ def repos():
}
}
}

func TestCheckFile(t *testing.T) {
f := File{Rules: []*Rule{
NewRule("go_repository", "com_google_cloud_go_pubsub"),
NewRule("go_repository", "com_google_cloud_go_pubsub"),
}}
err := checkFile(&f)
if err == nil {
t.Errorf("muliple rules with the same name should not be tolerated")
}

f = File{Rules: []*Rule {
NewRule("go_rules_dependencies", ""),
NewRule("go_register_toolchains", ""),
}}
err = checkFile(&f)
if err != nil {
t.Errorf("unexpected error: %v", err)
}
}

0 comments on commit fefe5f0

Please sign in to comment.