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
pull/6/head
Kubernetes Submit Queue 2017-01-10 16:07:16 -08:00 committed by GitHub
commit ebf1a533aa
2 changed files with 28 additions and 5 deletions

View File

@ -656,12 +656,16 @@ func mergeSlice(original, patch []interface{}, elemType reflect.Type, mergeKey s
if patchType == deleteDirective {
mergeValue, ok := typedV[mergeKey]
if ok {
_, originalKey, found, err := findMapInSliceBasedOnKeyValue(original, mergeKey, mergeValue)
if err != nil {
return nil, err
}
// delete all matching entries (based on merge key) from a merging list
for {
_, originalKey, found, err := findMapInSliceBasedOnKeyValue(original, mergeKey, mergeValue)
if err != nil {
return nil, err
}
if found {
if !found {
break
}
// Delete the element at originalKey.
original = append(original[:originalKey], original[originalKey+1:]...)
}

View File

@ -308,6 +308,25 @@ testCases:
$patch: replace
modified:
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) {