bake: set attribute even if diagnosed as duplicated

Signed-off-by: CrazyMax <crazy-max@users.noreply.github.com>
This commit is contained in:
CrazyMax 2023-10-20 19:57:52 +02:00
parent 21e4eb89b2
commit d0d8bfbca4
No known key found for this signature in database
GPG Key ID: 3248E46B6BB8C7F7
3 changed files with 31 additions and 5 deletions

View File

@ -634,6 +634,29 @@ func TestHCLMultiFileAttrs(t *testing.T) {
require.Equal(t, ptrstr("pre-ghi"), c.Targets[0].Args["v1"]) require.Equal(t, ptrstr("pre-ghi"), c.Targets[0].Args["v1"])
} }
func TestHCLMultiFileGlobalAttrs(t *testing.T) {
dt := []byte(`
FOO = "abc"
target "app" {
args = {
v1 = "pre-${FOO}"
}
}
`)
dt2 := []byte(`
FOO = "def"
`)
c, err := ParseFiles([]File{
{Data: dt, Name: "c1.hcl"},
{Data: dt2, Name: "c2.hcl"},
}, nil)
require.NoError(t, err)
require.Equal(t, 1, len(c.Targets))
require.Equal(t, c.Targets[0].Name, "app")
require.Equal(t, "pre-def", *c.Targets[0].Args["v1"])
}
func TestHCLDuplicateTarget(t *testing.T) { func TestHCLDuplicateTarget(t *testing.T) {
dt := []byte(` dt := []byte(`
target "app" { target "app" {

View File

@ -613,7 +613,7 @@ func Parse(b hcl.Body, opt Opt, val interface{}) (map[string]map[string][]string
attrs, diags := b.JustAttributes() attrs, diags := b.JustAttributes()
if diags.HasErrors() { if diags.HasErrors() {
if d := removeAttributesDiags(diags, reserved, p.vars); len(d) > 0 { if d := removeAttributesDiags(diags, reserved, p.vars, attrs); len(d) > 0 {
return nil, d return nil, d
} }
} }
@ -857,7 +857,7 @@ func getNameIndex(v reflect.Value) (int, bool) {
return 0, false return 0, false
} }
func removeAttributesDiags(diags hcl.Diagnostics, reserved map[string]struct{}, vars map[string]*variable) hcl.Diagnostics { func removeAttributesDiags(diags hcl.Diagnostics, reserved map[string]struct{}, vars map[string]*variable, attrs hcl.Attributes) hcl.Diagnostics {
var fdiags hcl.Diagnostics var fdiags hcl.Diagnostics
for _, d := range diags { for _, d := range diags {
if fout := func(d *hcl.Diagnostic) bool { if fout := func(d *hcl.Diagnostic) bool {
@ -879,6 +879,12 @@ func removeAttributesDiags(diags hcl.Diagnostics, reserved map[string]struct{},
return true return true
} }
} }
for a := range attrs {
// Do the same for attributes
if strings.HasPrefix(d.Detail, fmt.Sprintf(`Argument "%s" was already set at `, a)) {
return true
}
}
return false return false
}(d); !fout { }(d); !fout {
fdiags = append(fdiags, d) fdiags = append(fdiags, d)

View File

@ -123,9 +123,7 @@ func (mb mergedBodies) JustAttributes() (hcl.Attributes, hcl.Diagnostics) {
), ),
Subject: &attr.NameRange, Subject: &attr.NameRange,
}) })
continue
} }
attrs[name] = attr attrs[name] = attr
} }
} }
@ -196,7 +194,6 @@ func (mb mergedBodies) mergedContent(schema *hcl.BodySchema, partial bool) (*hcl
), ),
Subject: &attr.NameRange, Subject: &attr.NameRange,
}) })
continue
} }
content.Attributes[name] = attr content.Attributes[name] = attr
} }