Home | History | Annotate | Download | only in git-hooks
      1 #!/bin/sh
      2 
      3 submodule_diff() {
      4   if test -n "$2"; then
      5     git diff-tree -r --ignore-submodules=dirty "$1" "$2" | grep -e '^:160000' -e '^:...... 160000' | xargs
      6   else
      7     git diff-index --cached --ignore-submodules=dirty "$1" | grep -e '^:160000' -e '^:...... 160000' | xargs
      8   fi
      9 }
     10 
     11 if git rev-parse --verify --quiet --no-revs MERGE_HEAD; then
     12   merge_base=$(git merge-base HEAD MERGE_HEAD)
     13   if test -z "$(submodule_diff $merge_base HEAD)"; then
     14     # Most up-to-date submodules are in MERGE_HEAD.
     15     head_ref=MERGE_HEAD
     16   else
     17     # Most up-to-date submodules are in HEAD.
     18     head_ref=HEAD
     19   fi
     20 else
     21   # No merge in progress. Submodules must match HEAD.
     22   head_ref=HEAD
     23 fi
     24 
     25 submods=$(submodule_diff $head_ref)
     26 if test "$submods"; then
     27   echo "You are trying to commit changes to the following submodules:" 1>&2
     28   echo 1>&2
     29   echo $submods | cut -d ' ' -f 6 | sed 's/^/  /g' 1>&2
     30   cat <<EOF 1>&2
     31 
     32 Submodule commits are not allowed.  Please run:
     33 
     34   git status --ignore-submodules=dirty
     35 
     36 and/or:
     37 
     38   git diff-index --cached --ignore-submodules=dirty HEAD
     39 
     40 ... to see what's in your index.
     41 
     42 If you're really and truly trying to roll the version of a submodule, you should
     43 commit the new version to DEPS, instead.
     44 EOF
     45   exit 1
     46 fi
     47 
     48 gitmodules_diff() {
     49   git diff-index --cached "$1" .gitmodules
     50 }
     51 
     52 if [ "$(git ls-files .gitmodules)" ] && [ "$(gitmodules_diff $head_ref)" ]; then
     53   cat <<EOF 1>&2
     54 You are trying to commit a change to .gitmodules.  That is not allowed.
     55 To make changes to submodule names/paths, edit DEPS.
     56 EOF
     57   exit 1
     58 fi
     59 
     60 exit 0
     61