Skip to content

Commit

Permalink
Added base_dir to git configuration (#95)
Browse files Browse the repository at this point in the history
* added base_dir to git configuration

* lints

* added test for git feature enabled, but turned off
  • Loading branch information
jasonozias committed Nov 26, 2021
1 parent 63c5da1 commit 5f29835
Show file tree
Hide file tree
Showing 8 changed files with 62 additions and 25 deletions.
13 changes: 7 additions & 6 deletions src/config.rs
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,8 @@ use std::{
"##
)]
/// ```
#[derive(Clone, Copy, Debug, Getters, MutGetters)]
#[derive(Clone, Debug, Getters, MutGetters)]
#[cfg_attr(not(feature = "git"), derive(Copy))]
#[getset(get = "pub(crate)", get_mut = "pub")]
pub struct Instructions {
/// Use this to modify the [`Build`] feature configuration.
Expand Down Expand Up @@ -136,11 +137,11 @@ impl Instructions {
{
let mut config = Config::default();

configure_build(self, &mut config);
configure_git(self, repo_path, &mut config)?;
configure_rustc(self, &mut config)?;
configure_cargo(self, &mut config);
configure_sysinfo(self, &mut config)?;
configure_build(&self, &mut config);
configure_git(&self, repo_path, &mut config)?;
configure_rustc(&self, &mut config)?;
configure_cargo(&self, &mut config);
configure_sysinfo(&self, &mut config)?;

Ok(config)
}
Expand Down
4 changes: 2 additions & 2 deletions src/feature/build.rs
Original file line number Diff line number Diff line change
Expand Up @@ -97,7 +97,7 @@ impl Build {
}

#[cfg(feature = "build")]
pub(crate) fn configure_build(instructions: Instructions, config: &mut Config) {
pub(crate) fn configure_build(instructions: &Instructions, config: &mut Config) {
let build_config = instructions.build();

if build_config.has_enabled() {
Expand Down Expand Up @@ -180,7 +180,7 @@ where
}

#[cfg(not(feature = "build"))]
pub(crate) fn configure_build(_instructions: Instructions, _config: &mut Config) {}
pub(crate) fn configure_build(_instructions: &Instructions, _config: &mut Config) {}

#[cfg(all(test, feature = "build"))]
mod test {
Expand Down
4 changes: 2 additions & 2 deletions src/feature/cargo.rs
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,7 @@ fn is_cargo_feature(var: (String, String)) -> Option<String> {
}

#[cfg(feature = "cargo")]
pub(crate) fn configure_cargo(instructions: Instructions, config: &mut Config) {
pub(crate) fn configure_cargo(instructions: &Instructions, config: &mut Config) {
let cargo_config = instructions.cargo();

if cargo_config.has_enabled() {
Expand Down Expand Up @@ -130,7 +130,7 @@ pub(crate) fn configure_cargo(instructions: Instructions, config: &mut Config) {
}

#[cfg(not(feature = "cargo"))]
pub(crate) fn configure_cargo(_instructions: Instructions, _config: &mut Config) {}
pub(crate) fn configure_cargo(_instructions: &Instructions, _config: &mut Config) {}

#[cfg(all(test, feature = "cargo"))]
mod test {
Expand Down
23 changes: 16 additions & 7 deletions src/feature/git.rs
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ use {
chrono::{DateTime, FixedOffset, Local, TimeZone, Utc},
getset::{CopyGetters, Getters, MutGetters},
git2::{BranchType, DescribeFormatOptions, DescribeOptions, Repository},
std::env,
std::{env, path::PathBuf},
};

/// The semver kind to output
Expand Down Expand Up @@ -108,12 +108,15 @@ vergen(config)?;
/// [`CARGO_PKG_VERSION`]: https://doc.rust-lang.org/cargo/reference/environment-variables.html#environment-variables-cargo-sets-for-crates
///
#[cfg(feature = "git")]
#[derive(Clone, Copy, Debug, CopyGetters, Getters, MutGetters)]
#[derive(Clone, Debug, CopyGetters, Getters, MutGetters)]
#[getset(get_mut = "pub")]
pub struct Git {
/// Enable/Disable the git output
#[getset(get = "pub(crate)")]
enabled: bool,
/// Optional git base directory
#[getset(get = "pub(crate)")]
base_dir: Option<PathBuf>,
/// Enable/Disable the `VERGEN_GIT_BRANCH` instruction
#[getset(get = "pub(crate)")]
branch: bool,
Expand Down Expand Up @@ -149,8 +152,14 @@ pub struct Git {
#[cfg(feature = "git")]
impl Default for Git {
fn default() -> Self {
let base_dir = if let Ok(dir) = env::current_dir() {
Some(dir)
} else {
None
};
Self {
enabled: true,
base_dir,
branch: true,
commit_timestamp: true,
commit_timestamp_timezone: feature::TimeZone::Utc,
Expand Down Expand Up @@ -179,7 +188,7 @@ impl Git {

#[cfg(not(feature = "git"))]
pub(crate) fn configure_git<T>(
_instructions: Instructions,
_instructions: &Instructions,
_repo: Option<T>,
_config: &mut Config,
) -> Result<()>
Expand All @@ -191,7 +200,7 @@ where

#[cfg(feature = "git")]
pub(crate) fn configure_git<T>(
instructions: Instructions,
instructions: &Instructions,
repo_path_opt: Option<T>,
config: &mut Config,
) -> Result<()>
Expand Down Expand Up @@ -223,10 +232,10 @@ where

match git_config.commit_timestamp_timezone() {
crate::TimeZone::Utc => {
add_config_entries(config, *git_config, &offset.with_timezone(&Utc));
add_config_entries(config, git_config, &offset.with_timezone(&Utc));
}
crate::TimeZone::Local => {
add_config_entries(config, *git_config, &offset.with_timezone(&Local));
add_config_entries(config, git_config, &offset.with_timezone(&Local));
}
}
}
Expand Down Expand Up @@ -283,7 +292,7 @@ where
}

#[cfg(feature = "git")]
fn add_config_entries<T>(config: &mut Config, git_config: Git, now: &DateTime<T>)
fn add_config_entries<T>(config: &mut Config, git_config: &Git, now: &DateTime<T>)
where
T: TimeZone,
T::Offset: std::fmt::Display,
Expand Down
4 changes: 2 additions & 2 deletions src/feature/rustc.rs
Original file line number Diff line number Diff line change
Expand Up @@ -109,7 +109,7 @@ impl Rustc {
}

#[cfg(feature = "rustc")]
pub(crate) fn configure_rustc(instructions: Instructions, config: &mut Config) -> Result<()> {
pub(crate) fn configure_rustc(instructions: &Instructions, config: &mut Config) -> Result<()> {
let rustc_config = instructions.rustc();
if rustc_config.has_enabled() {
let rustc = version_meta()?;
Expand Down Expand Up @@ -176,7 +176,7 @@ pub(crate) fn configure_rustc(instructions: Instructions, config: &mut Config) -
}

#[cfg(not(feature = "rustc"))]
pub(crate) fn configure_rustc(_instructions: Instructions, _config: &mut Config) -> Result<()> {
pub(crate) fn configure_rustc(_instructions: &Instructions, _config: &mut Config) -> Result<()> {
Ok(())
}

Expand Down
4 changes: 2 additions & 2 deletions src/feature/si.rs
Original file line number Diff line number Diff line change
Expand Up @@ -141,7 +141,7 @@ fn setup_system() -> System {

#[cfg(feature = "si")]
#[allow(clippy::unnecessary_wraps, clippy::too_many_lines)]
pub(crate) fn configure_sysinfo(instructions: Instructions, config: &mut Config) -> Result<()> {
pub(crate) fn configure_sysinfo(instructions: &Instructions, config: &mut Config) -> Result<()> {
let sysinfo_config = instructions.sysinfo();
if sysinfo_config.has_enabled() {
let system = setup_system();
Expand Down Expand Up @@ -256,7 +256,7 @@ pub(crate) fn configure_sysinfo(instructions: Instructions, config: &mut Config)

#[cfg(not(feature = "si"))]
#[allow(clippy::unnecessary_wraps)]
pub(crate) fn configure_sysinfo(_instructions: Instructions, _config: &mut Config) -> Result<()> {
pub(crate) fn configure_sysinfo(_instructions: &Instructions, _config: &mut Config) -> Result<()> {
Ok(())
}

Expand Down
23 changes: 20 additions & 3 deletions src/gen.rs
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,6 @@

use crate::config::{Config, Instructions, VergenKey};
use anyhow::Result;
#[cfg(feature = "git")]
use std::env;
use std::{
io::{self, Write},
path::Path,
Expand Down Expand Up @@ -66,7 +64,14 @@ pub fn vergen(config: crate::Config) -> Result<()> {
/// ```
#[cfg(feature = "git")]
pub fn vergen(config: crate::Config) -> Result<()> {
config_from_instructions(config, Some(env::current_dir()?), &mut io::stdout())
if *config.git().enabled() {
let base_git_dir = config.git().base_dir().clone();
config_from_instructions(config, base_git_dir, &mut io::stdout())
} else {
// This is here to help with type inference
let no_repo: Option<&'static str> = None;
config_from_instructions(config, no_repo, &mut io::stdout())
}
}

fn config_from_instructions<T, U>(
Expand Down Expand Up @@ -312,6 +317,18 @@ mod test {
Ok(())
}

#[test]
#[serial_test::serial]
#[cfg(feature = "git")]
fn vergen_base_dir() -> Result<()> {
setup();
let mut inst = Instructions::default();
*inst.git_mut().enabled_mut() = false;
assert!(vergen(inst).is_ok());
teardown();
Ok(())
}

#[test]
fn describe_falls_back() -> Result<()> {
let no_tags_path = PathBuf::from("testdata").join("notagsrepo");
Expand Down
12 changes: 11 additions & 1 deletion src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -188,6 +188,7 @@
anonymous_parameters,
array_into_iter,
asm_sub_register,
bad_asm_style,
bare_trait_objects,
bindings_with_variant_name,
box_pointers,
Expand All @@ -201,7 +202,9 @@
dead_code,
deprecated,
deprecated_in_future,
deref_nullptr,
drop_bounds,
dyn_drop,
elided_lifetimes_in_paths,
ellipsis_inclusive_range_patterns,
explicit_outlives_requirements,
Expand All @@ -218,6 +221,7 @@
invalid_value,
irrefutable_let_patterns,
keyword_idents,
large_assignments,
late_bound_lifetime_arguments,
legacy_derive_helpers,
macro_use_extern_crate,
Expand All @@ -231,6 +235,7 @@
no_mangle_generic_items,
non_ascii_idents,
non_camel_case_types,
non_fmt_panics,
non_shorthand_field_patterns,
non_snake_case,
non_upper_case_globals,
Expand All @@ -244,6 +249,10 @@
proc_macro_derive_resolution_fallback,
redundant_semicolons,
renamed_and_removed_lints,
rust_2021_incompatible_closure_captures,
rust_2021_incompatible_or_patterns,
rust_2021_prefixes_incompatible_syntax,
rust_2021_prelude_collisions,
semicolon_in_expressions_from_macros,
single_use_lifetimes,
stable_features,
Expand All @@ -266,6 +275,7 @@
unsafe_op_in_unsafe_fn,
unstable_features,
unstable_name_collisions,
unsupported_calling_conventions,
unsupported_naked_functions,
unused_allocation,
unused_assignments,
Expand All @@ -290,7 +300,7 @@
unused_variables,
variant_size_differences,
where_clauses_object_safety,
while_true
while_true,
)
)]
// nightly only lints
Expand Down

0 comments on commit 5f29835

Please sign in to comment.