This is an automated email from the ASF dual-hosted git repository.

astefanutti pushed a commit to branch release-1.3.x
in repository https://gitbox.apache.org/repos/asf/camel-k.git


The following commit(s) were added to refs/heads/release-1.3.x by this push:
     new 77a0956  fix: Consider ObjectMeta field for deep derivative comparison 
before patching
77a0956 is described below

commit 77a095600b512e82a6361ece67faa615157e893f
Author: Antonin Stefanutti <anto...@stefanutti.fr>
AuthorDate: Wed Feb 17 11:54:52 2021 +0100

    fix: Consider ObjectMeta field for deep derivative comparison before 
patching
---
 pkg/trait/deployer.go   |  7 ++++---
 pkg/util/patch/patch.go | 19 +++++++++++++++++++
 2 files changed, 23 insertions(+), 3 deletions(-)

diff --git a/pkg/trait/deployer.go b/pkg/trait/deployer.go
index 81aaee8..e21b0bd 100644
--- a/pkg/trait/deployer.go
+++ b/pkg/trait/deployer.go
@@ -94,9 +94,10 @@ func (t *deployerTrait) Apply(e *Environment) error {
                                        return err
                                }
 
-                               if !patch.SpecEqualDeepDerivative(object, 
resource) {
-                                       // If both objects have a "Spec" field 
and it contains all expected fields
-                                       // (plus optional others), then avoid 
patching
+                               // If both objects have "ObjectMeta" and "Spec" 
fields and they contain all the expected fields
+                               // (plus optional others), then avoid patching.
+                               if !patch.ObjectMetaEqualDeepDerivative(object, 
resource) ||
+                                       !patch.SpecEqualDeepDerivative(object, 
resource) {
 
                                        p, err := 
patch.PositiveMergePatch(object, resource)
                                        if err != nil {
diff --git a/pkg/util/patch/patch.go b/pkg/util/patch/patch.go
index 67c2813..e2c54b1 100644
--- a/pkg/util/patch/patch.go
+++ b/pkg/util/patch/patch.go
@@ -91,6 +91,25 @@ func removeNilValues(v reflect.Value, parent reflect.Value) {
        }
 }
 
+func ObjectMetaEqualDeepDerivative(object runtime.Object, expected 
runtime.Object) (res bool) {
+       defer func() {
+               if r := recover(); r != nil {
+                       res = false
+               }
+       }()
+
+       if expected == nil {
+               return true
+       } else if object == nil {
+               return false
+       }
+
+       objectMeta := 
reflect.ValueOf(object).Elem().FieldByName("ObjectMeta").Interface()
+       expectedMeta := 
reflect.ValueOf(expected).Elem().FieldByName("ObjectMeta").Interface()
+
+       return equality.Semantic.DeepDerivative(expectedMeta, objectMeta)
+}
+
 func SpecEqualDeepDerivative(object runtime.Object, expected runtime.Object) 
(res bool) {
        defer func() {
                if r := recover(); r != nil {

Reply via email to