Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package kustomize for openSUSE:Factory 
checked in at 2025-07-24 18:54:03
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/kustomize (Old)
 and      /work/SRC/openSUSE:Factory/.kustomize.new.13279 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "kustomize"

Thu Jul 24 18:54:03 2025 rev:19 rq:1295518 version:5.7.1

Changes:
--------
--- /work/SRC/openSUSE:Factory/kustomize/kustomize.changes      2025-07-02 
12:12:52.447146494 +0200
+++ /work/SRC/openSUSE:Factory/.kustomize.new.13279/kustomize.changes   
2025-07-24 18:54:11.447279865 +0200
@@ -1,0 +2,15 @@
+Thu Jul 24 10:47:51 UTC 2025 - Johannes Kastl 
<opensuse_buildserv...@ojkastl.de>
+
+- Update to version 5.7.1:
+  This release introduces code to replace the shlex library used
+  for parsing arguments in the exec plugin.
+  If any existing manifests become corrupted, please file an issue.
+  discussion: kubernetes/kubernetes#132593 (comment)
+  * Dependencies
+    - #5943: drop shlex dependency
+  * Chore
+    - #5948: Update kyaml to v0.20.1
+    - #5949: Update cmd/config to v0.20.1
+    - #5950: Update api to v0.20.1
+
+-------------------------------------------------------------------

Old:
----
  kustomize-5.7.0.obscpio

New:
----
  kustomize-5.7.1.obscpio

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ kustomize.spec ++++++
--- /var/tmp/diff_new_pack.2950y2/_old  2025-07-24 18:54:12.715332435 +0200
+++ /var/tmp/diff_new_pack.2950y2/_new  2025-07-24 18:54:12.719332601 +0200
@@ -17,7 +17,7 @@
 
 
 Name:           kustomize
-Version:        5.7.0
+Version:        5.7.1
 Release:        0
 Summary:        Customization of kubernetes YAML configurations
 License:        Apache-2.0

++++++ _service ++++++
--- /var/tmp/diff_new_pack.2950y2/_old  2025-07-24 18:54:12.751333927 +0200
+++ /var/tmp/diff_new_pack.2950y2/_new  2025-07-24 18:54:12.755334093 +0200
@@ -5,7 +5,7 @@
     <param name="exclude">.git</param>
     <param name="exclude">go.work</param>
     <param name="exclude">go.work.sum</param>
-    <param name="revision">kustomize/v5.7.0</param>
+    <param name="revision">kustomize/v5.7.1</param>
     <param name="versionformat">@PARENT_TAG@</param>
     <param name="versionrewrite-pattern">kustomize/v(.*)</param>
     <param name="changesgenerate">enable</param>

++++++ _servicedata ++++++
--- /var/tmp/diff_new_pack.2950y2/_old  2025-07-24 18:54:12.775334923 +0200
+++ /var/tmp/diff_new_pack.2950y2/_new  2025-07-24 18:54:12.775334923 +0200
@@ -1,7 +1,7 @@
 <servicedata>
     <service name="tar_scm">
         <param 
name="url">https://github.com/kubernetes-sigs/kustomize.git</param>
-        <param 
name="changesrevision">7f30f0e23a350bd4ad66bbe7bc38208f311d5461</param>
+        <param 
name="changesrevision">168971a50110fc90dfbd1327245e7aabe5c07e8f</param>
     </service>
 </servicedata>
 (No newline at EOF)

++++++ kustomize-5.7.0.obscpio -> kustomize-5.7.1.obscpio ++++++
++++ 2225 lines of diff (skipped)

++++++ kustomize.obsinfo ++++++
--- /var/tmp/diff_new_pack.2950y2/_old  2025-07-24 18:54:16.387484672 +0200
+++ /var/tmp/diff_new_pack.2950y2/_new  2025-07-24 18:54:16.395485003 +0200
@@ -1,5 +1,5 @@
 name: kustomize
-version: 5.7.0
-mtime: 1751093789
-commit: 7f30f0e23a350bd4ad66bbe7bc38208f311d5461
+version: 5.7.1
+mtime: 1753274669
+commit: 168971a50110fc90dfbd1327245e7aabe5c07e8f
 

