Allow unstable features to be enabled with environment variable (#1588)

This commit is contained in:
Greg Shuflin 2023-10-08 20:47:20 -07:00 committed by GitHub
parent d17401e4b1
commit 992c6943da
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 60 additions and 3 deletions

View File

@ -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. 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 Editor Support
-------------- --------------

View File

@ -569,6 +569,11 @@ impl Config {
None 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 { Ok(Self {
check: matches.is_present(arg::CHECK), check: matches.is_present(arg::CHECK),
dry_run: matches.is_present(arg::DRY_RUN), dry_run: matches.is_present(arg::DRY_RUN),
@ -578,7 +583,7 @@ impl Config {
load_dotenv: !matches.is_present(arg::NO_DOTENV), load_dotenv: !matches.is_present(arg::NO_DOTENV),
shell_command: matches.is_present(arg::SHELL_COMMAND), shell_command: matches.is_present(arg::SHELL_COMMAND),
unsorted: matches.is_present(arg::UNSORTED), unsorted: matches.is_present(arg::UNSORTED),
unstable: matches.is_present(arg::UNSTABLE), unstable,
list_heading: matches list_heading: matches
.value_of(arg::LIST_HEADING) .value_of(arg::LIST_HEADING)
.unwrap_or("Available recipes:\n") .unwrap_or("Available recipes:\n")

View File

@ -87,6 +87,7 @@ mod string;
mod subsequents; mod subsequents;
mod tempdir; mod tempdir;
mod undefined_variables; mod undefined_variables;
mod unstable;
#[cfg(target_family = "windows")] #[cfg(target_family = "windows")]
mod windows_shell; mod windows_shell;
mod working_directory; mod working_directory;

View File

@ -234,7 +234,7 @@ impl Test {
if let Some(ref stdout_regex) = self.stdout_regex { if let Some(ref stdout_regex) = self.stdout_regex {
if !stdout_regex.is_match(output_stdout) { 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:?}/");
} }
} }

50
tests/unstable.rs Normal file
View File

@ -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();
}