@@ -27,6 +27,7 @@ b,branch= create a new branch from the split subtree
27
27
ignore-joins ignore prior --rejoin commits
28
28
onto= try connecting new tree to an existing one
29
29
rejoin merge the new branch back into HEAD
30
+ clear-cache reset the subtree mapping cache
30
31
options for 'add', 'merge', and 'pull'
31
32
squash merge subtree changes as a single commit
32
33
"
@@ -48,6 +49,7 @@ annotate=
48
49
squash=
49
50
message=
50
51
prefix=
52
+ clearcache=
51
53
52
54
debug () {
53
55
if test -n " $debug "
131
133
--no-rejoin)
132
134
rejoin=
133
135
;;
136
+ --clear-cache)
137
+ clearcache=1
138
+ ;;
134
139
--ignore-joins)
135
140
ignore_joins=1
136
141
;;
@@ -206,9 +211,13 @@ debug "opts: {$*}"
206
211
debug
207
212
208
213
cache_setup () {
209
- cachedir=" $GIT_DIR /subtree-cache/$$ "
210
- rm -rf " $cachedir " ||
211
- die " Can't delete old cachedir: $cachedir "
214
+ cachedir=" $GIT_DIR /subtree-cache/$prefix "
215
+ if test -n " $clearcache "
216
+ then
217
+ debug " Clearing cache"
218
+ rm -rf " $cachedir " ||
219
+ die " Can't delete old cachedir: $cachedir "
220
+ fi
212
221
mkdir -p " $cachedir " ||
213
222
die " Can't create new cachedir: $cachedir "
214
223
mkdir -p " $cachedir /notree" ||
@@ -266,6 +275,16 @@ cache_set () {
266
275
echo " $newrev " > " $cachedir /$oldrev "
267
276
}
268
277
278
+ cache_set_if_unset () {
279
+ oldrev=" $1 "
280
+ newrev=" $2 "
281
+ if test -e " $cachedir /$oldrev "
282
+ then
283
+ return
284
+ fi
285
+ echo " $newrev " > " $cachedir /$oldrev "
286
+ }
287
+
269
288
rev_exists () {
270
289
if git rev-parse " $1 " > /dev/null 2>&1
271
290
then
@@ -375,13 +394,13 @@ find_existing_splits () {
375
394
then
376
395
# squash commits refer to a subtree
377
396
debug " Squash: $sq from $sub "
378
- cache_set " $sq " " $sub "
397
+ cache_set_if_unset " $sq " " $sub "
379
398
fi
380
399
if test -n " $main " -a -n " $sub "
381
400
then
382
401
debug " Prior: $main -> $sub "
383
- cache_set $main $sub
384
- cache_set $sub $sub
402
+ cache_set_if_unset $main $sub
403
+ cache_set_if_unset $sub $sub
385
404
try_remove_previous " $main "
386
405
try_remove_previous " $sub "
387
406
fi
@@ -690,6 +709,8 @@ process_split_commit () {
690
709
if test -n " $newparents "
691
710
then
692
711
cache_set " $rev " " $rev "
712
+ else
713
+ cache_set " $rev " " "
693
714
fi
694
715
return
695
716
fi
@@ -787,7 +808,7 @@ cmd_split () {
787
808
# the 'onto' history is already just the subdir, so
788
809
# any parent we find there can be used verbatim
789
810
debug " cache: $rev "
790
- cache_set " $rev " " $rev "
811
+ cache_set_if_unset " $rev " " $rev "
791
812
done
792
813
fi
793
814
@@ -800,7 +821,7 @@ cmd_split () {
800
821
git rev-list --topo-order --skip=1 $mainline |
801
822
while read rev
802
823
do
803
- cache_set " $rev " " "
824
+ cache_set_if_unset " $rev " " "
804
825
done || exit $?
805
826
fi
806
827
0 commit comments