chiark / gitweb /
Test suite: tartree-edit: gitfetchinfo: Unmerge merged refs
[dgit.git] / tests / tartree-edit
index 1aeab3d41dc7f8e2b58051667e0dc37c114141de..cecc142c2896e9331f2d19fdea87a87bad054ba6 100755 (executable)
@@ -116,6 +116,7 @@ gitfetchinfo_perhaps_commit () {
 
 tryat_gitfetchinfo () {
        git_manip_play
+
        if test -d "$b.edit"; then
                cp -a "$b.edit"/. "$play"/.
        else
@@ -123,7 +124,24 @@ tryat_gitfetchinfo () {
                tar -C $play -f - <&3 -x
                exec 3<&-
        fi
-       local innerwd=$play/*
+
+       local innerwd="$(echo $play/*)"
+
+       git for-each-ref --format='%(refname)' refs/remotes >$play/l
+       perl -ne '
+           chomp;
+           next unless m#^refs/remotes/([^/]+)/#;
+           my $old = $_;
+           my $ab = $1;
+           my $rhs = $'\'';
+           my @ab = split /\+/, $ab;
+           next unless @ab == 2;
+           next unless grep { $_ eq "'"$remote"'" } @ab;
+           print "update refs/remotes/$_/$rhs $old\n" or die $! foreach @ab;
+           print "delete $old\n" or die $!;
+       ' <$play/l >$play/unmerge
+       git update-ref --stdin <$play/unmerge
+
        git remote remove "$remote" 2>/dev/null ||:
        git remote add "$remote" $innerwd
        git fetch --no-tags -p "$remote" \