@@ -35,6 +35,8 @@ NO_SHA1=1
35
35
PREV_COMMIT=" "
36
36
INITIAL_COMMIT=" ${CURRENT_COMMIT} "
37
37
38
+ BRANCH=" $( git rev-parse --abbrev-ref HEAD) "
39
+
38
40
while true ; do
39
41
if [ " $CURRENT_COMMIT " = $VERIFIED_ROOT ]; then
40
42
echo " There is a valid path from \" $INITIAL_COMMIT \" to $VERIFIED_ROOT where all commits are signed!"
@@ -123,9 +125,29 @@ while true; do
123
125
fi
124
126
125
127
PARENTS=$( git show -s --format=format:%P " $CURRENT_COMMIT " )
126
- for PARENT in $PARENTS ; do
127
- PREV_COMMIT=" $CURRENT_COMMIT "
128
- CURRENT_COMMIT=" $PARENT "
129
- break
130
- done
128
+ PARENT1=${PARENTS%% * }
129
+ PARENT2=" "
130
+ if [ " x$PARENT1 " != " x$PARENTS " ]; then
131
+ PARENTX=${PARENTS#* }
132
+ PARENT2=${PARENTX%% * }
133
+ if [ " x$PARENT2 " != " x$PARENTX " ]; then
134
+ echo " Commit $CURRENT_COMMIT is an octopus merge" > /dev/stderr
135
+ exit 1
136
+ fi
137
+ fi
138
+ if [ " x$PARENT2 " != " x" ]; then
139
+ CURRENT_TREE=" $( git show --format=" %T" " $CURRENT_COMMIT " ) "
140
+ git checkout --force --quiet " $PARENT1 "
141
+ git merge --no-ff --quiet " $PARENT2 " > /dev/null
142
+ RECREATED_TREE=" $( git show --format=" %T" HEAD) "
143
+ if [ " $CURRENT_TREE " != " $RECREATED_TREE " ]; then
144
+ echo " Merge commit $CURRENT_COMMIT is not clean" > /dev/stderr
145
+ git diff " $CURRENT_COMMIT "
146
+ git checkout --force --quiet " $BRANCH "
147
+ exit 1
148
+ fi
149
+ git checkout --force --quiet " $BRANCH "
150
+ fi
151
+ PREV_COMMIT=" $CURRENT_COMMIT "
152
+ CURRENT_COMMIT=" $PARENT1 "
131
153
done
0 commit comments