contrib/subtree: unwrap tag refs

If a subtree was added using a tag ref, the tag ref is stored in the subtree commit message instead of the underlying commit's ref. To split or push subsequent changes to the subtree, the subtree command needs to unwrap the tag ref. This patch makes it do so. The problem was described in a message to the mailing list from Junio C Hamano dated 29 Apr 2014, with the subject "Re: git subtree issue in more recent versions". The archived message can be found at <http://comments.gmane.org/gmane.comp.version-control.git/247503>. Signed-off-by: Rob Mayoff <mayoff@dqd.com> Signed-off-by: Jeff King <peff@peff.net>

Rob Mayoff committed Nov 13, 2015 at 11:25 UTC 5d65fe312e22594b7fec7349945fb0072987716b
1 file changed +8 -2
contrib/subtree/git-subtree.sh
+8 -2
@@ -245,7 +245,10 @@ find_latest_squash()
245 case "$a" in
246 START) sq="$b" ;;
247 git-subtree-mainline:) main="$b" ;;
248 - git-subtree-split:) sub="$b" ;;
248 + git-subtree-split:)
249 + sub="$(git rev-parse "$b^0")" ||
250 + die "could not rev-parse split hash $b from commit $sq"
251 + ;;
252 END)
253 if [ -n "$sub" ]; then
254 if [ -n "$main" ]; then
@@ -278,7 +281,10 @@ find_existing_splits()
281 case "$a" in
282 START) sq="$b" ;;
283 git-subtree-mainline:) main="$b" ;;
281 - git-subtree-split:) sub="$b" ;;
284 + git-subtree-split:)
285 + sub="$(git rev-parse "$b^0")" ||
286 + die "could not rev-parse split hash $b from commit $sq"
287 + ;;
288 END)
289 debug " Main is: '$main'"
290 if [ -z "$main" -a -n "$sub" ]; then