From: Jeff King <peff@peff.net>
To: Jonathan Nieder <jrnieder@gmail.com>
Cc: Sverre Rabbelier <srabbelier@gmail.com>,
Git List <git@vger.kernel.org>,
Daniel Barkalow <barkalow@iabervon.org>,
Ramkumar Ramachandra <artagnon@gmail.com>
Subject: Re: [PATCH 03/19] t5800: document some non-functional parts of remote helpers
Date: Thu, 9 Jun 2011 21:18:58 -0400 [thread overview]
Message-ID: <20110610011858.GA12256@sigill.intra.peff.net> (raw)
In-Reply-To: <20110608192850.GF27715@elie>
On Wed, Jun 08, 2011 at 02:28:51PM -0500, Jonathan Nieder wrote:
> > but we have no way of
> > communicating to fast-export that this name mapping is
> > happening.
>
> It's not just name mapping, no? E.g., I could try
>
> git push testgit::/path/to/repo $(git rev-parse HEAD):new
>
> So I think the current implementation of "export" by testgit
> is just wrong. ;-)
Yeah, it's the same issue. We have no way of communicating the name of
the right-hand ref at all to a helper, aside from asking fast-export to
munge the refname in its output stream. But we have no way of telling
fast-export that even though we asked for "foo", it needs to write the
result into "bar" (and potentially _also_ into "foo", if it's a ref
found on the RHS of a different refspec).
> This seems like a reasonable solution. One way would be to teach
> fast-export about refspecs; another way would be to set up refs in a
> private namespace and then munge the stream that fast-export spits out
> before passing it back to the transport-helper; another (more ugly and
> hackish) way would be to set up a private repository with the real
> repository set up as an alternate, put the appropriate refs there, and
> point fast-export to that.
Munging the stream is a little tricky. We have to correctly parse the
stream and not just do something hack-ish like sed (which is what
git-remote-testgit does, but that's OK, because it's a hack-ish
test script).
But we also have to take care to handle duplicates. So exporting
"refs/heads/foo:refs/heads/bar" would mean that we rewrite all of
refs/heads/foo into refs/heads/bar on commit lines. But two refspecs
like "refs/heads/foo:refs/heads/bar refs/heads/foo:refs/heads/foo" mean
we must write all of the commit lines as "foo" and then do a "reset" of
bar to foo at the end (at least this is what fast-export already does).
But we also need to handle criss-crosses, like:
refs/heads/foo:refs/heads/bar refs/heads/baz:refs/heads/foo
In that case we want change all commit lines for "foo" to "bar", but
also all for "baz" to "foo".
So implementation-wise, the simplest way is if you can give each tip a
name, and then at the end assign all of the tips to refnames (this is
more or less what regular push does internally, of course).
I'm not too familiar with the fast-import protocol or what other
systems' fast importers are capable of. Is it OK to just make a bunch of
commits with marks, and then at the end do our resets? That would make
the problem much simpler, I think.
> Anyway, I don't think this should be in the commit message for the new
> test which doesn't even know about the remote helper protocol. :)
Yeah, maybe not. I wanted to stick the discussion somewhere, and since I
never actually fixed this bug, there wasn't another relevant commit. :)
> > --- a/t/t5800-remote-helpers.sh
> > +++ b/t/t5800-remote-helpers.sh
> > @@ -81,4 +81,51 @@ test_expect_success PYTHON_24 'pushing remote local repo' '
> > compare_refs clone HEAD server HEAD
> > '
> >
> > +test_expect_failure PYTHON_24 'fetch new branch' '
>
> Side note: this repeated PYTHON_24 implementation detail as a
> prerequisite feels wrong. Would it make sense to do something like
>
> if test_have_prereq PYTHON_24
> then
> test_set_prereq REMOTE_TESTGIT
> fi
>
> at the start and use that?
Really, I think you could just exit early if PYTHON_24 isn't set, as all
of the tests require it. If we end up with other non-python helper
tests, they will probably go in a separate script anyway.
> > +test_expect_failure PYTHON_24 'push new branch with old:new refspec' '
> > + (cd clone &&
> > + git push origin new-name:new-refspec
> > + ) &&
> > + compare_refs clone HEAD server refs/heads/new-refspec
> > +'
>
> It would also be interesting to test tag pushes and pushes by object
> name.
> [examples]
Agreed.
-Peff
next prev parent reply other threads:[~2011-06-10 1:19 UTC|newest]
Thread overview: 54+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-06-08 18:48 [PATCH 00/19] remote-helper improvements Sverre Rabbelier
2011-06-08 18:48 ` [PATCH 01/19] transport-helper: fix minor leak in push_refs_with_export Sverre Rabbelier
2011-06-08 21:57 ` Jeff King
2011-06-08 22:08 ` Sverre Rabbelier
2011-06-08 18:48 ` [PATCH 02/19] t5800: factor out some ref tests Sverre Rabbelier
2011-06-08 18:48 ` [PATCH 03/19] t5800: document some non-functional parts of remote helpers Sverre Rabbelier
2011-06-08 19:28 ` Jonathan Nieder
2011-06-08 19:36 ` Jonathan Nieder
2011-06-08 19:51 ` Sverre Rabbelier
2011-06-08 21:13 ` Sverre Rabbelier
2011-06-09 12:45 ` Sverre Rabbelier
2011-06-10 1:18 ` Jeff King [this message]
2011-06-08 18:48 ` [PATCH 04/19] teach remote-testgit to import non-HEAD refs Sverre Rabbelier
2011-06-08 19:30 ` Jonathan Nieder
2011-06-08 19:47 ` Sverre Rabbelier
2011-06-08 22:15 ` Jeff King
2011-06-08 23:48 ` Junio C Hamano
2011-06-09 6:23 ` Sverre Rabbelier
2011-06-08 18:48 ` [PATCH 05/19] transport-helper: don't feed bogus refs to export push Sverre Rabbelier
2011-06-08 18:48 ` [PATCH 06/19] git_remote_helpers: push all refs during a non-local export Sverre Rabbelier
2011-06-08 19:42 ` Jonathan Nieder
2011-06-08 22:19 ` Jeff King
2011-06-08 22:21 ` Sverre Rabbelier
2011-06-09 8:09 ` Jonathan Nieder
2011-06-09 8:29 ` Sverre Rabbelier
2011-06-09 8:43 ` Jonathan Nieder
2011-06-09 10:26 ` Sverre Rabbelier
2011-06-10 1:40 ` Jeff King
2011-06-08 18:48 ` [PATCH 07/19] remote-curl: accept empty line as terminator Sverre Rabbelier
2011-06-08 18:48 ` [PATCH 08/19] git-remote-testgit: only push for non-local repositories Sverre Rabbelier
2011-06-08 18:48 ` [PATCH 09/19] git-remote-testgit: fix error handling Sverre Rabbelier
2011-06-08 18:48 ` [PATCH 10/19] fast-import: introduce 'done' command Sverre Rabbelier
2011-06-08 20:03 ` Jonathan Nieder
2011-06-08 20:07 ` Sverre Rabbelier
2011-06-08 18:48 ` [PATCH 11/19] fast-export: support done feature Sverre Rabbelier
2011-06-08 18:48 ` [PATCH 12/19] transport-helper: factor out push_update_refs_status Sverre Rabbelier
2011-06-08 18:48 ` [PATCH 13/19] transport-helper: check status code of finish_command Sverre Rabbelier
2011-06-08 18:48 ` [PATCH 14/19] transport-helper: use the new done feature where possible Sverre Rabbelier
2011-06-08 18:48 ` [PATCH 15/19] transport-helper: update ref status after push with export Sverre Rabbelier
2011-06-09 9:10 ` Jonathan Nieder
2011-06-09 10:23 ` Sverre Rabbelier
2011-06-08 18:48 ` [PATCH 16/19] transport-helper: change import semantics Sverre Rabbelier
2011-06-08 20:47 ` Jonathan Nieder
2011-06-08 20:52 ` Sverre Rabbelier
2011-06-08 18:48 ` [PATCH 17/19] transport-helper: export is no longer always the last command Sverre Rabbelier
2011-06-09 1:07 ` Junio C Hamano
2011-06-09 6:48 ` Sverre Rabbelier
2011-06-09 7:51 ` Jonathan Nieder
2011-06-09 8:28 ` Sverre Rabbelier
2011-06-13 15:24 ` Junio C Hamano
2011-06-08 18:48 ` [PATCH 18/19] transport-helper: Use capname for gitdir capability too Sverre Rabbelier
2011-06-08 20:54 ` Jonathan Nieder
2011-06-08 20:57 ` Sverre Rabbelier
2011-06-08 18:48 ` [PATCH 19/19] transport-helper: implement marks location as capability Sverre Rabbelier
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20110610011858.GA12256@sigill.intra.peff.net \
--to=peff@peff.net \
--cc=artagnon@gmail.com \
--cc=barkalow@iabervon.org \
--cc=git@vger.kernel.org \
--cc=jrnieder@gmail.com \
--cc=srabbelier@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).