mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-23 03:41:45 +00:00
bump(github.com/evanphx/json-patch): 94e38aa1586e8a6c8a75770bddf5ff84c48a106b
This commit is contained in:
parent
8306b0b1a4
commit
2d28e0d6a3
2
Godeps/Godeps.json
generated
2
Godeps/Godeps.json
generated
@ -1240,7 +1240,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "github.com/evanphx/json-patch",
|
"ImportPath": "github.com/evanphx/json-patch",
|
||||||
"Rev": "ed7cfbae1fffc071f71e068df27bf4f0521402d8"
|
"Rev": "94e38aa1586e8a6c8a75770bddf5ff84c48a106b"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "github.com/exponent-io/jsonpath",
|
"ImportPath": "github.com/exponent-io/jsonpath",
|
||||||
|
@ -372,7 +372,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "github.com/evanphx/json-patch",
|
"ImportPath": "github.com/evanphx/json-patch",
|
||||||
"Rev": "ed7cfbae1fffc071f71e068df27bf4f0521402d8"
|
"Rev": "94e38aa1586e8a6c8a75770bddf5ff84c48a106b"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "github.com/ghodss/yaml",
|
"ImportPath": "github.com/ghodss/yaml",
|
||||||
|
@ -24,7 +24,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "github.com/evanphx/json-patch",
|
"ImportPath": "github.com/evanphx/json-patch",
|
||||||
"Rev": "ed7cfbae1fffc071f71e068df27bf4f0521402d8"
|
"Rev": "94e38aa1586e8a6c8a75770bddf5ff84c48a106b"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "github.com/ghodss/yaml",
|
"ImportPath": "github.com/ghodss/yaml",
|
||||||
|
2
staging/src/k8s.io/apiserver/Godeps/Godeps.json
generated
2
staging/src/k8s.io/apiserver/Godeps/Godeps.json
generated
@ -372,7 +372,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "github.com/evanphx/json-patch",
|
"ImportPath": "github.com/evanphx/json-patch",
|
||||||
"Rev": "ed7cfbae1fffc071f71e068df27bf4f0521402d8"
|
"Rev": "94e38aa1586e8a6c8a75770bddf5ff84c48a106b"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "github.com/ghodss/yaml",
|
"ImportPath": "github.com/ghodss/yaml",
|
||||||
|
@ -112,7 +112,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "github.com/evanphx/json-patch",
|
"ImportPath": "github.com/evanphx/json-patch",
|
||||||
"Rev": "ed7cfbae1fffc071f71e068df27bf4f0521402d8"
|
"Rev": "94e38aa1586e8a6c8a75770bddf5ff84c48a106b"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "github.com/ghodss/yaml",
|
"ImportPath": "github.com/ghodss/yaml",
|
||||||
|
@ -104,7 +104,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "github.com/evanphx/json-patch",
|
"ImportPath": "github.com/evanphx/json-patch",
|
||||||
"Rev": "ed7cfbae1fffc071f71e068df27bf4f0521402d8"
|
"Rev": "94e38aa1586e8a6c8a75770bddf5ff84c48a106b"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "github.com/ghodss/yaml",
|
"ImportPath": "github.com/ghodss/yaml",
|
||||||
|
287
vendor/github.com/evanphx/json-patch/README.md
generated
vendored
287
vendor/github.com/evanphx/json-patch/README.md
generated
vendored
@ -1,29 +1,284 @@
|
|||||||
## JSON-Patch
|
# JSON-Patch
|
||||||
|
`jsonpatch` is a library which provides functionallity for both applying
|
||||||
Provides the ability to modify and test a JSON according to a
|
[RFC6902 JSON patches](http://tools.ietf.org/html/rfc6902) against documents, as
|
||||||
[RFC6902 JSON patch](http://tools.ietf.org/html/rfc6902) and [RFC7396 JSON Merge Patch](https://tools.ietf.org/html/rfc7396).
|
well as for calculating & applying [RFC7396 JSON merge patches](https://tools.ietf.org/html/rfc7396).
|
||||||
|
|
||||||
*Version*: **1.0**
|
|
||||||
|
|
||||||
[](http://godoc.org/github.com/evanphx/json-patch)
|
[](http://godoc.org/github.com/evanphx/json-patch)
|
||||||
|
|
||||||
[](https://travis-ci.org/evanphx/json-patch)
|
[](https://travis-ci.org/evanphx/json-patch)
|
||||||
|
[](https://goreportcard.com/report/github.com/evanphx/json-patch)
|
||||||
|
|
||||||
### API Usage
|
# Get It!
|
||||||
|
|
||||||
* Given a `[]byte`, obtain a Patch object
|
**Latest and greatest**:
|
||||||
|
```bash
|
||||||
|
go get -u github.com/evanphx/json-patch
|
||||||
|
```
|
||||||
|
|
||||||
`obj, err := jsonpatch.DecodePatch(patch)`
|
**Stable Versions**:
|
||||||
|
* Version 3: `go get -u gopkg.in/evanphx/json-patch.v3`
|
||||||
|
|
||||||
* Apply the patch and get a new document back
|
(previous versions below `v3` are unavailable)
|
||||||
|
|
||||||
`out, err := obj.Apply(doc)`
|
# Use It!
|
||||||
|
* [Create and apply a merge patch](#create-and-apply-a-merge-patch)
|
||||||
|
* [Create and apply a JSON Patch](#create-and-apply-a-json-patch)
|
||||||
|
* [Comparing JSON documents](#comparing-json-documents)
|
||||||
|
* [Combine merge patches](#combine-merge-patches)
|
||||||
|
|
||||||
* Create a JSON Merge Patch document based on two json documents (a to b):
|
## Create and apply a merge patch
|
||||||
|
Given both an original JSON document and a modified JSON document, you can create
|
||||||
|
a [Merge Patch](https://tools.ietf.org/html/rfc7396) document.
|
||||||
|
|
||||||
`mergeDoc, err := jsonpatch.CreateMergePatch(a, b)`
|
It can describe the changes needed to convert from the original to the
|
||||||
|
modified JSON document.
|
||||||
|
|
||||||
* Bonus API: compare documents for structural equality
|
Once you have a merge patch, you can apply it to other JSON documents using the
|
||||||
|
`jsonpatch.MergePatch(document, patch)` function.
|
||||||
|
|
||||||
`jsonpatch.Equal(doca, docb)`
|
```go
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
|
||||||
|
jsonpatch "github.com/evanphx/json-patch"
|
||||||
|
)
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
// Let's create a merge patch from these two documents...
|
||||||
|
original := []byte(`{"name": "John", "age": 24, "height": 3.21}`)
|
||||||
|
target := []byte(`{"name": "Jane", "age": 24}`)
|
||||||
|
|
||||||
|
patch, err := jsonpatch.CreateMergePatch(original, target)
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Now lets apply the patch against a different JSON document...
|
||||||
|
|
||||||
|
alternative := []byte(`{"name": "Tina", "age": 28, "height": 3.75}`)
|
||||||
|
modifiedAlternative, err := jsonpatch.MergePatch(alternative, patch)
|
||||||
|
|
||||||
|
fmt.Printf("patch document: %s\n", patch)
|
||||||
|
fmt.Printf("updated alternative doc: %s\n", modifiedAlternative)
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
When ran, you get the following output:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ go run main.go
|
||||||
|
patch document: {"height":null,"name":"Jane"}
|
||||||
|
updated tina doc: {"age":28,"name":"Jane"}
|
||||||
|
```
|
||||||
|
|
||||||
|
## Create and apply a JSON Patch
|
||||||
|
You can create patch objects using `DecodePatch([]byte)`, which can then
|
||||||
|
be applied against JSON documents.
|
||||||
|
|
||||||
|
The following is an example of creating a patch from two operations, and
|
||||||
|
applying it against a JSON document.
|
||||||
|
|
||||||
|
```go
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
|
||||||
|
jsonpatch "github.com/evanphx/json-patch"
|
||||||
|
)
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
original := []byte(`{"name": "John", "age": 24, "height": 3.21}`)
|
||||||
|
patchJSON := []byte(`[
|
||||||
|
{"op": "replace", "path": "/name", "value": "Jane"},
|
||||||
|
{"op": "remove", "path": "/height"}
|
||||||
|
]`)
|
||||||
|
|
||||||
|
patch, err := jsonpatch.DecodePatch(patchJSON)
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
modified, err := patch.Apply(original)
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
fmt.Printf("Original document: %s\n", original)
|
||||||
|
fmt.Printf("Modified document: %s\n", modified)
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
When ran, you get the following output:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ go run main.go
|
||||||
|
Original document: {"name": "John", "age": 24, "height": 3.21}
|
||||||
|
Modified document: {"age":24,"name":"Jane"}
|
||||||
|
```
|
||||||
|
|
||||||
|
## Comparing JSON documents
|
||||||
|
Due to potential whitespace and ordering differences, one cannot simply compare
|
||||||
|
JSON strings or byte-arrays directly.
|
||||||
|
|
||||||
|
As such, you can instead use `jsonpatch.Equal(document1, document2)` to
|
||||||
|
determine if two JSON documents are _structurally_ equal. This ignores
|
||||||
|
whitespace differences, and key-value ordering.
|
||||||
|
|
||||||
|
```go
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
|
||||||
|
jsonpatch "github.com/evanphx/json-patch"
|
||||||
|
)
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
original := []byte(`{"name": "John", "age": 24, "height": 3.21}`)
|
||||||
|
similar := []byte(`
|
||||||
|
{
|
||||||
|
"age": 24,
|
||||||
|
"height": 3.21,
|
||||||
|
"name": "John"
|
||||||
|
}
|
||||||
|
`)
|
||||||
|
different := []byte(`{"name": "Jane", "age": 20, "height": 3.37}`)
|
||||||
|
|
||||||
|
if jsonpatch.Equal(original, similar) {
|
||||||
|
fmt.Println(`"original" is structurally equal to "similar"`)
|
||||||
|
}
|
||||||
|
|
||||||
|
if !jsonpatch.Equal(original, different) {
|
||||||
|
fmt.Println(`"original" is _not_ structurally equal to "similar"`)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
When ran, you get the following output:
|
||||||
|
```bash
|
||||||
|
$ go run main.go
|
||||||
|
"original" is structurally equal to "similar"
|
||||||
|
"original" is _not_ structurally equal to "similar"
|
||||||
|
```
|
||||||
|
|
||||||
|
## Combine merge patches
|
||||||
|
Given two JSON merge patch documents, it is possible to combine them into a
|
||||||
|
single merge patch which can describe both set of changes.
|
||||||
|
|
||||||
|
The resulting merge patch can be used such that applying it results in a
|
||||||
|
document structurally similar as merging each merge patch to the document
|
||||||
|
in succession.
|
||||||
|
|
||||||
|
```go
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
|
||||||
|
jsonpatch "github.com/evanphx/json-patch"
|
||||||
|
)
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
original := []byte(`{"name": "John", "age": 24, "height": 3.21}`)
|
||||||
|
|
||||||
|
nameAndHeight := []byte(`{"height":null,"name":"Jane"}`)
|
||||||
|
ageAndEyes := []byte(`{"age":4.23,"eyes":"blue"}`)
|
||||||
|
|
||||||
|
// Let's combine these merge patch documents...
|
||||||
|
combinedPatch, err := jsonpatch.MergeMergePatches(nameAndHeight, ageAndEyes)
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Apply each patch individual against the original document
|
||||||
|
withoutCombinedPatch, err := jsonpatch.MergePatch(original, nameAndHeight)
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
withoutCombinedPatch, err = jsonpatch.MergePatch(withoutCombinedPatch, ageAndEyes)
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Apply the combined patch against the original document
|
||||||
|
|
||||||
|
withCombinedPatch, err := jsonpatch.MergePatch(original, combinedPatch)
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Do both result in the same thing? They should!
|
||||||
|
if jsonpatch.Equal(withCombinedPatch, withoutCombinedPatch) {
|
||||||
|
fmt.Println("Both JSON documents are structurally the same!")
|
||||||
|
}
|
||||||
|
|
||||||
|
fmt.Printf("combined merge patch: %s", combinedPatch)
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
When ran, you get the following output:
|
||||||
|
```bash
|
||||||
|
$ go run main.go
|
||||||
|
Both JSON documents are structurally the same!
|
||||||
|
combined merge patch: {"age":4.23,"eyes":"blue","height":null,"name":"Jane"}
|
||||||
|
```
|
||||||
|
|
||||||
|
# CLI for comparing JSON documents
|
||||||
|
You can install the commandline program `json-patch`.
|
||||||
|
|
||||||
|
This program can take multiple JSON patch documents as arguments,
|
||||||
|
and fed a JSON document from `stdin`. It will apply the patch(es) against
|
||||||
|
the document and output the modified doc.
|
||||||
|
|
||||||
|
**patch.1.json**
|
||||||
|
```json
|
||||||
|
[
|
||||||
|
{"op": "replace", "path": "/name", "value": "Jane"},
|
||||||
|
{"op": "remove", "path": "/height"}
|
||||||
|
]
|
||||||
|
```
|
||||||
|
|
||||||
|
**patch.2.json**
|
||||||
|
```json
|
||||||
|
[
|
||||||
|
{"op": "add", "path": "/address", "value": "123 Main St"},
|
||||||
|
{"op": "replace", "path": "/age", "value": "21"}
|
||||||
|
]
|
||||||
|
```
|
||||||
|
|
||||||
|
**document.json**
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"name": "John",
|
||||||
|
"age": 24,
|
||||||
|
"height": 3.21
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
You can then run:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ go install github.com/evanphx/json-patch/cmd/json-patch
|
||||||
|
$ cat document.json | json-patch -p patch.1.json -p patch.2.json
|
||||||
|
{"address":"123 Main St","age":"21","name":"Jane"}
|
||||||
|
```
|
||||||
|
|
||||||
|
# Help It!
|
||||||
|
Contributions are welcomed! Leave [an issue](https://github.com/evanphx/json-patch/issues)
|
||||||
|
or [create a PR](https://github.com/evanphx/json-patch/compare).
|
||||||
|
|
||||||
|
|
||||||
|
Before creating a pull request, we'd ask that you make sure tests are passing
|
||||||
|
and that you have added new tests when applicable.
|
||||||
|
|
||||||
|
Contributors can run tests using:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
go test -cover ./...
|
||||||
|
```
|
||||||
|
|
||||||
|
Builds for pull requests are tested automatically
|
||||||
|
using [TravisCI](https://travis-ci.org/evanphx/json-patch).
|
||||||
|
102
vendor/github.com/evanphx/json-patch/merge.go
generated
vendored
102
vendor/github.com/evanphx/json-patch/merge.go
generated
vendored
@ -1,6 +1,7 @@
|
|||||||
package jsonpatch
|
package jsonpatch
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"bytes"
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"fmt"
|
"fmt"
|
||||||
"reflect"
|
"reflect"
|
||||||
@ -89,6 +90,7 @@ func pruneAryNulls(ary *partialArray) *partialArray {
|
|||||||
|
|
||||||
var errBadJSONDoc = fmt.Errorf("Invalid JSON Document")
|
var errBadJSONDoc = fmt.Errorf("Invalid JSON Document")
|
||||||
var errBadJSONPatch = fmt.Errorf("Invalid JSON Patch")
|
var errBadJSONPatch = fmt.Errorf("Invalid JSON Patch")
|
||||||
|
var errBadMergeTypes = fmt.Errorf("Mismatched JSON Documents")
|
||||||
|
|
||||||
// MergeMergePatches merges two merge patches together, such that
|
// MergeMergePatches merges two merge patches together, such that
|
||||||
// applying this resulting merged merge patch to a document yields the same
|
// applying this resulting merged merge patch to a document yields the same
|
||||||
@ -160,30 +162,106 @@ func doMergePatch(docData, patchData []byte, mergeMerge bool) ([]byte, error) {
|
|||||||
return json.Marshal(doc)
|
return json.Marshal(doc)
|
||||||
}
|
}
|
||||||
|
|
||||||
// CreateMergePatch creates a merge patch as specified in http://tools.ietf.org/html/draft-ietf-appsawg-json-merge-patch-07
|
// resemblesJSONArray indicates whether the byte-slice "appears" to be
|
||||||
//
|
// a JSON array or not.
|
||||||
// 'a' is original, 'b' is the modified document. Both are to be given as json encoded content.
|
// False-positives are possible, as this function does not check the internal
|
||||||
// The function will return a mergeable json document with differences from a to b.
|
// structure of the array. It only checks that the outer syntax is present and
|
||||||
//
|
// correct.
|
||||||
// An error will be returned if any of the two documents are invalid.
|
func resemblesJSONArray(input []byte) bool {
|
||||||
func CreateMergePatch(a, b []byte) ([]byte, error) {
|
input = bytes.TrimSpace(input)
|
||||||
aI := map[string]interface{}{}
|
|
||||||
bI := map[string]interface{}{}
|
hasPrefix := bytes.HasPrefix(input, []byte("["))
|
||||||
err := json.Unmarshal(a, &aI)
|
hasSuffix := bytes.HasSuffix(input, []byte("]"))
|
||||||
|
|
||||||
|
return hasPrefix && hasSuffix
|
||||||
|
}
|
||||||
|
|
||||||
|
// CreateMergePatch will return a merge patch document capable of converting
|
||||||
|
// the original document(s) to the modified document(s).
|
||||||
|
// The parameters can be bytes of either two JSON Documents, or two arrays of
|
||||||
|
// JSON documents.
|
||||||
|
// The merge patch returned follows the specification defined at http://tools.ietf.org/html/draft-ietf-appsawg-json-merge-patch-07
|
||||||
|
func CreateMergePatch(originalJSON, modifiedJSON []byte) ([]byte, error) {
|
||||||
|
originalResemblesArray := resemblesJSONArray(originalJSON)
|
||||||
|
modifiedResemblesArray := resemblesJSONArray(modifiedJSON)
|
||||||
|
|
||||||
|
// Do both byte-slices seem like JSON arrays?
|
||||||
|
if originalResemblesArray && modifiedResemblesArray {
|
||||||
|
return createArrayMergePatch(originalJSON, modifiedJSON)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Are both byte-slices are not arrays? Then they are likely JSON objects...
|
||||||
|
if !originalResemblesArray && !modifiedResemblesArray {
|
||||||
|
return createObjectMergePatch(originalJSON, modifiedJSON)
|
||||||
|
}
|
||||||
|
|
||||||
|
// None of the above? Then return an error because of mismatched types.
|
||||||
|
return nil, errBadMergeTypes
|
||||||
|
}
|
||||||
|
|
||||||
|
// createObjectMergePatch will return a merge-patch document capable of
|
||||||
|
// converting the original document to the modified document.
|
||||||
|
func createObjectMergePatch(originalJSON, modifiedJSON []byte) ([]byte, error) {
|
||||||
|
originalDoc := map[string]interface{}{}
|
||||||
|
modifiedDoc := map[string]interface{}{}
|
||||||
|
|
||||||
|
err := json.Unmarshal(originalJSON, &originalDoc)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errBadJSONDoc
|
return nil, errBadJSONDoc
|
||||||
}
|
}
|
||||||
err = json.Unmarshal(b, &bI)
|
|
||||||
|
err = json.Unmarshal(modifiedJSON, &modifiedDoc)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errBadJSONDoc
|
return nil, errBadJSONDoc
|
||||||
}
|
}
|
||||||
dest, err := getDiff(aI, bI)
|
|
||||||
|
dest, err := getDiff(originalDoc, modifiedDoc)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
return json.Marshal(dest)
|
return json.Marshal(dest)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// createArrayMergePatch will return an array of merge-patch documents capable
|
||||||
|
// of converting the original document to the modified document for each
|
||||||
|
// pair of JSON documents provided in the arrays.
|
||||||
|
// Arrays of mismatched sizes will result in an error.
|
||||||
|
func createArrayMergePatch(originalJSON, modifiedJSON []byte) ([]byte, error) {
|
||||||
|
originalDocs := []json.RawMessage{}
|
||||||
|
modifiedDocs := []json.RawMessage{}
|
||||||
|
|
||||||
|
err := json.Unmarshal(originalJSON, &originalDocs)
|
||||||
|
if err != nil {
|
||||||
|
return nil, errBadJSONDoc
|
||||||
|
}
|
||||||
|
|
||||||
|
err = json.Unmarshal(modifiedJSON, &modifiedDocs)
|
||||||
|
if err != nil {
|
||||||
|
return nil, errBadJSONDoc
|
||||||
|
}
|
||||||
|
|
||||||
|
total := len(originalDocs)
|
||||||
|
if len(modifiedDocs) != total {
|
||||||
|
return nil, errBadJSONDoc
|
||||||
|
}
|
||||||
|
|
||||||
|
result := []json.RawMessage{}
|
||||||
|
for i := 0; i < len(originalDocs); i++ {
|
||||||
|
original := originalDocs[i]
|
||||||
|
modified := modifiedDocs[i]
|
||||||
|
|
||||||
|
patch, err := createObjectMergePatch(original, modified)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
result = append(result, json.RawMessage(patch))
|
||||||
|
}
|
||||||
|
|
||||||
|
return json.Marshal(result)
|
||||||
|
}
|
||||||
|
|
||||||
// Returns true if the array matches (must be json types).
|
// Returns true if the array matches (must be json types).
|
||||||
// As is idiomatic for go, an empty array is not the same as a nil array.
|
// As is idiomatic for go, an empty array is not the same as a nil array.
|
||||||
func matchesArray(a, b []interface{}) bool {
|
func matchesArray(a, b []interface{}) bool {
|
||||||
|
4
vendor/github.com/evanphx/json-patch/patch.go
generated
vendored
4
vendor/github.com/evanphx/json-patch/patch.go
generated
vendored
@ -397,7 +397,9 @@ func (d *partialArray) add(key string, val *lazyNode) error {
|
|||||||
}
|
}
|
||||||
idx = len(ary) - idx
|
idx = len(ary) - idx
|
||||||
}
|
}
|
||||||
|
if idx < 0 || idx >= len(ary) || idx > len(cur) {
|
||||||
|
return fmt.Errorf("Unable to access invalid index: %d", idx)
|
||||||
|
}
|
||||||
copy(ary[0:idx], cur[0:idx])
|
copy(ary[0:idx], cur[0:idx])
|
||||||
ary[idx] = val
|
ary[idx] = val
|
||||||
copy(ary[idx+1:], cur[idx:])
|
copy(ary[idx+1:], cur[idx:])
|
||||||
|
Loading…
Reference in New Issue
Block a user