Prune out some extra merge commits by comparing their parents correctly.
Avery Pennarun committed
Apr 24, 2009 at 21:49 UTC
210d083904914dd4668e032870f92ff0d5d441cc
1 file changed
+13
-5
git-subtree.sh
+13
-5
@@ -168,9 +168,17 @@ merge_msg()
168
EOF
169
}
170
171
-tree_for_commit()
171
+toptree_for_commit()
172
{
173
- git ls-tree "$1" -- "$dir" |
173
+ commit="$1"
174
+ git log -1 --pretty=format:'%T' "$commit" -- || exit $?
175
+}
176
+
177
+subtree_for_commit()
178
+{
179
+ commit="$1"
180
+ dir="$2"
181
+ git ls-tree "$commit" -- "$dir" |
182
while read mode type tree name; do
183
assert [ "$name" = "$dir" ]
184
echo $tree
@@ -185,7 +193,7 @@ tree_changed()
193
if [ $# -ne 1 ]; then
194
return 0 # weird parents, consider it changed
195
else
188
- ptree=$(tree_for_commit $1)
196
+ ptree=$(toptree_for_commit $1)
197
if [ "$ptree" != "$tree" ]; then
198
return 0 # changed
199
else
@@ -226,7 +234,7 @@ cmd_split()
234
newparents=$(cache_get $parents)
235
debug " newparents: $newparents"
236
229
- tree=$(tree_for_commit $rev)
237
+ tree=$(subtree_for_commit $rev "$dir")
238
debug " tree is: $tree"
239
[ -z $tree ] && continue
240
@@ -235,7 +243,7 @@ cmd_split()
243
p="$p -p $parent"
244
done
245
238
- if tree_changed $tree $parents; then
246
+ if tree_changed $tree $newparents; then
247
newrev=$(copy_commit $rev $tree "$p") || exit $?
248
else
249
newrev="$newparents"