Skip to content

Commit

Permalink
Allow --unstable to be set with an environment variable
Browse files Browse the repository at this point in the history
Allow the environment variable JUST_ALLOW_UNSTABLE=true to act as
equivalent to the --unstable flag. Any other value of
JUST_ALLOW_UNSTABLE is treated as false.
  • Loading branch information
neunenak committed Apr 21, 2023
1 parent 9f03441 commit f3609f9
Show file tree
Hide file tree
Showing 5 changed files with 42 additions and 3 deletions.
4 changes: 3 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -319,7 +319,9 @@ 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. The unstable
mode can also be set using the environment variable `JUST_ALLOW_UNSTABLE=true` (any other value for the variable besides `true` is treated as false).


Editor Support
--------------
Expand Down
7 changes: 6 additions & 1 deletion src/config.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@ use {
clap::{App, AppSettings, Arg, ArgGroup, ArgMatches, ArgSettings},
};

pub(crate) const UNSTABLE_KEY: &str = "JUST_ALLOW_UNSTABLE";

// These three strings should be kept in sync:
pub(crate) const CHOOSER_DEFAULT: &str = "fzf --preview 'just --show {}'";
pub(crate) const CHOOSER_ENVIRONMENT_KEY: &str = "JUST_CHOOSER";
Expand Down Expand Up @@ -568,6 +570,9 @@ impl Config {
None
};

let unstable = matches.is_present(arg::UNSTABLE)
|| std::env::var_os(UNSTABLE_KEY).map_or(false, |val| val.to_string_lossy() == "true");

Ok(Self {
check: matches.is_present(arg::CHECK),
dry_run: matches.is_present(arg::DRY_RUN),
Expand All @@ -577,7 +582,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")
Expand Down
1 change: 1 addition & 0 deletions tests/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,7 @@ mod string;
mod subsequents;
mod tempdir;
mod undefined_variables;
mod unstable;
#[cfg(target_family = "windows")]
mod windows_shell;
mod working_directory;
Expand Down
2 changes: 1 addition & 1 deletion tests/test.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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:?}/");
}
}

Expand Down
31 changes: 31 additions & 0 deletions tests/unstable.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
use super::*;

#[test]
fn set_unstable_true_with_env_var() {
let justfile = r#"
default:
echo 'foo'
"#;
Test::new()
.justfile(justfile)
.args(["--dump", "--dump-format", "json"])
.env("JUST_ALLOW_UNSTABLE", "true")
.status(EXIT_SUCCESS)
.stdout_regex("*")
.run();
}

#[test]
fn set_unstable_false_with_env_var() {
let justfile = r#"
default:
echo 'foo'
"#;
Test::new()
.justfile(justfile)
.args(["--dump", "--dump-format", "json"])
.env("JUST_ALLOW_UNSTABLE", "false")
.status(EXIT_FAILURE)
.stderr("error: The JSON dump format is currently unstable. Invoke `just` with the `--unstable` flag to enable unstable features.\n")
.run();
}

0 comments on commit f3609f9

Please sign in to comment.