X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=dgit.git;a=blobdiff_plain;f=tests%2Ftartree-edit;h=40bd6e9620974f376a4cbcd57c9aaec782df7964;hp=cdaade35b5e0a7daf2e332ea98c9d5d90c7f7084;hb=63911b5d576e7250c132d117c53e66aaf34b7f47;hpb=eedaadbe6baffb2217fc91c6a97bd2d5d71f9da0 diff --git a/tests/tartree-edit b/tests/tartree-edit index cdaade35..40bd6e96 100755 --- a/tests/tartree-edit +++ b/tests/tartree-edit @@ -5,7 +5,7 @@ fail () { echo >&2 "$0: $*"; exit 1; } play=.git/tartree-edit-work git_manip_play () { - local wd=$(pwd) + local wd; wd=$(pwd) case "$wd" in *.edit) fail "bad idea to run gitfetchinfo into a .edit tree!" ;; esac @@ -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 @@ -125,10 +127,11 @@ tryat_gitfetchinfo () { exec 3<&- fi - local innerwd="$(echo $play/*)" + local innerwd; innerwd="$(echo $play/*)" git for-each-ref --format='%(refname)' refs/remotes >$play/l perl -w -ne ' + our %remerge; use strict; chomp; next unless m#^refs/remotes/([^/]+)/#; @@ -141,25 +144,39 @@ tryat_gitfetchinfo () { $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 }