Use information about prior splits to make sure merges work right.
Avery Pennarun committed
Apr 24, 2009 at 16:48 UTC
8b4a77f2a16d730f7261d66991107ab404b3b4ac
1 file changed
+36
-4
git-subtree.sh
+36
-4
@@ -46,7 +46,6 @@ assert()
46
47
while [ $# -gt 0 ]; do
48
opt="$1"
49
- debug "option: $1"
49
shift
50
case "$opt" in
51
-q) quiet=1 ;;
@@ -108,6 +107,30 @@ cache_set()
107
echo "$newrev" >"$cachedir/$oldrev"
108
}
109
110
+find_existing_splits()
111
+{
112
+ debug "Looking for prior splits..."
113
+ dir="$1"
114
+ revs="$2"
115
+ git log --grep="^git-subtree-dir: $dir\$" \
116
+ --pretty=format:'%s%n%n%b%nEND' "$revs" |
117
+ while read a b junk; do
118
+ case "$a" in
119
+ git-subtree-mainline:) main="$b" ;;
120
+ git-subtree-split:) sub="$b" ;;
121
+ *)
122
+ if [ -n "$main" -a -n "$sub" ]; then
123
+ debug " Prior: $main -> $sub"
124
+ cache_set $main $sub
125
+ echo "^$main^ ^$sub^"
126
+ main=
127
+ sub=
128
+ fi
129
+ ;;
130
+ esac
131
+ done
132
+}
133
+
134
copy_commit()
135
{
136
# We're doing to set some environment vars here, so
@@ -136,10 +159,11 @@ merge_msg()
159
latest_old="$2"
160
latest_new="$3"
161
cat <<-EOF
139
- Split changes from '$dir/' into commit '$latest_new'
162
+ Split '$dir/' into commit '$latest_new'
163
164
git-subtree-dir: $dir
142
- git-subtree-includes: $latest_old
165
+ git-subtree-mainline: $latest_old
166
+ git-subtree-split: $latest_new
167
EOF
168
}
169
@@ -148,12 +172,20 @@ cmd_split()
172
debug "Splitting $dir..."
173
cache_setup || exit $?
174
151
- git rev-list --reverse --parents $revs -- "$dir" |
175
+ unrevs="$(find_existing_splits "$dir" "$revs")"
176
+
177
+ git rev-list --reverse --parents $revs $unrevs -- "$dir" |
178
while read rev parents; do
179
+ exists=$(cache_get $rev)
180
newparents=$(cache_get $parents)
181
debug
182
debug "Processing commit: $rev / $newparents"
183
184
+ if [ -n "$exists" ]; then
185
+ debug " prior: $exists"
186
+ continue
187
+ fi
188
+
189
git ls-tree $rev -- "$dir" |
190
while read mode type tree name; do
191
assert [ "$name" = "$dir" ]