@matheusbsbs / matheus-bagliano / commits / 210d083904
Fork 0

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"