diff options
author | Daniel Silverstone <dsilvers@digital-scurf.org> | 2021-04-23 20:33:32 +0100 |
---|---|---|
committer | Daniel Silverstone <dsilvers@digital-scurf.org> | 2021-04-23 20:33:32 +0100 |
commit | b484cca704c71992532a1cd3e6bb6b191341cb7d (patch) | |
tree | 3c7e05f222e213dafedeb88b3728db7afb29598c /src/bin/subplot.rs | |
parent | ec9652a72aa8ff47fa64b8a1b5ba9afe84be4f7e (diff) | |
download | subplot-b484cca704c71992532a1cd3e6bb6b191341cb7d.tar.gz |
version: Add support for git-testament derived version info
Signed-off-by: Daniel Silverstone <dsilvers@digital-scurf.org>
Diffstat (limited to 'src/bin/subplot.rs')
-rw-r--r-- | src/bin/subplot.rs | 37 |
1 files changed, 36 insertions, 1 deletions
diff --git a/src/bin/subplot.rs b/src/bin/subplot.rs index ebbdec8..4a650ee 100644 --- a/src/bin/subplot.rs +++ b/src/bin/subplot.rs @@ -17,6 +17,10 @@ use std::time::UNIX_EPOCH; mod cli; +use git_testament::*; + +git_testament!(VERSION); + #[derive(Debug, StructOpt)] struct Toplevel { #[structopt(flatten)] @@ -53,6 +57,33 @@ impl Cmd { } } +fn long_version() -> Result<String> { + use std::fmt::Write as _; + let mut ret = String::new(); + writeln!(ret, "{}", render_testament!(VERSION))?; + writeln!(ret, "Crate version: {}", env!("CARGO_PKG_VERSION"))?; + if let Some(branch) = VERSION.branch_name { + writeln!(ret, "Built from branch: {}", branch)?; + } else { + writeln!(ret, "Branch information is missing.")?; + } + writeln!(ret, "Commit info: {}", VERSION.commit)?; + if VERSION.modifications.is_empty() { + writeln!(ret, "Working tree is clean")?; + } else { + use GitModification::*; + for fmod in VERSION.modifications { + match fmod { + Added(f) => writeln!(ret, "Added: {}", String::from_utf8_lossy(f))?, + Removed(f) => writeln!(ret, "Removed: {}", String::from_utf8_lossy(f))?, + Modified(f) => writeln!(ret, "Modified: {}", String::from_utf8_lossy(f))?, + Untracked(f) => writeln!(ret, "Untracked: {}", String::from_utf8_lossy(f))?, + } + } + } + Ok(ret) +} + #[derive(Debug, StructOpt)] /// Extract embedded files from a subplot document /// @@ -337,7 +368,11 @@ impl Codegen { } fn main() { - let args = Toplevel::from_args(); + let argparser = Toplevel::clap(); + let version = long_version().unwrap(); + let argparser = argparser.long_version(version.as_str()); + let args = argparser.get_matches(); + let args = Toplevel::from_clap(&args); args.resources.handle(); match args.run() { Ok(_) => {} |