@matheusbsbs / matheus-bagliano / commits / 2573354e9b
Fork 0

'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 }