diff --git a/src/main/java/dev/jbang/Configuration.java b/src/main/java/dev/jbang/Configuration.java index f1df12625..99ac89cae 100644 --- a/src/main/java/dev/jbang/Configuration.java +++ b/src/main/java/dev/jbang/Configuration.java @@ -188,7 +188,7 @@ public static Configuration instance() { if (cfgFileName != null) { Path cfgFile = Util.getCwd().resolve(cfgFileName); if (Files.isReadable(cfgFile)) { - global = read(cfgFile); + global = get(cfgFile); } else { global = defaults(); } @@ -220,6 +220,17 @@ public static Configuration defaults() { return defaults; } + public static Configuration get(Path catalogPath) { + return get(ResourceRef.forNamedFile(catalogPath.toString(), catalogPath.toFile())); + } + + private static Configuration get(ResourceRef ref) { + Path configPath = ref.getFile().toPath(); + Configuration cfg = read(configPath); + cfg.storeRef = ref; + return cfg; + } + /** * Returns a Config containing all the settings from local config files merged * into one. This follows the system where settings that are "nearest" have diff --git a/src/main/java/dev/jbang/cli/BaseCommand.java b/src/main/java/dev/jbang/cli/BaseCommand.java index 107deee68..91a8badd4 100644 --- a/src/main/java/dev/jbang/cli/BaseCommand.java +++ b/src/main/java/dev/jbang/cli/BaseCommand.java @@ -36,7 +36,7 @@ public abstract class BaseCommand implements Callable { @CommandLine.Option(names = { "--config" }, description = "Path to config file to be used instead of the default") void setConfig(Path config) { if (Files.isReadable(config)) { - Configuration.instance(Configuration.read(config)); + Configuration.instance(Configuration.get(config)); } else { warn("Configuration file does not exist or could not be read: " + config); } diff --git a/src/main/java/dev/jbang/cli/Config.java b/src/main/java/dev/jbang/cli/Config.java index 55340bdf7..778597832 100644 --- a/src/main/java/dev/jbang/cli/Config.java +++ b/src/main/java/dev/jbang/cli/Config.java @@ -34,7 +34,7 @@ abstract class BaseConfigCommand extends BaseCommand { protected Configuration getConfig(Path cwd, boolean strict) { Path cfgFile = getConfigFile(strict); if (cfgFile != null) { - return Configuration.read(cfgFile); + return Configuration.get(cfgFile); } else { return Configuration.getMerged(); } diff --git a/src/test/java/dev/jbang/TestConfiguration.java b/src/test/java/dev/jbang/TestConfiguration.java index 1297874db..b32c59bea 100644 --- a/src/test/java/dev/jbang/TestConfiguration.java +++ b/src/test/java/dev/jbang/TestConfiguration.java @@ -1,9 +1,7 @@ package dev.jbang; import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.emptyOrNullString; -import static org.hamcrest.Matchers.equalTo; -import static org.hamcrest.Matchers.nullValue; +import static org.hamcrest.Matchers.*; import java.io.IOException; import java.nio.file.Files; @@ -16,6 +14,7 @@ import dev.jbang.cli.Init; import dev.jbang.cli.JBang; import dev.jbang.cli.Run; +import dev.jbang.source.ResourceRef; import dev.jbang.util.Util; import picocli.CommandLine; @@ -82,6 +81,16 @@ public void testWriteReadConfig() throws IOException { assertThat(cfg2.get("baz"), equalTo("jkl")); } + @Test + public void testReadAndGetConfig() throws IOException { + Path cfgFile = jbangTempDir.resolve(Configuration.JBANG_CONFIG_PROPS); + Configuration cfgRead = Configuration.read(cfgFile); + assertThat(cfgRead.getStoreRef(), nullValue()); + Configuration cfgGet = Configuration.get(cfgFile); + assertThat(cfgGet.getStoreRef(), notNullValue()); + assertThat(cfgGet.getStoreRef(), equalTo(ResourceRef.forResource(cfgFile.toString()))); + } + @Test public void testDefaults() { Configuration cfg = Configuration.defaults();