forked from mirrors/jj
Support --user
and --repo
argument for config list
command
This commit is contained in:
parent
ba4bb928e4
commit
5b6ef63666
3 changed files with 84 additions and 2 deletions
|
@ -25,6 +25,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
||||||
* `jj config list` gained a `--include-overridden` option to allow
|
* `jj config list` gained a `--include-overridden` option to allow
|
||||||
printing overridden config values.
|
printing overridden config values.
|
||||||
|
|
||||||
|
* `jj config list` now accepts `--user` or `--repo` option to specify
|
||||||
|
config origin.
|
||||||
|
|
||||||
### Fixed bugs
|
### Fixed bugs
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -71,18 +71,37 @@ pub(crate) enum ConfigSubcommand {
|
||||||
|
|
||||||
/// List variables set in config file, along with their values.
|
/// List variables set in config file, along with their values.
|
||||||
#[derive(clap::Args, Clone, Debug)]
|
#[derive(clap::Args, Clone, Debug)]
|
||||||
|
#[command(group(clap::ArgGroup::new("specific").args(&["repo", "user"])))]
|
||||||
pub(crate) struct ConfigListArgs {
|
pub(crate) struct ConfigListArgs {
|
||||||
/// An optional name of a specific config option to look up.
|
/// An optional name of a specific config option to look up.
|
||||||
#[arg(value_parser = NonEmptyStringValueParser::new())]
|
#[arg(value_parser = NonEmptyStringValueParser::new())]
|
||||||
pub name: Option<String>,
|
pub name: Option<String>,
|
||||||
/// Whether to explicitly include built-in default values in the list.
|
/// Whether to explicitly include built-in default values in the list.
|
||||||
#[arg(long)]
|
#[arg(long, conflicts_with = "specific")]
|
||||||
pub include_defaults: bool,
|
pub include_defaults: bool,
|
||||||
/// Allow printing overridden values.
|
/// Allow printing overridden values.
|
||||||
#[arg(long)]
|
#[arg(long)]
|
||||||
pub include_overridden: bool,
|
pub include_overridden: bool,
|
||||||
|
/// Target the user-level config
|
||||||
|
#[arg(long)]
|
||||||
|
user: bool,
|
||||||
|
/// Target the repo-level config
|
||||||
|
#[arg(long)]
|
||||||
|
repo: bool,
|
||||||
// TODO(#1047): Support --show-origin using LayeredConfigs.
|
// TODO(#1047): Support --show-origin using LayeredConfigs.
|
||||||
// TODO(#1047): Support ConfigArgs (--user or --repo).
|
}
|
||||||
|
|
||||||
|
impl ConfigListArgs {
|
||||||
|
fn get_source_kind(&self) -> Option<ConfigSource> {
|
||||||
|
if self.user {
|
||||||
|
Some(ConfigSource::User)
|
||||||
|
} else if self.repo {
|
||||||
|
Some(ConfigSource::Repo)
|
||||||
|
} else {
|
||||||
|
//List all variables
|
||||||
|
None
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Get the value of a given config option.
|
/// Get the value of a given config option.
|
||||||
|
@ -158,6 +177,12 @@ pub(crate) fn cmd_config_list(
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if let Some(target_source) = args.get_source_kind() {
|
||||||
|
if target_source != *source {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Skip built-ins if not included.
|
// Skip built-ins if not included.
|
||||||
if !args.include_defaults && *source == ConfigSource::Default {
|
if !args.include_defaults && *source == ConfigSource::Default {
|
||||||
continue;
|
continue;
|
||||||
|
|
|
@ -126,6 +126,60 @@ fn test_config_list_all() {
|
||||||
"###);
|
"###);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_config_list_layer() {
|
||||||
|
let mut test_env = TestEnvironment::default();
|
||||||
|
test_env.jj_cmd_ok(test_env.env_root(), &["init", "repo", "--git"]);
|
||||||
|
let user_config_path = test_env.config_path().join("config.toml");
|
||||||
|
test_env.set_config_path(user_config_path.to_owned());
|
||||||
|
let repo_path = test_env.env_root().join("repo");
|
||||||
|
|
||||||
|
// User
|
||||||
|
test_env.jj_cmd_ok(
|
||||||
|
&repo_path,
|
||||||
|
&["config", "set", "--user", "test-key", "test-val"],
|
||||||
|
);
|
||||||
|
|
||||||
|
test_env.jj_cmd_ok(
|
||||||
|
&repo_path,
|
||||||
|
&[
|
||||||
|
"config",
|
||||||
|
"set",
|
||||||
|
"--user",
|
||||||
|
"test-layered-key",
|
||||||
|
"test-original-val",
|
||||||
|
],
|
||||||
|
);
|
||||||
|
|
||||||
|
let stdout = test_env.jj_cmd_success(&repo_path, &["config", "list", "--user"]);
|
||||||
|
insta::assert_snapshot!(stdout, @r###"
|
||||||
|
test-key="test-val"
|
||||||
|
test-layered-key="test-original-val"
|
||||||
|
"###);
|
||||||
|
|
||||||
|
// Repo
|
||||||
|
test_env.jj_cmd_ok(
|
||||||
|
&repo_path,
|
||||||
|
&[
|
||||||
|
"config",
|
||||||
|
"set",
|
||||||
|
"--repo",
|
||||||
|
"test-layered-key",
|
||||||
|
"test-layered-val",
|
||||||
|
],
|
||||||
|
);
|
||||||
|
|
||||||
|
let stdout = test_env.jj_cmd_success(&repo_path, &["config", "list", "--user"]);
|
||||||
|
insta::assert_snapshot!(stdout, @r###"
|
||||||
|
test-key="test-val"
|
||||||
|
"###);
|
||||||
|
|
||||||
|
let stdout = test_env.jj_cmd_success(&repo_path, &["config", "list", "--repo"]);
|
||||||
|
insta::assert_snapshot!(stdout, @r###"
|
||||||
|
test-layered-key="test-layered-val"
|
||||||
|
"###);
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_config_layer_override_default() {
|
fn test_config_layer_override_default() {
|
||||||
let test_env = TestEnvironment::default();
|
let test_env = TestEnvironment::default();
|
||||||
|
|
Loading…
Reference in a new issue