Skip to content

Instantly share code, notes, and snippets.

@oriy
Forked from sindresorhus/post-merge
Last active October 20, 2022 12:44
  • Star 1 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
Star You must be signed in to star a gist
Save oriy/e8b58a6a471d371129b1d0b430510375 to your computer and use it in GitHub Desktop.
git hook to run a command after `git pull` if a specified file was changed.In this example it's used to run `npm install` if package.json changed and `bower install` if `bower.json` changed.Run `chmod +x post-merge` to make it executable then put it into `.git/hooks/`.
#!/usr/bin/env bash
# MIT © Sindre Sorhus - sindresorhus.com
# git hook to run a command after `git pull` if a specified file was changed
# Run `chmod +x post-merge` to make it executable then put it into `.git/hooks/`.
changed_files="$(git diff-tree -r --name-only --no-commit-id ORIG_HEAD HEAD)"
##
# check_run()
# check if a file has changed, if so, evaluate given command
# args:
# $1 - fileNameRegex - file name regex to check
# $2 - command - command to execute
check_run() {
fileNameRegex="$1"
command="$2"
if echo "$changed_files" | grep --quiet "$fileNameRegex"; then
echo " * changes detected in $fileNameRegex"
echo " * executing '$command'"
eval "$command";
fi
}
# Example usage
# In this example it's used to run `npm install` if package.json changed
check_run package.json "npm install"
##
# suggest_command()
# conditionally execute a command when specified files change
# args:
# $1 - git config key
# $2 - command location
# $3 - command to execute
suggest_command() {
gitConfigKey="$1"
scriptLocation="$2"
command="$3"
gitConfigOption="git.autoRun.$gitConfigKey"
if [ "$(git config --get-all $gitConfigOption)" == "true" ]; then
echo " * git config '$gitConfigOption' is set true"
echo " ** executing '$command'"
pushd "$scriptLocation" > /dev/null
if ! type "$command" 2> /dev/null; then
command="./$command"
fi
execution=$($command 2>&1)
echo "$execution"
popd > /dev/null;
echo " ** done"
echo " * script can be disabled from running automatically by updating the git config option:"
echo " => git config $gitConfigOption false"
else
echo " * you may want to run the following command from $scriptLocation>"
echo " => $command"
echo " * the command would run automatically if you set the following git config option:"
echo " => git config $gitConfigOption true"
fi
}
suggest_liquibase_update() {
suggest_command 'liqui' 'db' 'gradlew update'
}
suggest_gradle_idea() {
suggest_command 'idea' '.' 'gradlew idea'
}
check_run "liquibase/.*\.xml" "suggest_liquibase_update"
check_run "\.gradle" "suggest_gradle_idea"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment