'git subtree split' now basically works.
Avery Pennarun committed
Apr 24, 2009 at 14:24 UTC
2573354e9b1619e92b8847d098555a0b6997c231
1 file changed
+18
-4
git-subtree.sh
+18
-4
@@ -28,6 +28,16 @@ debug()
28
fi
29
}
30
31
+assert()
32
+{
33
+ if "$@"; then
34
+ :
35
+ else
36
+ die "assertion failed: " "$@"
37
+ fi
38
+}
39
+
40
+
41
#echo "Options: $*"
42
43
while [ $# -gt 0 ]; do
@@ -63,7 +73,7 @@ debug "dir: {$dir}"
73
74
cache_setup()
75
{
66
- cachedir="$GIT_DIR/subtree-cache/$dir"
76
+ cachedir="$GIT_DIR/subtree-cache/$$"
77
rm -rf "$cachedir" || die "Can't delete old cachedir: $cachedir"
78
mkdir -p "$cachedir" || die "Can't create new cachedir: $cachedir"
79
debug "Using cachedir: $cachedir" >&2
@@ -98,19 +108,23 @@ cmd_split()
108
git rev-list --reverse --parents $revs -- "$dir" |
109
while read rev parents; do
110
newparents=$(cache_get $parents)
101
- echo "rev: $rev / $newparents"
111
+ debug
112
+ debug "Processing commit: $rev / $newparents"
113
114
git ls-tree $rev -- "$dir" |
115
while read mode type tree name; do
116
+ assert [ "$name" = "$dir" ]
117
+ debug " tree is: $tree"
118
p=""
119
for parent in $newparents; do
120
p="$p -p $parent"
121
done
122
newrev=$(echo synthetic | git commit-tree $tree $p) \
123
|| die "Can't create new commit for $rev / $tree"
124
+ echo " newrev is: $newrev"
125
cache_set $rev $newrev
112
- done
113
- done
126
+ done || exit $?
127
+ done || exit $?
128
129
exit 0
130
}