summaryrefslogtreecommitdiffstats
path: root/chromium/build/git-hooks/pre-commit
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/build/git-hooks/pre-commit')
-rwxr-xr-xchromium/build/git-hooks/pre-commit30
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.