OLD | NEW |
| (Empty) |
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 | |
OLD | NEW |