diff options
Diffstat (limited to 'chromium/build/git-hooks/pre-commit')
-rwxr-xr-x | chromium/build/git-hooks/pre-commit | 30 |
1 files changed, 28 insertions, 2 deletions
diff --git a/chromium/build/git-hooks/pre-commit b/chromium/build/git-hooks/pre-commit index 3391a777e76..41b596344c4 100755 --- a/chromium/build/git-hooks/pre-commit +++ b/chromium/build/git-hooks/pre-commit @@ -1,6 +1,28 @@ #!/bin/sh -submods=$(git diff-index --cached --ignore-submodules=dirty HEAD | grep -e '^:160000' -e '^:...... 160000' | xargs) +submodule_diff() { + if test -n "$2"; then + git diff-tree -r --ignore-submodules=dirty "$1" "$2" | grep -e '^:160000' -e '^:...... 160000' | xargs + else + git diff-index --cached --ignore-submodules=dirty "$1" | grep -e '^:160000' -e '^:...... 160000' | xargs + fi +} + +if git rev-parse --verify --quiet --no-revs MERGE_HEAD; then + merge_base=$(git merge-base HEAD MERGE_HEAD) + if test -z "$(submodule_diff $merge_base HEAD)"; then + # Most up-to-date submodules are in MERGE_HEAD. + head_ref=MERGE_HEAD + else + # Most up-to-date submodules are in HEAD. + head_ref=HEAD + fi +else + # No merge in progress. Submodules must match HEAD. + head_ref=HEAD +fi + +submods=$(submodule_diff $head_ref) if test "$submods"; then echo "You are trying to commit changes to the following submodules:" 1>&2 echo 1>&2 @@ -23,7 +45,11 @@ EOF exit 1 fi -if test "$(git diff-index --cached HEAD .gitmodules)"; then +gitmodules_diff() { + git diff-index --cached "$1" .gitmodules +} + +if [ "$(git ls-files .gitmodules)" ] && [ "$(gitmodules_diff $head_ref)" ]; then cat <<EOF 1>&2 You are trying to commit a change to .gitmodules. That is not allowed. To make changes to submodule names/paths, edit DEPS. |