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 55aef62e0131 CAMEL-26931: camel-jbang - a file that does not exist
exits 66 in camel export, camel dependency and camel transform route (#29941)
55aef62e0131 is described below
commit 55aef62e01314ee7633a5fad9f4247c43e01b6fc
Author: Claus Ibsen <[email protected]>
AuthorDate: Sat Nov 14 19:30:26 2026 +0100
CAMEL-26931: camel-jbang - a file that does not exist exits 66 in camel
export, camel dependency and camel transform route (#29941)
camel export and camel dependency list, copy and sbom printed 'Path does
not exist' on stdout
and exited 1, and camel transform route exited 1 without naming the file
(except with
--format=java). They exit 66 with the message on stderr, as camel run.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
---
.../ROOT/pages/camel-4x-upgrade-guide-4_24.adoc | 5 +++--
.../dsl/jbang/core/commands/TransformRoute.java | 8 ++++++++
.../jbang/core/commands/TransformRouteTest.java | 24 +++++++++++-----------
.../commands/kubernetes/KubernetesRunTest.java | 4 +++-
.../dsl/jbang/run/export/ProjectExporter.java | 6 ++++--
.../dsl/jbang/run/export/ProjectExporterTest.java | 7 +++++--
6 files changed, 35 insertions(+), 19 deletions(-)
diff --git
a/docs/user-manual/modules/ROOT/pages/camel-4x-upgrade-guide-4_24.adoc
b/docs/user-manual/modules/ROOT/pages/camel-4x-upgrade-guide-4_24.adoc
index 11304a49a80c..92eaa8b11639 100644
--- a/docs/user-manual/modules/ROOT/pages/camel-4x-upgrade-guide-4_24.adoc
+++ b/docs/user-manual/modules/ROOT/pages/camel-4x-upgrade-guide-4_24.adoc
@@ -2798,8 +2798,9 @@ A script that checks the exit code of a command must take
these changes into acc
`--brief` or `--description`, as the text output: these options were ignored
with `--json`. A filter that matches no
route exits with `3` instead of `0` with all the routes.
* A file or directory that does not exist exits with `66` instead of `1`: a
source file or `--source-dir` of
- `camel run`, the route file of `camel explain` and `camel harden` (checked
before the LLM is contacted), and the
- `pom.xml` of `camel dependency runtime`.
+ `camel run`, the route file of `camel explain` and `camel harden` (checked
before the LLM is contacted), the
+ `pom.xml` of `camel dependency runtime`, a file of `camel export`, `camel
kubernetes run` and `camel dependency list`, `copy` and `sbom`
+ (whose "Path does not exist" is now on stderr), and a file of `camel
transform route`, which now names it.
* A name that does not exist exits with `3` instead of `1`: the Kamelet of
`camel init --from-kamelet`, the service of
`camel infra run`, the key of `camel config get`, the name given to `camel
doc`, and the plugin of
`camel plugin delete`.
diff --git
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/TransformRoute.java
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/TransformRoute.java
index 9007c4785b10..de3be039f90c 100644
---
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/TransformRoute.java
+++
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/TransformRoute.java
@@ -38,6 +38,7 @@ import
org.apache.camel.dsl.jbang.core.common.CommandLineHelper;
import org.apache.camel.dsl.jbang.core.common.CompletionCandidates;
import org.apache.camel.dsl.jbang.run.common.CamelJBangConstants;
import org.apache.camel.main.KameletMain;
+import org.apache.camel.support.ResourceHelper;
import org.apache.camel.util.IOHelper;
import org.apache.camel.util.StopWatch;
@@ -114,6 +115,13 @@ public class TransformRoute extends CamelCommand {
if (!"xml".equals(format) && !"yaml".equals(format) &&
!"java".equals(format)) {
throw CliException.usage("--format must be xml, yaml or java, was:
" + format);
}
+ for (String file : files) {
+ // the file it cannot find by its name: it exited 1 without saying
which file, except for --format=java
+ // (CAMEL-26931)
+ if (!ResourceHelper.hasScheme(file) && !file.startsWith("github:")
&& !Files.exists(Path.of(file))) {
+ throw CliException.fileNotFound("File does not exist: " +
file);
+ }
+ }
if ("java".equals(format)) {
return transformToJava();
}
diff --git
a/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/TransformRouteTest.java
b/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/TransformRouteTest.java
index 54aa9bb0f516..5d76b0704a88 100644
---
a/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/TransformRouteTest.java
+++
b/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/TransformRouteTest.java
@@ -17,22 +17,21 @@
package org.apache.camel.dsl.jbang.core.commands;
import java.nio.file.Files;
-import java.nio.file.NoSuchFileException;
import java.nio.file.Path;
import java.util.Arrays;
import java.util.List;
-import
org.apache.camel.dsl.jbang.core.commands.exceptionhandler.CliExecutionExceptionHandler;
import org.apache.camel.dsl.jbang.core.common.CliException;
import org.apache.camel.dsl.jbang.core.common.CliExitCode;
import org.apache.camel.dsl.jbang.core.common.CommandLineTestHelper;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.io.TempDir;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.ValueSource;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatThrownBy;
-import static org.assertj.core.api.Assertions.catchThrowable;
/**
* camel transform route: a route in another DSL, printed or written to a file
or directory.
@@ -124,16 +123,17 @@ class TransformRouteTest extends
CamelCommandBaseTestSupport {
.hasMessage("--format must be xml, yaml or java, was: json");
}
- @Test
- void aFileThatDoesNotExistIsNotFound() {
- TransformRoute command =
command(List.of(dir.resolve("nope.camel.yaml").toString()), "--format=java");
-
- Throwable e = catchThrowable(command::doCall);
+ @ParameterizedTest
+ @ValueSource(strings = { "--format=java", "--format=xml", "--format=yaml"
})
+ void aFileThatDoesNotExistIsNotFound(String format) {
+ // for xml and yaml it exited 1 without saying which file (CAMEL-26931)
+ String file = dir.resolve("nope.camel.yaml").toString();
+ TransformRoute command = command(List.of(file), format);
- assertThat(e).isInstanceOf(NoSuchFileException.class);
- // which the CLI ends with exit code 66
- assertThat(new CliExecutionExceptionHandler(new
CamelJBangMain()).getExitCode(e))
- .isEqualTo(CliExitCode.FILE_NOT_FOUND);
+ assertThatThrownBy(command::doCall)
+ .isInstanceOfSatisfying(CliException.class,
+ e ->
assertThat(e.getExitCode()).isEqualTo(CliExitCode.FILE_NOT_FOUND))
+ .hasMessage("File does not exist: " + file);
}
@Test
diff --git
a/dsl/camel-jbang/camel-jbang-plugin-kubernetes/src/test/java/org/apache/camel/dsl/jbang/core/commands/kubernetes/KubernetesRunTest.java
b/dsl/camel-jbang/camel-jbang-plugin-kubernetes/src/test/java/org/apache/camel/dsl/jbang/core/commands/kubernetes/KubernetesRunTest.java
index 572a504b621a..f614356670d7 100644
---
a/dsl/camel-jbang/camel-jbang-plugin-kubernetes/src/test/java/org/apache/camel/dsl/jbang/core/commands/kubernetes/KubernetesRunTest.java
+++
b/dsl/camel-jbang/camel-jbang-plugin-kubernetes/src/test/java/org/apache/camel/dsl/jbang/core/commands/kubernetes/KubernetesRunTest.java
@@ -75,9 +75,11 @@ class KubernetesRunTest extends KubernetesBaseTestSupport {
"--disable-auto=true", "--output=yaml", "--runtime=" +
rt.runtime(), "--java-version=21");
int exit = command.doCall();
- Assertions.assertEquals(1, exit);
+ // a file that does not exist, as camel export and camel run say it
(CAMEL-26931)
+ Assertions.assertEquals(66, exit);
Assertions.assertTrue(printer.getOutput().contains("ERROR: Project
export failed!"));
+ Assertions.assertTrue(printer.getStderr().contains("Path does not
exist: mickey-mouse.groovy"), printer.getStderr());
}
@Test
diff --git
a/dsl/camel-jbang/camel-jbang-run/src/main/java/org/apache/camel/dsl/jbang/run/export/ProjectExporter.java
b/dsl/camel-jbang/camel-jbang-run/src/main/java/org/apache/camel/dsl/jbang/run/export/ProjectExporter.java
index 17ec601ece7b..1bd51b2222cd 100644
---
a/dsl/camel-jbang/camel-jbang-run/src/main/java/org/apache/camel/dsl/jbang/run/export/ProjectExporter.java
+++
b/dsl/camel-jbang/camel-jbang-run/src/main/java/org/apache/camel/dsl/jbang/run/export/ProjectExporter.java
@@ -23,6 +23,7 @@ import java.nio.file.Paths;
import java.util.List;
import java.util.Properties;
+import org.apache.camel.dsl.jbang.run.RunPipeline;
import org.apache.camel.dsl.jbang.run.common.CamelJBangConstants;
import org.apache.camel.dsl.jbang.run.common.ExportHelper;
import org.apache.camel.dsl.jbang.run.common.MavenResolver;
@@ -173,8 +174,9 @@ public class ProjectExporter {
try {
verifyExportFiles(request.files);
} catch (FileNotFoundException ex) {
- printer().println(ex.getMessage());
- return 1;
+ // as camel run: on stderr, and exit 66; it was on stdout, with
exit 1 (CAMEL-26931)
+ printer().printErr(ex.getMessage());
+ return RunPipeline.FILE_NOT_FOUND;
}
ExportRequest copy = new ExportRequest(request);
diff --git
a/dsl/camel-jbang/camel-jbang-run/src/test/java/org/apache/camel/dsl/jbang/run/export/ProjectExporterTest.java
b/dsl/camel-jbang/camel-jbang-run/src/test/java/org/apache/camel/dsl/jbang/run/export/ProjectExporterTest.java
index 796f798f2e9a..65379af23339 100644
---
a/dsl/camel-jbang/camel-jbang-run/src/test/java/org/apache/camel/dsl/jbang/run/export/ProjectExporterTest.java
+++
b/dsl/camel-jbang/camel-jbang-run/src/test/java/org/apache/camel/dsl/jbang/run/export/ProjectExporterTest.java
@@ -35,6 +35,7 @@ import java.util.stream.Stream;
import javax.xml.xpath.XPathFactory;
+import org.apache.camel.dsl.jbang.run.RunPipeline;
import org.apache.camel.dsl.jbang.run.common.CamelHome;
import org.apache.camel.dsl.jbang.run.common.ExportHelper;
import org.apache.camel.dsl.jbang.run.common.MavenResolver;
@@ -465,8 +466,10 @@ class ProjectExporterTest {
int exit = new ProjectExporter(new
ExportContext().withPrinter(printer).withDependencyResolver(resolver))
.export(request);
- assertThat(exit).isEqualTo(1);
- assertThat(printer.getOutput()).contains("Path does not exist");
+ // as camel run: exit 66 and the message on stderr; it was 1 on stdout
(CAMEL-26931)
+ assertThat(exit).isEqualTo(RunPipeline.FILE_NOT_FOUND);
+ assertThat(printer.getStderr()).contains("Path does not exist");
+ assertThat(printer.getStdout()).isEmpty();
assertThat(resolved).isEmpty();
}