Related to #1190: do not patch if same content and split big tests
diff --git a/e2e/init_test.go b/e2e/init_test.go
new file mode 100644
index 0000000..82cbe53
--- /dev/null
+++ b/e2e/init_test.go
@@ -0,0 +1,63 @@
+// +build integration
+
+// To enable compilation of this file in Goland, go to "Settings -> Go -> Vendoring & Build Tags -> Custom Tags" and add "integration"
+
+/*
+Licensed to the Apache Software Foundation (ASF) under one or more
+contributor license agreements.  See the NOTICE file distributed with
+this work for additional information regarding copyright ownership.
+The ASF licenses this file to You 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.
+*/
+
+package e2e
+
+import (
+	"fmt"
+	"path"
+	"testing"
+	"time"
+
+	"github.com/apache/camel-k/e2e/util"
+	camelv1 "github.com/apache/camel-k/pkg/apis/camel/v1"
+	. "github.com/onsi/gomega"
+	v1 "k8s.io/api/core/v1"
+)
+
+func TestRunInitGeneratedExamples(t *testing.T) {
+	withNewTestNamespace(t, func(ns string) {
+		Expect(kamel("install", "-n", ns).Execute()).Should(BeNil())
+
+		for _, lang := range camelv1.Languages {
+			t.Run("init run "+string(lang), func(t *testing.T) {
+				RegisterTestingT(t)
+				dir := util.MakeTempDir(t)
+				itName := fmt.Sprintf("init%s", string(lang))          // e.g. initjava
+				fileName := fmt.Sprintf("%s.%s", itName, string(lang)) // e.g. initjava.java
+				file := path.Join(dir, fileName)
+				Expect(kamel("init", file).Execute()).Should(BeNil())
+				Expect(kamel("run", "-n", ns, file).Execute()).Should(BeNil())
+				Eventually(integrationPodPhase(ns, itName), 5*time.Minute).Should(Equal(v1.PodRunning))
+				Eventually(integrationLogs(ns, itName), 1*time.Minute).Should(ContainSubstring(languageInitExpectedString(lang)))
+				Expect(kamel("delete", "--all", "-n", ns).Execute()).Should(BeNil())
+			})
+		}
+	})
+}
+
+func languageInitExpectedString(lang camelv1.Language) string {
+	langDesc := string(lang)
+	if lang == camelv1.LanguageKotlin {
+		langDesc = "kotlin"
+	}
+	return fmt.Sprintf(" Hello Camel K from %s", langDesc)
+}
diff --git a/e2e/run_test.go b/e2e/run_test.go
index 9eb83b6..46bb010 100644
--- a/e2e/run_test.go
+++ b/e2e/run_test.go
@@ -22,13 +22,9 @@
 package e2e
 
 import (
-	"fmt"
-	"path"
 	"testing"
 	"time"
 
-	"github.com/apache/camel-k/e2e/util"
-	camelv1 "github.com/apache/camel-k/pkg/apis/camel/v1"
 	. "github.com/onsi/gomega"
 	v1 "k8s.io/api/core/v1"
 )
@@ -102,27 +98,5 @@
 			Expect(kamel("delete", "--all", "-n", ns).Execute()).Should(BeNil())
 		})
 
-		for _, lang := range camelv1.Languages {
-			t.Run("init run "+string(lang), func(t *testing.T) {
-				RegisterTestingT(t)
-				dir := util.MakeTempDir(t)
-				itName := fmt.Sprintf("init%s", string(lang))          // e.g. initjava
-				fileName := fmt.Sprintf("%s.%s", itName, string(lang)) // e.g. initjava.java
-				file := path.Join(dir, fileName)
-				Expect(kamel("init", file).Execute()).Should(BeNil())
-				Expect(kamel("run", "-n", ns, file).Execute()).Should(BeNil())
-				Eventually(integrationPodPhase(ns, itName), 5*time.Minute).Should(Equal(v1.PodRunning))
-				Eventually(integrationLogs(ns, itName), 1*time.Minute).Should(ContainSubstring(languageInitExpectedString(lang)))
-				Expect(kamel("delete", "--all", "-n", ns).Execute()).Should(BeNil())
-			})
-		}
 	})
 }
-
-func languageInitExpectedString(lang camelv1.Language) string {
-	langDesc := string(lang)
-	if lang == camelv1.LanguageKotlin {
-		langDesc = "kotlin"
-	}
-	return fmt.Sprintf(" Hello Camel K from %s", langDesc)
-}
diff --git a/pkg/cmd/builder/builder.go b/pkg/cmd/builder/builder.go
index b8d2f28..aec4c99 100644
--- a/pkg/cmd/builder/builder.go
+++ b/pkg/cmd/builder/builder.go
@@ -88,10 +88,14 @@
 	// Patch the build status with the result
 	p, err := patch.PositiveMergePatch(build, target)
 	exitOnError(err, "cannot create merge patch")
-	exitOnError(
-		c.Status().Patch(ctx, target, controller.ConstantPatch(types.MergePatchType, p)),
-		fmt.Sprintf("\n--- patch ---\n%s\n-------------\n", string(p)),
-	)
+	if len(p) > 0 {
+		exitOnError(
+			c.Status().Patch(ctx, target, controller.ConstantPatch(types.MergePatchType, p)),
+			fmt.Sprintf("\n--- patch ---\n%s\n-------------\n", string(p)),
+		)
+	} else {
+		log.Info("Patch not applied (no difference)")
+	}
 	build.Status = target.Status
 
 	switch build.Status.Phase {