Add install_git_hook_maybe to setup.rs

This commit is contained in:
Cassandra Fridkin 2020-10-05 20:14:11 -04:00
parent 68ca4742c5
commit d585c96eaf
No known key found for this signature in database
GPG key ID: B06380CCA613333A

View file

@ -46,6 +46,8 @@ pub fn setup(src_path: &Path, include_name: &str) {
_ => return,
};
t!(install_git_hook_maybe(src_path));
println!("To get started, try one of the following commands:");
for cmd in suggestions {
println!("- `x.py {}`", cmd);
@ -86,3 +88,41 @@ d) Install Rust from source"
};
Ok(template.to_owned())
}
// install a git hook to automatically run tidy --bless, if they want
fn install_git_hook_maybe(src_path: &Path) -> io::Result<()> {
let mut input = String::new();
println!(
"Rust's CI will automatically fail if it doesn't pass `tidy`, the internal tool for ensuring code quality.
If you'd like, x.py can install a git hook for you that will automatically run `tidy --bless` on each commit
to ensure your code is up to par. If you decide later that this behavior is undesirable,
simply delete the `pre-commit` file from .git/hooks."
);
let should_install = loop {
print!("Would you like to install the git hook?: [y/N] ");
io::stdout().flush()?;
io::stdin().read_line(&mut input)?;
break match input.trim().to_lowercase().as_str() {
"y" | "yes" => true,
// is this the right way to check for "entered nothing"?
"n" | "no" | "" => false,
_ => {
println!("error: unrecognized option '{}'", input.trim());
println!("note: press Ctrl+C to exit");
continue;
}
};
};
if should_install {
let src = src_path.join("/etc/pre-commit.rs");
let dst = src_path.join("/.git/hooks/pre-commit");
fs::hard_link(src, dst)?;
println!("Linked `src/etc/pre-commit.sh` to `.git/hooks/pre-commit`");
} else {
println!("Ok, skipping installation!");
};
Ok(())
}