Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add condition support for decode info. #1020

Merged
merged 23 commits into from
Jan 13, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
272b8e6
build(deps): bump home from 0.5.5 to 0.5.9
dependabot[bot] Dec 18, 2023
1e23819
Merge pull request #1001 from sagiegurari/dependabot/cargo/home-0.5.9
sagiegurari Dec 18, 2023
3adeb7a
build(deps): bump ctrlc from 3.4.1 to 3.4.2
dependabot[bot] Dec 25, 2023
c8a0a67
Merge pull request #1003 from sagiegurari/dependabot/cargo/ctrlc-3.4.2
sagiegurari Dec 25, 2023
ffc1f35
build(deps): bump serde_json from 1.0.108 to 1.0.109
dependabot[bot] Jan 1, 2024
930b51f
Merge pull request #1004 from sagiegurari/dependabot/cargo/serde_json…
sagiegurari Jan 1, 2024
c1e0312
build(deps): bump serde_json from 1.0.109 to 1.0.110
dependabot[bot] Jan 3, 2024
b4976bc
build(deps): bump serde_ignored from 0.1.9 to 0.1.10
dependabot[bot] Jan 3, 2024
4403ff5
build(deps): bump semver from 1.0.20 to 1.0.21
dependabot[bot] Jan 3, 2024
d1da4db
build(deps): bump serde from 1.0.193 to 1.0.194
dependabot[bot] Jan 3, 2024
d647879
Merge pull request #1008 from sagiegurari/dependabot/cargo/serde-1.0.194
sagiegurari Jan 3, 2024
3f579d3
Merge pull request #1007 from sagiegurari/dependabot/cargo/semver-1.0.21
sagiegurari Jan 3, 2024
2b490b7
Merge pull request #1006 from sagiegurari/dependabot/cargo/serde_igno…
sagiegurari Jan 3, 2024
e2bc68e
Merge pull request #1005 from sagiegurari/dependabot/cargo/serde_json…
sagiegurari Jan 3, 2024
2bc5f35
build(deps): bump serde_json from 1.0.110 to 1.0.111
dependabot[bot] Jan 5, 2024
98c299c
Merge pull request #1011 from sagiegurari/dependabot/cargo/serde_json…
sagiegurari Jan 5, 2024
c949dba
fix: fix the wrong vscode link in content.md
ben1009 Jan 5, 2024
9cebff1
build(deps): bump ignore from 0.4.21 to 0.4.22
dependabot[bot] Jan 8, 2024
f3d8694
build(deps): bump serde from 1.0.194 to 1.0.195
dependabot[bot] Jan 8, 2024
85dea5b
Merge pull request #1015 from sagiegurari/dependabot/cargo/ignore-0.4.22
sagiegurari Jan 12, 2024
97fe49c
Merge pull request #1016 from sagiegurari/dependabot/cargo/serde-1.0.195
sagiegurari Jan 12, 2024
6013616
Merge pull request #1012 from ben1009/fix-vscode-link
sagiegurari Jan 12, 2024
73f3d9c
Add condition support for decode info.
Bauke Jan 13, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
48 changes: 24 additions & 24 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion docs/_includes/content.md
Original file line number Diff line number Diff line change
Expand Up @@ -4098,7 +4098,7 @@ You can view the future development items list in the [github project issues](ht
* [vim-cargo-make](https://github.com/nastevens/vim-cargo-make)
* [vim-duckscript](https://github.com/nastevens/vim-duckscript)

<a name="editor-support-vim"></a>
<a name="editor-support-vs-code"></a>
### VSCode

For debugging purposes there are some example .vscode files located within the [docs/vscode-example](./docs/vscode-example/) directory
Expand Down
25 changes: 16 additions & 9 deletions src/lib/environment/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -126,17 +126,24 @@ fn set_env_for_script(key: &str, env_value: &EnvValueScript) {
}

fn set_env_for_decode_info(key: &str, decode_info: &EnvValueDecode) {
let source_value = expand_value(&decode_info.source);

let mapped_value = match decode_info.mapping.get(&source_value) {
Some(value) => value.to_string(),
None => match decode_info.default_value {
Some(ref value) => value.clone().to_string(),
None => source_value.clone(),
},
let valid = match decode_info.condition {
Some(ref condition) => condition::validate_conditions_without_context(condition.clone()),
None => true,
};

evaluate_and_set_env(&key, &mapped_value);
if valid {
let source_value = expand_value(&decode_info.source);

let mapped_value = match decode_info.mapping.get(&source_value) {
Some(value) => value.to_string(),
None => match decode_info.default_value {
Some(ref value) => value.clone().to_string(),
None => source_value.clone(),
},
};

evaluate_and_set_env(&key, &mapped_value);
}
}

fn set_env_for_conditional_value(key: &str, conditional_value: &EnvValueConditioned) {
Expand Down
83 changes: 83 additions & 0 deletions src/lib/environment/mod_test.rs
Original file line number Diff line number Diff line change
Expand Up @@ -230,6 +230,7 @@
source: "${ENV_DECODE_EXPRESSIONS_MULTI_TYPE_VAR1}".to_string(),
default_value: None,
mapping,
condition: None,
};

let mut env = IndexMap::new();
Expand Down Expand Up @@ -278,6 +279,7 @@
source: "key2".to_string(),
default_value: None,
mapping,
condition: None,
};

set_env_for_decode_info("ENV_DECODE_STRING_FOUND", &decode_info);
Expand Down Expand Up @@ -402,6 +404,7 @@
source: "key0".to_string(),
default_value: Some("default value".to_string()),
mapping,
condition: None,
};

set_env_for_decode_info("ENV_DECODE_STRING_DEFAULT", &decode_info);
Expand All @@ -426,6 +429,7 @@
source: "key0".to_string(),
default_value: None,
mapping,
condition: None,
};

set_env_for_decode_info("ENV_DECODE_STRING_DEFAULT_NONE", &decode_info);
Expand Down Expand Up @@ -454,13 +458,92 @@
source: "${ENV_DECODE_EXPRESSIONS_VAR1}".to_string(),
default_value: None,
mapping,
condition: None,
};

