github.com/docker/docker@v299999999.0.0-20200612211812-aaf470eca7b5+incompatible/image/cache/compare.go (about)

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