mirror of https://github.com/knative/caching.git
upgrade to latest dependencies (#922)
bumping knative.dev/pkg efddeac...f62a97f: > f62a97f Bump github.com/spf13/pflag from 1.0.5 to 1.0.6 (# 3145) > 5be4868 Bump github.com/evanphx/json-patch/v5 from 5.9.0 to 5.9.11 (# 3144) Signed-off-by: Knative Automation <automation@knative.team>
This commit is contained in:
parent
41aa68a551
commit
ed50a5c83f
6
go.mod
6
go.mod
|
@ -11,7 +11,7 @@ require (
|
||||||
k8s.io/code-generator v0.31.4
|
k8s.io/code-generator v0.31.4
|
||||||
k8s.io/kube-openapi v0.0.0-20240808142205-8e686545bdb8
|
k8s.io/kube-openapi v0.0.0-20240808142205-8e686545bdb8
|
||||||
knative.dev/hack v0.0.0-20250128013659-5f7f0f50e9de
|
knative.dev/hack v0.0.0-20250128013659-5f7f0f50e9de
|
||||||
knative.dev/pkg v0.0.0-20250128013458-efddeac3ec35
|
knative.dev/pkg v0.0.0-20250203163623-f62a97fc6ad4
|
||||||
)
|
)
|
||||||
|
|
||||||
require (
|
require (
|
||||||
|
@ -23,7 +23,7 @@ require (
|
||||||
github.com/cespare/xxhash/v2 v2.3.0 // indirect
|
github.com/cespare/xxhash/v2 v2.3.0 // indirect
|
||||||
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
|
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
|
||||||
github.com/emicklei/go-restful/v3 v3.12.1 // indirect
|
github.com/emicklei/go-restful/v3 v3.12.1 // indirect
|
||||||
github.com/evanphx/json-patch/v5 v5.9.0 // indirect
|
github.com/evanphx/json-patch/v5 v5.9.11 // indirect
|
||||||
github.com/fxamacker/cbor/v2 v2.7.0 // indirect
|
github.com/fxamacker/cbor/v2 v2.7.0 // indirect
|
||||||
github.com/go-kit/log v0.2.1 // indirect
|
github.com/go-kit/log v0.2.1 // indirect
|
||||||
github.com/go-logfmt/logfmt v0.5.1 // indirect
|
github.com/go-logfmt/logfmt v0.5.1 // indirect
|
||||||
|
@ -53,7 +53,7 @@ require (
|
||||||
github.com/prometheus/common v0.55.0 // indirect
|
github.com/prometheus/common v0.55.0 // indirect
|
||||||
github.com/prometheus/procfs v0.15.1 // indirect
|
github.com/prometheus/procfs v0.15.1 // indirect
|
||||||
github.com/prometheus/statsd_exporter v0.22.7 // indirect
|
github.com/prometheus/statsd_exporter v0.22.7 // indirect
|
||||||
github.com/spf13/pflag v1.0.5 // indirect
|
github.com/spf13/pflag v1.0.6 // indirect
|
||||||
github.com/x448/float16 v0.8.4 // indirect
|
github.com/x448/float16 v0.8.4 // indirect
|
||||||
go.opencensus.io v0.24.0 // indirect
|
go.opencensus.io v0.24.0 // indirect
|
||||||
go.uber.org/multierr v1.11.0 // indirect
|
go.uber.org/multierr v1.11.0 // indirect
|
||||||
|
|
11
go.sum
11
go.sum
|
@ -74,8 +74,8 @@ github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1m
|
||||||
github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
|
github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
|
||||||
github.com/evanphx/json-patch v5.9.0+incompatible h1:fBXyNpNMuTTDdquAq/uisOr2lShz4oaXpDTX2bLe7ls=
|
github.com/evanphx/json-patch v5.9.0+incompatible h1:fBXyNpNMuTTDdquAq/uisOr2lShz4oaXpDTX2bLe7ls=
|
||||||
github.com/evanphx/json-patch v5.9.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk=
|
github.com/evanphx/json-patch v5.9.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk=
|
||||||
github.com/evanphx/json-patch/v5 v5.9.0 h1:kcBlZQbplgElYIlo/n1hJbls2z/1awpXxpRi0/FOJfg=
|
github.com/evanphx/json-patch/v5 v5.9.11 h1:/8HVnzMq13/3x9TPvjG08wUGqBTmZBsCWzjTM0wiaDU=
|
||||||
github.com/evanphx/json-patch/v5 v5.9.0/go.mod h1:VNkHZ/282BpEyt/tObQO8s5CMPmYYq14uClGH4abBuQ=
|
github.com/evanphx/json-patch/v5 v5.9.11/go.mod h1:3j+LviiESTElxA4p3EMKAB9HXj3/XEtnUf6OZxqIQTM=
|
||||||
github.com/fxamacker/cbor/v2 v2.7.0 h1:iM5WgngdRBanHcxugY4JySA0nk1wZorNOpTgCMedv5E=
|
github.com/fxamacker/cbor/v2 v2.7.0 h1:iM5WgngdRBanHcxugY4JySA0nk1wZorNOpTgCMedv5E=
|
||||||
github.com/fxamacker/cbor/v2 v2.7.0/go.mod h1:pxXPTn3joSm21Gbwsv0w9OSA2y1HFR9qXEeXQVeNoDQ=
|
github.com/fxamacker/cbor/v2 v2.7.0/go.mod h1:pxXPTn3joSm21Gbwsv0w9OSA2y1HFR9qXEeXQVeNoDQ=
|
||||||
github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
|
github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
|
||||||
|
@ -282,8 +282,9 @@ github.com/rogpeppe/go-internal v1.12.0/go.mod h1:E+RYuTGaKKdloAfM02xzb0FW3Paa99
|
||||||
github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
|
github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
|
||||||
github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=
|
github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=
|
||||||
github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88=
|
github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88=
|
||||||
github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
|
|
||||||
github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
|
github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
|
||||||
|
github.com/spf13/pflag v1.0.6 h1:jFzHGLGAlb3ruxLB8MhbI6A8+AQX/2eW4qeyNZXNp2o=
|
||||||
|
github.com/spf13/pflag v1.0.6/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
|
||||||
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
||||||
github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
||||||
github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
|
github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
|
||||||
|
@ -683,8 +684,8 @@ k8s.io/utils v0.0.0-20240711033017-18e509b52bc8 h1:pUdcCO1Lk/tbT5ztQWOBi5HBgbBP1
|
||||||
k8s.io/utils v0.0.0-20240711033017-18e509b52bc8/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0=
|
k8s.io/utils v0.0.0-20240711033017-18e509b52bc8/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0=
|
||||||
knative.dev/hack v0.0.0-20250128013659-5f7f0f50e9de h1:9xWkakMP0rpTpEIi9iRfkDsqhe2XbuyJdBkrlPB2Yjs=
|
knative.dev/hack v0.0.0-20250128013659-5f7f0f50e9de h1:9xWkakMP0rpTpEIi9iRfkDsqhe2XbuyJdBkrlPB2Yjs=
|
||||||
knative.dev/hack v0.0.0-20250128013659-5f7f0f50e9de/go.mod h1:R0ritgYtjLDO9527h5vb5X6gfvt5LCrJ55BNbVDsWiY=
|
knative.dev/hack v0.0.0-20250128013659-5f7f0f50e9de/go.mod h1:R0ritgYtjLDO9527h5vb5X6gfvt5LCrJ55BNbVDsWiY=
|
||||||
knative.dev/pkg v0.0.0-20250128013458-efddeac3ec35 h1:FEk78RvL8yTuu/RczMXIo/ahhP8uaR3gPO20ZUymH5w=
|
knative.dev/pkg v0.0.0-20250203163623-f62a97fc6ad4 h1:dHkehXNqUAuRtHr0LjGqBC3Uztuj6LcOrOdqCI4c85s=
|
||||||
knative.dev/pkg v0.0.0-20250128013458-efddeac3ec35/go.mod h1:8hCNDHVxfWH0OBbPGvupXOqxMJPOqVrxC1Ar+/Gd28o=
|
knative.dev/pkg v0.0.0-20250203163623-f62a97fc6ad4/go.mod h1:T4d91cYeEBb9tpz4JqoqA77Px/rhq529heP6NKoknSI=
|
||||||
rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8=
|
rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8=
|
||||||
rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0=
|
rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0=
|
||||||
rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA=
|
rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA=
|
||||||
|
|
|
@ -103,8 +103,8 @@ func pruneAryNulls(ary *partialArray, options *ApplyOptions) *partialArray {
|
||||||
return ary
|
return ary
|
||||||
}
|
}
|
||||||
|
|
||||||
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")
|
var errBadMergeTypes = fmt.Errorf("Mismatched JSON Documents")
|
||||||
|
|
||||||
// MergeMergePatches merges two merge patches together, such that
|
// MergeMergePatches merges two merge patches together, such that
|
||||||
|
@ -121,11 +121,11 @@ func MergePatch(docData, patchData []byte) ([]byte, error) {
|
||||||
|
|
||||||
func doMergePatch(docData, patchData []byte, mergeMerge bool) ([]byte, error) {
|
func doMergePatch(docData, patchData []byte, mergeMerge bool) ([]byte, error) {
|
||||||
if !json.Valid(docData) {
|
if !json.Valid(docData) {
|
||||||
return nil, errBadJSONDoc
|
return nil, ErrBadJSONDoc
|
||||||
}
|
}
|
||||||
|
|
||||||
if !json.Valid(patchData) {
|
if !json.Valid(patchData) {
|
||||||
return nil, errBadJSONPatch
|
return nil, ErrBadJSONPatch
|
||||||
}
|
}
|
||||||
|
|
||||||
options := NewApplyOptions()
|
options := NewApplyOptions()
|
||||||
|
@ -143,7 +143,7 @@ func doMergePatch(docData, patchData []byte, mergeMerge bool) ([]byte, error) {
|
||||||
patchErr := patch.UnmarshalJSON(patchData)
|
patchErr := patch.UnmarshalJSON(patchData)
|
||||||
|
|
||||||
if isSyntaxError(docErr) {
|
if isSyntaxError(docErr) {
|
||||||
return nil, errBadJSONDoc
|
return nil, ErrBadJSONDoc
|
||||||
}
|
}
|
||||||
|
|
||||||
if isSyntaxError(patchErr) {
|
if isSyntaxError(patchErr) {
|
||||||
|
@ -151,7 +151,7 @@ func doMergePatch(docData, patchData []byte, mergeMerge bool) ([]byte, error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if docErr == nil && doc.obj == nil {
|
if docErr == nil && doc.obj == nil {
|
||||||
return nil, errBadJSONDoc
|
return nil, ErrBadJSONDoc
|
||||||
}
|
}
|
||||||
|
|
||||||
if patchErr == nil && patch.obj == nil {
|
if patchErr == nil && patch.obj == nil {
|
||||||
|
@ -175,7 +175,7 @@ func doMergePatch(docData, patchData []byte, mergeMerge bool) ([]byte, error) {
|
||||||
if json.Valid(patchData) {
|
if json.Valid(patchData) {
|
||||||
return patchData, nil
|
return patchData, nil
|
||||||
}
|
}
|
||||||
return nil, errBadJSONPatch
|
return nil, ErrBadJSONPatch
|
||||||
}
|
}
|
||||||
|
|
||||||
pruneAryNulls(patchAry, options)
|
pruneAryNulls(patchAry, options)
|
||||||
|
@ -183,7 +183,7 @@ func doMergePatch(docData, patchData []byte, mergeMerge bool) ([]byte, error) {
|
||||||
out, patchErr := json.Marshal(patchAry.nodes)
|
out, patchErr := json.Marshal(patchAry.nodes)
|
||||||
|
|
||||||
if patchErr != nil {
|
if patchErr != nil {
|
||||||
return nil, errBadJSONPatch
|
return nil, ErrBadJSONPatch
|
||||||
}
|
}
|
||||||
|
|
||||||
return out, nil
|
return out, nil
|
||||||
|
@ -256,12 +256,12 @@ func createObjectMergePatch(originalJSON, modifiedJSON []byte) ([]byte, error) {
|
||||||
|
|
||||||
err := unmarshal(originalJSON, &originalDoc)
|
err := unmarshal(originalJSON, &originalDoc)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errBadJSONDoc
|
return nil, ErrBadJSONDoc
|
||||||
}
|
}
|
||||||
|
|
||||||
err = unmarshal(modifiedJSON, &modifiedDoc)
|
err = unmarshal(modifiedJSON, &modifiedDoc)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errBadJSONDoc
|
return nil, ErrBadJSONDoc
|
||||||
}
|
}
|
||||||
|
|
||||||
dest, err := getDiff(originalDoc, modifiedDoc)
|
dest, err := getDiff(originalDoc, modifiedDoc)
|
||||||
|
@ -286,17 +286,17 @@ func createArrayMergePatch(originalJSON, modifiedJSON []byte) ([]byte, error) {
|
||||||
|
|
||||||
err := unmarshal(originalJSON, &originalDocs)
|
err := unmarshal(originalJSON, &originalDocs)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errBadJSONDoc
|
return nil, ErrBadJSONDoc
|
||||||
}
|
}
|
||||||
|
|
||||||
err = unmarshal(modifiedJSON, &modifiedDocs)
|
err = unmarshal(modifiedJSON, &modifiedDocs)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errBadJSONDoc
|
return nil, ErrBadJSONDoc
|
||||||
}
|
}
|
||||||
|
|
||||||
total := len(originalDocs)
|
total := len(originalDocs)
|
||||||
if len(modifiedDocs) != total {
|
if len(modifiedDocs) != total {
|
||||||
return nil, errBadJSONDoc
|
return nil, ErrBadJSONDoc
|
||||||
}
|
}
|
||||||
|
|
||||||
result := []json.RawMessage{}
|
result := []json.RawMessage{}
|
||||||
|
|
|
@ -2,13 +2,13 @@ package jsonpatch
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
"unicode"
|
"unicode"
|
||||||
|
|
||||||
"github.com/evanphx/json-patch/v5/internal/json"
|
"github.com/evanphx/json-patch/v5/internal/json"
|
||||||
"github.com/pkg/errors"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
|
@ -461,7 +461,7 @@ func (o Operation) Path() (string, error) {
|
||||||
return op, nil
|
return op, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
return "unknown", errors.Wrapf(ErrMissing, "operation missing path field")
|
return "unknown", fmt.Errorf("operation missing path field: %w", ErrMissing)
|
||||||
}
|
}
|
||||||
|
|
||||||
// From reads the "from" field of the Operation.
|
// From reads the "from" field of the Operation.
|
||||||
|
@ -478,7 +478,7 @@ func (o Operation) From() (string, error) {
|
||||||
return op, nil
|
return op, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
return "unknown", errors.Wrapf(ErrMissing, "operation, missing from field")
|
return "unknown", fmt.Errorf("operation, missing from field: %w", ErrMissing)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (o Operation) value() *lazyNode {
|
func (o Operation) value() *lazyNode {
|
||||||
|
@ -511,7 +511,7 @@ func (o Operation) ValueInterface() (interface{}, error) {
|
||||||
return v, nil
|
return v, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil, errors.Wrapf(ErrMissing, "operation, missing value field")
|
return nil, fmt.Errorf("operation, missing value field: %w", ErrMissing)
|
||||||
}
|
}
|
||||||
|
|
||||||
func isArray(buf []byte) bool {
|
func isArray(buf []byte) bool {
|
||||||
|
@ -610,7 +610,7 @@ func (d *partialDoc) get(key string, options *ApplyOptions) (*lazyNode, error) {
|
||||||
|
|
||||||
v, ok := d.obj[key]
|
v, ok := d.obj[key]
|
||||||
if !ok {
|
if !ok {
|
||||||
return v, errors.Wrapf(ErrMissing, "unable to get nonexistent key: %s", key)
|
return v, fmt.Errorf("unable to get nonexistent key: %s: %w", key, ErrMissing)
|
||||||
}
|
}
|
||||||
return v, nil
|
return v, nil
|
||||||
}
|
}
|
||||||
|
@ -625,7 +625,7 @@ func (d *partialDoc) remove(key string, options *ApplyOptions) error {
|
||||||
if options.AllowMissingPathOnRemove {
|
if options.AllowMissingPathOnRemove {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
return errors.Wrapf(ErrMissing, "unable to remove nonexistent key: %s", key)
|
return fmt.Errorf("unable to remove nonexistent key: %s: %w", key, ErrMissing)
|
||||||
}
|
}
|
||||||
idx := -1
|
idx := -1
|
||||||
for i, k := range d.keys {
|
for i, k := range d.keys {
|
||||||
|
@ -649,10 +649,10 @@ func (d *partialArray) set(key string, val *lazyNode, options *ApplyOptions) err
|
||||||
|
|
||||||
if idx < 0 {
|
if idx < 0 {
|
||||||
if !options.SupportNegativeIndices {
|
if !options.SupportNegativeIndices {
|
||||||
return errors.Wrapf(ErrInvalidIndex, "Unable to access invalid index: %d", idx)
|
return fmt.Errorf("Unable to access invalid index: %d: %w", idx, ErrInvalidIndex)
|
||||||
}
|
}
|
||||||
if idx < -len(d.nodes) {
|
if idx < -len(d.nodes) {
|
||||||
return errors.Wrapf(ErrInvalidIndex, "Unable to access invalid index: %d", idx)
|
return fmt.Errorf("Unable to access invalid index: %d: %w", idx, ErrInvalidIndex)
|
||||||
}
|
}
|
||||||
idx += len(d.nodes)
|
idx += len(d.nodes)
|
||||||
}
|
}
|
||||||
|
@ -669,7 +669,7 @@ func (d *partialArray) add(key string, val *lazyNode, options *ApplyOptions) err
|
||||||
|
|
||||||
idx, err := strconv.Atoi(key)
|
idx, err := strconv.Atoi(key)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return errors.Wrapf(err, "value was not a proper array index: '%s'", key)
|
return fmt.Errorf("value was not a proper array index: '%s': %w", key, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
sz := len(d.nodes) + 1
|
sz := len(d.nodes) + 1
|
||||||
|
@ -679,15 +679,15 @@ func (d *partialArray) add(key string, val *lazyNode, options *ApplyOptions) err
|
||||||
cur := d
|
cur := d
|
||||||
|
|
||||||
if idx >= len(ary) {
|
if idx >= len(ary) {
|
||||||
return errors.Wrapf(ErrInvalidIndex, "Unable to access invalid index: %d", idx)
|
return fmt.Errorf("Unable to access invalid index: %d: %w", idx, ErrInvalidIndex)
|
||||||
}
|
}
|
||||||
|
|
||||||
if idx < 0 {
|
if idx < 0 {
|
||||||
if !options.SupportNegativeIndices {
|
if !options.SupportNegativeIndices {
|
||||||
return errors.Wrapf(ErrInvalidIndex, "Unable to access invalid index: %d", idx)
|
return fmt.Errorf("Unable to access invalid index: %d: %w", idx, ErrInvalidIndex)
|
||||||
}
|
}
|
||||||
if idx < -len(ary) {
|
if idx < -len(ary) {
|
||||||
return errors.Wrapf(ErrInvalidIndex, "Unable to access invalid index: %d", idx)
|
return fmt.Errorf("Unable to access invalid index: %d: %w", idx, ErrInvalidIndex)
|
||||||
}
|
}
|
||||||
idx += len(ary)
|
idx += len(ary)
|
||||||
}
|
}
|
||||||
|
@ -713,16 +713,16 @@ func (d *partialArray) get(key string, options *ApplyOptions) (*lazyNode, error)
|
||||||
|
|
||||||
if idx < 0 {
|
if idx < 0 {
|
||||||
if !options.SupportNegativeIndices {
|
if !options.SupportNegativeIndices {
|
||||||
return nil, errors.Wrapf(ErrInvalidIndex, "Unable to access invalid index: %d", idx)
|
return nil, fmt.Errorf("Unable to access invalid index: %d: %w", idx, ErrInvalidIndex)
|
||||||
}
|
}
|
||||||
if idx < -len(d.nodes) {
|
if idx < -len(d.nodes) {
|
||||||
return nil, errors.Wrapf(ErrInvalidIndex, "Unable to access invalid index: %d", idx)
|
return nil, fmt.Errorf("Unable to access invalid index: %d: %w", idx, ErrInvalidIndex)
|
||||||
}
|
}
|
||||||
idx += len(d.nodes)
|
idx += len(d.nodes)
|
||||||
}
|
}
|
||||||
|
|
||||||
if idx >= len(d.nodes) {
|
if idx >= len(d.nodes) {
|
||||||
return nil, errors.Wrapf(ErrInvalidIndex, "Unable to access invalid index: %d", idx)
|
return nil, fmt.Errorf("Unable to access invalid index: %d: %w", idx, ErrInvalidIndex)
|
||||||
}
|
}
|
||||||
|
|
||||||
return d.nodes[idx], nil
|
return d.nodes[idx], nil
|
||||||
|
@ -740,18 +740,18 @@ func (d *partialArray) remove(key string, options *ApplyOptions) error {
|
||||||
if options.AllowMissingPathOnRemove {
|
if options.AllowMissingPathOnRemove {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
return errors.Wrapf(ErrInvalidIndex, "Unable to access invalid index: %d", idx)
|
return fmt.Errorf("Unable to access invalid index: %d: %w", idx, ErrInvalidIndex)
|
||||||
}
|
}
|
||||||
|
|
||||||
if idx < 0 {
|
if idx < 0 {
|
||||||
if !options.SupportNegativeIndices {
|
if !options.SupportNegativeIndices {
|
||||||
return errors.Wrapf(ErrInvalidIndex, "Unable to access invalid index: %d", idx)
|
return fmt.Errorf("Unable to access invalid index: %d: %w", idx, ErrInvalidIndex)
|
||||||
}
|
}
|
||||||
if idx < -len(cur.nodes) {
|
if idx < -len(cur.nodes) {
|
||||||
if options.AllowMissingPathOnRemove {
|
if options.AllowMissingPathOnRemove {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
return errors.Wrapf(ErrInvalidIndex, "Unable to access invalid index: %d", idx)
|
return fmt.Errorf("Unable to access invalid index: %d: %w", idx, ErrInvalidIndex)
|
||||||
}
|
}
|
||||||
idx += len(cur.nodes)
|
idx += len(cur.nodes)
|
||||||
}
|
}
|
||||||
|
@ -768,7 +768,7 @@ func (d *partialArray) remove(key string, options *ApplyOptions) error {
|
||||||
func (p Patch) add(doc *container, op Operation, options *ApplyOptions) error {
|
func (p Patch) add(doc *container, op Operation, options *ApplyOptions) error {
|
||||||
path, err := op.Path()
|
path, err := op.Path()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return errors.Wrapf(ErrMissing, "add operation failed to decode path")
|
return fmt.Errorf("add operation failed to decode path: %w", ErrMissing)
|
||||||
}
|
}
|
||||||
|
|
||||||
// special case, adding to empty means replacing the container with the value given
|
// special case, adding to empty means replacing the container with the value given
|
||||||
|
@ -809,12 +809,12 @@ func (p Patch) add(doc *container, op Operation, options *ApplyOptions) error {
|
||||||
con, key := findObject(doc, path, options)
|
con, key := findObject(doc, path, options)
|
||||||
|
|
||||||
if con == nil {
|
if con == nil {
|
||||||
return errors.Wrapf(ErrMissing, "add operation does not apply: doc is missing path: \"%s\"", path)
|
return fmt.Errorf("add operation does not apply: doc is missing path: \"%s\": %w", path, ErrMissing)
|
||||||
}
|
}
|
||||||
|
|
||||||
err = con.add(key, op.value(), options)
|
err = con.add(key, op.value(), options)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return errors.Wrapf(err, "error in add for path: '%s'", path)
|
return fmt.Errorf("error in add for path: '%s': %w", path, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
|
@ -867,11 +867,11 @@ func ensurePathExists(pd *container, path string, options *ApplyOptions) error {
|
||||||
if arrIndex < 0 {
|
if arrIndex < 0 {
|
||||||
|
|
||||||
if !options.SupportNegativeIndices {
|
if !options.SupportNegativeIndices {
|
||||||
return errors.Wrapf(ErrInvalidIndex, "Unable to ensure path for invalid index: %d", arrIndex)
|
return fmt.Errorf("Unable to ensure path for invalid index: %d: %w", arrIndex, ErrInvalidIndex)
|
||||||
}
|
}
|
||||||
|
|
||||||
if arrIndex < -1 {
|
if arrIndex < -1 {
|
||||||
return errors.Wrapf(ErrInvalidIndex, "Unable to ensure path for negative index other than -1: %d", arrIndex)
|
return fmt.Errorf("Unable to ensure path for negative index other than -1: %d: %w", arrIndex, ErrInvalidIndex)
|
||||||
}
|
}
|
||||||
|
|
||||||
arrIndex = 0
|
arrIndex = 0
|
||||||
|
@ -918,11 +918,11 @@ func validateOperation(op Operation) error {
|
||||||
switch op.Kind() {
|
switch op.Kind() {
|
||||||
case "add", "replace":
|
case "add", "replace":
|
||||||
if _, err := op.ValueInterface(); err != nil {
|
if _, err := op.ValueInterface(); err != nil {
|
||||||
return errors.Wrapf(err, "failed to decode 'value'")
|
return fmt.Errorf("failed to decode 'value': %w", err)
|
||||||
}
|
}
|
||||||
case "move", "copy":
|
case "move", "copy":
|
||||||
if _, err := op.From(); err != nil {
|
if _, err := op.From(); err != nil {
|
||||||
return errors.Wrapf(err, "failed to decode 'from'")
|
return fmt.Errorf("failed to decode 'from': %w", err)
|
||||||
}
|
}
|
||||||
case "remove", "test":
|
case "remove", "test":
|
||||||
default:
|
default:
|
||||||
|
@ -930,7 +930,7 @@ func validateOperation(op Operation) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
if _, err := op.Path(); err != nil {
|
if _, err := op.Path(); err != nil {
|
||||||
return errors.Wrapf(err, "failed to decode 'path'")
|
return fmt.Errorf("failed to decode 'path': %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
|
@ -941,10 +941,10 @@ func validatePatch(p Patch) error {
|
||||||
if err := validateOperation(op); err != nil {
|
if err := validateOperation(op); err != nil {
|
||||||
opData, infoErr := json.Marshal(op)
|
opData, infoErr := json.Marshal(op)
|
||||||
if infoErr != nil {
|
if infoErr != nil {
|
||||||
return errors.Wrapf(err, "invalid operation")
|
return fmt.Errorf("invalid operation: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
return errors.Wrapf(err, "invalid operation %s", opData)
|
return fmt.Errorf("invalid operation %s: %w", opData, err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -954,7 +954,7 @@ func validatePatch(p Patch) error {
|
||||||
func (p Patch) remove(doc *container, op Operation, options *ApplyOptions) error {
|
func (p Patch) remove(doc *container, op Operation, options *ApplyOptions) error {
|
||||||
path, err := op.Path()
|
path, err := op.Path()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return errors.Wrapf(ErrMissing, "remove operation failed to decode path")
|
return fmt.Errorf("remove operation failed to decode path: %w", ErrMissing)
|
||||||
}
|
}
|
||||||
|
|
||||||
con, key := findObject(doc, path, options)
|
con, key := findObject(doc, path, options)
|
||||||
|
@ -963,12 +963,12 @@ func (p Patch) remove(doc *container, op Operation, options *ApplyOptions) error
|
||||||
if options.AllowMissingPathOnRemove {
|
if options.AllowMissingPathOnRemove {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
return errors.Wrapf(ErrMissing, "remove operation does not apply: doc is missing path: \"%s\"", path)
|
return fmt.Errorf("remove operation does not apply: doc is missing path: \"%s\": %w", path, ErrMissing)
|
||||||
}
|
}
|
||||||
|
|
||||||
err = con.remove(key, options)
|
err = con.remove(key, options)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return errors.Wrapf(err, "error in remove for path: '%s'", path)
|
return fmt.Errorf("error in remove for path: '%s': %w", path, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
|
@ -977,7 +977,7 @@ func (p Patch) remove(doc *container, op Operation, options *ApplyOptions) error
|
||||||
func (p Patch) replace(doc *container, op Operation, options *ApplyOptions) error {
|
func (p Patch) replace(doc *container, op Operation, options *ApplyOptions) error {
|
||||||
path, err := op.Path()
|
path, err := op.Path()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return errors.Wrapf(err, "replace operation failed to decode path")
|
return fmt.Errorf("replace operation failed to decode path: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
if path == "" {
|
if path == "" {
|
||||||
|
@ -986,7 +986,7 @@ func (p Patch) replace(doc *container, op Operation, options *ApplyOptions) erro
|
||||||
if val.which == eRaw {
|
if val.which == eRaw {
|
||||||
if !val.tryDoc() {
|
if !val.tryDoc() {
|
||||||
if !val.tryAry() {
|
if !val.tryAry() {
|
||||||
return errors.Wrapf(err, "replace operation value must be object or array")
|
return fmt.Errorf("replace operation value must be object or array: %w", err)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
val.doc.opts = options
|
val.doc.opts = options
|
||||||
|
@ -999,7 +999,7 @@ func (p Patch) replace(doc *container, op Operation, options *ApplyOptions) erro
|
||||||
case eDoc:
|
case eDoc:
|
||||||
*doc = val.doc
|
*doc = val.doc
|
||||||
case eRaw:
|
case eRaw:
|
||||||
return errors.Wrapf(err, "replace operation hit impossible case")
|
return fmt.Errorf("replace operation hit impossible case: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
|
@ -1008,17 +1008,17 @@ func (p Patch) replace(doc *container, op Operation, options *ApplyOptions) erro
|
||||||
con, key := findObject(doc, path, options)
|
con, key := findObject(doc, path, options)
|
||||||
|
|
||||||
if con == nil {
|
if con == nil {
|
||||||
return errors.Wrapf(ErrMissing, "replace operation does not apply: doc is missing path: %s", path)
|
return fmt.Errorf("replace operation does not apply: doc is missing path: %s: %w", path, ErrMissing)
|
||||||
}
|
}
|
||||||
|
|
||||||
_, ok := con.get(key, options)
|
_, ok := con.get(key, options)
|
||||||
if ok != nil {
|
if ok != nil {
|
||||||
return errors.Wrapf(ErrMissing, "replace operation does not apply: doc is missing key: %s", path)
|
return fmt.Errorf("replace operation does not apply: doc is missing key: %s: %w", path, ErrMissing)
|
||||||
}
|
}
|
||||||
|
|
||||||
err = con.set(key, op.value(), options)
|
err = con.set(key, op.value(), options)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return errors.Wrapf(err, "error in remove for path: '%s'", path)
|
return fmt.Errorf("error in remove for path: '%s': %w", path, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
|
@ -1027,43 +1027,43 @@ func (p Patch) replace(doc *container, op Operation, options *ApplyOptions) erro
|
||||||
func (p Patch) move(doc *container, op Operation, options *ApplyOptions) error {
|
func (p Patch) move(doc *container, op Operation, options *ApplyOptions) error {
|
||||||
from, err := op.From()
|
from, err := op.From()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return errors.Wrapf(err, "move operation failed to decode from")
|
return fmt.Errorf("move operation failed to decode from: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
if from == "" {
|
if from == "" {
|
||||||
return errors.Wrapf(ErrInvalid, "unable to move entire document to another path")
|
return fmt.Errorf("unable to move entire document to another path: %w", ErrInvalid)
|
||||||
}
|
}
|
||||||
|
|
||||||
con, key := findObject(doc, from, options)
|
con, key := findObject(doc, from, options)
|
||||||
|
|
||||||
if con == nil {
|
if con == nil {
|
||||||
return errors.Wrapf(ErrMissing, "move operation does not apply: doc is missing from path: %s", from)
|
return fmt.Errorf("move operation does not apply: doc is missing from path: %s: %w", from, ErrMissing)
|
||||||
}
|
}
|
||||||
|
|
||||||
val, err := con.get(key, options)
|
val, err := con.get(key, options)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return errors.Wrapf(err, "error in move for path: '%s'", key)
|
return fmt.Errorf("error in move for path: '%s': %w", key, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
err = con.remove(key, options)
|
err = con.remove(key, options)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return errors.Wrapf(err, "error in move for path: '%s'", key)
|
return fmt.Errorf("error in move for path: '%s': %w", key, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
path, err := op.Path()
|
path, err := op.Path()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return errors.Wrapf(err, "move operation failed to decode path")
|
return fmt.Errorf("move operation failed to decode path: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
con, key = findObject(doc, path, options)
|
con, key = findObject(doc, path, options)
|
||||||
|
|
||||||
if con == nil {
|
if con == nil {
|
||||||
return errors.Wrapf(ErrMissing, "move operation does not apply: doc is missing destination path: %s", path)
|
return fmt.Errorf("move operation does not apply: doc is missing destination path: %s: %w", path, ErrMissing)
|
||||||
}
|
}
|
||||||
|
|
||||||
err = con.add(key, val, options)
|
err = con.add(key, val, options)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return errors.Wrapf(err, "error in move for path: '%s'", path)
|
return fmt.Errorf("error in move for path: '%s': %w", path, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
|
@ -1072,7 +1072,7 @@ func (p Patch) move(doc *container, op Operation, options *ApplyOptions) error {
|
||||||
func (p Patch) test(doc *container, op Operation, options *ApplyOptions) error {
|
func (p Patch) test(doc *container, op Operation, options *ApplyOptions) error {
|
||||||
path, err := op.Path()
|
path, err := op.Path()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return errors.Wrapf(err, "test operation failed to decode path")
|
return fmt.Errorf("test operation failed to decode path: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
if path == "" {
|
if path == "" {
|
||||||
|
@ -1091,18 +1091,18 @@ func (p Patch) test(doc *container, op Operation, options *ApplyOptions) error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
return errors.Wrapf(ErrTestFailed, "testing value %s failed", path)
|
return fmt.Errorf("testing value %s failed: %w", path, ErrTestFailed)
|
||||||
}
|
}
|
||||||
|
|
||||||
con, key := findObject(doc, path, options)
|
con, key := findObject(doc, path, options)
|
||||||
|
|
||||||
if con == nil {
|
if con == nil {
|
||||||
return errors.Wrapf(ErrMissing, "test operation does not apply: is missing path: %s", path)
|
return fmt.Errorf("test operation does not apply: is missing path: %s: %w", path, ErrMissing)
|
||||||
}
|
}
|
||||||
|
|
||||||
val, err := con.get(key, options)
|
val, err := con.get(key, options)
|
||||||
if err != nil && errors.Cause(err) != ErrMissing {
|
if err != nil && errors.Unwrap(err) != ErrMissing {
|
||||||
return errors.Wrapf(err, "error in test for path: '%s'", path)
|
return fmt.Errorf("error in test for path: '%s': %w", path, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
ov := op.value()
|
ov := op.value()
|
||||||
|
@ -1111,49 +1111,49 @@ func (p Patch) test(doc *container, op Operation, options *ApplyOptions) error {
|
||||||
if ov.isNull() {
|
if ov.isNull() {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
return errors.Wrapf(ErrTestFailed, "testing value %s failed", path)
|
return fmt.Errorf("testing value %s failed: %w", path, ErrTestFailed)
|
||||||
} else if ov.isNull() {
|
} else if ov.isNull() {
|
||||||
return errors.Wrapf(ErrTestFailed, "testing value %s failed", path)
|
return fmt.Errorf("testing value %s failed: %w", path, ErrTestFailed)
|
||||||
}
|
}
|
||||||
|
|
||||||
if val.equal(op.value()) {
|
if val.equal(op.value()) {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
return errors.Wrapf(ErrTestFailed, "testing value %s failed", path)
|
return fmt.Errorf("testing value %s failed: %w", path, ErrTestFailed)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p Patch) copy(doc *container, op Operation, accumulatedCopySize *int64, options *ApplyOptions) error {
|
func (p Patch) copy(doc *container, op Operation, accumulatedCopySize *int64, options *ApplyOptions) error {
|
||||||
from, err := op.From()
|
from, err := op.From()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return errors.Wrapf(err, "copy operation failed to decode from")
|
return fmt.Errorf("copy operation failed to decode from: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
con, key := findObject(doc, from, options)
|
con, key := findObject(doc, from, options)
|
||||||
|
|
||||||
if con == nil {
|
if con == nil {
|
||||||
return errors.Wrapf(ErrMissing, "copy operation does not apply: doc is missing from path: \"%s\"", from)
|
return fmt.Errorf("copy operation does not apply: doc is missing from path: \"%s\": %w", from, ErrMissing)
|
||||||
}
|
}
|
||||||
|
|
||||||
val, err := con.get(key, options)
|
val, err := con.get(key, options)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return errors.Wrapf(err, "error in copy for from: '%s'", from)
|
return fmt.Errorf("error in copy for from: '%s': %w", from, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
path, err := op.Path()
|
path, err := op.Path()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return errors.Wrapf(ErrMissing, "copy operation failed to decode path")
|
return fmt.Errorf("copy operation failed to decode path: %w", ErrMissing)
|
||||||
}
|
}
|
||||||
|
|
||||||
con, key = findObject(doc, path, options)
|
con, key = findObject(doc, path, options)
|
||||||
|
|
||||||
if con == nil {
|
if con == nil {
|
||||||
return errors.Wrapf(ErrMissing, "copy operation does not apply: doc is missing destination path: %s", path)
|
return fmt.Errorf("copy operation does not apply: doc is missing destination path: %s: %w", path, ErrMissing)
|
||||||
}
|
}
|
||||||
|
|
||||||
valCopy, sz, err := deepCopy(val, options)
|
valCopy, sz, err := deepCopy(val, options)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return errors.Wrapf(err, "error while performing deep copy")
|
return fmt.Errorf("error while performing deep copy: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
(*accumulatedCopySize) += int64(sz)
|
(*accumulatedCopySize) += int64(sz)
|
||||||
|
@ -1163,7 +1163,7 @@ func (p Patch) copy(doc *container, op Operation, accumulatedCopySize *int64, op
|
||||||
|
|
||||||
err = con.add(key, valCopy, options)
|
err = con.add(key, valCopy, options)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return errors.Wrapf(err, "error while adding value during copy")
|
return fmt.Errorf("error while adding value during copy: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
|
|
|
@ -0,0 +1,12 @@
|
||||||
|
root = true
|
||||||
|
|
||||||
|
[*]
|
||||||
|
charset = utf-8
|
||||||
|
end_of_line = lf
|
||||||
|
indent_size = 4
|
||||||
|
indent_style = space
|
||||||
|
insert_final_newline = true
|
||||||
|
trim_trailing_whitespace = true
|
||||||
|
|
||||||
|
[*.go]
|
||||||
|
indent_style = tab
|
|
@ -0,0 +1,4 @@
|
||||||
|
linters:
|
||||||
|
disable-all: true
|
||||||
|
enable:
|
||||||
|
- nolintlint
|
|
@ -160,7 +160,7 @@ type FlagSet struct {
|
||||||
args []string // arguments after flags
|
args []string // arguments after flags
|
||||||
argsLenAtDash int // len(args) when a '--' was located when parsing, or -1 if no --
|
argsLenAtDash int // len(args) when a '--' was located when parsing, or -1 if no --
|
||||||
errorHandling ErrorHandling
|
errorHandling ErrorHandling
|
||||||
output io.Writer // nil means stderr; use out() accessor
|
output io.Writer // nil means stderr; use Output() accessor
|
||||||
interspersed bool // allow interspersed option/non-option args
|
interspersed bool // allow interspersed option/non-option args
|
||||||
normalizeNameFunc func(f *FlagSet, name string) NormalizedName
|
normalizeNameFunc func(f *FlagSet, name string) NormalizedName
|
||||||
|
|
||||||
|
@ -255,13 +255,20 @@ func (f *FlagSet) normalizeFlagName(name string) NormalizedName {
|
||||||
return n(f, name)
|
return n(f, name)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (f *FlagSet) out() io.Writer {
|
// Output returns the destination for usage and error messages. os.Stderr is returned if
|
||||||
|
// output was not set or was set to nil.
|
||||||
|
func (f *FlagSet) Output() io.Writer {
|
||||||
if f.output == nil {
|
if f.output == nil {
|
||||||
return os.Stderr
|
return os.Stderr
|
||||||
}
|
}
|
||||||
return f.output
|
return f.output
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Name returns the name of the flag set.
|
||||||
|
func (f *FlagSet) Name() string {
|
||||||
|
return f.name
|
||||||
|
}
|
||||||
|
|
||||||
// SetOutput sets the destination for usage and error messages.
|
// SetOutput sets the destination for usage and error messages.
|
||||||
// If output is nil, os.Stderr is used.
|
// If output is nil, os.Stderr is used.
|
||||||
func (f *FlagSet) SetOutput(output io.Writer) {
|
func (f *FlagSet) SetOutput(output io.Writer) {
|
||||||
|
@ -358,7 +365,7 @@ func (f *FlagSet) ShorthandLookup(name string) *Flag {
|
||||||
}
|
}
|
||||||
if len(name) > 1 {
|
if len(name) > 1 {
|
||||||
msg := fmt.Sprintf("can not look up shorthand which is more than one ASCII character: %q", name)
|
msg := fmt.Sprintf("can not look up shorthand which is more than one ASCII character: %q", name)
|
||||||
fmt.Fprintf(f.out(), msg)
|
fmt.Fprintf(f.Output(), msg)
|
||||||
panic(msg)
|
panic(msg)
|
||||||
}
|
}
|
||||||
c := name[0]
|
c := name[0]
|
||||||
|
@ -482,7 +489,7 @@ func (f *FlagSet) Set(name, value string) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
if flag.Deprecated != "" {
|
if flag.Deprecated != "" {
|
||||||
fmt.Fprintf(f.out(), "Flag --%s has been deprecated, %s\n", flag.Name, flag.Deprecated)
|
fmt.Fprintf(f.Output(), "Flag --%s has been deprecated, %s\n", flag.Name, flag.Deprecated)
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
@ -523,7 +530,7 @@ func Set(name, value string) error {
|
||||||
// otherwise, the default values of all defined flags in the set.
|
// otherwise, the default values of all defined flags in the set.
|
||||||
func (f *FlagSet) PrintDefaults() {
|
func (f *FlagSet) PrintDefaults() {
|
||||||
usages := f.FlagUsages()
|
usages := f.FlagUsages()
|
||||||
fmt.Fprint(f.out(), usages)
|
fmt.Fprint(f.Output(), usages)
|
||||||
}
|
}
|
||||||
|
|
||||||
// defaultIsZeroValue returns true if the default value for this flag represents
|
// defaultIsZeroValue returns true if the default value for this flag represents
|
||||||
|
@ -758,7 +765,7 @@ func PrintDefaults() {
|
||||||
|
|
||||||
// defaultUsage is the default function to print a usage message.
|
// defaultUsage is the default function to print a usage message.
|
||||||
func defaultUsage(f *FlagSet) {
|
func defaultUsage(f *FlagSet) {
|
||||||
fmt.Fprintf(f.out(), "Usage of %s:\n", f.name)
|
fmt.Fprintf(f.Output(), "Usage of %s:\n", f.name)
|
||||||
f.PrintDefaults()
|
f.PrintDefaults()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -844,7 +851,7 @@ func (f *FlagSet) AddFlag(flag *Flag) {
|
||||||
_, alreadyThere := f.formal[normalizedFlagName]
|
_, alreadyThere := f.formal[normalizedFlagName]
|
||||||
if alreadyThere {
|
if alreadyThere {
|
||||||
msg := fmt.Sprintf("%s flag redefined: %s", f.name, flag.Name)
|
msg := fmt.Sprintf("%s flag redefined: %s", f.name, flag.Name)
|
||||||
fmt.Fprintln(f.out(), msg)
|
fmt.Fprintln(f.Output(), msg)
|
||||||
panic(msg) // Happens only if flags are declared with identical names
|
panic(msg) // Happens only if flags are declared with identical names
|
||||||
}
|
}
|
||||||
if f.formal == nil {
|
if f.formal == nil {
|
||||||
|
@ -860,7 +867,7 @@ func (f *FlagSet) AddFlag(flag *Flag) {
|
||||||
}
|
}
|
||||||
if len(flag.Shorthand) > 1 {
|
if len(flag.Shorthand) > 1 {
|
||||||
msg := fmt.Sprintf("%q shorthand is more than one ASCII character", flag.Shorthand)
|
msg := fmt.Sprintf("%q shorthand is more than one ASCII character", flag.Shorthand)
|
||||||
fmt.Fprintf(f.out(), msg)
|
fmt.Fprintf(f.Output(), msg)
|
||||||
panic(msg)
|
panic(msg)
|
||||||
}
|
}
|
||||||
if f.shorthands == nil {
|
if f.shorthands == nil {
|
||||||
|
@ -870,7 +877,7 @@ func (f *FlagSet) AddFlag(flag *Flag) {
|
||||||
used, alreadyThere := f.shorthands[c]
|
used, alreadyThere := f.shorthands[c]
|
||||||
if alreadyThere {
|
if alreadyThere {
|
||||||
msg := fmt.Sprintf("unable to redefine %q shorthand in %q flagset: it's already used for %q flag", c, f.name, used.Name)
|
msg := fmt.Sprintf("unable to redefine %q shorthand in %q flagset: it's already used for %q flag", c, f.name, used.Name)
|
||||||
fmt.Fprintf(f.out(), msg)
|
fmt.Fprintf(f.Output(), msg)
|
||||||
panic(msg)
|
panic(msg)
|
||||||
}
|
}
|
||||||
f.shorthands[c] = flag
|
f.shorthands[c] = flag
|
||||||
|
@ -909,7 +916,7 @@ func VarP(value Value, name, shorthand, usage string) {
|
||||||
func (f *FlagSet) failf(format string, a ...interface{}) error {
|
func (f *FlagSet) failf(format string, a ...interface{}) error {
|
||||||
err := fmt.Errorf(format, a...)
|
err := fmt.Errorf(format, a...)
|
||||||
if f.errorHandling != ContinueOnError {
|
if f.errorHandling != ContinueOnError {
|
||||||
fmt.Fprintln(f.out(), err)
|
fmt.Fprintln(f.Output(), err)
|
||||||
f.usage()
|
f.usage()
|
||||||
}
|
}
|
||||||
return err
|
return err
|
||||||
|
@ -1060,7 +1067,7 @@ func (f *FlagSet) parseSingleShortArg(shorthands string, args []string, fn parse
|
||||||
}
|
}
|
||||||
|
|
||||||
if flag.ShorthandDeprecated != "" {
|
if flag.ShorthandDeprecated != "" {
|
||||||
fmt.Fprintf(f.out(), "Flag shorthand -%s has been deprecated, %s\n", flag.Shorthand, flag.ShorthandDeprecated)
|
fmt.Fprintf(f.Output(), "Flag shorthand -%s has been deprecated, %s\n", flag.Shorthand, flag.ShorthandDeprecated)
|
||||||
}
|
}
|
||||||
|
|
||||||
err = fn(flag, value)
|
err = fn(flag, value)
|
||||||
|
|
|
@ -16,6 +16,9 @@ func newIPValue(val net.IP, p *net.IP) *ipValue {
|
||||||
|
|
||||||
func (i *ipValue) String() string { return net.IP(*i).String() }
|
func (i *ipValue) String() string { return net.IP(*i).String() }
|
||||||
func (i *ipValue) Set(s string) error {
|
func (i *ipValue) Set(s string) error {
|
||||||
|
if s == "" {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
ip := net.ParseIP(strings.TrimSpace(s))
|
ip := net.ParseIP(strings.TrimSpace(s))
|
||||||
if ip == nil {
|
if ip == nil {
|
||||||
return fmt.Errorf("failed to parse IP: %q", s)
|
return fmt.Errorf("failed to parse IP: %q", s)
|
||||||
|
|
|
@ -0,0 +1,147 @@
|
||||||
|
package pflag
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"io"
|
||||||
|
"net"
|
||||||
|
"strings"
|
||||||
|
)
|
||||||
|
|
||||||
|
// -- ipNetSlice Value
|
||||||
|
type ipNetSliceValue struct {
|
||||||
|
value *[]net.IPNet
|
||||||
|
changed bool
|
||||||
|
}
|
||||||
|
|
||||||
|
func newIPNetSliceValue(val []net.IPNet, p *[]net.IPNet) *ipNetSliceValue {
|
||||||
|
ipnsv := new(ipNetSliceValue)
|
||||||
|
ipnsv.value = p
|
||||||
|
*ipnsv.value = val
|
||||||
|
return ipnsv
|
||||||
|
}
|
||||||
|
|
||||||
|
// Set converts, and assigns, the comma-separated IPNet argument string representation as the []net.IPNet value of this flag.
|
||||||
|
// If Set is called on a flag that already has a []net.IPNet assigned, the newly converted values will be appended.
|
||||||
|
func (s *ipNetSliceValue) Set(val string) error {
|
||||||
|
|
||||||
|
// remove all quote characters
|
||||||
|
rmQuote := strings.NewReplacer(`"`, "", `'`, "", "`", "")
|
||||||
|
|
||||||
|
// read flag arguments with CSV parser
|
||||||
|
ipNetStrSlice, err := readAsCSV(rmQuote.Replace(val))
|
||||||
|
if err != nil && err != io.EOF {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
// parse ip values into slice
|
||||||
|
out := make([]net.IPNet, 0, len(ipNetStrSlice))
|
||||||
|
for _, ipNetStr := range ipNetStrSlice {
|
||||||
|
_, n, err := net.ParseCIDR(strings.TrimSpace(ipNetStr))
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("invalid string being converted to CIDR: %s", ipNetStr)
|
||||||
|
}
|
||||||
|
out = append(out, *n)
|
||||||
|
}
|
||||||
|
|
||||||
|
if !s.changed {
|
||||||
|
*s.value = out
|
||||||
|
} else {
|
||||||
|
*s.value = append(*s.value, out...)
|
||||||
|
}
|
||||||
|
|
||||||
|
s.changed = true
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// Type returns a string that uniquely represents this flag's type.
|
||||||
|
func (s *ipNetSliceValue) Type() string {
|
||||||
|
return "ipNetSlice"
|
||||||
|
}
|
||||||
|
|
||||||
|
// String defines a "native" format for this net.IPNet slice flag value.
|
||||||
|
func (s *ipNetSliceValue) String() string {
|
||||||
|
|
||||||
|
ipNetStrSlice := make([]string, len(*s.value))
|
||||||
|
for i, n := range *s.value {
|
||||||
|
ipNetStrSlice[i] = n.String()
|
||||||
|
}
|
||||||
|
|
||||||
|
out, _ := writeAsCSV(ipNetStrSlice)
|
||||||
|
return "[" + out + "]"
|
||||||
|
}
|
||||||
|
|
||||||
|
func ipNetSliceConv(val string) (interface{}, error) {
|
||||||
|
val = strings.Trim(val, "[]")
|
||||||
|
// Emtpy string would cause a slice with one (empty) entry
|
||||||
|
if len(val) == 0 {
|
||||||
|
return []net.IPNet{}, nil
|
||||||
|
}
|
||||||
|
ss := strings.Split(val, ",")
|
||||||
|
out := make([]net.IPNet, len(ss))
|
||||||
|
for i, sval := range ss {
|
||||||
|
_, n, err := net.ParseCIDR(strings.TrimSpace(sval))
|
||||||
|
if err != nil {
|
||||||
|
return nil, fmt.Errorf("invalid string being converted to CIDR: %s", sval)
|
||||||
|
}
|
||||||
|
out[i] = *n
|
||||||
|
}
|
||||||
|
return out, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetIPNetSlice returns the []net.IPNet value of a flag with the given name
|
||||||
|
func (f *FlagSet) GetIPNetSlice(name string) ([]net.IPNet, error) {
|
||||||
|
val, err := f.getFlagType(name, "ipNetSlice", ipNetSliceConv)
|
||||||
|
if err != nil {
|
||||||
|
return []net.IPNet{}, err
|
||||||
|
}
|
||||||
|
return val.([]net.IPNet), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// IPNetSliceVar defines a ipNetSlice flag with specified name, default value, and usage string.
|
||||||
|
// The argument p points to a []net.IPNet variable in which to store the value of the flag.
|
||||||
|
func (f *FlagSet) IPNetSliceVar(p *[]net.IPNet, name string, value []net.IPNet, usage string) {
|
||||||
|
f.VarP(newIPNetSliceValue(value, p), name, "", usage)
|
||||||
|
}
|
||||||
|
|
||||||
|
// IPNetSliceVarP is like IPNetSliceVar, but accepts a shorthand letter that can be used after a single dash.
|
||||||
|
func (f *FlagSet) IPNetSliceVarP(p *[]net.IPNet, name, shorthand string, value []net.IPNet, usage string) {
|
||||||
|
f.VarP(newIPNetSliceValue(value, p), name, shorthand, usage)
|
||||||
|
}
|
||||||
|
|
||||||
|
// IPNetSliceVar defines a []net.IPNet flag with specified name, default value, and usage string.
|
||||||
|
// The argument p points to a []net.IPNet variable in which to store the value of the flag.
|
||||||
|
func IPNetSliceVar(p *[]net.IPNet, name string, value []net.IPNet, usage string) {
|
||||||
|
CommandLine.VarP(newIPNetSliceValue(value, p), name, "", usage)
|
||||||
|
}
|
||||||
|
|
||||||
|
// IPNetSliceVarP is like IPNetSliceVar, but accepts a shorthand letter that can be used after a single dash.
|
||||||
|
func IPNetSliceVarP(p *[]net.IPNet, name, shorthand string, value []net.IPNet, usage string) {
|
||||||
|
CommandLine.VarP(newIPNetSliceValue(value, p), name, shorthand, usage)
|
||||||
|
}
|
||||||
|
|
||||||
|
// IPNetSlice defines a []net.IPNet flag with specified name, default value, and usage string.
|
||||||
|
// The return value is the address of a []net.IPNet variable that stores the value of that flag.
|
||||||
|
func (f *FlagSet) IPNetSlice(name string, value []net.IPNet, usage string) *[]net.IPNet {
|
||||||
|
p := []net.IPNet{}
|
||||||
|
f.IPNetSliceVarP(&p, name, "", value, usage)
|
||||||
|
return &p
|
||||||
|
}
|
||||||
|
|
||||||
|
// IPNetSliceP is like IPNetSlice, but accepts a shorthand letter that can be used after a single dash.
|
||||||
|
func (f *FlagSet) IPNetSliceP(name, shorthand string, value []net.IPNet, usage string) *[]net.IPNet {
|
||||||
|
p := []net.IPNet{}
|
||||||
|
f.IPNetSliceVarP(&p, name, shorthand, value, usage)
|
||||||
|
return &p
|
||||||
|
}
|
||||||
|
|
||||||
|
// IPNetSlice defines a []net.IPNet flag with specified name, default value, and usage string.
|
||||||
|
// The return value is the address of a []net.IP variable that stores the value of the flag.
|
||||||
|
func IPNetSlice(name string, value []net.IPNet, usage string) *[]net.IPNet {
|
||||||
|
return CommandLine.IPNetSliceP(name, "", value, usage)
|
||||||
|
}
|
||||||
|
|
||||||
|
// IPNetSliceP is like IPNetSlice, but accepts a shorthand letter that can be used after a single dash.
|
||||||
|
func IPNetSliceP(name, shorthand string, value []net.IPNet, usage string) *[]net.IPNet {
|
||||||
|
return CommandLine.IPNetSliceP(name, shorthand, value, usage)
|
||||||
|
}
|
|
@ -31,11 +31,7 @@ func (s *stringArrayValue) Append(val string) error {
|
||||||
func (s *stringArrayValue) Replace(val []string) error {
|
func (s *stringArrayValue) Replace(val []string) error {
|
||||||
out := make([]string, len(val))
|
out := make([]string, len(val))
|
||||||
for i, d := range val {
|
for i, d := range val {
|
||||||
var err error
|
|
||||||
out[i] = d
|
out[i] = d
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
*s.value = out
|
*s.value = out
|
||||||
return nil
|
return nil
|
||||||
|
|
|
@ -28,7 +28,7 @@ github.com/davecgh/go-spew/spew
|
||||||
## explicit; go 1.13
|
## explicit; go 1.13
|
||||||
github.com/emicklei/go-restful/v3
|
github.com/emicklei/go-restful/v3
|
||||||
github.com/emicklei/go-restful/v3/log
|
github.com/emicklei/go-restful/v3/log
|
||||||
# github.com/evanphx/json-patch/v5 v5.9.0
|
# github.com/evanphx/json-patch/v5 v5.9.11
|
||||||
## explicit; go 1.18
|
## explicit; go 1.18
|
||||||
github.com/evanphx/json-patch/v5
|
github.com/evanphx/json-patch/v5
|
||||||
github.com/evanphx/json-patch/v5/internal/json
|
github.com/evanphx/json-patch/v5/internal/json
|
||||||
|
@ -150,7 +150,7 @@ github.com/prometheus/procfs/internal/util
|
||||||
github.com/prometheus/statsd_exporter/pkg/level
|
github.com/prometheus/statsd_exporter/pkg/level
|
||||||
github.com/prometheus/statsd_exporter/pkg/mapper
|
github.com/prometheus/statsd_exporter/pkg/mapper
|
||||||
github.com/prometheus/statsd_exporter/pkg/mapper/fsm
|
github.com/prometheus/statsd_exporter/pkg/mapper/fsm
|
||||||
# github.com/spf13/pflag v1.0.5
|
# github.com/spf13/pflag v1.0.6
|
||||||
## explicit; go 1.12
|
## explicit; go 1.12
|
||||||
github.com/spf13/pflag
|
github.com/spf13/pflag
|
||||||
# github.com/x448/float16 v0.8.4
|
# github.com/x448/float16 v0.8.4
|
||||||
|
@ -850,7 +850,7 @@ k8s.io/utils/trace
|
||||||
# knative.dev/hack v0.0.0-20250128013659-5f7f0f50e9de
|
# knative.dev/hack v0.0.0-20250128013659-5f7f0f50e9de
|
||||||
## explicit; go 1.21
|
## explicit; go 1.21
|
||||||
knative.dev/hack
|
knative.dev/hack
|
||||||
# knative.dev/pkg v0.0.0-20250128013458-efddeac3ec35
|
# knative.dev/pkg v0.0.0-20250203163623-f62a97fc6ad4
|
||||||
## explicit; go 1.22.7
|
## explicit; go 1.22.7
|
||||||
knative.dev/pkg/apis
|
knative.dev/pkg/apis
|
||||||
knative.dev/pkg/apis/duck
|
knative.dev/pkg/apis/duck
|
||||||
|
|
Loading…
Reference in New Issue