You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2024/06/21 07:12:52 UTC

(camel) branch main updated: CAMEL-20903: camel-jbang - Only load custom plugin if in use

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

davsclaus pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git


The following commit(s) were added to refs/heads/main by this push:
     new f8a47f3200a CAMEL-20903: camel-jbang - Only load custom plugin if in use
f8a47f3200a is described below

commit f8a47f3200a43ecc0830d497bb87b1f46a003af0
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Fri Jun 21 09:12:33 2024 +0200

    CAMEL-20903: camel-jbang - Only load custom plugin if in use
---
 .../camel/dsl/jbang/core/common/PluginHelper.java  | 28 ++++++++++++----------
 1 file changed, 16 insertions(+), 12 deletions(-)

diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/common/PluginHelper.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/common/PluginHelper.java
index 8559679b9e5..e41233f085c 100644
--- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/common/PluginHelper.java
+++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/common/PluginHelper.java
@@ -24,7 +24,6 @@ import java.nio.file.Files;
 import java.nio.file.StandardOpenOption;
 import java.util.Optional;
 import java.util.Properties;
-import java.util.stream.Stream;
 
 import org.apache.camel.RuntimeCamelException;
 import org.apache.camel.catalog.CamelCatalog;
@@ -70,7 +69,6 @@ public final class PluginHelper {
 
         // first arg is the command name (ie camel generate xxx)
         String target = args != null && args.length > 0 ? args[0] : null;
-        boolean verbose = args != null && Stream.of(args).anyMatch(a -> a.startsWith("--verbose"));
 
         if (config != null) {
             CamelCatalog catalog = new DefaultCamelCatalog();
@@ -82,24 +80,30 @@ public final class PluginHelper {
 
                 String name = properties.getOrDefault("name", pluginKey).toString();
                 String command = properties.getOrDefault("command", name).toString();
-
-                if (verbose) {
-                    main.getOut().println("Installed plugin: camel-jbang-plugin-" + command);
-                }
+                String firstVersion = properties.getOrDefault("firstVersion", "").toString();
 
                 // only load the plugin if the command-line is calling this plugin
                 if (target != null && !target.equals(command)) {
-                    if (verbose) {
-                        main.getOut().println("Plugin not in use: camel-jbang-plugin-" + command);
-                    }
                     continue;
                 }
 
+                // check if plugin version can be loaded (cannot if we use an older camel version than the plugin)
+                if (!firstVersion.isBlank()) {
+                    // compare versions without SNAPSHOT
+                    String source = version;
+                    if (source.endsWith("-SNAPSHOT")) {
+                        source = source.replace("-SNAPSHOT", "");
+                    }
+                    boolean accept = VersionHelper.isGE(source, firstVersion);
+                    if (!accept) {
+                        main.getOut().println("Cannot load plugin camel-jbang-plugin-" + command + " with version: " + version
+                                              + " because plugin has first version: " + firstVersion + ". Exit");
+                        main.quit(1);
+                    }
+                }
+
                 Optional<Plugin> plugin = FACTORY_FINDER.newInstance("camel-jbang-plugin-" + command, Plugin.class);
                 if (plugin.isEmpty()) {
-                    if (verbose) {
-                        main.getOut().println("Downloading plugin: camel-jbang-plugin-" + command);
-                    }
                     plugin = downloadPlugin(command, main, version);
                 }
                 if (plugin.isPresent()) {