X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=dgit.git;a=blobdiff_plain;f=tests%2Ftartree-edit;h=96a5bcb093eebe1e411f5ad432a4dfc44acb9f42;hp=cecc142c2896e9331f2d19fdea87a87bad054ba6;hb=dc2d5ffb3627335e6522ddb7bf526880dc699762;hpb=5beda194296368b661294809786b68221d521e63 diff --git a/tests/tartree-edit b/tests/tartree-edit index cecc142c..96a5bcb0 100755 --- a/tests/tartree-edit +++ b/tests/tartree-edit @@ -67,7 +67,9 @@ case "$#.$1" in ?.-*) fail "no options understood" ;; *) fail "usage: tartree-edit edit|done DIRECTORY|TARBALL - tartree-edit gitfetchinfo DIRECTORY|TARBALL REMOTE" ;; + tartree-edit gitfetchinfo DIRECTORY|TARBALL REMOTE + tartree-edit gitfetchinfo-merge REMOTE-A REMOTE-B" ;; + # we don't document gitfetchinfo-diff because it's rather poor esac case "$arg" in @@ -128,7 +130,9 @@ tryat_gitfetchinfo () { local innerwd="$(echo $play/*)" git for-each-ref --format='%(refname)' refs/remotes >$play/l - perl -ne ' + perl -w -ne ' + our %remerge; + use strict; chomp; next unless m#^refs/remotes/([^/]+)/#; my $old = $_; @@ -136,28 +140,43 @@ tryat_gitfetchinfo () { my $rhs = $'\''; my @ab = split /\+/, $ab; next unless @ab == 2; - next unless grep { $_ eq "'"$remote"'" } @ab; + next unless (grep { $_ eq "'"$remote"'" } @ab) == 1; + $remerge{"@ab"} = 1; print "update refs/remotes/$_/$rhs $old\n" or die $! foreach @ab; print "delete $old\n" or die $!; - ' <$play/l >$play/unmerge + END { + open REMERGE, ">&3" or die $!; + print REMERGE "$_\n" or die $! foreach sort keys %remerge; + close REMERGE or die $!; + } + ' <$play/l >$play/unmerge 3>$play/remerge git update-ref --stdin <$play/unmerge git remote remove "$remote" 2>/dev/null ||: git remote add "$remote" $innerwd git fetch --no-tags -p "$remote" \ - +"HEAD:refs/remotes/$remote/HEAD" + +"HEAD:refs/remotes/$remote/TT-HEAD" cd $innerwd GIT_AUTHOR_DATE=$(git log -n1 --pretty=format:'%ai') GIT_COMMITTER_DATE=$GIT_AUTHOR_DATE export GIT_COMMITTER_DATE GIT_AUTHOR_DATE git checkout -b WORKTREE - gitfetchinfo_perhaps_commit INDEX + gitfetchinfo_perhaps_commit 'UNCOMMITTED INDEX' git add -Af . - gitfetchinfo_perhaps_commit WORKTREE + gitfetchinfo_perhaps_commit 'UNCOMMITTED WORKING TREE' cd ../../.. git fetch --no-tags "$remote" --refmap \ +"refs/*:refs/remotes/$remote/*" \ +"refs/*:refs/remotes/$remote/*" + + exec 3<$play/remerge + # $play will be destroyed by what follows, but we have + # an fd open onto remerge, so this will work + while read <&3 a b; do + echo "Updating gitfetchinfo-merge $a $b" + "$0" gitfetchinfo-merge $a $b + done + exit 0 }