Andrew's git
/
gitweb.git
/ diff
summary
|
log
|
commit
| diff |
tree
commit
grep
author
committer
pickaxe
?
re
Skip over empty commits.
author
Avery Pennarun
<apenwarr@gmail.com>
Fri, 24 Apr 2009 21:53:10 +0000
(17:53 -0400)
committer
Avery Pennarun
<apenwarr@gmail.com>
Fri, 24 Apr 2009 21:53:10 +0000
(17:53 -0400)
But we still need to get rid of unnecessary merge commits somehow...
git-subtree.sh
patch
|
blob
|
history
raw
|
patch
|
inline
| side by side (parent:
2c71b7c
)
diff --git
a/git-subtree.sh
b/git-subtree.sh
index 1e1237f52006db612a4e69d1565672456bc07854..7ae71886f443b4cd12b4af8ee12674b1e18d0755 100755
(executable)
--- a/
git-subtree.sh
+++ b/
git-subtree.sh
@@
-167,6
+167,32
@@
merge_msg()
EOF
}
EOF
}
+tree_for_commit()
+{
+ git ls-tree "$1" -- "$dir" |
+ while read mode type tree name; do
+ assert [ "$name" = "$dir" ]
+ echo $tree
+ break
+ done
+}
+
+tree_changed()
+{
+ tree=$1
+ shift
+ if [ $# -ne 1 ]; then
+ return 0 # weird parents, consider it changed
+ else
+ ptree=$(tree_for_commit $1)
+ if [ "$ptree" != "$tree" ]; then
+ return 0 # changed
+ else
+ return 1 # not changed
+ fi
+ fi
+}
+
cmd_split()
{
debug "Splitting $dir..."
cmd_split()
{
debug "Splitting $dir..."
@@
-199,21
+225,24
@@
cmd_split()
newparents=$(cache_get $parents)
debug " newparents: $newparents"
newparents=$(cache_get $parents)
debug " newparents: $newparents"
- git ls-tree $rev -- "$dir" |
- while read mode type tree name; do
- assert [ "$name" = "$dir" ]
- debug " tree is: $tree"
-
p=""
-
for parent in $newparents; do
-
p="$p -p $parent"
-
done
+ tree=$(tree_for_commit $rev)
+ debug " tree is: $tree"
+ [ -z $tree ] && continue
+
+ p=""
+ for parent in $newparents; do
+ p="$p -p $parent"
+ done
+ if tree_changed $tree $parents; then
newrev=$(copy_commit $rev $tree "$p") || exit $?
newrev=$(copy_commit $rev $tree "$p") || exit $?
- debug " newrev is: $newrev"
- cache_set $rev $newrev
- cache_set latest_new $newrev
- cache_set latest_old $rev
- done || exit $?
+ else
+ newrev="$newparents"
+ fi
+ debug " newrev is: $newrev"
+ cache_set $rev $newrev
+ cache_set latest_new $newrev
+ cache_set latest_old $rev
done || exit $?
latest_new=$(cache_get latest_new)
if [ -z "$latest_new" ]; then
done || exit $?
latest_new=$(cache_get latest_new)
if [ -z "$latest_new" ]; then