Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions Cargo.lock
Original file line number Diff line number Diff line change
Expand Up @@ -1407,6 +1407,10 @@ dependencies = [
"hashbrown",
]

[[package]]
name = "install-git-hook"
version = "0.1.0"

[[package]]
name = "installer"
version = "0.0.0"
Expand Down
1 change: 1 addition & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -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",
Expand Down
2 changes: 1 addition & 1 deletion src/bootstrap/builder.rs
Original file line number Diff line number Diff line change
Expand Up @@ -487,7 +487,7 @@ impl<'a> Builder<'a> {
install::Src,
install::Rustc
),
Kind::Run => describe!(run::ExpandYamlAnchors,),
Kind::Run => describe!(run::ExpandYamlAnchors, run::InstallGitHook),
}
}

Expand Down
24 changes: 24 additions & 0 deletions src/bootstrap/run.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}
}
1 change: 1 addition & 0 deletions src/bootstrap/tool.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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)]
Expand Down
5 changes: 5 additions & 0 deletions src/tools/install-git-hook/Cargo.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
[package]
name = "install-git-hook"
version = "0.1.0"
authors = ["Cass Fridkin <[email protected]>"]
edition = "2018"
16 changes: 16 additions & 0 deletions src/tools/install-git-hook/src/main.rs
Original file line number Diff line number Diff line change
@@ -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(),
);
}
18 changes: 18 additions & 0 deletions src/tools/install-git-hook/src/pre-commit.sh
Original file line number Diff line number Diff line change
@@ -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;