github.com/guilhermebr/docker@v1.4.2-0.20150428121140-67da055cebca/runconfig/compare.go (about) 1 package runconfig 2 3 // Compare two Config struct. Do not compare the "Image" nor "Hostname" fields 4 // If OpenStdin is set, then it differs 5 func Compare(a, b *Config) bool { 6 if a == nil || b == nil || 7 a.OpenStdin || b.OpenStdin { 8 return false 9 } 10 if a.AttachStdout != b.AttachStdout || 11 a.AttachStderr != b.AttachStderr || 12 a.User != b.User || 13 a.OpenStdin != b.OpenStdin || 14 a.Tty != b.Tty { 15 return false 16 } 17 18 if a.Cmd.Len() != b.Cmd.Len() || 19 len(a.Env) != len(b.Env) || 20 len(a.Labels) != len(b.Labels) || 21 len(a.PortSpecs) != len(b.PortSpecs) || 22 len(a.ExposedPorts) != len(b.ExposedPorts) || 23 a.Entrypoint.Len() != b.Entrypoint.Len() || 24 len(a.Volumes) != len(b.Volumes) { 25 return false 26 } 27 28 aCmd := a.Cmd.Slice() 29 bCmd := b.Cmd.Slice() 30 for i := 0; i < len(aCmd); i++ { 31 if aCmd[i] != bCmd[i] { 32 return false 33 } 34 } 35 for i := 0; i < len(a.Env); i++ { 36 if a.Env[i] != b.Env[i] { 37 return false 38 } 39 } 40 for k, v := range a.Labels { 41 if v != b.Labels[k] { 42 return false 43 } 44 } 45 for i := 0; i < len(a.PortSpecs); i++ { 46 if a.PortSpecs[i] != b.PortSpecs[i] { 47 return false 48 } 49 } 50 for k := range a.ExposedPorts { 51 if _, exists := b.ExposedPorts[k]; !exists { 52 return false 53 } 54 } 55 56 aEntrypoint := a.Entrypoint.Slice() 57 bEntrypoint := b.Entrypoint.Slice() 58 for i := 0; i < len(aEntrypoint); i++ { 59 if aEntrypoint[i] != bEntrypoint[i] { 60 return false 61 } 62 } 63 for key := range a.Volumes { 64 if _, exists := b.Volumes[key]; !exists { 65 return false 66 } 67 } 68 return true 69 }