Skip to content

Commit 0dffce5

Browse files
authored
flowey: Avoid calling env::set_var (#513)
Part of #288
1 parent 3e50139 commit 0dffce5

File tree

2 files changed

+22
-11
lines changed

2 files changed

+22
-11
lines changed

flowey/flowey_cli/src/cli/mod.rs

+10-7
Original file line numberDiff line numberDiff line change
@@ -51,13 +51,18 @@ pub fn cli_main<P: Subcommand + IntoPipeline>(
5151
// This mechanism is in-place because some YAML pipeline defn langs (*cough*
5252
// ADO *cough*) don't let you set pipeline-level env vars which are
5353
// automatically inherited by all shell contexts.
54+
let mut log_override = None;
5455
if let Commands::VarDb(var_db::VarDb { job_idx, .. })
5556
| Commands::ExecSnippet(exec_snippet::ExecSnippet { job_idx, .. }) = &cli.command
5657
{
57-
let _ = try_inject_flowey_log(*job_idx);
58+
log_override = try_get_flowey_log(*job_idx).unwrap_or_default();
5859
}
5960

60-
ci_logger::init("FLOWEY_LOG").unwrap();
61+
if let Some(log_level) = log_override {
62+
ci_logger::init_with_level(&log_level).unwrap();
63+
} else {
64+
ci_logger::init("FLOWEY_LOG").unwrap();
65+
}
6166

6267
match cli.command {
6368
Commands::Debug(cmd) => cmd.run(),
@@ -85,7 +90,7 @@ impl From<FlowBackendCli> for FlowBackend {
8590
}
8691
}
8792

88-
fn try_inject_flowey_log(job_idx: usize) -> anyhow::Result<()> {
93+
fn try_get_flowey_log(job_idx: usize) -> anyhow::Result<Option<String>> {
8994
// skip if the env var is already set
9095
if std::env::var("FLOWEY_LOG").is_err() {
9196
let log_level = var_db::open_var_db(job_idx)?
@@ -96,11 +101,9 @@ fn try_inject_flowey_log(job_idx: usize) -> anyhow::Result<()> {
96101
});
97102

98103
if let Some(log_level) = log_level {
99-
// Yes, this is a hack... but I kinda don't want to go update the
100-
// ci_logger crate right now
101-
std::env::set_var("FLOWEY_LOG", log_level)
104+
return Ok(Some(log_level));
102105
}
103106
}
104107

105-
Ok(())
108+
Ok(None)
106109
}

support/ci_logger/src/lib.rs

+12-4
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,10 @@ struct AdoLogger {
1414
}
1515

1616
impl AdoLogger {
17-
fn new(log_env_var: &str) -> AdoLogger {
17+
fn new(log_level: Option<&str>) -> AdoLogger {
1818
let mut builder = env_logger::filter::Builder::new();
19-
if let Ok(var) = std::env::var(log_env_var) {
20-
builder.parse(&var);
19+
if let Some(log_level) = log_level {
20+
builder.parse(log_level);
2121
} else {
2222
builder.filter_level(log::LevelFilter::Info);
2323
}
@@ -80,6 +80,14 @@ impl log::Log for AdoLogger {
8080

8181
/// Initialize the ADO logger
8282
pub fn init(log_env_var: &str) -> Result<(), log::SetLoggerError> {
83-
log::set_boxed_logger(Box::new(AdoLogger::new(log_env_var)))
83+
log::set_boxed_logger(Box::new(AdoLogger::new(
84+
std::env::var(log_env_var).ok().as_deref(),
85+
)))
86+
.map(|()| log::set_max_level(log::LevelFilter::Trace))
87+
}
88+
89+
/// Initialize the ADO logger with a specific value, instead of an env var.
90+
pub fn init_with_level(log_level: &str) -> Result<(), log::SetLoggerError> {
91+
log::set_boxed_logger(Box::new(AdoLogger::new(Some(log_level))))
8492
.map(|()| log::set_max_level(log::LevelFilter::Trace))
8593
}

0 commit comments

Comments
 (0)