mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-09-14 21:53:52 +00:00
Merge pull request #38342 from ymqytw/make_SPatch_delete_all_duplicates
Automatic merge from submit-queue (batch tested with PRs 34488, 39511, 39619, 38342, 39491) Make StrategicPatch delete all matching maps in a merging list fixes #38332 ```release-note NONE ``` cc: @lavalamp @pwittrock
This commit is contained in:
@@ -656,12 +656,16 @@ func mergeSlice(original, patch []interface{}, elemType reflect.Type, mergeKey s
|
|||||||
if patchType == deleteDirective {
|
if patchType == deleteDirective {
|
||||||
mergeValue, ok := typedV[mergeKey]
|
mergeValue, ok := typedV[mergeKey]
|
||||||
if ok {
|
if ok {
|
||||||
|
// delete all matching entries (based on merge key) from a merging list
|
||||||
|
for {
|
||||||
_, originalKey, found, err := findMapInSliceBasedOnKeyValue(original, mergeKey, mergeValue)
|
_, originalKey, found, err := findMapInSliceBasedOnKeyValue(original, mergeKey, mergeValue)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
if found {
|
if !found {
|
||||||
|
break
|
||||||
|
}
|
||||||
// Delete the element at originalKey.
|
// Delete the element at originalKey.
|
||||||
original = append(original[:originalKey], original[originalKey+1:]...)
|
original = append(original[:originalKey], original[originalKey+1:]...)
|
||||||
}
|
}
|
||||||
|
@@ -308,6 +308,25 @@ testCases:
|
|||||||
$patch: replace
|
$patch: replace
|
||||||
modified:
|
modified:
|
||||||
other: a
|
other: a
|
||||||
|
- description: delete all duplicate entries in a merging list
|
||||||
|
original:
|
||||||
|
mergingList:
|
||||||
|
- name: 1
|
||||||
|
- name: 1
|
||||||
|
- name: 2
|
||||||
|
value: a
|
||||||
|
- name: 3
|
||||||
|
- name: 3
|
||||||
|
twoWay:
|
||||||
|
mergingList:
|
||||||
|
- name: 1
|
||||||
|
$patch: delete
|
||||||
|
- name: 3
|
||||||
|
$patch: delete
|
||||||
|
modified:
|
||||||
|
mergingList:
|
||||||
|
- name: 2
|
||||||
|
value: a
|
||||||
`)
|
`)
|
||||||
|
|
||||||
func TestCustomStrategicMergePatch(t *testing.T) {
|
func TestCustomStrategicMergePatch(t *testing.T) {
|
||||||
|
Reference in New Issue
Block a user