diff --git a/xtask/src/install_git_hooks.rs b/xtask/src/install_git_hooks.rs index 6f52418cb..11803b8c1 100644 --- a/xtask/src/install_git_hooks.rs +++ b/xtask/src/install_git_hooks.rs @@ -1,6 +1,8 @@ +use std::{path::PathBuf, process::Command}; + use crate::util::project_dir; use clap::Args; -use cross::shell::MessageInfo; +use cross::{shell::MessageInfo, CommandExt}; #[derive(Args, Debug)] pub struct InstallGitHooks { @@ -17,7 +19,11 @@ pub struct InstallGitHooks { pub fn install_git_hooks(msg_info: &mut MessageInfo) -> cross::Result<()> { let root = project_dir(msg_info)?; - let git_hooks = root.join(".git").join("hooks"); + let git_hooks = Command::new("git") + .args(&["rev-parse", "--git-common-dir"]) + .run_and_get_stdout(msg_info) + .map(|s| PathBuf::from(&s.trim()))? + .join("hooks"); let cross_dev = root.join("xtask").join("src"); std::fs::copy( diff --git a/xtask/src/pre-commit.sh b/xtask/src/pre-commit.sh index 5b974c7ea..919f966b1 100755 --- a/xtask/src/pre-commit.sh +++ b/xtask/src/pre-commit.sh @@ -1,2 +1,16 @@ #!/usr/bin/env bash +set -ex + +tf=$(mktemp -t stash.XXX.$$) + +cleanup() { + git apply --allow-empty --whitespace=nowarn < "$tf" && git stash drop -q + rm "$tf" +} + +git diff --full-index --binary > "$tf" +git stash -q --keep-index + +trap cleanup EXIT + cargo xtask check --verbose diff --git a/xtask/src/pre-push.sh b/xtask/src/pre-push.sh index eb2cd59e9..db37cb631 100755 --- a/xtask/src/pre-push.sh +++ b/xtask/src/pre-push.sh @@ -1,2 +1,16 @@ #!/usr/bin/env bash +set -ex + +tf=$(mktemp -t stash.XXX.$$) + +cleanup() { + git apply --allow-empty --whitespace=nowarn < "$tf" && git stash drop -q + rm "$tf" +} + +git diff --full-index --binary > "$tf" +git stash -q --keep-index + +trap cleanup EXIT + cargo xtask test --verbose