Skip to content

Commit

Permalink
Add skip when no output enabled, even if feature is enabled (#209)
Browse files Browse the repository at this point in the history
  • Loading branch information
CraZySacX committed May 20, 2023
1 parent 5cf8f34 commit 1ef5c5f
Show file tree
Hide file tree
Showing 8 changed files with 141 additions and 57 deletions.
23 changes: 23 additions & 0 deletions vergen/src/emitter.rs
Original file line number Diff line number Diff line change
Expand Up @@ -988,4 +988,27 @@ pub(crate) mod test {
teardown();
Ok(())
}

#[cfg(all(
feature = "build",
feature = "rustc",
all(
feature = "git",
any(feature = "gitcl", feature = "git2", feature = "gix")
),
feature = "cargo",
feature = "si"
))]
#[test]
#[serial_test::serial]
fn all_features_no_output() -> Result<()> {
use crate::utils::testutils::{setup, teardown};

setup();
let mut stdout_buf = vec![];
_ = EmitBuilder::builder().emit_to(&mut stdout_buf)?;
assert!(stdout_buf.is_empty());
teardown();
Ok(())
}
}
10 changes: 9 additions & 1 deletion vergen/src/feature/build.rs
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,12 @@ pub(crate) struct Config {
pub(crate) build_timestamp: bool,
}

impl Config {
pub(crate) fn any(self) -> bool {
self.build_date || self.build_timestamp
}
}

/// The `VERGEN_BUILD_*` configuration features
///
/// | Variable | Sample |
Expand Down Expand Up @@ -175,7 +181,9 @@ impl EmitBuilder {
map: &mut RustcEnvMap,
warnings: &mut Vec<String>,
) -> Result<()> {
self.add_timestamp_entries(idempotent, map, warnings)?;
if self.build_config.any() {
self.add_timestamp_entries(idempotent, map, warnings)?;
}
Ok(())
}

Expand Down
59 changes: 33 additions & 26 deletions vergen/src/feature/cargo.rs
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,12 @@ pub(crate) struct Config {
pub(crate) cargo_target_triple: bool,
}

impl Config {
pub(crate) fn any(self) -> bool {
self.cargo_debug || self.cargo_features || self.cargo_opt_level || self.cargo_target_triple
}
}

/// Copnfigure the emission of `VERGEN_CARGO_*` instructions
///
/// **NOTE** - All cargo instructions are considered deterministic. If you change
Expand Down Expand Up @@ -176,40 +182,41 @@ impl EmitBuilder {
}

