Skip to content

Instantly share code, notes, and snippets.

@oriy
Forked from sindresorhus/post-merge
Last active October 20, 2022 12:44
Show Gist options
  • Select an option

  • Save oriy/e8b58a6a471d371129b1d0b430510375 to your computer and use it in GitHub Desktop.

Select an option

Save oriy/e8b58a6a471d371129b1d0b430510375 to your computer and use it in GitHub Desktop.

Revisions

  1. oriy revised this gist Aug 10, 2018. 1 changed file with 62 additions and 1 deletion.
    63 changes: 62 additions & 1 deletion post-merge
    Original file line number Diff line number Diff line change
    @@ -6,10 +6,71 @@

    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() {
    echo "$changed_files" | grep --quiet "$1" && eval "$2"
    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"


  2. @sindresorhus sindresorhus revised this gist Jul 16, 2016. 1 changed file with 2 additions and 3 deletions.
    5 changes: 2 additions & 3 deletions post-merge
    Original file line number Diff line number Diff line change
    @@ -1,4 +1,4 @@
    #/usr/bin/env bash
    #!/usr/bin/env bash
    # MIT © Sindre Sorhus - sindresorhus.com

    # git hook to run a command after `git pull` if a specified file was changed
    @@ -11,6 +11,5 @@ check_run() {
    }

    # Example usage
    # In this example it's used to run `npm install` if package.json changed and `bower install` if `bower.json` changed.
    # In this example it's used to run `npm install` if package.json changed
    check_run package.json "npm install"
    check_run bower.json "bower install"
  3. @sindresorhus sindresorhus created this gist Dec 16, 2013.
    16 changes: 16 additions & 0 deletions post-merge
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,16 @@
    #/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() {
    echo "$changed_files" | grep --quiet "$1" && eval "$2"
    }

    # Example usage
    # In this example it's used to run `npm install` if package.json changed and `bower install` if `bower.json` changed.
    check_run package.json "npm install"
    check_run bower.json "bower install"