diff options
author | Greg Shuflin <greg@everydayimshuflin.com> | 2023-10-08 20:47:20 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-10-09 03:47:20 +0000 |
commit | 992c6943da90c9b0e421e5d2f25e24d699f1fa02 (patch) | |
tree | a19e21795a323f029458fe5c03080aa9e44c0d72 | |
parent | d17401e4b163c4e086c6a35b28c2f02058107513 (diff) |
Allow unstable features to be enabled with environment variable (#1588)
-rw-r--r-- | README.md | 3 | ||||
-rw-r--r-- | src/config.rs | 7 | ||||
-rw-r--r-- | tests/lib.rs | 1 | ||||
-rw-r--r-- | tests/test.rs | 2 | ||||
-rw-r--r-- | tests/unstable.rs | 50 |
5 files changed, 60 insertions, 3 deletions
@@ -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(); +} |