Skip to content

Commit e97df9b

Browse files
Remove 'buck2_env_anyhow'
Summary: Originally created to help during migration away from anyhow. Not really necessary anymore except for one usage in `buck2_tpx_cli`. Decided that it's probably worth adding a `buck2_error` dependency so we can get rid of a chunk of code. Reviewed By: JakobDegen Differential Revision: D67072206 fbshipit-source-id: 4fbe8483c7ac7274052744b131a3ed988b0bf22c
1 parent 0b87863 commit e97df9b

File tree

10 files changed

+18
-171
lines changed

10 files changed

+18
-171
lines changed

app/buck2/BUCK

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,7 @@ buck_rust_binary(
9999
"//buck2/app/buck2_build_info:buck2_build_info",
100100
"//buck2/app/buck2_client_ctx:buck2_client_ctx",
101101
"//buck2/app/buck2_core:buck2_core",
102+
"//buck2/app/buck2_error:buck2_error",
102103
"//buck2/app/buck2_event_log:buck2_event_log",
103104
"//buck2/app/buck2_events:buck2_events",
104105
"//buck2/app/buck2_wrapper_common:buck2_wrapper_common",

app/buck2/bin/buck2.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ use buck2_client_ctx::exit_result::ExitResult;
2323
use buck2_client_ctx::restarter::Restarter;
2424
use buck2_client_ctx::stdin::Stdin;
2525
use buck2_client_ctx::stdio;
26-
use buck2_core::buck2_env_anyhow;
26+
use buck2_core::buck2_env;
2727
use buck2_core::fs::working_dir::AbsWorkingDir;
2828
use buck2_core::logging::init_tracing_for_writer;
2929
use buck2_core::logging::log_file::TracingLogFile;
@@ -127,7 +127,7 @@ fn main() -> ! {
127127
panic::initialize()?;
128128
check_cargo();
129129

130-
let force_want_restart = buck2_env_anyhow!("FORCE_WANT_RESTART", bool)?;
130+
let force_want_restart = buck2_env!("FORCE_WANT_RESTART", bool)?;
131131

132132
let log_reload_handle = init_logging()?;
133133

app/buck2/src/lib.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ use buck2_cmd_starlark_client::StarlarkCommand;
5252
use buck2_common::argv::Argv;
5353
use buck2_common::invocation_paths_result::InvocationPathsResult;
5454
use buck2_common::invocation_roots::get_invocation_paths_result;
55-
use buck2_core::buck2_env_anyhow;
55+
use buck2_core::buck2_env;
5656
use buck2_core::fs::paths::file_name::FileNameBuf;
5757
use buck2_error::buck2_error;
5858
use buck2_error::BuckErrorContext;
@@ -190,7 +190,7 @@ impl Opt {
190190

191191
pub fn exec(process: ProcessContext<'_>) -> ExitResult {
192192
let mut immediate_config = ImmediateConfigContext::new(process.working_dir);
193-
let arg0_override = buck2_env_anyhow!("BUCK2_ARG0")?;
193+
let arg0_override = buck2_env!("BUCK2_ARG0")?;
194194
let expanded_args = expand_argv(
195195
arg0_override,
196196
process.args.to_vec(),

app/buck2_core/src/env/__macro_refs.rs

Lines changed: 2 additions & 150 deletions
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,10 @@ use std::str::FromStr;
1313

1414
pub use linkme;
1515

16-
pub fn convert_from_str<T>(v: &str) -> anyhow::Result<T>
16+
pub fn convert_from_str<T>(v: &str) -> buck2_error::Result<T>
1717
where
1818
T: FromStr,
19-
anyhow::Error: From<<T as FromStr>::Err>,
19+
buck2_error::Error: From<<T as FromStr>::Err>,
2020
{
2121
Ok(T::from_str(v)?)
2222
}
@@ -189,151 +189,3 @@ macro register($var:expr, ty=$ty:ty, default=$default:expr, applicability=$appli
189189
applicability: $applicability,
190190
};
191191
}}
192-
193-
// Code below returns anyhow::Error, it is used while we transition from anyhow to buck2_error in buck2/app
194-
// TODO(minglunli): Delete the code below once we have fully transitioned to buck2_error
195-
196-
/// This macro is used to register environment variables that are used by Buck2.
197-
///
198-
/// The first argument to the macro must always be a string literal with the name of the environment
199-
/// variable.
200-
///
201-
/// Additionally, you can specify the following, comma separated:
202-
///
203-
/// - `type=<type>` - the Rust type that the environment variable should be converted to, using
204-
/// `FromStr::from_str`. Defaults to `&'static str` if not specified.
205-
/// - `default=<value>` - an expression for the default value to use if the environment variable is
206-
/// not set.
207-
/// - `converter=<expr>` - a function to use as an alternative to the `FromStr::from_str`
208-
/// conversion. Must have signature `fn(&str) -> Result<Ty, E>`
209-
/// - `applicability=<internal|testing>` - to indicate that the variable is not used in OSS or only
210-
/// for self-testing of buck2
211-
///
212-
/// The macro expands to an expression of type `anyhow::Result<Type>` if a default is set, and
213-
/// `anyhow::Result<Option<Type>` otherwise.
214-
pub macro buck2_env_anyhow {
215-
($var:expr, bool $(, $($rest:tt)*)?) => {{
216-
let v: anyhow::Result<bool> = $crate::env::__macro_refs::buck2_env_anyhow!($var, type=bool, default=false, converter = |s| {
217-
match s.to_lowercase().as_str() {
218-
"1" | "true" => Ok(true),
219-
"0" | "false" => Ok(false),
220-
_ => Err(anyhow::anyhow!("Invalid bool value: {}", s)),
221-
}
222-
}, $($($rest)*)?);
223-
v
224-
}},
225-
($var:expr, type=$ty:ty, default=$default:expr, converter=$converter:expr $(, $($rest:tt)*)?) => {{
226-
$crate::env::__macro_refs::parse_anyhow!(
227-
(
228-
var=$var,
229-
parser=$converter,
230-
stored_type=$ty,
231-
processor=|x| x.copied().unwrap_or_else(|| $default),
232-
output_type=$ty,
233-
default_repr=std::option::Option::Some(stringify!($default)),
234-
),
235-
$($($rest)*)?
236-
)
237-
}},
238-
($var:expr, type=$ty:ty, default=$default:expr $(, $($rest:tt)*)?) => {{
239-
$crate::env::__macro_refs::parse_anyhow!(
240-
(
241-
var=$var,
242-
parser=$crate::env::__macro_refs::convert_from_str,
243-
stored_type=$ty,
244-
processor=|x| x.copied().unwrap_or_else(|| $default),
245-
output_type=$ty,
246-
default_repr=std::option::Option::Some(stringify!($default)),
247-
),
248-
$($($rest)*)?
249-
)
250-
}},
251-
($var:expr, type=$ty:ty, converter=$converter:expr $(, $($rest:tt)*)?) => {{
252-
$crate::env::__macro_refs::parse_anyhow!(
253-
(
254-
var=$var,
255-
parser=$converter,
256-
stored_type=$ty,
257-
processor=|x| x,
258-
output_type=std::option::Option<&$ty>,
259-
default_repr=std::option::Option::None,
260-
),
261-
$($($rest)*)?
262-
)
263-
}},
264-
($var:expr, type=$ty:ty $(, $($rest:tt)*)?) => {{
265-
$crate::env::__macro_refs::parse_anyhow!(
266-
(
267-
var=$var,
268-
parser=$crate::env::__macro_refs::convert_from_str,
269-
stored_type=$ty,
270-
processor=|x| x.copied(),
271-
output_type=std::option::Option<$ty>,
272-
default_repr=std::option::Option::None,
273-
),
274-
$($($rest)*)?
275-
)
276-
}},
277-
($var:expr $(, $($rest:tt)*)?) => {{
278-
$crate::env::__macro_refs::parse_anyhow!(
279-
(
280-
var=$var,
281-
parser=$crate::env::__macro_refs::convert_from_str,
282-
stored_type=std::string::String,
283-
processor=|x| x.map(|x| x.as_str()),
284-
output_type=std::option::Option<&'static str>,
285-
default_repr=std::option::Option::None,
286-
),
287-
$($($rest)*)?
288-
)
289-
}},
290-
}
291-
292-
#[allow(unused_macros)]
293-
macro parse_anyhow {
294-
(
295-
$already_parsed:tt,
296-
applicability=internal$(,)?
297-
) => {
298-
$crate::env::__macro_refs::expand_anyhow!($already_parsed, applicability=$crate::env::registry::Applicability::Internal,)
299-
},
300-
(
301-
$already_parsed:tt,
302-
applicability=testing$(,)?
303-
) => {
304-
$crate::env::__macro_refs::expand_anyhow!($already_parsed, applicability=$crate::env::registry::Applicability::Testing,)
305-
},
306-
(
307-
$already_parsed:tt,
308-
$(,)?
309-
) => {
310-
$crate::env::__macro_refs::expand_anyhow!($already_parsed, applicability=$crate::env::registry::Applicability::All,)
311-
},
312-
}
313-
314-
/// `parser` is `&str -> anyhow::Result<$stored_type>`, `processor` is `Option<& $stored_type> -> $output_type`
315-
///
316-
/// The extra set of parentheses is a trick to let us pass things through `parse2` transparently
317-
#[allow(unused_macros)]
318-
macro expand_anyhow(
319-
(
320-
var=$var:expr,
321-
parser=$parser:expr,
322-
stored_type=$stored_ty:ty,
323-
processor=$processor:expr,
324-
output_type=$output_ty:ty,
325-
default_repr=$default_repr:expr,
326-
),
327-
applicability=$applicability:expr,
328-
) {{
329-
$crate::env::__macro_refs::register!(
330-
$var,
331-
ty = $stored_ty,
332-
default = $default_repr,
333-
applicability = $applicability
334-
);
335-
static ENV_HELPER: $crate::env::helper::EnvHelper<$stored_ty> =
336-
$crate::env::helper::EnvHelper::with_converter_from_macro($var, $parser);
337-
let v: anyhow::Result<$output_ty> = ENV_HELPER.get_anyhow().map($processor);
338-
v
339-
}}

app/buck2_core/src/env/helper.rs

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -14,15 +14,15 @@ use std::sync::OnceLock;
1414
use buck2_error::BuckErrorContext;
1515

1616
pub struct EnvHelper<T> {
17-
convert: fn(&str) -> anyhow::Result<T>,
17+
convert: fn(&str) -> buck2_error::Result<T>,
1818
var: &'static str,
1919
cell: OnceLock<Option<T>>,
2020
}
2121

2222
impl<T> EnvHelper<T> {
2323
pub const fn with_converter_from_macro(
2424
var: &'static str,
25-
convert: fn(&str) -> anyhow::Result<T>,
25+
convert: fn(&str) -> buck2_error::Result<T>,
2626
) -> Self {
2727
Self {
2828
convert,
@@ -43,7 +43,7 @@ impl<T> EnvHelper<T> {
4343
.get_or_try_init(move || match env::var(var) {
4444
Ok(v) => {
4545
tracing::info!("Env override found: ${} = {}", var, v);
46-
Ok(Some((convert)(&v).map_err(anyhow::Error::from)?))
46+
Ok(Some((convert)(&v)?))
4747
}
4848
Err(VarError::NotPresent) => Ok(None),
4949
Err(VarError::NotUnicode(..)) => {
@@ -53,8 +53,4 @@ impl<T> EnvHelper<T> {
5353
.map(Option::as_ref)
5454
.with_buck_error_context(|| format!("Invalid value for ${}", var))
5555
}
56-
57-
pub fn get_anyhow(&'static self) -> anyhow::Result<Option<&'static T>> {
58-
self.get().map_err(anyhow::Error::from)
59-
}
6056
}

app/buck2_core/src/lib.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,6 @@ pub mod target_aliases;
5151
pub mod unsafe_send_future;
5252

5353
pub use env::__macro_refs::buck2_env;
54-
pub use env::__macro_refs::buck2_env_anyhow;
5554
pub use env::__macro_refs::buck2_env_name;
5655

5756
/// Marker for things that are only sensible to use inside Facebook,

app/buck2_execute/src/re/uploader.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ use buck2_common::cas_digest::TrackedCasDigest;
1818
use buck2_common::file_ops::FileDigest;
1919
use buck2_common::file_ops::FileDigestKind;
2020
use buck2_common::file_ops::TrackedFileDigest;
21-
use buck2_core::buck2_env_anyhow;
21+
use buck2_core::buck2_env;
2222
use buck2_core::execution_types::executor_config::RemoteExecutorUseCase;
2323
use buck2_core::fs::project::ProjectRoot;
2424
use buck2_core::fs::project_rel_path::ProjectRelativePath;
@@ -445,19 +445,19 @@ fn add_injected_missing_digests<'a>(
445445
input_digests: &HashSet<&'a TrackedFileDigest>,
446446
missing_digests: &mut HashSet<&'a TrackedFileDigest>,
447447
) -> anyhow::Result<()> {
448-
fn convert_digests(val: &str) -> anyhow::Result<Vec<FileDigest>> {
448+
fn convert_digests(val: &str) -> buck2_error::Result<Vec<FileDigest>> {
449449
val.split(' ')
450450
.map(|digest| {
451451
let digest = TDigest::from_str(digest)
452452
.with_context(|| format!("Invalid digest: `{}`", digest))?;
453453
// This code does not run in a test but it is only used for testing.
454454
let digest = FileDigest::from_re(&digest, DigestConfig::testing_default())?;
455-
anyhow::Ok(digest)
455+
buck2_error::Ok(digest)
456456
})
457457
.collect()
458458
}
459459

460-
let ingested_digests = buck2_env_anyhow!(
460+
let ingested_digests = buck2_env!(
461461
"BUCK2_TEST_INJECTED_MISSING_DIGESTS",
462462
type=Vec<FileDigest>,
463463
converter=convert_digests,

app/buck2_execute_impl/BUCK

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@ rust_library(
2727
"fbsource//third-party/rust:assert_matches",
2828
],
2929
deps = [
30-
"fbsource//third-party/rust:anyhow",
3130
"fbsource//third-party/rust:async-condvar-fair",
3231
"fbsource//third-party/rust:async-trait",
3332
"fbsource//third-party/rust:chrono",

app/buck2_execute_impl/src/materializers/deferred/io_handler.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -479,15 +479,15 @@ fn maybe_tombstone_digest(digest: &FileDigest) -> buck2_error::Result<&FileDiges
479479
// instead of a not-found error.
480480
static TOMBSTONE_DIGEST: Lazy<FileDigest> = Lazy::new(|| FileDigest::new_sha1([0; 20], 1));
481481

482-
fn convert_digests(val: &str) -> anyhow::Result<HashSet<FileDigest>> {
482+
fn convert_digests(val: &str) -> buck2_error::Result<HashSet<FileDigest>> {
483483
val.split(' ')
484484
.map(|digest| {
485485
let digest = TDigest::from_str(digest)
486486
.with_buck_error_context(|| format!("Invalid digest: `{}`", digest))?;
487487
// This code is only used by E2E tests, so while it's not *a test*, testing_default
488488
// is an OK choice here.
489489
let digest = FileDigest::from_re(&digest, DigestConfig::testing_default())?;
490-
anyhow::Ok(digest)
490+
buck2_error::Ok(digest)
491491
})
492492
.collect()
493493
}

app/buck2_test/src/executor_launcher.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ use std::task::Poll;
1717

1818
use anyhow::Context as _;
1919
use async_trait::async_trait;
20-
use buck2_core::buck2_env_anyhow;
20+
use buck2_core::buck2_env;
2121
use buck2_events::dispatch::EventDispatcher;
2222
use buck2_grpc::DuplexChannel;
2323
use buck2_grpc::ServerHandle;
@@ -138,7 +138,7 @@ impl ExecutorLauncher for OutOfProcessTestExecutor {
138138
async fn launch(&self, tpx_args: Vec<String>) -> anyhow::Result<ExecutorLaunch> {
139139
// Declare outside of `cfg(unix)` so `buck2 help-env` would include it on Windows
140140
// even if it is no-op on Windows.
141-
let use_tcp = buck2_env_anyhow!("BUCK2_TEST_TPX_USE_TCP", bool)?;
141+
let use_tcp = buck2_env!("BUCK2_TEST_TPX_USE_TCP", bool)?;
142142

143143
if !use_tcp {
144144
#[cfg(unix)]

0 commit comments

Comments
 (0)