Add copy method to VarSet

This commit is contained in:
Jeffrey Regan
2019-06-07 13:01:34 -07:00
parent 84efd367d2
commit 798b61c8ef
3 changed files with 17 additions and 8 deletions

View File

@@ -453,7 +453,7 @@ bases:
t.Fatalf("expected var collision")
}
if !strings.Contains(err.Error(),
"var AWARD already encountered") {
"var 'AWARD' already encountered") {
t.Fatalf("unexpected error: %v", err)
}
}

View File

@@ -92,20 +92,29 @@ func (vs *VarSet) MergeSet(incoming VarSet) error {
return vs.MergeSlice(incoming.set)
}
// MergeSlice absorbs other vars with error on name collision.
// MergeSlice absorbs a Var slice with error on name collision.
// Empty fields in incoming vars are defaulted.
func (vs *VarSet) MergeSlice(incoming []Var) error {
for _, v := range incoming {
if vs.Contains(v) {
return fmt.Errorf(
"var %s already encountered", v.Name)
if err := vs.Merge(v); err != nil {
return err
}
v.defaulting()
vs.insert(v)
}
return nil
}
// Merge absorbs another Var with error on name collision.
// Empty fields in incoming Var is defaulted.
func (vs *VarSet) Merge(v Var) error {
if vs.Contains(v) {
return fmt.Errorf(
"var '%s' already encountered", v.Name)
}
v.defaulting()
vs.insert(v)
return nil
}
func (vs *VarSet) insert(v Var) {
index := sort.Search(
len(vs.set),

View File

@@ -132,7 +132,7 @@ func TestVarSet(t *testing.T) {
if err == nil {
t.Fatalf("expected err")
}
if !strings.Contains(err.Error(), "var SHELLVARS already encountered") {
if !strings.Contains(err.Error(), "var 'SHELLVARS' already encountered") {
t.Fatalf("unexpected err: %v", err)
}
v := set2.Get("BACKEND")