summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDario Vladović <d.vladimyr@gmail.com>2021-04-30 08:13:51 +0200
committerGitHub <noreply@github.com>2021-04-30 08:13:51 +0200
commitd242d40db61ca225be834b0747adf3f91a81bd03 (patch)
treec0d8ed6baa5d36c102e3e384eb2eee077f12c401
parent65cbd2093cdf6aa044ba1682c81ea2939c5544c9 (diff)
feat(gcloud): honor `CLOUDSDK_CORE_PROJECT` env variable (#2596)
Co-authored-by: Filip Bachul <filip.b@masterborn.com>
-rw-r--r--src/modules/gcloud.rs39
1 files changed, 38 insertions, 1 deletions
diff --git a/src/modules/gcloud.rs b/src/modules/gcloud.rs
index 444cc7ebc..cb16a562f 100644
--- a/src/modules/gcloud.rs
+++ b/src/modules/gcloud.rs
@@ -128,7 +128,10 @@ pub fn module<'a>(context: &'a Context) -> Option<Module<'a>> {
.unwrap_or(region)
})
.map(Ok),
- "project" => gcloud_context.get_project().map(Ok),
+ "project" => context
+ .get_env("CLOUDSDK_CORE_PROJECT")
+ .or_else(|| gcloud_context.get_project())
+ .map(Ok),
"active" => Some(Ok(gcloud_context.config_name.to_owned())),
_ => None,
})
@@ -303,6 +306,40 @@ project = abc
}
#[test]
+ fn project_set_in_env() -> io::Result<()> {
+ let dir = tempfile::tempdir()?;
+ let active_config_path = dir.path().join("active_config");
+ let mut active_config_file = File::create(&active_config_path)?;
+ active_config_file.write_all(b"default")?;
+
+ create_dir(dir.path().join("configurations"))?;
+ let config_default_path = dir.path().join("configurations").join("config_default");
+ let mut config_default_file = File::create(&config_default_path)?;
+ config_default_file.write_all(
+ b"\
+[core]
+project = abc
+",
+ )?;
+
+ let actual = ModuleRenderer::new("gcloud")
+ .env("CLOUDSDK_CORE_PROJECT", "env_project")
+ .env("CLOUDSDK_CONFIG", dir.path().to_string_lossy())
+ .config(toml::toml! {
+ [gcloud]
+ format = "on [$symbol$project]($style) "
+ })
+ .collect();
+ let expected = Some(format!(
+ "on {} ",
+ Color::Blue.bold().paint("☁️ env_project")
+ ));
+
+ assert_eq!(actual, expected);
+ dir.close()
+ }
+
+ #[test]
fn region_not_set_with_display_region() -> io::Result<()> {
let dir = tempfile::tempdir()?;
let actual = ModuleRenderer::new("gcloud")