mirror of https://github.com/k3s-io/k3s
Fixed pointers bug in PATCH verb in the API
parent
965711e8d1
commit
86025129fb
|
@ -100,6 +100,11 @@ func mergeMap(original, patch map[string]interface{}, t reflect.Type) (map[strin
|
||||||
original[k] = patchV
|
original[k] = patchV
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
// If the data type is a pointer, resolve the element.
|
||||||
|
if t.Kind() == reflect.Ptr {
|
||||||
|
t = t.Elem()
|
||||||
|
}
|
||||||
|
|
||||||
// If they're both maps or lists, recurse into the value.
|
// If they're both maps or lists, recurse into the value.
|
||||||
// First find the fieldPatchStrategy and fieldPatchMergeKey.
|
// First find the fieldPatchStrategy and fieldPatchMergeKey.
|
||||||
fieldType, fieldPatchStrategy, fieldPatchMergeKey, err := forkedjson.LookupPatchMetadata(t, k)
|
fieldType, fieldPatchStrategy, fieldPatchMergeKey, err := forkedjson.LookupPatchMetadata(t, k)
|
||||||
|
|
|
@ -51,6 +51,7 @@ type MergeItem struct {
|
||||||
NonMergingList []MergeItem
|
NonMergingList []MergeItem
|
||||||
MergingIntList []int `patchStrategy:"merge"`
|
MergingIntList []int `patchStrategy:"merge"`
|
||||||
NonMergingIntList []int
|
NonMergingIntList []int
|
||||||
|
MergeItemPtr *MergeItem `patchStrategy:"merge" patchMergeKey:"name"`
|
||||||
SimpleMap map[string]string
|
SimpleMap map[string]string
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -232,6 +233,41 @@ strategicMergePatchCases:
|
||||||
- $patch: replace
|
- $patch: replace
|
||||||
result:
|
result:
|
||||||
mergingList: []
|
mergingList: []
|
||||||
|
- description: add new field inside pointers
|
||||||
|
original:
|
||||||
|
mergeItemPtr:
|
||||||
|
- name: 1
|
||||||
|
patch:
|
||||||
|
mergeItemPtr:
|
||||||
|
- name: 2
|
||||||
|
result:
|
||||||
|
mergeItemPtr:
|
||||||
|
- name: 1
|
||||||
|
- name: 2
|
||||||
|
- description: update nested pointers
|
||||||
|
original:
|
||||||
|
mergeItemPtr:
|
||||||
|
- name: 1
|
||||||
|
mergeItemPtr:
|
||||||
|
- name: 1
|
||||||
|
- name: 2
|
||||||
|
value: 2
|
||||||
|
- name: 2
|
||||||
|
patch:
|
||||||
|
mergeItemPtr:
|
||||||
|
- name: 1
|
||||||
|
mergeItemPtr:
|
||||||
|
- name: 1
|
||||||
|
value: 1
|
||||||
|
result:
|
||||||
|
mergeItemPtr:
|
||||||
|
- name: 1
|
||||||
|
mergeItemPtr:
|
||||||
|
- name: 1
|
||||||
|
value: 1
|
||||||
|
- name: 2
|
||||||
|
value: 2
|
||||||
|
- name: 2
|
||||||
sortMergeListTestCases:
|
sortMergeListTestCases:
|
||||||
- description: sort one list of maps
|
- description: sort one list of maps
|
||||||
original:
|
original:
|
||||||
|
@ -351,6 +387,40 @@ sortMergeListTestCases:
|
||||||
- 1
|
- 1
|
||||||
- 2
|
- 2
|
||||||
- 3
|
- 3
|
||||||
|
- description: sort nested pointers of ints
|
||||||
|
original:
|
||||||
|
mergeItemPtr:
|
||||||
|
- name: 2
|
||||||
|
mergingIntList:
|
||||||
|
- 1
|
||||||
|
- 3
|
||||||
|
- 2
|
||||||
|
- name: 1
|
||||||
|
mergingIntList:
|
||||||
|
- 2
|
||||||
|
- 1
|
||||||
|
sorted:
|
||||||
|
mergeItemPtr:
|
||||||
|
- name: 1
|
||||||
|
mergingIntList:
|
||||||
|
- 1
|
||||||
|
- 2
|
||||||
|
- name: 2
|
||||||
|
mergingIntList:
|
||||||
|
- 1
|
||||||
|
- 2
|
||||||
|
- 3
|
||||||
|
- description: sort one pointer of maps
|
||||||
|
original:
|
||||||
|
mergeItemPtr:
|
||||||
|
- name: 1
|
||||||
|
- name: 3
|
||||||
|
- name: 2
|
||||||
|
sorted:
|
||||||
|
mergeItemPtr:
|
||||||
|
- name: 1
|
||||||
|
- name: 2
|
||||||
|
- name: 3
|
||||||
`)
|
`)
|
||||||
|
|
||||||
func TestStrategicMergePatch(t *testing.T) {
|
func TestStrategicMergePatch(t *testing.T) {
|
||||||
|
|
Loading…
Reference in New Issue