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  }