++++++ vendor.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/vendor/github.com/carapace-sh/carapace-shlex/.gitignore 
new/vendor/github.com/carapace-sh/carapace-shlex/.gitignore
--- old/vendor/github.com/carapace-sh/carapace-shlex/.gitignore 2025-06-28 
08:56:29.000000000 +0200
+++ new/vendor/github.com/carapace-sh/carapace-shlex/.gitignore 1970-01-01 
01:00:00.000000000 +0100
@@ -1,3 +0,0 @@
-cmd/carapace-shlex/carapace-shlex
-dist
-profile.cov
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/vendor/github.com/carapace-sh/carapace-shlex/.goreleaser.yml 
new/vendor/github.com/carapace-sh/carapace-shlex/.goreleaser.yml
--- old/vendor/github.com/carapace-sh/carapace-shlex/.goreleaser.yml    
2025-06-28 08:56:29.000000000 +0200
+++ new/vendor/github.com/carapace-sh/carapace-shlex/.goreleaser.yml    
1970-01-01 01:00:00.000000000 +0100
@@ -1,29 +0,0 @@
-before:
-  hooks:
-    - go mod download
-builds:
-  - env:
-      - CGO_ENABLED=0
-    goos:
-      - linux
-      - windows
-      - darwin
-    main: ./cmd/carapace-shlex
-    binary: carapace-shlex
-    tags:
-      - release
-archives:
-  - name_template: '{{ .ProjectName }}_{{ .Os }}_{{ .Arch }}{{ if .Arm }}v{{ 
.Arm }}{{ end }}'
-    format_overrides:
-      - goos: windows
-        format: zip
-checksum:
-  name_template: 'checksums.txt'
-snapshot:
-  name_template: "{{ .Tag }}-next"
-changelog:
-  sort: asc
-  filters:
-    exclude:
-      - '^docs:'
-      - '^test:'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/vendor/github.com/carapace-sh/carapace-shlex/LICENSE.txt 
new/vendor/github.com/carapace-sh/carapace-shlex/LICENSE.txt
--- old/vendor/github.com/carapace-sh/carapace-shlex/LICENSE.txt        
2025-06-28 08:56:29.000000000 +0200
+++ new/vendor/github.com/carapace-sh/carapace-shlex/LICENSE.txt        
1970-01-01 01:00:00.000000000 +0100
@@ -1,202 +0,0 @@
-
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-   APPENDIX: How to apply the Apache License to your work.
-
-      To apply the Apache License to your work, attach the following
-      boilerplate notice, with the fields enclosed by brackets "[]"
-      replaced with your own identifying information. (Don't include
-      the brackets!)  The text should be enclosed in the appropriate
-      comment syntax for the file format. We also recommend that a
-      file or class name and description of purpose be included on the
-      same "printed page" as the copyright notice for easier
-      identification within third-party archives.
-
-   Copyright [yyyy] [name of copyright owner]
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/vendor/github.com/carapace-sh/carapace-shlex/README.md 
new/vendor/github.com/carapace-sh/carapace-shlex/README.md
--- old/vendor/github.com/carapace-sh/carapace-shlex/README.md  2025-06-28 
08:56:29.000000000 +0200
+++ new/vendor/github.com/carapace-sh/carapace-shlex/README.md  1970-01-01 
01:00:00.000000000 +0100
@@ -1,12 +0,0 @@
-# carapace-shlex
-
-[![PkgGoDev](https://pkg.go.dev/badge/github.com/carapace-sh/carapace-shlex)](https://pkg.go.dev/github.com/carapace-sh/carapace-shlex)
-[![GoReportCard](https://goreportcard.com/badge/github.com/carapace-sh/carapace-shlex)](https://goreportcard.com/report/github.com/carapace-sh/carapace-shlex)
-[![Coverage 
Status](https://coveralls.io/repos/github/carapace-sh/carapace-shlex/badge.svg?branch=master)](https://coveralls.io/github/carapace-sh/carapace-shlex?branch=master)
-
-Fork of [go-shlex](https://github.com/google/shlex) aimed to enable completion 
of complex commands passed as single argument with [Split] in [carapace].
-
-[![asciicast](https://asciinema.org/a/599580.svg)](https://asciinema.org/a/599580)
-
-[Split]:https://carapace-sh.github.io/carapace/carapace/action/split.html
-[carapace]:https://github.com/carapace-sh/carapace
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/vendor/github.com/carapace-sh/carapace-shlex/go.work 
new/vendor/github.com/carapace-sh/carapace-shlex/go.work
--- old/vendor/github.com/carapace-sh/carapace-shlex/go.work    2025-06-28 
08:56:29.000000000 +0200
+++ new/vendor/github.com/carapace-sh/carapace-shlex/go.work    1970-01-01 
01:00:00.000000000 +0100
@@ -1,6 +0,0 @@
-go 1.22.0
-
-use (
-       .
-       ./cmd
-)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/vendor/github.com/carapace-sh/carapace-shlex/go.work.sum 
new/vendor/github.com/carapace-sh/carapace-shlex/go.work.sum
--- old/vendor/github.com/carapace-sh/carapace-shlex/go.work.sum        
2025-06-28 08:56:29.000000000 +0200
+++ new/vendor/github.com/carapace-sh/carapace-shlex/go.work.sum        
1970-01-01 01:00:00.000000000 +0100
@@ -1,2 +0,0 @@
-github.com/cpuguy83/go-md2man/v2 v2.0.3 
h1:qMCsGGgs+MAzDFyp9LpAe1Lqy/fY/qCovCm0qnXZOBM=
-github.com/russross/blackfriday/v2 v2.1.0 
h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk=
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/vendor/github.com/carapace-sh/carapace-shlex/shlex.go 
new/vendor/github.com/carapace-sh/carapace-shlex/shlex.go
--- old/vendor/github.com/carapace-sh/carapace-shlex/shlex.go   2025-06-28 
08:56:29.000000000 +0200
+++ new/vendor/github.com/carapace-sh/carapace-shlex/shlex.go   1970-01-01 
01:00:00.000000000 +0100
@@ -1,441 +0,0 @@
-package shlex
-
-import (
-       "bufio"
-       "encoding/json"
-       "fmt"
-       "io"
-       "os"
-       "strings"
-)
-
-// TokenType is a top-level token classification: A word, space, comment, 
unknown.
-type TokenType int
-
-func (t TokenType) MarshalJSON() ([]byte, error) {
-       return json.Marshal(tokenTypes[t])
-}
-
-// runeTokenClass is the type of a UTF-8 character classification: A quote, 
space, escape.
-type runeTokenClass int
-
-// the internal state used by the lexer state machine
-type LexerState int
-
-func (l LexerState) MarshalJSON() ([]byte, error) {
-       return json.Marshal(lexerStates[l])
-}
-
-// Token is a (type, value) pair representing a lexographical token.
-type Token struct {
-       Type           TokenType
-       Value          string
-       RawValue       string
-       Index          int
-       State          LexerState
-       WordbreakType  WordbreakType `json:",omitempty"`
-       WordbreakIndex int           // index of last opening quote in Value 
(only correct when in quoting state)
-}
-
-func (t *Token) add(r rune) {
-       t.Value += string(r)
-}
-
-func (t *Token) removeLastRaw() {
-       runes := []rune(t.RawValue)
-       t.RawValue = string(runes[:len(runes)-1])
-}
-
-func (t Token) adjoins(other Token) bool {
-       return t.Index+len(t.RawValue) == other.Index || t.Index == 
other.Index+len(other.RawValue)
-}
-
-// Equal reports whether tokens a, and b, are equal.
-// Two tokens are equal if both their types and values are equal. A nil token 
can
-// never be equal to another token.
-func (t *Token) Equal(other *Token) bool {
-       switch {
-       case t == nil,
-               other == nil,
-               t.Type != other.Type,
-               t.Value != other.Value,
-               t.RawValue != other.RawValue,
-               t.Index != other.Index,
-               t.State != other.State,
-               t.WordbreakType != other.WordbreakType,
-               t.WordbreakIndex != other.WordbreakIndex:
-               return false
-       default:
-               return true
-       }
-}
-
-// Named classes of UTF-8 runes
-const (
-       spaceRunes            = " \t\r\n"
-       escapingQuoteRunes    = `"`
-       nonEscapingQuoteRunes = "'"
-       escapeRunes           = `\`
-       commentRunes          = "#"
-)
-
-// Classes of rune token
-const (
-       unknownRuneClass runeTokenClass = iota
-       spaceRuneClass
-       escapingQuoteRuneClass
-       nonEscapingQuoteRuneClass
-       escapeRuneClass
-       commentRuneClass
-       wordbreakRuneClass
-       eofRuneClass
-)
-
-// Classes of lexographic token
-const (
-       UNKNOWN_TOKEN TokenType = iota
-       WORD_TOKEN
-       SPACE_TOKEN
-       COMMENT_TOKEN
-       WORDBREAK_TOKEN
-)
-
-var tokenTypes = map[TokenType]string{
-       UNKNOWN_TOKEN:   "UNKNOWN_TOKEN",
-       WORD_TOKEN:      "WORD_TOKEN",
-       SPACE_TOKEN:     "SPACE_TOKEN",
-       COMMENT_TOKEN:   "COMMENT_TOKEN",
-       WORDBREAK_TOKEN: "WORDBREAK_TOKEN",
-}
-
-// Lexer state machine states
-const (
-       START_STATE            LexerState = iota // no runes have been seen
-       IN_WORD_STATE                            // processing regular runes in 
a word
-       ESCAPING_STATE                           // we have just consumed an 
escape rune; the next rune is literal
-       ESCAPING_QUOTED_STATE                    // we have just consumed an 
escape rune within a quoted string
-       QUOTING_ESCAPING_STATE                   // we are within a quoted 
string that supports escaping ("...")
-       QUOTING_STATE                            // we are within a string that 
does not support escaping ('...')
-       COMMENT_STATE                            // we are within a comment 
(everything following an unquoted or unescaped #
-       WORDBREAK_STATE                          // we have just consumed a 
wordbreak rune
-)
-
-var lexerStates = map[LexerState]string{
-       START_STATE:            "START_STATE",
-       IN_WORD_STATE:          "IN_WORD_STATE",
-       ESCAPING_STATE:         "ESCAPING_STATE",
-       ESCAPING_QUOTED_STATE:  "ESCAPING_QUOTED_STATE",
-       QUOTING_ESCAPING_STATE: "QUOTING_ESCAPING_STATE",
-       QUOTING_STATE:          "QUOTING_STATE",
-       COMMENT_STATE:          "COMMENT_STATE",
-       WORDBREAK_STATE:        "WORDBREAK_STATE",
-}
-
-// tokenClassifier is used for classifying rune characters.
-type tokenClassifier map[rune]runeTokenClass
-
-func (typeMap tokenClassifier) addRuneClass(runes string, tokenType 
runeTokenClass) {
-       for _, runeChar := range runes {
-               typeMap[runeChar] = tokenType
-       }
-}
-
-// newDefaultClassifier creates a new classifier for ASCII characters.
-func newDefaultClassifier() tokenClassifier {
-       t := tokenClassifier{}
-       t.addRuneClass(spaceRunes, spaceRuneClass)
-       t.addRuneClass(escapingQuoteRunes, escapingQuoteRuneClass)
-       t.addRuneClass(nonEscapingQuoteRunes, nonEscapingQuoteRuneClass)
-       t.addRuneClass(escapeRunes, escapeRuneClass)
-       t.addRuneClass(commentRunes, commentRuneClass)
-
-       wordbreakRunes := BASH_WORDBREAKS
-       if wordbreaks := os.Getenv("COMP_WORDBREAKS"); wordbreaks != "" {
-               wordbreakRunes = wordbreaks
-       }
-       filtered := make([]rune, 0)
-       for _, r := range wordbreakRunes {
-               if t.ClassifyRune(r) == unknownRuneClass {
-                       filtered = append(filtered, r)
-               }
-       }
-       t.addRuneClass(string(filtered), wordbreakRuneClass)
-
-       return t
-}
-
-// ClassifyRune classifiees a rune
-func (t tokenClassifier) ClassifyRune(runeVal rune) runeTokenClass {
-       return t[runeVal]
-}
-
-// lexer turns an input stream into a sequence of tokens. Whitespace and 
comments are skipped.
-type lexer tokenizer
-
-// newLexer creates a new lexer from an input stream.
-func newLexer(r io.Reader) *lexer {
-       return (*lexer)(newTokenizer(r))
-}
-
-// Next returns the next token, or an error. If there are no more tokens,
-// the error will be io.EOF.
-func (l *lexer) Next() (*Token, error) {
-       for {
-               token, err := (*tokenizer)(l).Next()
-               if err != nil {
-                       return token, err
-               }
-               switch token.Type {
-               case WORD_TOKEN, WORDBREAK_TOKEN:
-                       return token, nil
-               case COMMENT_TOKEN:
-                       // skip comments
-               default:
-                       return nil, fmt.Errorf("unknown token type: %v", 
token.Type)
-               }
-       }
-}
-
-// tokenizer turns an input stream into a sequence of typed tokens
-type tokenizer struct {
-       input      bufio.Reader
-       classifier tokenClassifier
-       index      int
-       state      LexerState
-}
-
-func (t *tokenizer) ReadRune() (r rune, size int, err error) {
-       if r, size, err = t.input.ReadRune(); err == nil {
-               t.index += 1
-       }
-       return
-}
-
-func (t *tokenizer) UnreadRune() (err error) {
-       if err = t.input.UnreadRune(); err == nil {
-               t.index -= 1
-       }
-       return
-}
-
-// newTokenizer creates a new tokenizer from an input stream.
-func newTokenizer(r io.Reader) *tokenizer {
-       input := bufio.NewReader(r)
-       classifier := newDefaultClassifier()
-       return &tokenizer{
-               input:      *input,
-               classifier: classifier}
-}
-
-// scanStream scans the stream for the next token using the internal state 
machine.
-// It will panic if it encounters a rune which it does not know how to handle.
-func (t *tokenizer) scanStream() (*Token, error) {
-       previousState := t.state
-       t.state = START_STATE
-       token := &Token{}
-       var nextRune rune
-       var nextRuneType runeTokenClass
-       var err error
-       consumed := 0
-
-       for {
-               nextRune, _, err = t.ReadRune()
-               nextRuneType = t.classifier.ClassifyRune(nextRune)
-               token.RawValue += string(nextRune)
-               consumed += 1 // TODO find a nicer solution for this
-
-               switch {
-               case err == io.EOF:
-                       nextRuneType = eofRuneClass
-                       err = nil
-               case err != nil:
-                       return nil, err
-               }
-
-               switch t.state {
-               case START_STATE: // no runes read yet
-                       {
-                               if nextRuneType != spaceRuneClass {
-                                       token.Index = t.index - 1
-                               }
-                               switch nextRuneType {
-                               case eofRuneClass:
-                                       switch {
-                                       case t.index == 0: // tonkenizer 
contains an empty string
-                                               token.removeLastRaw()
-                                               token.Type = WORD_TOKEN
-                                               token.Index = t.index
-                                               t.index += 1
-                                               return token, nil // return an 
additional empty token for current cursor position
-                                       case previousState == WORDBREAK_STATE, 
consumed > 1: // consumed is greater than 1 when when there were spaceRunes 
before
-                                               token.removeLastRaw()
-                                               token.Type = WORD_TOKEN
-                                               token.Index = t.index
-                                               return token, nil // return an 
additional empty token for current cursor position
-                                       default:
-                                               return nil, io.EOF
-                                       }
-                               case spaceRuneClass:
-                                       token.removeLastRaw()
-                               case escapingQuoteRuneClass:
-                                       token.Type = WORD_TOKEN
-                                       t.state = QUOTING_ESCAPING_STATE
-                                       token.WordbreakIndex = len(token.Value)
-                               case nonEscapingQuoteRuneClass:
-                                       token.Type = WORD_TOKEN
-                                       t.state = QUOTING_STATE
-                                       token.WordbreakIndex = len(token.Value)
-                               case escapeRuneClass:
-                                       token.Type = WORD_TOKEN
-                                       t.state = ESCAPING_STATE
-                               case commentRuneClass:
-                                       token.Type = COMMENT_TOKEN
-                                       t.state = COMMENT_STATE
-                               case wordbreakRuneClass:
-                                       token.Type = WORDBREAK_TOKEN
-                                       token.add(nextRune)
-                                       t.state = WORDBREAK_STATE
-                               default:
-                                       token.Type = WORD_TOKEN
-                                       token.add(nextRune)
-                                       t.state = IN_WORD_STATE
-                               }
-                       }
-               case WORDBREAK_STATE:
-                       switch nextRuneType {
-                       case wordbreakRuneClass:
-                               token.add(nextRune)
-                       default:
-                               token.removeLastRaw()
-                               t.UnreadRune()
-                               return token, err
-                       }
-               case IN_WORD_STATE: // in a regular word
-                       switch nextRuneType {
-                       case wordbreakRuneClass:
-                               token.removeLastRaw()
-                               t.UnreadRune()
-                               return token, err
-                       case eofRuneClass, spaceRuneClass:
-                               token.removeLastRaw()
-                               t.UnreadRune()
-                               return token, err
-                       case escapingQuoteRuneClass:
-                               t.state = QUOTING_ESCAPING_STATE
-                               token.WordbreakIndex = len(token.Value)
-                       case nonEscapingQuoteRuneClass:
-                               t.state = QUOTING_STATE
-                               token.WordbreakIndex = len(token.Value)
-                       case escapeRuneClass:
-                               t.state = ESCAPING_STATE
-                       default:
-                               token.add(nextRune)
-                       }
-               case ESCAPING_STATE: // the rune after an escape character
-                       switch nextRuneType {
-                       case eofRuneClass: // EOF found after escape character
-                               token.removeLastRaw()
-                               return token, err
-                       default:
-                               t.state = IN_WORD_STATE
-                               token.add(nextRune)
-                       }
-               case ESCAPING_QUOTED_STATE: // the next rune after an escape 
character, in double quotes
-                       switch nextRuneType {
-                       case eofRuneClass: // EOF found after escape character
-                               token.removeLastRaw()
-                               return token, err
-                       default:
-                               t.state = QUOTING_ESCAPING_STATE
-                               token.add(nextRune)
-                       }
-               case QUOTING_ESCAPING_STATE: // in escaping double quotes
-                       switch nextRuneType {
-                       case eofRuneClass: // EOF found when expecting closing 
quote
-                               token.removeLastRaw()
-                               return token, err
-                       case escapingQuoteRuneClass:
-                               t.state = IN_WORD_STATE
-                       case escapeRuneClass:
-                               t.state = ESCAPING_QUOTED_STATE
-                       default:
-                               token.add(nextRune)
-                       }
-               case QUOTING_STATE: // in non-escaping single quotes
-                       switch nextRuneType {
-                       case eofRuneClass: // EOF found when expecting closing 
quote
-                               token.removeLastRaw()
-                               return token, err
-                       case nonEscapingQuoteRuneClass:
-                               t.state = IN_WORD_STATE
-                       default:
-                               token.add(nextRune)
-                       }
-               case COMMENT_STATE: // in a comment
-                       switch nextRuneType {
-                       case eofRuneClass:
-                               return token, err
-                       case spaceRuneClass:
-                               if nextRune == '\n' {
-                                       token.removeLastRaw()
-                                       t.state = START_STATE
-                                       return token, err
-                               } else {
-                                       token.add(nextRune)
-                               }
-                       default:
-                               token.add(nextRune)
-                       }
-               default:
-                       return nil, fmt.Errorf("unexpected state: %v", t.state)
-               }
-       }
-}
-
-// Next returns the next token in the stream.
-func (t *tokenizer) Next() (*Token, error) {
-       token, err := t.scanStream()
-       if err == nil {
-               token.State = t.state // TODO should be done in scanStream
-               token.WordbreakType = wordbreakType(*token)
-       }
-       return token, err
-}
-
-// Split partitions of a string into tokens.
-func Split(s string) (TokenSlice, error) {
-       l := newLexer(strings.NewReader(s))
-       tokens := make(TokenSlice, 0)
-       for {
-               token, err := l.Next()
-               if err != nil {
-                       if err == io.EOF {
-                               return tokens, nil
-                       }
-                       return nil, err
-               }
-               tokens = append(tokens, *token)
-       }
-}
-
-// Join concatenates words to create a single string.
-// It quotes and escapes where appropriate.
-// TODO experimental
-func Join(s []string) string {
-       replacer := strings.NewReplacer(
-               "$", "\\$",
-               "`", "\\`",
-       )
-
-       formatted := make([]string, 0, len(s))
-       for _, arg := range s {
-               switch {
-               case arg == "",
-                       strings.ContainsAny(arg, `"' `+"\n\r\t"):
-                       formatted = append(formatted, 
replacer.Replace(fmt.Sprintf("%#v", arg)))
-               default:
-                       formatted = append(formatted, arg)
-               }
-       }
-       return strings.Join(formatted, " ")
-}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/vendor/github.com/carapace-sh/carapace-shlex/tokenslice.go 
new/vendor/github.com/carapace-sh/carapace-shlex/tokenslice.go
--- old/vendor/github.com/carapace-sh/carapace-shlex/tokenslice.go      
2025-06-28 08:56:29.000000000 +0200
+++ new/vendor/github.com/carapace-sh/carapace-shlex/tokenslice.go      
1970-01-01 01:00:00.000000000 +0100
@@ -1,123 +0,0 @@
-package shlex
-
-import (
-       "strconv"
-)
-
-type TokenSlice []Token
-
-func (t TokenSlice) Strings() []string {
-       s := make([]string, 0, len(t))
-       for _, token := range t {
-               s = append(s, token.Value)
-       }
-       return s
-}
-
-func (t TokenSlice) Pipelines() []TokenSlice {
-       pipelines := make([]TokenSlice, 0)
-
-       pipeline := make(TokenSlice, 0)
-       for _, token := range t {
-               switch {
-               case token.Type == WORDBREAK_TOKEN && 
wordbreakType(token).IsPipelineDelimiter():
-                       pipelines = append(pipelines, pipeline)
-                       pipeline = make(TokenSlice, 0)
-               default:
-                       pipeline = append(pipeline, token)
-               }
-       }
-       return append(pipelines, pipeline)
-}
-
-func (t TokenSlice) CurrentPipeline() TokenSlice {
-       pipelines := t.Pipelines()
-       return pipelines[len(pipelines)-1]
-}
-
-func (t TokenSlice) Words() TokenSlice {
-       words := make(TokenSlice, 0)
-       for index, token := range t {
-               switch {
-               case index == 0:
-                       words = append(words, token)
-               case t[index-1].adjoins(token):
-                       words[len(words)-1].Value += token.Value
-                       words[len(words)-1].RawValue += token.RawValue
-                       words[len(words)-1].State = token.State
-               default:
-                       words = append(words, token)
-               }
-       }
-       return words
-}
-
-func (t TokenSlice) FilterRedirects() TokenSlice {
-       filtered := make(TokenSlice, 0)
-       for index, token := range t {
-               switch token.Type {
-               case WORDBREAK_TOKEN:
-                       if wordbreakType(token).IsRedirect() {
-                               continue
-                       }
-               }
-
-               if index > 0 {
-                       if wordbreakType(t[index-1]).IsRedirect() {
-                               continue
-                       }
-               }
-
-               if index < len(t)-1 {
-                       next := t[index+1]
-                       if token.adjoins(next) {
-                               if _, err := strconv.Atoi(token.RawValue); err 
== nil {
-                                       if 
wordbreakType(t[index+1]).IsRedirect() {
-                                               continue
-                                       }
-                               }
-                       }
-
-               }
-
-               filtered = append(filtered, token)
-       }
-       return filtered
-}
-
-func (t TokenSlice) CurrentToken() (token Token) {
-       if len(t) > 0 {
-               token = t[len(t)-1]
-       }
-       return
-}
-
-func (t TokenSlice) WordbreakPrefix() string {
-       found := false
-       prefix := ""
-
-       last := t[len(t)-1]
-       switch last.State {
-       case QUOTING_STATE, QUOTING_ESCAPING_STATE, ESCAPING_QUOTED_STATE:
-               // Seems bash handles the last opening quote as wordbreak when 
in quoting state.
-               // So add value up to last opening quote to prefix.
-               found = true
-               prefix = last.Value[:last.WordbreakIndex]
-       }
-
-       for i := len(t) - 2; i >= 0; i-- {
-               token := t[i]
-               if !token.adjoins(t[i+1]) {
-                       break
-               }
-
-               if token.Type == WORDBREAK_TOKEN {
-                       found = true
-               }
-
-               if found {
-                       prefix = token.Value + prefix
-               }
-       }
-       return prefix
-}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/vendor/github.com/carapace-sh/carapace-shlex/wordbreak.go 
new/vendor/github.com/carapace-sh/carapace-shlex/wordbreak.go
--- old/vendor/github.com/carapace-sh/carapace-shlex/wordbreak.go       
2025-06-28 08:56:29.000000000 +0200
+++ new/vendor/github.com/carapace-sh/carapace-shlex/wordbreak.go       
1970-01-01 01:00:00.000000000 +0100
@@ -1,122 +0,0 @@
-package shlex
-
-import "encoding/json"
-
-const BASH_WORDBREAKS = " \t\r\n" + `"'><=;|&(:`
-
-type WordbreakType int
-
-const (
-       WORDBREAK_UNKNOWN WordbreakType = iota
-       // https://www.gnu.org/software/bash/manual/html_node/Redirections.html
-       WORDBREAK_REDIRECT_INPUT
-       WORDBREAK_REDIRECT_OUTPUT
-       WORDBREAK_REDIRECT_OUTPUT_APPEND
-       WORDBREAK_REDIRECT_OUTPUT_BOTH
-       WORDBREAK_REDIRECT_OUTPUT_BOTH_APPEND
-       WORDBREAK_REDIRECT_INPUT_STRING
-       WORDBREAK_REDIRECT_INPUT_DUPLICATE
-       WORDBREAK_REDIRECT_INPUT_OUTPUT
-       // https://www.gnu.org/software/bash/manual/html_node/Pipelines.html
-       WORDBREAK_PIPE
-       WORDBREAK_PIPE_WITH_STDERR
-       // https://www.gnu.org/software/bash/manual/html_node/Lists.html)
-       WORDBREAK_LIST_ASYNC
-       WORDBREAK_LIST_SEQUENTIAL
-       WORDBREAK_LIST_AND
-       WORDBREAK_LIST_OR
-       // COMP_WORDBREAKS
-       WORDBREAK_CUSTOM
-)
-
-var wordbreakTypes = map[WordbreakType]string{
-       WORDBREAK_UNKNOWN:                     "WORDBREAK_UNKNOWN",
-       WORDBREAK_REDIRECT_INPUT:              "WORDBREAK_REDIRECT_INPUT",
-       WORDBREAK_REDIRECT_OUTPUT:             "WORDBREAK_REDIRECT_OUTPUT",
-       WORDBREAK_REDIRECT_OUTPUT_APPEND:      
"WORDBREAK_REDIRECT_OUTPUT_APPEND",
-       WORDBREAK_REDIRECT_OUTPUT_BOTH:        "WORDBREAK_REDIRECT_OUTPUT_BOTH",
-       WORDBREAK_REDIRECT_OUTPUT_BOTH_APPEND: 
"WORDBREAK_REDIRECT_OUTPUT_BOTH_APPEND",
-       WORDBREAK_REDIRECT_INPUT_STRING:       
"WORDBREAK_REDIRECT_INPUT_STRING",
-       WORDBREAK_REDIRECT_INPUT_DUPLICATE:    
"WORDBREAK_REDIRECT_INPUT_DUPLICATE",
-       WORDBREAK_REDIRECT_INPUT_OUTPUT:       
"WORDBREAK_REDIRECT_INPUT_OUTPUT",
-       WORDBREAK_PIPE:                        "WORDBREAK_PIPE",
-       WORDBREAK_PIPE_WITH_STDERR:            "WORDBREAK_PIPE_WITH_STDERR",
-       WORDBREAK_LIST_ASYNC:                  "WORDBREAK_LIST_ASYNC",
-       WORDBREAK_LIST_SEQUENTIAL:             "WORDBREAK_LIST_SEQUENTIAL",
-       WORDBREAK_LIST_AND:                    "WORDBREAK_LIST_AND",
-       WORDBREAK_LIST_OR:                     "WORDBREAK_LIST_OR",
-       WORDBREAK_CUSTOM:                      "WORDBREAK_CUSTOM",
-}
-
-func (w WordbreakType) MarshalJSON() ([]byte, error) {
-       return json.Marshal(wordbreakTypes[w])
-}
-
-func (w WordbreakType) IsPipelineDelimiter() bool {
-       switch w {
-       case
-               WORDBREAK_PIPE,
-               WORDBREAK_PIPE_WITH_STDERR,
-               WORDBREAK_LIST_ASYNC,
-               WORDBREAK_LIST_SEQUENTIAL,
-               WORDBREAK_LIST_AND,
-               WORDBREAK_LIST_OR:
-               return true
-       default:
-               return false
-       }
-}
-
-func (w WordbreakType) IsRedirect() bool {
-       switch w {
-       case
-               WORDBREAK_REDIRECT_INPUT,
-               WORDBREAK_REDIRECT_OUTPUT,
-               WORDBREAK_REDIRECT_OUTPUT_APPEND,
-               WORDBREAK_REDIRECT_OUTPUT_BOTH,
-               WORDBREAK_REDIRECT_OUTPUT_BOTH_APPEND,
-               WORDBREAK_REDIRECT_INPUT_STRING,
-               WORDBREAK_REDIRECT_INPUT_DUPLICATE,
-               WORDBREAK_REDIRECT_INPUT_OUTPUT:
-               return true
-       default:
-               return false
-       }
-
-}
-
-func wordbreakType(t Token) WordbreakType {
-       switch t.RawValue {
-       case "<":
-               return WORDBREAK_REDIRECT_INPUT
-       case ">":
-               return WORDBREAK_REDIRECT_OUTPUT
-       case ">>":
-               return WORDBREAK_REDIRECT_OUTPUT_APPEND
-       case "&>", ">&":
-               return WORDBREAK_REDIRECT_OUTPUT_BOTH
-       case "&>>":
-               return WORDBREAK_REDIRECT_OUTPUT_BOTH_APPEND
-       case "<<<":
-               return WORDBREAK_REDIRECT_INPUT_STRING
-       case "<&":
-               return WORDBREAK_REDIRECT_INPUT_DUPLICATE
-       case "<>":
-               return WORDBREAK_REDIRECT_INPUT_OUTPUT
-       case "|":
-               return WORDBREAK_PIPE
-       case "|&":
-               return WORDBREAK_PIPE_WITH_STDERR
-       case "&":
-               return WORDBREAK_LIST_ASYNC
-       case ";":
-               return WORDBREAK_LIST_SEQUENTIAL
-       case "&&":
-               return WORDBREAK_LIST_AND
-       case "||":
-               return WORDBREAK_LIST_OR
-       default:
-               // TODO check COMP_WORDBREAKS -> WORDBREAK_OTHER
-               return WORDBREAK_UNKNOWN
-       }
-}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/vendor/modules.txt new/vendor/modules.txt
--- old/vendor/modules.txt      2025-06-28 08:56:29.000000000 +0200
+++ new/vendor/modules.txt      2025-07-23 14:44:29.000000000 +0200
@@ -1,9 +1,6 @@
 # github.com/blang/semver/v4 v4.0.0
 ## explicit; go 1.14
 github.com/blang/semver/v4
-# github.com/carapace-sh/carapace-shlex v1.0.1
-## explicit; go 1.15
-github.com/carapace-sh/carapace-shlex
 # github.com/davecgh/go-spew v1.1.1
 ## explicit
 github.com/davecgh/go-spew/spew
@@ -133,7 +130,7 @@
 k8s.io/kube-openapi/pkg/internal
 k8s.io/kube-openapi/pkg/internal/third_party/go-json-experiment/json
 k8s.io/kube-openapi/pkg/validation/spec
-# sigs.k8s.io/kustomize/api v0.20.0
+# sigs.k8s.io/kustomize/api v0.20.1
 ## explicit; go 1.22.7
 sigs.k8s.io/kustomize/api/filters/annotations
 sigs.k8s.io/kustomize/api/filters/fieldspec
@@ -185,7 +182,7 @@
 sigs.k8s.io/kustomize/api/testutils/localizertest
 sigs.k8s.io/kustomize/api/testutils/valtest
 sigs.k8s.io/kustomize/api/types
-# sigs.k8s.io/kustomize/cmd/config v0.20.0
+# sigs.k8s.io/kustomize/cmd/config v0.20.1
 ## explicit; go 1.22.7
 sigs.k8s.io/kustomize/cmd/config/completion
 sigs.k8s.io/kustomize/cmd/config/configcobra
@@ -196,7 +193,7 @@
 sigs.k8s.io/kustomize/cmd/config/internal/generateddocs/commands
 sigs.k8s.io/kustomize/cmd/config/internal/generateddocs/tutorials
 sigs.k8s.io/kustomize/cmd/config/runner
-# sigs.k8s.io/kustomize/kyaml v0.20.0
+# sigs.k8s.io/kustomize/kyaml v0.20.1
 ## explicit; go 1.22.7
 sigs.k8s.io/kustomize/kyaml/comments
 sigs.k8s.io/kustomize/kyaml/copyutil
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/vendor/sigs.k8s.io/kustomize/api/internal/plugins/execplugin/execplugin.go 
new/vendor/sigs.k8s.io/kustomize/api/internal/plugins/execplugin/execplugin.go
--- 
old/vendor/sigs.k8s.io/kustomize/api/internal/plugins/execplugin/execplugin.go  
    2025-06-28 08:56:29.000000000 +0200
+++ 
new/vendor/sigs.k8s.io/kustomize/api/internal/plugins/execplugin/execplugin.go  
    2025-07-23 14:44:29.000000000 +0200
@@ -12,8 +12,6 @@
        "runtime"
        "strings"
 
-       shlex "github.com/carapace-sh/carapace-shlex"
-
        "sigs.k8s.io/kustomize/api/internal/plugins/utils"
        "sigs.k8s.io/kustomize/api/resmap"
        "sigs.k8s.io/kustomize/kyaml/errors"
@@ -95,11 +93,11 @@
                return err
        }
        if c.ArgsOneLiner != "" {
-               argsTolenSlice, err := shlex.Split(c.ArgsOneLiner)
+               argsTolenSlice, err := ShlexSplit(c.ArgsOneLiner)
                if err != nil {
                        return fmt.Errorf("failed to parse argsOneLiner: %w", 
err)
                }
-               p.args = argsTolenSlice.Strings()
+               p.args = argsTolenSlice
        }
        if c.ArgsFromFile != "" {
                content, err := p.h.Loader().Load(c.ArgsFromFile)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/vendor/sigs.k8s.io/kustomize/api/internal/plugins/execplugin/shlex.go 
new/vendor/sigs.k8s.io/kustomize/api/internal/plugins/execplugin/shlex.go
--- old/vendor/sigs.k8s.io/kustomize/api/internal/plugins/execplugin/shlex.go   
1970-01-01 01:00:00.000000000 +0100
+++ new/vendor/sigs.k8s.io/kustomize/api/internal/plugins/execplugin/shlex.go   
2025-07-23 14:44:29.000000000 +0200
@@ -0,0 +1,62 @@
+// Copyright 2019 The Kubernetes Authors.
+// SPDX-License-Identifier: Apache-2.0
+
+package execplugin
+
+import (
+       "fmt"
+       "strings"
+       "unicode"
+)
+
+// ShlexSplit splits a string into a slice of strings using shell-style rules 
for quoting and commenting
+// Similar to Python's shlex.split with comments enabled
+func ShlexSplit(s string) ([]string, error) {
+       return shlexSplit(s)
+}
+
+func shlexSplit(s string) ([]string, error) {
+       result := []string{}
+
+       // noQuote is used to track if we are not in a quoted
+       const noQuote = 0
+
+       var current strings.Builder
+       var quote rune = noQuote
+       var escaped bool
+
+       for _, r := range s {
+               switch {
+               case escaped:
+                       current.WriteRune(r)
+                       escaped = false
+               case r == '\\' && quote != '\'':
+                       escaped = true
+               case (r == '\'' || r == '"') && quote == noQuote:
+                       quote = r
+               case r == quote:
+                       quote = noQuote
+               case r == '#' && quote == noQuote:
+                       // Comment starts, ignore the rest of the line
+                       if current.Len() > 0 {
+                               result = append(result, current.String())
+                       }
+                       return result, nil
+               case unicode.IsSpace(r) && quote == noQuote:
+                       if current.Len() > 0 {
+                               result = append(result, current.String())
+                               current.Reset()
+                       }
+               default:
+                       current.WriteRune(r)
+               }
+       }
+
+       if quote != noQuote {
+               return nil, fmt.Errorf("unclosed quote in string")
+       }
+       if current.Len() > 0 {
+               result = append(result, current.String())
+       }
+       return result, nil
+}

Reply via email to