There isn't a way to pass --remove yet, but you can rm if u like

This commit is contained in:
Cassandra Fridkin 2020-09-04 21:00:58 -04:00
parent d2454643e1
commit a009e2838b
No known key found for this signature in database
GPG Key ID: B06380CCA613333A
8 changed files with 70 additions and 1 deletions

View File

@ -1407,6 +1407,10 @@ dependencies = [
"hashbrown",
]
[[package]]
name = "install-git-hook"
version = "0.1.0"
[[package]]
name = "installer"
version = "0.0.0"

View File

@ -8,6 +8,7 @@ members = [
"src/tools/clippy",
"src/tools/compiletest",
"src/tools/error_index_generator",
"src/tools/install-git-hook",
"src/tools/linkchecker",
"src/tools/rustbook",
"src/tools/unstable-book-gen",

View File

@ -487,7 +487,7 @@ impl<'a> Builder<'a> {
install::Src,
install::Rustc
),
Kind::Run => describe!(run::ExpandYamlAnchors,),
Kind::Run => describe!(run::ExpandYamlAnchors, run::InstallGitHook),
}
}

View File

@ -41,3 +41,27 @@ fn try_run(builder: &Builder<'_>, cmd: &mut Command) -> bool {
}
true
}
#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
pub struct InstallGitHook;
impl Step for InstallGitHook {
type Output = ();
/// Runs the `install-git-hook` tool.
///
/// This tool in `src/tools` installs a git hook to automatically run
/// `tidy --bless` before each commit, so you don't forget to do it
fn run(self, builder: &Builder<'_>) {
builder.info("Installing git hook");
try_run(builder, &mut builder.tool_cmd(Tool::InstallGitHook).arg(&builder.src));
}
fn should_run(run: ShouldRun<'_>) -> ShouldRun<'_> {
run.path("src/tools/install-git-hook")
}
fn make_run(run: RunConfig<'_>) {
run.builder.ensure(InstallGitHook);
}
}

View File

@ -365,6 +365,7 @@ bootstrap_tool!(
RustInstaller, "src/tools/rust-installer", "fabricate", is_external_tool = true;
RustdocTheme, "src/tools/rustdoc-themes", "rustdoc-themes";
ExpandYamlAnchors, "src/tools/expand-yaml-anchors", "expand-yaml-anchors";
InstallGitHook, "src/tools/install-git-hook", "install-git-hook";
);
#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq, Ord, PartialOrd)]

View File

@ -0,0 +1,5 @@
[package]
name = "install-git-hook"
version = "0.1.0"
authors = ["Cass Fridkin <cass@swag.lgbt>"]
edition = "2018"

View File

@ -0,0 +1,16 @@
//! Small helper program to install a git hook to automatically run
//! `x.py test tidy --bless` before each commit.
use std::env;
use std::fs;
use std::path::PathBuf;
fn main() {
let root_path: PathBuf = env::args_os().nth(1).expect("need path to root of repo").into();
let script_path: PathBuf = root_path.join("src/tools/install-git-hook/src/pre-commit.sh");
let hook_path: PathBuf = root_path.join(".git/hooks/pre-commit");
fs::copy(&script_path, &hook_path).expect(
format!("Failed to copy pre-commit script to {}", &hook_path.to_string_lossy()).as_str(),
);
}

View File

@ -0,0 +1,18 @@
#!/bin/sh
#
# Call `tidy --bless` before each commit
#
# To enable this hook, run `./x.py run install-git-hook`.
# To disable it, run `./x.py run install-git-hook --remove`
set -Eeuo pipefail
ROOT_DIR=$(git rev-parse --show-toplevel);
COMMAND="$ROOT_DIR/x.py test tidy --bless";
if [[ "$OSTYPE" == "msys" || "$OSTYPE" == "win32" ]]; then
COMMAND="python $COMMAND"
fi
echo "Running pre-commit script $COMMAND";
$COMMAND;