Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package kumactl for openSUSE:Factory checked 
in at 2025-03-28 09:37:09
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/kumactl (Old)
 and      /work/SRC/openSUSE:Factory/.kumactl.new.2696 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "kumactl"

Fri Mar 28 09:37:09 2025 rev:9 rq:1264912 version:2.10.1

Changes:
--------
--- /work/SRC/openSUSE:Factory/kumactl/kumactl.changes  2025-03-20 
19:25:48.051643348 +0100
+++ /work/SRC/openSUSE:Factory/.kumactl.new.2696/kumactl.changes        
2025-03-28 09:37:59.334513534 +0100
@@ -1,0 +2,16 @@
+Fri Mar 28 05:46:56 UTC 2025 - opensuse_buildserv...@ojkastl.de
+
+- Update to version 2.10.1:
+  * chore(deps): upgrade golang version from 1.23.6 to 1.23.7
+    (#13247)
+  * chore(deps): upgrade envoy version from v1.32.4 to v1.32.5
+    (#13241)
+  * ci(update-insecure-dependencies): no need to use -u for go get
+    (backport of #13205) (#13208)
+  * perf(rules): add `withNegation` flag to simplify `to` policy
+    flow (backport of #13151) (#13193)
+  * chore(deps): upgrade envoy version from v1.32.3 to v.1.32.4
+    (#13159)
+  * chore(deps): security update (#13169)
+
+-------------------------------------------------------------------

Old:
----
  kumactl-2.10.0.obscpio

New:
----
  kumactl-2.10.1.obscpio

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

Other differences:
------------------
++++++ kumactl.spec ++++++
--- /var/tmp/diff_new_pack.Mw7ZPS/_old  2025-03-28 09:38:00.466560421 +0100
+++ /var/tmp/diff_new_pack.Mw7ZPS/_new  2025-03-28 09:38:00.466560421 +0100
@@ -17,7 +17,7 @@
 
 
 Name:           kumactl
-Version:        2.10.0
+Version:        2.10.1
 Release:        0
 Summary:        CLI for the Kuma service mesh
 License:        Apache-2.0

++++++ _service ++++++
--- /var/tmp/diff_new_pack.Mw7ZPS/_old  2025-03-28 09:38:00.498561746 +0100
+++ /var/tmp/diff_new_pack.Mw7ZPS/_new  2025-03-28 09:38:00.502561912 +0100
@@ -3,7 +3,7 @@
     <param name="url">https://github.com/kumahq/kuma</param>
     <param name="scm">git</param>
     <param name="exclude">.git</param>
-    <param name="revision">2.10.0</param>
+    <param name="revision">2.10.1</param>
     <param name="versionformat">@PARENT_TAG@</param>
     <param name="changesgenerate">enable</param>
     <param name="filename">kumactl</param>

++++++ _servicedata ++++++
--- /var/tmp/diff_new_pack.Mw7ZPS/_old  2025-03-28 09:38:00.518562574 +0100
+++ /var/tmp/diff_new_pack.Mw7ZPS/_new  2025-03-28 09:38:00.518562574 +0100
@@ -1,6 +1,6 @@
 <servicedata>
 <service name="tar_scm">
                 <param name="url">https://github.com/kumahq/kuma</param>
-              <param 
name="changesrevision">fed2256136e694d2a5deedb2490d382ee280fbbe</param></service></servicedata>
+              <param 
name="changesrevision">de16dff4b64312df4e1c112be993806311953614</param></service></servicedata>
 (No newline at EOF)
 

++++++ kumactl-2.10.0.obscpio -> kumactl-2.10.1.obscpio ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kumactl-2.10.0/go.mod new/kumactl-2.10.1/go.mod
--- old/kumactl-2.10.0/go.mod   2025-03-17 12:36:40.000000000 +0100
+++ new/kumactl-2.10.1/go.mod   2025-03-27 13:32:55.000000000 +0100
@@ -1,6 +1,6 @@
 module github.com/kumahq/kuma
 
-go 1.23.6
+go 1.23.7
 
 require (
        cirello.io/pglock v1.16.0
@@ -23,7 +23,7 @@
        github.com/go-logr/logr v1.4.2
        github.com/go-logr/zapr v1.3.0
        github.com/goburrow/cache v0.1.4
-       github.com/golang-jwt/jwt/v4 v4.5.1
+       github.com/golang-jwt/jwt/v4 v4.5.2
        github.com/golang-migrate/migrate/v4 v4.18.2
        github.com/golang/protobuf v1.5.4
        github.com/google/go-cmp v0.7.0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kumactl-2.10.0/go.sum new/kumactl-2.10.1/go.sum
--- old/kumactl-2.10.0/go.sum   2025-03-17 12:36:40.000000000 +0100
+++ new/kumactl-2.10.1/go.sum   2025-03-27 13:32:55.000000000 +0100
@@ -216,8 +216,8 @@
 github.com/gobwas/glob v0.2.3/go.mod 
h1:d3Ez4x06l9bZtSvzIay5+Yzi0fmZzPgnTbPcKjJAkT8=
 github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
 github.com/gogo/protobuf v1.3.2/go.mod 
h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
-github.com/golang-jwt/jwt/v4 v4.5.1 
h1:JdqV9zKUdtaa9gdPlywC3aeoEsR681PlKC+4F5gQgeo=
-github.com/golang-jwt/jwt/v4 v4.5.1/go.mod 
h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0=
+github.com/golang-jwt/jwt/v4 v4.5.2 
h1:YtQM7lnr8iZ+j5q71MGKkNw9Mn7AjHM68uc9g5fXeUI=
+github.com/golang-jwt/jwt/v4 v4.5.2/go.mod 
h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0=
 github.com/golang-migrate/migrate/v4 v4.18.2 
h1:2VSCMz7x7mjyTXx3m2zPokOY82LTRgxK1yQYKo6wWQ8=
 github.com/golang-migrate/migrate/v4 v4.18.2/go.mod 
h1:2CM6tJvn2kqPXwnXO/d3rAQYiyoIm180VsO8PRX6Rpk=
 github.com/golang/protobuf v1.5.4 
h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek=
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kumactl-2.10.0/mk/dependencies/deps.lock 
new/kumactl-2.10.1/mk/dependencies/deps.lock
--- old/kumactl-2.10.0/mk/dependencies/deps.lock        2025-03-17 
12:36:40.000000000 +0100
+++ new/kumactl-2.10.1/mk/dependencies/deps.lock        2025-03-27 
13:32:55.000000000 +0100
@@ -1 +1 @@
-8a262293b9f4e62e0d5318bccb9459508d3a6803
+fd948017ccc5d7bf3238b7b556d98970c9d4c055
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kumactl-2.10.0/mk/dev.mk new/kumactl-2.10.1/mk/dev.mk
--- old/kumactl-2.10.0/mk/dev.mk        2025-03-17 12:36:40.000000000 +0100
+++ new/kumactl-2.10.1/mk/dev.mk        2025-03-27 13:32:55.000000000 +0100
@@ -7,7 +7,7 @@
 GIT_COMMIT = $(word 3, $(BUILD_INFO))
 BUILD_DATE = $(word 4, $(BUILD_INFO))
 CI_TOOLS_VERSION = $(word 5, $(BUILD_INFO))
-ENVOY_VERSION ?= 1.32.3
+ENVOY_VERSION ?= 1.32.5
 KUMA_CHARTS_URL ?= https://kumahq.github.io/charts
 CHART_REPO_NAME ?= kuma
 PROJECT_NAME ?= kuma
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/kumactl-2.10.0/pkg/api-server/testdata/resources/inspect/dataplanes/_rules/meshhttproute.golden.json
 
new/kumactl-2.10.1/pkg/api-server/testdata/resources/inspect/dataplanes/_rules/meshhttproute.golden.json
--- 
old/kumactl-2.10.0/pkg/api-server/testdata/resources/inspect/dataplanes/_rules/meshhttproute.golden.json
    2025-03-17 12:36:40.000000000 +0100
+++ 
new/kumactl-2.10.1/pkg/api-server/testdata/resources/inspect/dataplanes/_rules/meshhttproute.golden.json
    2025-03-27 13:32:55.000000000 +0100
@@ -40,7 +40,15 @@
          "backendRefs": [
           {
            "kind": "MeshServiceSubset",
-           "name": "backend_kuma-demo_svc_3001",
+           "name": "other-svc",
+           "tags": {
+            "version": "1.0"
+           },
+           "weight": 1
+          },
+          {
+           "kind": "MeshServiceSubset",
+           "name": "other-svc-2",
            "tags": {
             "version": "1.0"
            },
@@ -55,14 +63,14 @@
       {
        "key": "kuma.io/service",
        "not": false,
-       "value": "backend_kuma-demo_svc_3001"
+       "value": "other-svc"
       }
      ],
      "origin": [
       {
        "labels": {},
        "mesh": "default",
-       "name": "the-http-route",
+       "name": "the-other-http-route",
        "type": "MeshHTTPRoute"
       }
      ]
@@ -83,15 +91,7 @@
          "backendRefs": [
           {
            "kind": "MeshServiceSubset",
-           "name": "other-svc",
-           "tags": {
-            "version": "1.0"
-           },
-           "weight": 1
-          },
-          {
-           "kind": "MeshServiceSubset",
-           "name": "other-svc-2",
+           "name": "backend_kuma-demo_svc_3001",
            "tags": {
             "version": "1.0"
            },
@@ -106,14 +106,14 @@
       {
        "key": "kuma.io/service",
        "not": false,
-       "value": "other-svc"
+       "value": "backend_kuma-demo_svc_3001"
       }
      ],
      "origin": [
       {
        "labels": {},
        "mesh": "default",
-       "name": "the-other-http-route",
+       "name": "the-http-route",
        "type": "MeshHTTPRoute"
       }
      ]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/kumactl-2.10.0/pkg/api-server/testdata/resources/inspect/dataplanes/_rules/overriding_meshtimeout.golden.json
 
new/kumactl-2.10.1/pkg/api-server/testdata/resources/inspect/dataplanes/_rules/overriding_meshtimeout.golden.json
--- 
old/kumactl-2.10.0/pkg/api-server/testdata/resources/inspect/dataplanes/_rules/overriding_meshtimeout.golden.json
   2025-03-17 12:36:40.000000000 +0100
+++ 
new/kumactl-2.10.1/pkg/api-server/testdata/resources/inspect/dataplanes/_rules/overriding_meshtimeout.golden.json
   2025-03-27 13:32:55.000000000 +0100
@@ -187,18 +187,7 @@
        "requestTimeout": "10s"
       }
      },
-     "matchers": [
-      {
-       "key": "kuma.io/service",
-       "not": true,
-       "value": "bar"
-      },
-      {
-       "key": "kuma.io/service",
-       "not": true,
-       "value": "foo"
-      }
-     ],
+     "matchers": [],
      "origin": [
       {
        "labels": {},
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/kumactl-2.10.0/pkg/api-server/testdata/resources/inspect/dataplanes/_rules/resource_rule_meshtimeout_index.golden.json
 
new/kumactl-2.10.1/pkg/api-server/testdata/resources/inspect/dataplanes/_rules/resource_rule_meshtimeout_index.golden.json
--- 
old/kumactl-2.10.0/pkg/api-server/testdata/resources/inspect/dataplanes/_rules/resource_rule_meshtimeout_index.golden.json
  2025-03-17 12:36:40.000000000 +0100
+++ 
new/kumactl-2.10.1/pkg/api-server/testdata/resources/inspect/dataplanes/_rules/resource_rule_meshtimeout_index.golden.json
  2025-03-27 13:32:55.000000000 +0100
@@ -46,17 +46,17 @@
    "toRules": [
     {
      "conf": {
-      "connectionTimeout": "7s",
-      "idleTimeout": "7s",
+      "connectionTimeout": "5s",
+      "idleTimeout": "5s",
       "http": {
-       "requestTimeout": "7s"
+       "requestTimeout": "5s"
       }
      },
      "matchers": [
       {
        "key": "kuma.io/service",
        "not": false,
-       "value": "backend-4"
+       "value": ""
       }
      ],
      "origin": [
@@ -70,17 +70,17 @@
     },
     {
      "conf": {
-      "connectionTimeout": "5s",
-      "idleTimeout": "5s",
+      "connectionTimeout": "7s",
+      "idleTimeout": "7s",
       "http": {
-       "requestTimeout": "5s"
+       "requestTimeout": "7s"
       }
      },
      "matchers": [
       {
        "key": "kuma.io/service",
        "not": false,
-       "value": ""
+       "value": "backend-4"
       }
      ],
      "origin": [
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/kumactl-2.10.0/pkg/plugins/policies/core/matchers/egress.go 
new/kumactl-2.10.1/pkg/plugins/policies/core/matchers/egress.go
--- old/kumactl-2.10.0/pkg/plugins/policies/core/matchers/egress.go     
2025-03-17 12:36:40.000000000 +0100
+++ new/kumactl-2.10.1/pkg/plugins/policies/core/matchers/egress.go     
2025-03-27 13:32:55.000000000 +0100
@@ -190,7 +190,7 @@
                }
        }
 
-       rules, err := core_rules.BuildRules(toList)
+       rules, err := core_rules.BuildRules(toList, false)
        if err != nil {
                return core_rules.FromRules{}, err
        }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/kumactl-2.10.0/pkg/plugins/policies/core/matchers/testdata/matchedpolicies/torules/03.golden.yaml
 
new/kumactl-2.10.1/pkg/plugins/policies/core/matchers/testdata/matchedpolicies/torules/03.golden.yaml
--- 
old/kumactl-2.10.0/pkg/plugins/policies/core/matchers/testdata/matchedpolicies/torules/03.golden.yaml
       2025-03-17 12:36:40.000000000 +0100
+++ 
new/kumactl-2.10.1/pkg/plugins/policies/core/matchers/testdata/matchedpolicies/torules/03.golden.yaml
       2025-03-27 13:32:55.000000000 +0100
@@ -8,7 +8,7 @@
   - creationTime: "0001-01-01T00:00:00Z"
     mesh: mesh-1
     modificationTime: "0001-01-01T00:00:00Z"
-    name: mtp-2
+    name: mtp-3
     type: MeshTimeout
   - creationTime: "0001-01-01T00:00:00Z"
     mesh: mesh-1
@@ -25,12 +25,12 @@
 - BackendRefOriginIndex: {}
   Conf:
     http:
-      requestTimeout: 3s
+      requestTimeout: 2s
   Origin:
   - creationTime: "0001-01-01T00:00:00Z"
     mesh: mesh-1
     modificationTime: "0001-01-01T00:00:00Z"
-    name: mtp-2
+    name: mtp-3
     type: MeshTimeout
   Subset:
   - Key: __rule-matches-hash__
@@ -39,37 +39,3 @@
   - Key: kuma.io/service
     Not: false
     Value: test-server
-- BackendRefOriginIndex: {}
-  Conf:
-    http:
-      requestTimeout: 3s
-  Origin:
-  - creationTime: "0001-01-01T00:00:00Z"
-    mesh: mesh-1
-    modificationTime: "0001-01-01T00:00:00Z"
-    name: mtp-2
-    type: MeshTimeout
-  Subset:
-  - Key: __rule-matches-hash__
-    Not: false
-    Value: JNNc6//C3P17nUsOJm5f4kqG+U3v8pXhS0od9C3+oss=
-  - Key: kuma.io/service
-    Not: true
-    Value: test-server
-- BackendRefOriginIndex: {}
-  Conf:
-    http:
-      requestTimeout: 3s
-  Origin:
-  - creationTime: "0001-01-01T00:00:00Z"
-    mesh: mesh-1
-    modificationTime: "0001-01-01T00:00:00Z"
-    name: mtp-2
-    type: MeshTimeout
-  Subset:
-  - Key: __rule-matches-hash__
-    Not: true
-    Value: JNNc6//C3P17nUsOJm5f4kqG+U3v8pXhS0od9C3+oss=
-  - Key: kuma.io/service
-    Not: true
-    Value: test-server
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/kumactl-2.10.0/pkg/plugins/policies/core/matchers/testdata/matchedpolicies/torules/03.policies.yaml
 
new/kumactl-2.10.1/pkg/plugins/policies/core/matchers/testdata/matchedpolicies/torules/03.policies.yaml
--- 
old/kumactl-2.10.0/pkg/plugins/policies/core/matchers/testdata/matchedpolicies/torules/03.policies.yaml
     2025-03-17 12:36:40.000000000 +0100
+++ 
new/kumactl-2.10.1/pkg/plugins/policies/core/matchers/testdata/matchedpolicies/torules/03.policies.yaml
     2025-03-27 13:32:55.000000000 +0100
@@ -43,3 +43,16 @@
       default:
         http:
           requestTimeout: 3s
+type: MeshTimeout
+mesh: mesh-1
+name: mtp-3
+spec:
+  targetRef:
+    kind: Mesh
+  to:
+    - targetRef:
+        kind: MeshService
+        name: test-server
+      default:
+        http:
+          requestTimeout: 2s
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/kumactl-2.10.0/pkg/plugins/policies/core/rules/rules.go 
new/kumactl-2.10.1/pkg/plugins/policies/core/rules/rules.go
--- old/kumactl-2.10.0/pkg/plugins/policies/core/rules/rules.go 2025-03-17 
12:36:40.000000000 +0100
+++ new/kumactl-2.10.1/pkg/plugins/policies/core/rules/rules.go 2025-03-27 
13:32:55.000000000 +0100
@@ -200,7 +200,7 @@
                        }
                        fromList = append(fromList, 
BuildPolicyItemsWithMeta(policyWithFrom.GetFromList(), p.GetMeta(), 
policyWithFrom.GetTargetRef())...)
                }
-               rules, err := BuildRules(fromList)
+               rules, err := BuildRules(fromList, true)
                if err != nil {
                        return FromRules{}, err
                }
@@ -224,7 +224,7 @@
                return ToRules{}, err
        }
 
-       rules, err := BuildRules(toList)
+       rules, err := BuildRules(toList, false)
        if err != nil {
                return ToRules{}, err
        }
@@ -392,7 +392,7 @@
                items = append(items, item)
        }
 
-       rules, err := BuildRules(items)
+       rules, err := BuildRules(items, false)
        if err != nil {
                return SingleItemRules{}, err
        }
@@ -403,9 +403,11 @@
 // BuildRules creates a list of rules with negations sorted by the number of 
positive tags.
 // If rules with negative tags are filtered out then the order becomes 'most 
specific to less specific'.
 // Filtering out of negative rules could be useful for XDS generators that 
don't have a way to configure negations.
+// In case of `to` policies we don't need to check negations since only 
possible value for `to` is either Mesh
+// which has empty subset or kuma.io/service.
 //
 // See the detailed algorithm description in 
docs/madr/decisions/007-mesh-traffic-permission.md
-func BuildRules(list []PolicyItemWithMeta) (Rules, error) {
+func BuildRules(list []PolicyItemWithMeta, withNegations bool) (Rules, error) {
        rules := Rules{}
        oldKindsItems := []PolicyItemWithMeta{}
        for _, item := range list {
@@ -417,6 +419,7 @@
                return rules, nil
        }
 
+       uniqueKeys := map[string]struct{}{}
        // 1. Convert list of rules into the list of subsets
        var subsets []subsetutils.Subset
        for _, item := range oldKindsItems {
@@ -424,9 +427,36 @@
                if err != nil {
                        return nil, err
                }
+               for _, tag := range ss {
+                       uniqueKeys[tag.Key] = struct{}{}
+               }
                subsets = append(subsets, ss)
        }
 
+       // we don't need to generate all permutations when there is no negations
+       // and we have only 0 or one tag, in other cases we need to generate.
+       // in case of `to` policies it can happen when using top target ref 
MeshGateway,
+       // for policy MeshHTTPRoute.
+       if !withNegations && len(uniqueKeys) <= 1 {
+               // deduplicate subsets
+               subsets = subsetutils.Deduplicate(subsets)
+
+               for _, ss := range subsets {
+                       if r, err := createRule(ss, oldKindsItems); err != nil {
+                               return nil, err
+                       } else {
+                               rules = append(rules, r...)
+                       }
+               }
+
+               sort.SliceStable(rules, func(i, j int) bool {
+                       // resource with more tags should be first
+                       return len(rules[i].Subset) > len(rules[j].Subset)
+               })
+
+               return rules, nil
+       }
+
        // 2. Create a graph where nodes are subsets and edge exists between 2 
subsets only if there is an intersection
        g := simple.NewUndirectedGraph()
 
@@ -477,39 +507,12 @@
                        if ss == nil {
                                break
                        }
-                       // 5. For each combination determine a configuration
-                       confs := []interface{}{}
-                       var relevant []PolicyItemWithMeta
-                       for i := 0; i < len(oldKindsItems); i++ {
-                               item := oldKindsItems[i]
-                               itemSubset, err := asSubset(item.GetTargetRef())
-                               if err != nil {
-                                       return nil, err
-                               }
-                               if itemSubset.IsSubset(ss) {
-                                       confs = append(confs, item.GetDefault())
-                                       relevant = append(relevant, item)
-                               }
-                       }
 
-                       if len(relevant) > 0 {
-                               merged, err := merge.Confs(confs)
-                               if err != nil {
-                                       return nil, err
-                               }
-                               ruleOrigins, originIndex := 
common.Origins(relevant, false)
-                               resourceMetas := 
make([]core_model.ResourceMeta, 0, len(ruleOrigins))
-                               for _, o := range ruleOrigins {
-                                       resourceMetas = append(resourceMetas, 
o.Resource)
-                               }
-                               for _, mergedRule := range merged {
-                                       rules = append(rules, &Rule{
-                                               Subset:                ss,
-                                               Conf:                  
mergedRule,
-                                               Origin:                
resourceMetas,
-                                               BackendRefOriginIndex: 
originIndex,
-                                       })
-                               }
+                       // 5. For each combination determine a configuration
+                       if r, err := createRule(ss, oldKindsItems); err != nil {
+                               return nil, err
+                       } else {
+                               rules = append(rules, r...)
                        }
                }
        }
@@ -520,6 +523,45 @@
 
        return rules, nil
 }
+
+func createRule(ss subsetutils.Subset, items []PolicyItemWithMeta) ([]*Rule, 
error) {
+       rules := []*Rule{}
+       confs := []interface{}{}
+       var relevant []PolicyItemWithMeta
+       for i := 0; i < len(items); i++ {
+               item := items[i]
+               itemSubset, err := asSubset(item.GetTargetRef())
+               if err != nil {
+                       return nil, err
+               }
+               if itemSubset.IsSubset(ss) {
+                       confs = append(confs, item.GetDefault())
+                       relevant = append(relevant, item)
+               }
+       }
+
+       if len(relevant) > 0 {
+               merged, err := merge.Confs(confs)
+               if err != nil {
+                       return nil, err
+               }
+               ruleOrigins, originIndex := common.Origins(relevant, false)
+               resourceMetas := make([]core_model.ResourceMeta, 0, 
len(ruleOrigins))
+               for _, o := range ruleOrigins {
+                       resourceMetas = append(resourceMetas, o.Resource)
+               }
+               for _, mergedRule := range merged {
+                       rules = append(rules, &Rule{
+                               Subset:                ss,
+                               Conf:                  mergedRule,
+                               Origin:                resourceMetas,
+                               BackendRefOriginIndex: originIndex,
+                       })
+               }
+       }
+
+       return rules, nil
+}
 
 func sortComponents(components [][]graph.Node) {
        for _, c := range components {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/kumactl-2.10.0/pkg/plugins/policies/core/rules/subsetutils/subset.go 
new/kumactl-2.10.1/pkg/plugins/policies/core/rules/subsetutils/subset.go
--- old/kumactl-2.10.0/pkg/plugins/policies/core/rules/subsetutils/subset.go    
2025-03-17 12:36:40.000000000 +0100
+++ new/kumactl-2.10.1/pkg/plugins/policies/core/rules/subsetutils/subset.go    
2025-03-27 13:32:55.000000000 +0100
@@ -2,6 +2,8 @@
 
 import (
        "maps"
+       "sort"
+       "strings"
 
        mesh_proto "github.com/kumahq/kuma/api/mesh/v1alpha1"
        util_maps "github.com/kumahq/kuma/pkg/util/maps"
@@ -251,6 +253,18 @@
        return pos
 }
 
+func (ss Subset) Sorted() {
+       sort.SliceStable(ss, func(i, j int) bool {
+               if ss[i].Key != ss[j].Key {
+                       return ss[i].Key < ss[j].Key
+               }
+               if ss[i].Value != ss[j].Value {
+                       return ss[i].Value < ss[j].Value
+               }
+               return !ss[i].Not && ss[j].Not
+       })
+}
+
 func (ss Subset) IndexOfPositive() int {
        for i, t := range ss {
                if !t.Not {
@@ -310,10 +324,8 @@
 // If tags are contradicted (same keys have different positive value) then the 
function
 // returns nil.
 func (c *SubsetIter) simplified() Subset {
-       result := Subset{}
-
-       ssByKey := map[string]Subset{}
-       keyOrder := []string{}
+       ssByKey := make(map[string]Subset, len(c.current))
+       keyOrder := make([]string, 0, len(c.current))
        for _, t := range c.current {
                if _, ok := ssByKey[t.Key]; !ok {
                        keyOrder = append(keyOrder, t.Key)
@@ -321,6 +333,7 @@
                ssByKey[t.Key] = append(ssByKey[t.Key], Tag{Key: t.Key, Value: 
t.Value, Not: t.Not})
        }
 
+       result := make(Subset, 0, len(c.current))
        for _, key := range keyOrder {
                ss := ssByKey[key]
                positive := ss.NumPositive()
@@ -337,3 +350,43 @@
 
        return result
 }
+
+// Deduplicate returns a new slice of subsetutils.Subset with duplicates 
removed.
+func Deduplicate(subsets []Subset) []Subset {
+       seen := make(map[string]struct{})
+       result := make([]Subset, 0, len(subsets))
+
+       for _, s := range subsets {
+               key := canonicalSubset(s)
+               if _, exists := seen[key]; !exists {
+                       seen[key] = struct{}{}
+                       result = append(result, s)
+               }
+       }
+       return result
+}
+
+// canonicalSubset returns a canonical string representation for a subset.
+// It assumes that a subset is a slice of subsetutils.Tag with fields Key, 
Value, and Not.
+func canonicalSubset(s Subset) string {
+       if len(s) == 0 {
+               return ""
+       }
+       s.Sorted()
+       var sb strings.Builder
+       for i, t := range s {
+               if i > 0 {
+                       sb.WriteByte('|') // Separator
+               }
+               sb.WriteString(t.Key)
+               sb.WriteByte(':')
+               sb.WriteString(t.Value)
+               sb.WriteByte(':')
+               if t.Not {
+                       sb.WriteByte('1')
+               } else {
+                       sb.WriteByte('0')
+               }
+       }
+       return sb.String()
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/kumactl-2.10.0/pkg/plugins/policies/core/rules/testdata/rules/to/meshtimeout.golden.yaml
 
new/kumactl-2.10.1/pkg/plugins/policies/core/rules/testdata/rules/to/meshtimeout.golden.yaml
--- 
old/kumactl-2.10.0/pkg/plugins/policies/core/rules/testdata/rules/to/meshtimeout.golden.yaml
        2025-03-17 12:36:40.000000000 +0100
+++ 
new/kumactl-2.10.1/pkg/plugins/policies/core/rules/testdata/rules/to/meshtimeout.golden.yaml
        2025-03-27 13:32:55.000000000 +0100
@@ -54,10 +54,4 @@
     modificationTime: "0001-01-01T00:00:00Z"
     name: default
     type: MeshTimeout
-  Subset:
-  - Key: kuma.io/service
-    Not: true
-    Value: bar
-  - Key: kuma.io/service
-    Not: true
-    Value: foo
+  Subset: []
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/kumactl-2.10.0/pkg/plugins/policies/core/rules/testdata/rules/to/single-to.golden.yaml
 
new/kumactl-2.10.1/pkg/plugins/policies/core/rules/testdata/rules/to/single-to.golden.yaml
--- 
old/kumactl-2.10.0/pkg/plugins/policies/core/rules/testdata/rules/to/single-to.golden.yaml
  2025-03-17 12:36:40.000000000 +0100
+++ 
new/kumactl-2.10.1/pkg/plugins/policies/core/rules/testdata/rules/to/single-to.golden.yaml
  2025-03-27 13:32:55.000000000 +0100
@@ -29,7 +29,4 @@
     modificationTime: "0001-01-01T00:00:00Z"
     name: retry-1
     type: MeshRetry
-  Subset:
-  - Key: kuma.io/service
-    Not: true
-    Value: backend
+  Subset: []
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/kumactl-2.10.0/tools/ci/update-vulnerable-dependencies/update-vulnerable-dependencies.sh
 
new/kumactl-2.10.1/tools/ci/update-vulnerable-dependencies/update-vulnerable-dependencies.sh
--- 
old/kumactl-2.10.0/tools/ci/update-vulnerable-dependencies/update-vulnerable-dependencies.sh
        2025-03-17 12:36:40.000000000 +0100
+++ 
new/kumactl-2.10.1/tools/ci/update-vulnerable-dependencies/update-vulnerable-dependencies.sh
        2025-03-27 13:32:55.000000000 +0100
@@ -37,7 +37,7 @@
     if [[ "$package" == "stdlib" ]]; then
       go mod edit -go="$fixVersion"
     else
-      go get -u "$package"@v"$fixVersion"
+      go get "$package"@v"$fixVersion"
     fi
   fi
 done

++++++ kumactl.obsinfo ++++++
--- /var/tmp/diff_new_pack.Mw7ZPS/_old  2025-03-28 09:38:02.462643092 +0100
+++ /var/tmp/diff_new_pack.Mw7ZPS/_new  2025-03-28 09:38:02.466643257 +0100
@@ -1,5 +1,5 @@
 name: kumactl
-version: 2.10.0
-mtime: 1742211400
-commit: fed2256136e694d2a5deedb2490d382ee280fbbe
+version: 2.10.1
+mtime: 1743078775
+commit: de16dff4b64312df4e1c112be993806311953614
 

++++++ vendor.tar.gz ++++++
/work/SRC/openSUSE:Factory/kumactl/vendor.tar.gz 
/work/SRC/openSUSE:Factory/.kumactl.new.2696/vendor.tar.gz differ: char 5, line 
1

Reply via email to