summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGreg Shuflin <greg@everydayimshuflin.com>2023-10-08 20:47:20 -0700
committerGitHub <noreply@github.com>2023-10-09 03:47:20 +0000
commit992c6943da90c9b0e421e5d2f25e24d699f1fa02 (patch)
treea19e21795a323f029458fe5c03080aa9e44c0d72
parentd17401e4b163c4e086c6a35b28c2f02058107513 (diff)
Allow unstable features to be enabled with environment variable (#1588)
-rw-r--r--README.md3
-rw-r--r--src/config.rs7
-rw-r--r--tests/lib.rs1
-rw-r--r--tests/test.rs2
-rw-r--r--tests/unstable.rs50
5 files changed, 60 insertions, 3 deletions
diff --git a/README.md b/README.md
index 0725e28c..928c59fa 100644
--- a/README.md
+++ b/README.md
@@ -325,7 +325,8 @@ This does not, however, preclude fixing outright bugs, even if doing so might br
There will never be a `just` 2.0. Any desirable backwards-incompatible changes will be opt-in on a per-`justfile` basis, so users may migrate at their leisure.
-Features that aren't yet ready for stabilization are gated behind the `--unstable` flag. Features enabled by `--unstable` may change in backwards incompatible ways at any time.
+Features that aren't yet ready for stabilization are gated behind the `--unstable` flag. Features enabled by `--unstable` may change in backwards incompatible ways at any time. Unstable features can also be enabled by setting the environment variable `JUST_UNSTABLE` to any value other than `false`, `0`, or the empty string.
+
Editor Support
--------------
diff --git a/src/config.rs b/src/config.rs
index 70cb43fa..14904c5b 100644
--- a/src/config.rs
+++ b/src/config.rs
@@ -569,6 +569,11 @@ impl Config {
None
};
+ let unstable = matches.is_present(arg::UNSTABLE)
+ || std::env::var_os("JUST_UNSTABLE")
+ .map(|val| !(val == "false" || val == "0" || val.is_empty()))
+ .unwrap_or_default();
+
Ok(Self {
check: matches.is_present(arg::CHECK),
dry_run: matches.is_present(arg::DRY_RUN),
@@ -578,7 +583,7 @@ impl Config {
load_dotenv: !matches.is_present(arg::NO_DOTENV),
shell_command: matches.is_present(arg::SHELL_COMMAND),
unsorted: matches.is_present(arg::UNSORTED),
- unstable: matches.is_present(arg::UNSTABLE),
+ unstable,
list_heading: matches
.value_of(arg::LIST_HEADING)
.unwrap_or("Available recipes:\n")
diff --git a/tests/lib.rs b/tests/lib.rs
index 6f119d0c..37b1aff7 100644
--- a/tests/lib.rs
+++ b/tests/lib.rs
@@ -87,6 +87,7 @@ mod string;
mod subsequents;
mod tempdir;
mod undefined_variables;
+mod unstable;
#[cfg(target_family = "windows")]
mod windows_shell;
mod working_directory;
diff --git a/tests/test.rs b/tests/test.rs
index 6c86f0ae..e8dc786b 100644
--- a/tests/test.rs
+++ b/tests/test.rs
@@ -234,7 +234,7 @@ impl Test {
if let Some(ref stdout_regex) = self.stdout_regex {
if !stdout_regex.is_match(output_stdout) {
- panic!("Stdout regex mismatch:\n{output_stderr:?}\n!~=\n/{stdout_regex:?}/");
+ panic!("Stdout regex mismatch:\n{output_stdout:?}\n!~=\n/{stdout_regex:?}/");
}
}
diff --git a/tests/unstable.rs b/tests/unstable.rs
new file mode 100644
index 00000000..23a5fa6e
--- /dev/null
+++ b/tests/unstable.rs
@@ -0,0 +1,50 @@
+use super::*;
+
+#[test]
+fn set_unstable_true_with_env_var() {
+ let justfile = r#"
+default:
+ echo 'foo'
+ "#;
+
+ for val in ["true", "some-arbitrary-string"] {
+ Test::new()
+ .justfile(justfile)
+ .args(["--fmt"])
+ .env("JUST_UNSTABLE", val)
+ .status(EXIT_SUCCESS)
+ .stderr_regex("Wrote justfile to `.*`\n")
+ .run();
+ }
+}
+
+#[test]
+fn set_unstable_false_with_env_var() {
+ let justfile = r#"
+default:
+ echo 'foo'
+ "#;
+ for val in ["0", "", "false"] {
+ Test::new()
+ .justfile(justfile)
+ .args(["--fmt"])
+ .env("JUST_UNSTABLE", val)
+ .status(EXIT_FAILURE)
+ .stderr("error: The `--fmt` command is currently unstable. Invoke `just` with the `--unstable` flag to enable unstable features.\n")
+ .run();
+ }
+}
+
+#[test]
+fn set_unstable_false_with_env_var_unset() {
+ let justfile = r#"
+default:
+ echo 'foo'
+ "#;
+ Test::new()
+ .justfile(justfile)
+ .args(["--fmt"])
+ .status(EXIT_FAILURE)
+ .stderr("error: The `--fmt` command is currently unstable. Invoke `just` with the `--unstable` flag to enable unstable features.\n")
+ .run();
+}