mirror of
https://gitea.com/Lydanne/buildx.git
synced 2025-07-04 18:48:45 +08:00
bake: set attribute even if diagnosed as duplicated
Signed-off-by: CrazyMax <crazy-max@users.noreply.github.com>
This commit is contained in:
parent
21e4eb89b2
commit
d0d8bfbca4
@ -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" {
|
||||||
|
@ -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)
|
||||||
|
@ -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
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user