# RBTAG
rbtag is a procedural macro designed to add build time information or git commit information to your crate or project.
## Git Commit Info
To use the Git commit Info functionality just add `#[derive(BuildInfo)]` to a struct and call `.get_build_commit()` on it. The output looks like the following:
```shell
eaba6e2-dirty
```
OR
```shell
eaba6e2-clean
```
Where clean vs dirty indicates the presence of uncommited changes to tracked files in the repo.
**NOTE** If you have this code continue to return 'dirty', run `git diff` to see what files are causing the issue.
## Build Time Info
To use the Git commit Info functionality just add `#[derive(BuildDateTime)]` to a struct and call `.get_build_timestamp()` on it. In order to comply with https://reproducible-builds.org/, two sources of time are possibly used the following precedence
1) If the environmental variable `SOURCE_DATE_EPOCH` is set, the value in this variable will be used
2) If the environmental variable is **NOT** set, the timestamp of the current git commit is used and displayed as a UNIX timestamp with no fractional component
### Sample output:
The following is an example of running the below 'example' code with and without an environmental variable set
```shell
#$ cargo clean && env SOURCE_DATE_EPOCH='12345678909' cargo run
12345678901
90c2266-dirty
#? cargo clean && cargo run
1547647585
90c2266-dirty
```
## Example
```rust
use rbtag::{BuildDateTime, BuildInfo};
#[derive(BuildDateTime, BuildInfo)]
struct BuildTag;
fn main() {
println!("{}", BuildTag{}.get_build_timestamp());
println!("{}", BuildTag{}.get_build_commit());
}
```