pub(crate) fn add_cargo_map_entries(&self, map: &mut RustcEnvMap) -> Result<()> {
if self.cargo_config.cargo_debug {
if let Ok(value) = env::var(CARGO_DEBUG) {
add_map_entry(VergenKey::CargoDebug, value, map);
} else {
add_map_entry(VergenKey::CargoDebug, env::var("DEBUG")?, map);
if self.cargo_config.any() {
if self.cargo_config.cargo_debug {
if let Ok(value) = env::var(CARGO_DEBUG) {
add_map_entry(VergenKey::CargoDebug, value, map);
} else {
add_map_entry(VergenKey::CargoDebug, env::var("DEBUG")?, map);
}
}
}

if self.cargo_config.cargo_features {
if let Ok(value) = env::var(CARGO_FEATURES) {
add_map_entry(VergenKey::CargoFeatures, value, map);
} else {
let features: Vec<String> = env::vars().filter_map(is_cargo_feature).collect();
let feature_str = features.as_slice().join(",");
add_map_entry(VergenKey::CargoFeatures, feature_str, map);
if self.cargo_config.cargo_features {
if let Ok(value) = env::var(CARGO_FEATURES) {
add_map_entry(VergenKey::CargoFeatures, value, map);
} else {
let features: Vec<String> = env::vars().filter_map(is_cargo_feature).collect();
let feature_str = features.as_slice().join(",");
add_map_entry(VergenKey::CargoFeatures, feature_str, map);
}
}
}

if self.cargo_config.cargo_opt_level {
if let Ok(value) = env::var(CARGO_OPT_LEVEL) {
add_map_entry(VergenKey::CargoOptLevel, value, map);
} else {
add_map_entry(VergenKey::CargoOptLevel, env::var("OPT_LEVEL")?, map);
if self.cargo_config.cargo_opt_level {
if let Ok(value) = env::var(CARGO_OPT_LEVEL) {
add_map_entry(VergenKey::CargoOptLevel, value, map);
} else {
add_map_entry(VergenKey::CargoOptLevel, env::var("OPT_LEVEL")?, map);
}
}
}

if self.cargo_config.cargo_target_triple {
if let Ok(value) = env::var(CARGO_TARGET_TRIPLE) {
add_map_entry(VergenKey::CargoTargetTriple, value, map);
} else {
add_map_entry(VergenKey::CargoTargetTriple, env::var("TARGET")?, map);
if self.cargo_config.cargo_target_triple {
if let Ok(value) = env::var(CARGO_TARGET_TRIPLE) {
add_map_entry(VergenKey::CargoTargetTriple, value, map);
} else {
add_map_entry(VergenKey::CargoTargetTriple, env::var("TARGET")?, map);
}
}
}

Ok(())
}
}
Expand Down
17 changes: 10 additions & 7 deletions vergen/src/feature/git/cmd.rs
Original file line number Diff line number Diff line change
Expand Up @@ -497,13 +497,16 @@ impl EmitBuilder {
warnings: &mut Vec<String>,
rerun_if_changed: &mut Vec<String>,
) -> Result<()> {
let git_cmd = if let Some(cmd) = self.git_config.git_cmd {
cmd
} else {
"git --version"
};
check_git(git_cmd).and_then(check_inside_git_worktree)?;
self.inner_add_git_map_entries(path, idempotent, map, warnings, rerun_if_changed)
if self.any() {
let git_cmd = if let Some(cmd) = self.git_config.git_cmd {
cmd
} else {
"git --version"
};
check_git(git_cmd).and_then(check_inside_git_worktree)?;
self.inner_add_git_map_entries(path, idempotent, map, warnings, rerun_if_changed)?;
}
Ok(())
}

#[allow(clippy::needless_pass_by_value)]
Expand Down
15 changes: 10 additions & 5 deletions vergen/src/feature/git/git2.rs
Original file line number Diff line number Diff line change
Expand Up @@ -300,7 +300,10 @@ impl EmitBuilder {
warnings: &mut Vec<String>,
rerun_if_changed: &mut Vec<String>,
) -> Result<()> {
self.inner_add_git_map_entries(path, idempotent, map, warnings, rerun_if_changed)
if self.any() {
self.inner_add_git_map_entries(path, idempotent, map, warnings, rerun_if_changed)?;
}
Ok(())
}

#[cfg(test)]
Expand All @@ -312,11 +315,13 @@ impl EmitBuilder {
warnings: &mut Vec<String>,
rerun_if_changed: &mut Vec<String>,
) -> Result<()> {
if self.git_config.fail {
Err(anyhow!("failed to create entries"))
} else {
self.inner_add_git_map_entries(path, idempotent, map, warnings, rerun_if_changed)
if self.any() {
if self.git_config.fail {
return Err(anyhow!("failed to create entries"));
}
self.inner_add_git_map_entries(path, idempotent, map, warnings, rerun_if_changed)?;
}
Ok(())
}

fn inner_add_git_map_entries(
Expand Down
15 changes: 10 additions & 5 deletions vergen/src/feature/git/gix.rs
Original file line number Diff line number Diff line change
Expand Up @@ -298,7 +298,10 @@ impl EmitBuilder {
warnings: &mut Vec<String>,
rerun_if_changed: &mut Vec<String>,
) -> Result<()> {
self.inner_add_git_map_entries(path, idempotent, map, warnings, rerun_if_changed)
if self.any() {
self.inner_add_git_map_entries(path, idempotent, map, warnings, rerun_if_changed)?;
}
Ok(())
}

#[cfg(test)]
Expand All @@ -310,11 +313,13 @@ impl EmitBuilder {
warnings: &mut Vec<String>,
rerun_if_changed: &mut Vec<String>,
) -> Result<()> {
if self.git_config.fail {
Err(anyhow!("failed to create entries"))
} else {
self.inner_add_git_map_entries(path, idempotent, map, warnings, rerun_if_changed)
if self.any() {
if self.git_config.fail {
return Err(anyhow!("failed to create entries"));
}
self.inner_add_git_map_entries(path, idempotent, map, warnings, rerun_if_changed)?;
}
Ok(())
}

#[allow(clippy::unnecessary_wraps)]
Expand Down
21 changes: 19 additions & 2 deletions vergen/src/feature/rustc.rs
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,17 @@ pub(crate) struct Config {
rustc_str_to_test: Option<&'static str>,
}

impl Config {
pub(crate) fn any(self) -> bool {
self.rustc_channel
|| self.rustc_commit_date
|| self.rustc_commit_hash
|| self.rustc_host_triple
|| self.rustc_llvm_version
|| self.rustc_semver
}
}

/// The `VERGEN_RUSTC_*` configuration features
///
/// **NOTE** - All rustc instructions are considered deterministic. If you change
Expand Down Expand Up @@ -169,7 +180,10 @@ impl EmitBuilder {
map: &mut RustcEnvMap,
warnings: &mut Vec<String>,
) -> Result<()> {
self.add_rustc_to_map(version_meta(), map, warnings)
if self.rustc_config.any() {
self.add_rustc_to_map(version_meta(), map, warnings)?;
}
Ok(())
}

#[cfg(test)]
Expand All @@ -185,7 +199,10 @@ impl EmitBuilder {
} else {
version_meta()
};
self.add_rustc_to_map(vm, map, warnings)
if self.rustc_config.any() {
self.add_rustc_to_map(vm, map, warnings)?;
}
Ok(())
}

fn add_rustc_to_map(
Expand Down
38 changes: 27 additions & 11 deletions vergen/src/feature/si.rs
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,20 @@ pub(crate) struct Config {
fail_pid: bool,
}

impl Config {
pub(crate) fn any(&self) -> bool {
self.si_name
|| self.si_os_version
|| self.si_user
|| self.si_memory
|| self.si_cpu_vendor
|| self.si_cpu_core_count
|| self.si_cpu_name
|| self.si_cpu_brand
|| self.si_cpu_frequency
}
}

/// The `VERGEN_SYSINFO_*` configuration features
///
/// | Variable | Sample |
Expand Down Expand Up @@ -213,17 +227,19 @@ impl EmitBuilder {
map: &mut RustcEnvMap,
warnings: &mut Vec<String>,
) {
let system = setup_system();

self.add_sysinfo_name(&system, idempotent, map, warnings);
self.add_sysinfo_os_verison(&system, idempotent, map, warnings);
self.add_sysinfo_user(&system, idempotent, map, warnings);
self.add_sysinfo_total_memory(&system, idempotent, map, warnings);
self.add_sysinfo_cpu_vendor(&system, idempotent, map, warnings);
self.add_sysinfo_cpu_core_count(&system, idempotent, map, warnings);
self.add_sysinfo_cpu_name(&system, idempotent, map, warnings);
self.add_sysinfo_cpu_brand(&system, idempotent, map, warnings);
self.add_sysinfo_cpu_frequency(&system, idempotent, map, warnings);
if self.sysinfo_config.any() {
let system = setup_system();

self.add_sysinfo_name(&system, idempotent, map, warnings);
self.add_sysinfo_os_verison(&system, idempotent, map, warnings);
self.add_sysinfo_user(&system, idempotent, map, warnings);
self.add_sysinfo_total_memory(&system, idempotent, map, warnings);
self.add_sysinfo_cpu_vendor(&system, idempotent, map, warnings);
self.add_sysinfo_cpu_core_count(&system, idempotent, map, warnings);
self.add_sysinfo_cpu_name(&system, idempotent, map, warnings);
self.add_sysinfo_cpu_brand(&system, idempotent, map, warnings);
self.add_sysinfo_cpu_frequency(&system, idempotent, map, warnings);
}
}

fn add_sysinfo_name(
Expand Down

0 comments on commit 1ef5c5f

Please sign in to comment.