Skip to content

Commit 1d9c425

Browse files
committed
fix: allow matching of integers using older patch path syntax
1 parent 69fa067 commit 1d9c425

File tree

3 files changed

+47
-1
lines changed

3 files changed

+47
-1
lines changed

pkg/devspace/config/loader/patch/operation_test.go

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -320,6 +320,46 @@ func TestRemoveOperation(t *testing.T) {
320320
- name: devbackend
321321
`,
322322
},
323+
"remove nested item matched by numeric property from array by string or numeric filter": {
324+
input: `
325+
dev:
326+
ports:
327+
- name: rails
328+
reverseForward:
329+
- port: 9200
330+
remotePort: 9200
331+
`,
332+
operation: &Operation{
333+
Op: opRemove,
334+
Path: "dev.ports[?(@.name=='rails')].reverseForward[?(@.port==9200 || @.port=='9200')]",
335+
},
336+
expected: `
337+
dev:
338+
ports:
339+
- name: rails
340+
reverseForward: []
341+
`,
342+
},
343+
"remove nested item matched by string property from array by string or numeric filter": {
344+
input: `
345+
dev:
346+
ports:
347+
- name: rails
348+
reverseForward:
349+
- port: '9200'
350+
remotePort: '9200'
351+
`,
352+
operation: &Operation{
353+
Op: opRemove,
354+
Path: "dev.ports[?(@.name=='rails')].reverseForward[?(@.port==9200 || @.port=='9200')]",
355+
},
356+
expected: `
357+
dev:
358+
ports:
359+
- name: rails
360+
reverseForward: []
361+
`,
362+
},
323363
"remove no match": {
324364
input: `
325365
deployments:

pkg/devspace/config/loader/profile.go

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -221,6 +221,7 @@ var hasFilterRegEx = regexp.MustCompile(`(?i)\[\?.*\)\]`)
221221
var indexXPathRegEx = regexp.MustCompile(`\/(\d+|\*)\/`)
222222
var trailingIndexXPathRegEx = regexp.MustCompile(`\/(\d+|\*)$`)
223223
var rootXPathRegEx = regexp.MustCompile(`^\/`)
224+
var numeric = regexp.MustCompile(`^\d+$`)
224225

225226
func transformPath(path string) string {
226227
if path == "" {
@@ -237,7 +238,11 @@ func transformPath(path string) string {
237238
rewriteToken := token
238239
if legacyExtendedSyntaxRegEx.MatchString(token) {
239240
filterTokens := legacyExtendedSyntaxRegEx.FindStringSubmatch(token)
240-
rewriteToken = fmt.Sprintf("[?(@.%s=='%s')]", filterTokens[1], filterTokens[2])
241+
if numeric.MatchString((filterTokens[2])) {
242+
rewriteToken = fmt.Sprintf("[?(@.%s=='%s' || @.%s==%s)]", filterTokens[1], filterTokens[2], filterTokens[1], filterTokens[2])
243+
} else {
244+
rewriteToken = fmt.Sprintf("[?(@.%s=='%s')]", filterTokens[1], filterTokens[2])
245+
}
241246
}
242247
rewriteTokens = append(rewriteTokens, rewriteToken)
243248
}

pkg/devspace/config/loader/profile_test.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ func TestTransformPath(t *testing.T) {
2626
`deployments[?(@.name=='staging1')]`: `deployments[?(@.name=='staging1')]`,
2727
`deployments[?(@.helm.timeout > 1000)]`: `deployments[?(@.helm.timeout > 1000)]`,
2828
`deployments.name=backend.helm.values.containers.image=john/devbackend.image`: `deployments[?(@.name=='backend')].helm.values.containers[?(@.image=='john/devbackend')].image`,
29+
`dev.ports.name=rails.reverseForward.port=9200`: `dev.ports[?(@.name=='rails')].reverseForward[?(@.port=='9200' || @.port==9200)]`,
2930
}
3031

3132
// Run test cases

0 commit comments

Comments
 (0)