diff options
Diffstat (limited to 'hooked')
-rw-r--r-- | hooked/Cargo.toml | 4 | ||||
-rw-r--r-- | hooked/src/main.rs | 26 |
2 files changed, 28 insertions, 2 deletions
diff --git a/hooked/Cargo.toml b/hooked/Cargo.toml index 2a7d477..8f5a03a 100644 --- a/hooked/Cargo.toml +++ b/hooked/Cargo.toml @@ -3,7 +3,7 @@ name = "hooked" version = "0.1.0" authors = ["Michael Gattozzi <mgattozzi@gmail.com>"] edition = "2018" - +default-run = "hooked" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] @@ -12,6 +12,8 @@ paw = "1.0" shared = { path = "../shared" } structopt = { version = "0.3", features = ["paw"] } unicode-segmentation = "1.3" +log = "0.4" +pretty_env_logger = "0.3" [dev-dependencies] tempfile = "3" diff --git a/hooked/src/main.rs b/hooked/src/main.rs index d412469..a3d8199 100644 --- a/hooked/src/main.rs +++ b/hooked/src/main.rs @@ -1,6 +1,7 @@ #[cfg(windows)] use anyhow::bail; use anyhow::Result; +use log::*; use shared::find_root; #[cfg(not(windows))] use std::os::unix::fs::{ @@ -10,6 +11,7 @@ use std::os::unix::fs::{ #[cfg(windows)] use std::os::windows::fs::symlink_file; use std::{ + env, fs, io::Write, }; @@ -43,10 +45,14 @@ enum Args { #[paw::main] fn main(args: Args) { + env::var("RUST_LOG").map(drop).unwrap_or_else(|_| { + env::set_var("RUST_LOG", "info"); + }); + pretty_env_logger::init(); if let Err(e) = match args { Args::Init => init(), } { - eprintln!("{}", e); + error!("{}", e); std::process::exit(1); } } @@ -57,29 +63,47 @@ fn init() -> Result<()> { let root = find_root()?; let git_hooks = &root.join(".git").join("hooks"); + debug!("git_hooks base path: {}", git_hooks.display()); let root = root.join(".dev-suite").join("hooked"); + debug!("root base path: {}", root.display()); fs::create_dir_all(&root)?; for hook in &HOOKS { let path = &root.join(hook); + debug!("dev-suite hook path: {}", path.display()); let git_hook = &git_hooks.join(hook); + debug!("git_hook path: {}", git_hook.display()); if !path.exists() { + debug!("Creating dev-suite hook."); let mut file = fs::File::create(&path)?; + trace!("File created."); let mut perms = file.metadata()?.permissions(); + debug!("Setting dev-suite hook to be executable."); perms.set_mode(0o755); file.set_permissions(perms)?; + trace!("Permissions were set."); file.write_all(b"#! /bin/bash")?; + debug!("Writing data to file."); + debug!("Created git hook {}.", hook); + } else { + debug!("git hook {} already exists. Skipping creation.", hook); } let path = path.canonicalize()?; if !git_hook.exists() { + debug!("Symlinking git hook {}.", hook); #[cfg(not(windows))] symlink(&path, &git_hook)?; #[cfg(windows)] symlink_file(&path, &git_hook)?; + trace!("Symlinked git hook {} to .dev-suite/hooked/{}.", hook, hook); } } + info!( + "Created and symlinked tickets to .git/hooks from {}.", + root.display() + ); Ok(()) } |