You've already forked dcmerge
							
							fix(dockerCompose): add ServiceDeployResources.MergeFirstWin()
This commit is contained in:
		@@ -798,6 +798,27 @@ func (sdr *ServiceDeployResources) Equal(equalable Equalable) bool {
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// MergeFirstWin adds only attributes of the passed serviceDeployResources if
 | 
			
		||||
// they are not already exists.
 | 
			
		||||
func (sdr *ServiceDeployResources) MergeFirstWin(serviceDeployResources *ServiceDeployResources) {
 | 
			
		||||
	switch {
 | 
			
		||||
	case sdr == nil && serviceDeployResources == nil:
 | 
			
		||||
		fallthrough
 | 
			
		||||
	case sdr != nil && serviceDeployResources == nil:
 | 
			
		||||
		return
 | 
			
		||||
 | 
			
		||||
	// WARN: It's not possible to change the memory pointer sdr *ServiceDeployResources
 | 
			
		||||
	// to a new initialized serviceDeployResources without returning the
 | 
			
		||||
	// serviceDeployResources it self.
 | 
			
		||||
	case sdr == nil && serviceDeployResources != nil:
 | 
			
		||||
		sdr = NewServiceDeployResources()
 | 
			
		||||
		fallthrough
 | 
			
		||||
	default:
 | 
			
		||||
		sdr.mergeFirstWinLimits(serviceDeployResources.Limits)
 | 
			
		||||
		sdr.mergeFirstWinReservations(serviceDeployResources.Reservations)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// MergeLastWin merges adds or overwrite the attributes of the passed
 | 
			
		||||
// serviceDeployResources with the existing one.
 | 
			
		||||
func (sdr *ServiceDeployResources) MergeLastWin(serviceDeployResources *ServiceDeployResources) {
 | 
			
		||||
@@ -819,6 +840,32 @@ func (sdr *ServiceDeployResources) MergeLastWin(serviceDeployResources *ServiceD
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (sdr *ServiceDeployResources) mergeFirstWinLimits(limits *ServiceDeployResourcesLimits) {
 | 
			
		||||
	switch {
 | 
			
		||||
	case sdr.Limits == nil && limits != nil:
 | 
			
		||||
		sdr.Limits = limits
 | 
			
		||||
	case sdr.Limits != nil && limits == nil:
 | 
			
		||||
		fallthrough
 | 
			
		||||
	case sdr.Limits == nil && limits == nil:
 | 
			
		||||
		return
 | 
			
		||||
	default:
 | 
			
		||||
		sdr.Limits.MergeFirstWin(limits)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (sdr *ServiceDeployResources) mergeFirstWinReservations(reservations *ServiceDeployResourcesLimits) {
 | 
			
		||||
	switch {
 | 
			
		||||
	case sdr.Reservations == nil && reservations != nil:
 | 
			
		||||
		sdr.Reservations = reservations
 | 
			
		||||
	case sdr.Reservations != nil && reservations == nil:
 | 
			
		||||
		fallthrough
 | 
			
		||||
	case sdr.Reservations == nil && reservations == nil:
 | 
			
		||||
		return
 | 
			
		||||
	default:
 | 
			
		||||
		sdr.Reservations.MergeFirstWin(reservations)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (sdr *ServiceDeployResources) mergeLastWinLimits(limits *ServiceDeployResourcesLimits) {
 | 
			
		||||
	switch {
 | 
			
		||||
	case sdr.Limits == nil && limits != nil:
 | 
			
		||||
@@ -991,7 +1038,8 @@ func (sn *ServiceNetwork) MergeFirstWin(serviceNetwork *ServiceNetwork) {
 | 
			
		||||
	// 	fallthrough
 | 
			
		||||
 | 
			
		||||
	case sn == nil && serviceNetwork != nil:
 | 
			
		||||
		sn = serviceNetwork
 | 
			
		||||
		sn = NewServiceNetwork()
 | 
			
		||||
		fallthrough
 | 
			
		||||
	default:
 | 
			
		||||
		sn.mergeFirstWinAliases(serviceNetwork.Aliases)
 | 
			
		||||
	}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user