set_env_for_decode_info("ENV_DECODE_EXPRESSIONS", &decode_info);

assert!(envmnt::is_equal("ENV_DECODE_EXPRESSIONS", "ENV2-ENV3"));
}

#[test]
fn set_env_for_decode_info_condition_true() {
envmnt::remove("ENV_DECODE_CONDITION_TRUE");

let mut mapping = HashMap::new();
mapping.insert("key1".to_string(), "value1".to_string());
mapping.insert("key2".to_string(), "value2".to_string());
mapping.insert("key3".to_string(), "value3".to_string());

let condition = TaskCondition {
fail_message: None,
profiles: None,
os: None,
platforms: None,
channels: None,
env_set: None,
env_not_set: Some(vec!["ENV_DECODE_CONDITION_TRUE".to_string()]),
env_true: None,
env_false: None,
env: None,
env_contains: None,
rust_version: None,
files_exist: None,
files_not_exist: None,
files_modified: None,
};

Check warning on line 494 in src/lib/environment/mod_test.rs

View check run for this annotation

Codecov / codecov/patch

src/lib/environment/mod_test.rs#L494

Added line #L494 was not covered by tests

let decode_info = EnvValueDecode {
source: "key2".to_string(),
default_value: None,
mapping,
condition: Some(condition),
};

set_env_for_decode_info("ENV_DECODE_CONDITION_TRUE", &decode_info);

assert!(envmnt::is_equal("ENV_DECODE_CONDITION_TRUE", "value2"));
}

#[test]
fn set_env_for_decode_info_condition_false() {
envmnt::remove("ENV_DECODE_CONDITION_FALSE");

let mut mapping = HashMap::new();
mapping.insert("key1".to_string(), "value1".to_string());
mapping.insert("key2".to_string(), "value2".to_string());
mapping.insert("key3".to_string(), "value3".to_string());

let condition = TaskCondition {
fail_message: None,
profiles: None,
os: None,
platforms: None,
channels: None,
env_set: Some(vec!["ENV_DECODE_CONDITION_FALSE".to_string()]),
env_not_set: None,
env_true: None,
env_false: None,
env: None,
env_contains: None,
rust_version: None,
files_exist: None,
files_not_exist: None,
files_modified: None,
};

Check warning on line 533 in src/lib/environment/mod_test.rs

View check run for this annotation

Codecov / codecov/patch

src/lib/environment/mod_test.rs#L533

Added line #L533 was not covered by tests

let decode_info = EnvValueDecode {
source: "key2".to_string(),
default_value: None,
mapping,
condition: Some(condition),
};

set_env_for_decode_info("ENV_DECODE_CONDITION_FALSE", &decode_info);

assert!(!envmnt::exists("ENV_DECODE_CONDITION_FALSE"));
}

#[test]
#[ignore]
fn set_env_for_conditional_value_no_condition() {
Expand Down
2 changes: 2 additions & 0 deletions src/lib/types.rs
Original file line number Diff line number Diff line change
Expand Up @@ -457,6 +457,8 @@ pub struct EnvValueDecode {
pub default_value: Option<String>,
/// The decoding mapping
pub mapping: HashMap<String, String>,
/// The condition to validate
pub condition: Option<TaskCondition>,
}

#[derive(Serialize, Deserialize, Debug, Clone, Copy)]
Expand Down