Skip to content

Commit

Permalink
Copy handles empty case
Browse files Browse the repository at this point in the history
  • Loading branch information
dadgar committed Feb 11, 2016
1 parent f408679 commit 82ff13e
Show file tree
Hide file tree
Showing 3 changed files with 47 additions and 26 deletions.
41 changes: 37 additions & 4 deletions nomad/structs/funcs.go
Original file line number Diff line number Diff line change
Expand Up @@ -140,33 +140,66 @@ func GenerateUUID() string {

// Helpers for copying generic structures.
func CopyMapStringString(m map[string]string) map[string]string {
c := make(map[string]string, len(m))
l := len(m)
if l == 0 {
return nil
}

c := make(map[string]string, l)
for k, v := range m {
c[k] = v
}
return c
}

func CopyMapStringInt(m map[string]int) map[string]int {
c := make(map[string]int, len(m))
l := len(m)
if l == 0 {
return nil
}

c := make(map[string]int, l)
for k, v := range m {
c[k] = v
}
return c
}

func CopyMapStringFloat64(m map[string]float64) map[string]float64 {
c := make(map[string]float64, len(m))
l := len(m)
if l == 0 {
return nil
}

c := make(map[string]float64, l)
for k, v := range m {
c[k] = v
}
return c
}

func CopySliceString(s []string) []string {
c := make([]string, len(s))
l := len(s)
if l == 0 {
return nil
}

c := make([]string, l)
for i, v := range s {
c[i] = v
}
return c
}

func CopySliceConstraints(s []*Constraint) []*Constraint {
l := len(s)
if l == 0 {
return nil
}

c := make([]*Constraint, l)
for i, v := range s {
c[i] = v.Copy()
}
return c
}
30 changes: 9 additions & 21 deletions nomad/structs/structs.go
Original file line number Diff line number Diff line change
Expand Up @@ -927,12 +927,7 @@ func (j *Job) Copy() *Job {
nj := new(Job)
*nj = *j
nj.Datacenters = CopySliceString(nj.Datacenters)

con := make([]*Constraint, len(nj.Constraints))
for i, c := range nj.Constraints {
con[i] = c.Copy()
}
nj.Constraints = con
nj.Constraints = CopySliceConstraints(nj.Constraints)

tgs := make([]*TaskGroup, len(nj.TaskGroups))
for i, tg := range nj.TaskGroups {
Expand Down Expand Up @@ -1305,12 +1300,7 @@ func (tg *TaskGroup) Copy() *TaskGroup {
}
ntg := new(TaskGroup)
*ntg = *tg

con := make([]*Constraint, len(ntg.Constraints))
for i, c := range ntg.Constraints {
con[i] = c.Copy()
}
ntg.Constraints = con
ntg.Constraints = CopySliceConstraints(ntg.Constraints)

ntg.RestartPolicy = ntg.RestartPolicy.Copy()

Expand Down Expand Up @@ -1480,9 +1470,12 @@ func (s *Service) Copy() *Service {
*ns = *s
ns.Tags = CopySliceString(ns.Tags)

checks := make([]*ServiceCheck, len(ns.Checks))
for i, c := range ns.Checks {
checks[i] = c.Copy()
var checks []*ServiceCheck
if l := len(ns.Checks); l != 0 {
checks = make([]*ServiceCheck, len(ns.Checks))
for i, c := range ns.Checks {
checks[i] = c.Copy()
}
}
ns.Checks = checks
return ns
Expand Down Expand Up @@ -1586,12 +1579,7 @@ func (t *Task) Copy() *Task {
services[i] = s.Copy()
}
nt.Services = services

con := make([]*Constraint, len(nt.Constraints))
for i, s := range nt.Constraints {
con[i] = s.Copy()
}
nt.Constraints = con
nt.Constraints = CopySliceConstraints(nt.Constraints)

nt.Resources = nt.Resources.Copy()
nt.Meta = CopyMapStringString(nt.Meta)
Expand Down
2 changes: 1 addition & 1 deletion nomad/structs/structs_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -163,7 +163,7 @@ func TestJob_Copy(t *testing.T) {

c := j.Copy()
if !reflect.DeepEqual(j, c) {
t.Fatalf("Copy() returned an unequal Job; got %v; want %v", c, j)
t.Fatalf("Copy() returned an unequal Job; got %#v; want %#v", c, j)
}
}

Expand Down

0 comments on commit 82ff13e

Please sign in to comment.