summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorIan Jackson <ijackson@chiark.greenend.org.uk>2016-07-02 11:25:54 +0100
committerIan Jackson <ijackson@chiark.greenend.org.uk>2016-07-02 11:35:31 +0100
commit5beda194296368b661294809786b68221d521e63 (patch)
treec5f149591beaa53fb6aef04e5c355e9f5ad7e942 /tests
parent312eeea6721530096c252d25f325762e96880cdb (diff)
Test suite: tartree-edit: gitfetchinfo: Unmerge merged refs
The sequence gitfetchinfo-merge A B gitfetchinfo A gitfetchinfo-merge A B might leave inappropriate A+B refs, because nothing would delete them. So, have gitfetchinfo A unmerge any A+B or B+A refs. (This does mean that the user of gitfetchinfo A is now promising that any remotes A+B or B+A were made with gitfetchinfo-merge.)
Diffstat (limited to 'tests')
-rwxr-xr-xtests/tartree-edit20
1 files changed, 19 insertions, 1 deletions
diff --git a/tests/tartree-edit b/tests/tartree-edit
index 1aeab3d..cecc142 100755
--- a/tests/tartree-edit
+++ b/tests/tartree-edit
@@ -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" \