Gitcl

Struct Gitcl 

Source
pub struct Gitcl { /* private fields */ }
Expand description

The VERGEN_GIT_* configuration features

VariableSample
VERGEN_GIT_BRANCHfeature/fun
VERGEN_GIT_COMMIT_AUTHOR_EMAILjanedoe@email.com
VERGEN_GIT_COMMIT_AUTHOR_NAMEJane Doe
VERGEN_GIT_COMMIT_COUNT330
VERGEN_GIT_COMMIT_DATE2021-02-24
VERGEN_GIT_COMMIT_MESSAGEfeat: add commit messages
VERGEN_GIT_COMMIT_TIMESTAMP2021-02-24T20:55:21+00:00
VERGEN_GIT_DESCRIBE5.0.0-2-gf49246c
VERGEN_GIT_SHAf49246ce334567bff9f950bfd0f3078184a2738a
VERGEN_GIT_DIRTYtrue

§Example

Emit all of the git instructions

let gitcl = GitclBuilder::all_git()?;
Emitter::default().add_instructions(&gitcl)?.emit()?;

Emit some of the git instructions

let gitcl = GitclBuilder::default().describe(true, false, None).build()?;
Emitter::default().add_instructions(&gitcl)?.emit()?;

Override output with your own value

temp_env::with_var("VERGEN_GIT_BRANCH", Some("this is the branch I want output"), || {
    let result = || -> Result<()> {
        let gitcl = GitclBuilder::all_git()?;
        Emitter::default().add_instructions(&gitcl)?.emit()?;
        Ok(())
    }();
    assert!(result.is_ok());
});

§Example

This feature can also be used in conjuction with the SOURCE_DATE_EPOCH environment variable to generate deterministic timestamps based off the last modification time of the source/package

temp_env::with_var("SOURCE_DATE_EPOCH", Some("1671809360"), || {
    let result = || -> Result<()> {
        let gitcl = GitclBuilder::all_git()?;
        Emitter::default().add_instructions(&gitcl)?.emit()?;
        Ok(())
    }();
    assert!(result.is_ok());
});

The above will always generate the following output for the timestamp related instructions

...
cargo:rustc-env=VERGEN_GIT_COMMIT_DATE=2022-12-23
...
cargo:rustc-env=VERGEN_GIT_COMMIT_TIMESTAMP=2022-12-23T15:29:20.000000000Z
...

§Example

This feature also recognizes the idempotent flag.

NOTE - SOURCE_DATE_EPOCH takes precedence over the idempotent flag. If you use both, the output will be based off SOURCE_DATE_EPOCH. This would still be deterministic.

§Example

let gitcl = GitclBuilder::all_git()?;
Emitter::default().idempotent().add_instructions(&gitcl)?.emit()?;

The above will always generate the following instructions

cargo:rustc-env=VERGEN_GIT_BRANCH=VERGEN_IDEMPOTENT_OUTPUT
cargo:rustc-env=VERGEN_GIT_COMMIT_AUTHOR_EMAIL=VERGEN_IDEMPOTENT_OUTPUT
cargo:rustc-env=VERGEN_GIT_COMMIT_AUTHOR_NAME=VERGEN_IDEMPOTENT_OUTPUT
cargo:rustc-env=VERGEN_GIT_COMMIT_COUNT=VERGEN_IDEMPOTENT_OUTPUT
cargo:rustc-env=VERGEN_GIT_COMMIT_DATE=VERGEN_IDEMPOTENT_OUTPUT
cargo:rustc-env=VERGEN_GIT_COMMIT_MESSAGE=VERGEN_IDEMPOTENT_OUTPUT
cargo:rustc-env=VERGEN_GIT_COMMIT_TIMESTAMP=VERGEN_IDEMPOTENT_OUTPUT
cargo:rustc-env=VERGEN_GIT_DESCRIBE=VERGEN_IDEMPOTENT_OUTPUT
cargo:rustc-env=VERGEN_GIT_SHA=VERGEN_IDEMPOTENT_OUTPUT
cargo:warning=VERGEN_GIT_BRANCH set to default
cargo:warning=VERGEN_GIT_COMMIT_AUTHOR_EMAIL set to default
cargo:warning=VERGEN_GIT_COMMIT_AUTHOR_NAME set to default
cargo:warning=VERGEN_GIT_COMMIT_COUNT set to default
cargo:warning=VERGEN_GIT_COMMIT_DATE set to default
cargo:warning=VERGEN_GIT_COMMIT_MESSAGE set to default
cargo:warning=VERGEN_GIT_COMMIT_TIMESTAMP set to default
cargo:warning=VERGEN_GIT_DESCRIBE set to default
cargo:warning=VERGEN_GIT_SHA set to default
cargo:rerun-if-changed=build.rs
cargo:rerun-if-env-changed=VERGEN_IDEMPOTENT
cargo:rerun-if-env-changed=SOURCE_DATE_EPOCH

Implementations§

Source§

impl Gitcl

Source

pub fn at_path(&mut self, path: PathBuf) -> &mut Self

Run at the given path

Source

pub fn git_cmd(&mut self, cmd: Option<&'static str>) -> &mut Self

Set the command used to test if git exists on the path. Defaults to git --version if not set explicitly.

Trait Implementations§

Source§

impl Add for Gitcl

Source§

fn add_map_entries( &self, idempotent: bool, cargo_rustc_env: &mut CargoRustcEnvMap, cargo_rerun_if_changed: &mut CargoRerunIfChanged, cargo_warning: &mut CargoWarning, ) -> Result<()>

Try to add instructions entries to the various given arguments. Read more
Source§

fn add_default_entries( &self, config: &DefaultConfig, cargo_rustc_env_map: &mut CargoRustcEnvMap, cargo_rerun_if_changed: &mut CargoRerunIfChanged, cargo_warning: &mut CargoWarning, ) -> Result<()>

Based on the given configuration, emit either default idempotent output or generate a failue. Read more
Source§

impl Clone for Gitcl

Source§

fn clone(&self) -> Gitcl

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Gitcl

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl PartialEq for Gitcl

Source§

fn eq(&self, other: &Gitcl) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl StructuralPartialEq for Gitcl

Auto Trait Implementations§

§

impl Freeze for Gitcl

§

impl RefUnwindSafe for Gitcl

§

impl Send for Gitcl

§

impl Sync for Gitcl

§

impl Unpin for Gitcl

§

impl UnwindSafe for Gitcl

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.