mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-26 00:34:06 +00:00
Rollup merge of #88313 - jyn514:pre-push, r=Mark-Simulacrum
Make the pre-commit script pre-push instead This should make it substantially less annoying, and hopefully more people will find it useful. In particular, it will no longer run tidy each time you run `git commit --amend` or rebase a branch. This also warns if you have the old script in pre-commit; see the HACK comment for details. r? ````@Mark-Simulacrum```` cc ````@caass````
This commit is contained in:
commit
aee13fb7c5
@ -30,6 +30,7 @@ fn main() {
|
|||||||
println!("{}", suggestion);
|
println!("{}", suggestion);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let pre_commit = config.src.join(".git").join("hooks").join("pre-commit");
|
||||||
Build::new(config).build();
|
Build::new(config).build();
|
||||||
|
|
||||||
if suggest_setup {
|
if suggest_setup {
|
||||||
@ -42,6 +43,19 @@ fn main() {
|
|||||||
println!("{}", suggestion);
|
println!("{}", suggestion);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Give a warning if the pre-commit script is in pre-commit and not pre-push.
|
||||||
|
// HACK: Since the commit script uses hard links, we can't actually tell if it was installed by x.py setup or not.
|
||||||
|
// We could see if it's identical to src/etc/pre-push.sh, but pre-push may have been modified in the meantime.
|
||||||
|
// Instead, look for this comment, which is almost certainly not in any custom hook.
|
||||||
|
if std::fs::read_to_string(pre_commit).map_or(false, |contents| {
|
||||||
|
contents.contains("https://github.com/rust-lang/rust/issues/77620#issuecomment-705144570")
|
||||||
|
}) {
|
||||||
|
println!(
|
||||||
|
"warning: You have the pre-push script installed to .git/hooks/pre-commit. \
|
||||||
|
Consider moving it to .git/hooks/pre-push instead, which runs less often."
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
if suggest_setup || changelog_suggestion.is_some() {
|
if suggest_setup || changelog_suggestion.is_some() {
|
||||||
println!("note: this message was printed twice to make it more likely to be seen");
|
println!("note: this message was printed twice to make it more likely to be seen");
|
||||||
}
|
}
|
||||||
|
@ -271,9 +271,9 @@ fn install_git_hook_maybe(src_path: &Path) -> io::Result<()> {
|
|||||||
let mut input = String::new();
|
let mut input = String::new();
|
||||||
println!(
|
println!(
|
||||||
"Rust's CI will automatically fail if it doesn't pass `tidy`, the internal tool for ensuring code quality.
|
"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
|
If you'd like, x.py can install a git hook for you that will automatically run `tidy --bless` before
|
||||||
to ensure your code is up to par. If you decide later that this behavior is undesirable,
|
pushing your code to ensure your code is up to par. If you decide later that this behavior is
|
||||||
simply delete the `pre-commit` file from .git/hooks."
|
undesirable, simply delete the `pre-push` file from .git/hooks."
|
||||||
);
|
);
|
||||||
|
|
||||||
let should_install = loop {
|
let should_install = loop {
|
||||||
@ -293,21 +293,21 @@ simply delete the `pre-commit` file from .git/hooks."
|
|||||||
};
|
};
|
||||||
|
|
||||||
if should_install {
|
if should_install {
|
||||||
let src = src_path.join("src").join("etc").join("pre-commit.sh");
|
let src = src_path.join("src").join("etc").join("pre-push.sh");
|
||||||
let git = t!(Command::new("git").args(&["rev-parse", "--git-common-dir"]).output().map(
|
let git = t!(Command::new("git").args(&["rev-parse", "--git-common-dir"]).output().map(
|
||||||
|output| {
|
|output| {
|
||||||
assert!(output.status.success(), "failed to run `git`");
|
assert!(output.status.success(), "failed to run `git`");
|
||||||
PathBuf::from(t!(String::from_utf8(output.stdout)).trim())
|
PathBuf::from(t!(String::from_utf8(output.stdout)).trim())
|
||||||
}
|
}
|
||||||
));
|
));
|
||||||
let dst = git.join("hooks").join("pre-commit");
|
let dst = git.join("hooks").join("pre-push");
|
||||||
match fs::hard_link(src, &dst) {
|
match fs::hard_link(src, &dst) {
|
||||||
Err(e) => println!(
|
Err(e) => println!(
|
||||||
"error: could not create hook {}: do you already have the git hook installed?\n{}",
|
"error: could not create hook {}: do you already have the git hook installed?\n{}",
|
||||||
dst.display(),
|
dst.display(),
|
||||||
e
|
e
|
||||||
),
|
),
|
||||||
Ok(_) => println!("Linked `src/etc/pre-commit.sh` to `.git/hooks/pre-commit`"),
|
Ok(_) => println!("Linked `src/etc/pre-commit.sh` to `.git/hooks/pre-push`"),
|
||||||
};
|
};
|
||||||
} else {
|
} else {
|
||||||
println!("Ok, skipping installation!");
|
println!("Ok, skipping installation!");
|
||||||
|
@ -16,7 +16,7 @@ if [[ "$OSTYPE" == "msys" || "$OSTYPE" == "win32" ]]; then
|
|||||||
COMMAND="python $COMMAND"
|
COMMAND="python $COMMAND"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo "Running pre-commit script '$COMMAND'"
|
echo "Running pre-push script '$COMMAND'"
|
||||||
|
|
||||||
cd "$ROOT_DIR"
|
cd "$ROOT_DIR"
|
||||||
|
|
Loading…
Reference in New Issue
Block a user