Skip to content

Commit c673c41

Browse files
authored
Merge pull request #1237 from jonjohnsonjr/no-dupe-subpkg
Disallow duplicate subpackage names
2 parents 427ebb1 + d85f49d commit c673c41

2 files changed

Lines changed: 36 additions & 0 deletions

File tree

pkg/config/config.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1042,7 +1042,13 @@ func (cfg Configuration) validate() error {
10421042
return ErrInvalidConfiguration{Problem: err}
10431043
}
10441044

1045+
saw := map[string]int{}
10451046
for i, sp := range cfg.Subpackages {
1047+
if extant, ok := saw[sp.Name]; ok {
1048+
return fmt.Errorf("saw duplicate subpackage name %q (subpackages index: %d and %d)", sp.Name, extant, i)
1049+
}
1050+
saw[sp.Name] = i
1051+
10461052
if !packageNameRegex.MatchString(sp.Name) {
10471053
return ErrInvalidConfiguration{Problem: fmt.Errorf("subpackage name %q (subpackages index: %d) must match regex %q", sp.Name, i, packageNameRegex)}
10481054
}

pkg/config/config_test.go

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -299,3 +299,33 @@ pipeline:
299299
require.Equal(t, "/home/build/baz", cfg.Pipeline[1].Pipeline[0].Pipeline[1].WorkDir)
300300
require.Equal(t, "/home/build/baz", cfg.Pipeline[1].Pipeline[0].Pipeline[2].WorkDir)
301301
}
302+
303+
func TestDuplicateSubpackage(t *testing.T) {
304+
ctx := slogtest.TestContextWithLogger(t)
305+
306+
fp := filepath.Join(os.TempDir(), "melange-test-applySubstitutionsInProvides")
307+
if err := os.WriteFile(fp, []byte(`
308+
package:
309+
name: dupe-subpackage
310+
version: 0.0.1
311+
epoch: 8
312+
description: example using a two subpackages with same name
313+
314+
data:
315+
- name: I-am-a-range
316+
items:
317+
a: ""
318+
b: ""
319+
320+
subpackages:
321+
- name: subpackage
322+
range: I-am-a-range
323+
pipeline:
324+
- runs: echo "I am a subpackage for ${{range.key}"
325+
`), 0644); err != nil {
326+
t.Fatal(err)
327+
}
328+
if _, err := ParseConfiguration(ctx, fp); err == nil {
329+
t.Errorf("configuration should have failed to validate, got: %v", err)
330+
}
331+
}

0 commit comments

Comments
 (0)