git@vger.kernel.org mailing list mirror (one of many)
 help / color / mirror / code / Atom feed
From: Felipe Contreras <felipe.contreras@gmail.com>
To: Junio C Hamano <gitster@pobox.com>
Cc: git@vger.kernel.org,
	Johannes Schindelin <johannes.schindelin@gmx.de>,
	Max Horn <max@quendi.de>, Jeff King <peff@peff.net>,
	Sverre Rabbelier <srabbelier@gmail.com>,
	Brandon Casey <drafnel@gmail.com>,
	Brandon Casey <casey@nrlssc.navy.mil>,
	Jonathan Nieder <jrnieder@gmail.com>,
	Ilari Liusvaara <ilari.liusvaara@elisanet.fi>,
	Pete Wyckoff <pw@padd.com>, Ben Walton <bdwalton@gmail.com>,
	Matthieu Moy <Matthieu.Moy@imag.fr>,
	Julian Phillips <julian@quantumfyre.co.uk>
Subject: Re: [PATCH v5 15/15] fast-export: don't handle uninteresting refs
Date: Wed, 21 Nov 2012 04:03:03 +0100	[thread overview]
Message-ID: <CAMP44s0UhTm7rRAQOHbwnv682xWCmD2JKQJBRB7+pXmzBUPqOw@mail.gmail.com> (raw)
In-Reply-To: <7vd2z7rj3y.fsf@alter.siamese.dyndns.org>

On Tue, Nov 20, 2012 at 11:43 PM, Junio C Hamano <gitster@pobox.com> wrote:
> Felipe Contreras <felipe.contreras@gmail.com> writes:
>
>> Of course, transport-helper shouldn't even be specifying the negative
>> (^) refs, but that's another story.
>
> Hrm, I am not sure I understand what you mean by this.
>
> How should it be telling the fast-export up to what commit the
> receiving end should already have the history for (hence they do not
> need to be sent)?  Or are you advocating to re-send the entire
> history down to the root commit every time?

No, it would not re-send the whole history, that's what marks are for.

And right now it doesn't exactly which was the last commit. Let's
suppose the remote helper has a refspec like this:

refs/heads/*:refs/hg/origin/heads/*

1) What happens the first time you push?

5203a268546295ebd895fd87522217ef53bd3313 refs/heads/master
5203a268546295ebd895fd87522217ef53bd3313 refs/remotes/tmp/master

Notice how the remote ref is updated correctly, but it's not the
remote helper refspec, so the next time you push, you will from root.

It's only when you fetch that you get the refspec'ed refs:

5203a268546295ebd895fd87522217ef53bd3313 refs/heads/master
5203a268546295ebd895fd87522217ef53bd3313 refs/hg/tmp/heads/master
5203a268546295ebd895fd87522217ef53bd3313 refs/remotes/tmp/master

So, there's already a mismatch.

2) What happens when you have no marks?

You get something like:
reset refs/heads/heads
from :0

Which is totally useless. Somebody proposed a patch that would replace
the :0 with a git sha-1, but that is equally useless for a remote
helper: we need a hg ref id, or a bzr id, or whatever, and no, there's
mapping between git sha-1's and hg ref ids, there's only git->mark
mark->hg, without marks, there's no way to map the git id to the hg
id.

3) What happens when you have a refspec like this?

*:*

Now nothing works, because we would be requesting ^refs/heads/master
refs/heads/master.

And according to the documentation, this is the default when no
refspec is used, which is not true.

4) What happens when there's no refspec at all.

Now it's even worst; nothing gets done at all:

if (!data->refspecs)
	continue;

I documented all this breakages in this patch:

http://article.gmane.org/gmane.comp.version-control.git/209365

not ok 10 - push new branch with old:new refspec # TODO known breakage
ok 11 - cloning without refspec
ok 12 - pulling without refspecs
not ok 13 - pushing without refspecs # TODO known breakage
not ok 14 - pulling with straight refspec # TODO known breakage
not ok 15 - pushing with straight refspec # TODO known breakage
not ok 16 - pulling without marks # TODO known breakage
not ok 17 - pushing without marks # TODO known breakage

And if you apply this patch:

--- a/transport-helper.c
+++ b/transport-helper.c
@@ -750,6 +750,7 @@ static int push_refs_with_export(struct transport
*transport,
        struct helper_data *data = transport->data;
        struct string_list revlist_args = STRING_LIST_INIT_NODUP;
        struct strbuf buf = STRBUF_INIT;
+       struct remote *remote = transport->remote;

        helper = get_helper(transport);

@@ -761,22 +762,23 @@ static int push_refs_with_export(struct
transport *transport,
                char *private;
                unsigned char sha1[20];

-               if (!data->refspecs)
+               if (ref->deletion)
+                       die("remote-helpers do not support ref deletion");
+
+               if (!ref->peer_ref)
+                       continue;
+
+               string_list_append(&revlist_args, ref->peer_ref->name);
+
+               if (!data->import_marks)
                        continue;
-               private = apply_refspecs(data->refspecs,
data->refspec_nr, ref->name);
+
+               private = apply_refspecs(remote->fetch,
remote->fetch_refspec_nr, ref->name);
                if (private && !get_sha1(private, sha1)) {
                        strbuf_addf(&buf, "^%s", private);
                        string_list_append(&revlist_args,
strbuf_detach(&buf, NULL));
                }
                free(private);
-
-               if (ref->deletion) {
-                       die("remote-helpers do not support ref deletion");
-               }
-
-               if (ref->peer_ref)
-                       string_list_append(&revlist_args, ref->peer_ref->name);
-
        }

        if (get_exporter(transport, &exporter, &revlist_args))

ok 13 - pushing without refspecs # TODO known breakage
ok 14 - pulling with straight refspec # TODO known breakage
ok 15 - pushing with straight refspec # TODO known breakage
ok 16 - pulling without marks # TODO known breakage
ok 17 - pushing without marks # TODO known breakage

Cheers.

-- 
Felipe Contreras

  reply	other threads:[~2012-11-21  3:03 UTC|newest]

Thread overview: 65+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-11-11 13:59 [PATCH v5 00/15] fast-export and remote-testgit improvements Felipe Contreras
2012-11-11 13:59 ` [PATCH v5 01/15] fast-export: avoid importing blob marks Felipe Contreras
2012-11-11 16:36   ` Torsten Bögershausen
2012-11-11 16:38     ` Jeff King
2012-11-12 17:44       ` Junio C Hamano
2012-11-11 17:53     ` Felipe Contreras
2012-11-11 13:59 ` [PATCH v5 02/15] remote-testgit: fix direction of marks Felipe Contreras
2012-11-11 20:39   ` Max Horn
2012-11-11 13:59 ` [PATCH v5 03/15] remote-helpers: fix failure message Felipe Contreras
2012-11-11 13:59 ` [PATCH v5 04/15] Rename git-remote-testgit to git-remote-testpy Felipe Contreras
2012-11-11 13:59 ` [PATCH v5 05/15] Add new simplified git-remote-testgit Felipe Contreras
2012-11-11 20:40   ` Max Horn
2012-11-21 18:26   ` Junio C Hamano
2012-11-21 23:39     ` Felipe Contreras
2012-11-11 13:59 ` [PATCH v5 06/15] remote-testgit: get rid of non-local functionality Felipe Contreras
2012-11-21 18:26   ` Junio C Hamano
2012-11-21 23:44     ` Felipe Contreras
2012-11-11 13:59 ` [PATCH v5 07/15] remote-testgit: remove irrelevant test Felipe Contreras
2012-11-11 13:59 ` [PATCH v5 08/15] remote-testgit: cleanup tests Felipe Contreras
2012-11-21 18:28   ` Junio C Hamano
2012-11-22  0:55     ` Felipe Contreras
2012-11-11 13:59 ` [PATCH v5 09/15] remote-testgit: exercise more features Felipe Contreras
2012-11-21 18:26   ` Junio C Hamano
2012-11-21 23:35     ` Felipe Contreras
2012-11-11 13:59 ` [PATCH v5 10/15] remote-testgit: report success after an import Felipe Contreras
2012-11-11 13:59 ` [PATCH v5 11/15] remote-testgit: make clear the 'done' feature Felipe Contreras
2012-11-11 20:49   ` Max Horn
2012-11-11 21:22     ` Felipe Contreras
2012-11-12 11:20       ` Max Horn
2012-11-12 15:45         ` Jonathan Nieder
2012-11-12 16:40           ` Felipe Contreras
2012-11-21 18:11         ` Junio C Hamano
2012-11-21 19:20           ` Sverre Rabbelier
2012-11-11 13:59 ` [PATCH v5 12/15] fast-export: trivial cleanup Felipe Contreras
2012-11-11 13:59 ` [PATCH v5 13/15] fast-export: fix comparison in tests Felipe Contreras
2012-11-11 13:59 ` [PATCH v5 14/15] fast-export: make sure updated refs get updated Felipe Contreras
2012-11-11 20:43   ` Max Horn
2012-11-21 18:12     ` Junio C Hamano
2012-11-11 13:59 ` [PATCH v5 15/15] fast-export: don't handle uninteresting refs Felipe Contreras
2012-11-12 16:28   ` Felipe Contreras
2012-11-20 22:43     ` Junio C Hamano
2012-11-21  3:03       ` Felipe Contreras [this message]
2012-11-21  4:17       ` Jonathan Nieder
2012-11-21  4:22         ` Felipe Contreras
2012-11-21  5:08         ` Junio C Hamano
2012-11-21  7:11           ` Felipe Contreras
2012-11-21  8:37           ` Felipe Contreras
2012-11-21 19:48           ` Jeff King
2012-11-22  0:28             ` Felipe Contreras
2012-11-26  5:35               ` Junio C Hamano
2012-11-26 12:16                 ` Felipe Contreras
2012-11-26 16:28                 ` Johannes Schindelin
2012-11-26 17:56                   ` Junio C Hamano
2012-11-26 19:23                     ` Felipe Contreras
2012-11-26 19:26                     ` Johannes Schindelin
2012-11-26 21:46                       ` Sverre Rabbelier
2012-11-26 22:22                         ` Junio C Hamano
2012-11-21 22:30           ` Max Horn
2012-11-22  0:38             ` Felipe Contreras
2012-11-21 18:14   ` Junio C Hamano
2012-11-22  0:15     ` Felipe Contreras
2012-11-24  3:12   ` Felipe Contreras
2012-11-21  9:46 ` [PATCH v5 00/15] fast-export and remote-testgit improvements Felipe Contreras
2012-11-21 19:05   ` Junio C Hamano
2012-11-22  0:51     ` Felipe Contreras

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

  List information: http://vger.kernel.org/majordomo-info.html

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=CAMP44s0UhTm7rRAQOHbwnv682xWCmD2JKQJBRB7+pXmzBUPqOw@mail.gmail.com \
    --to=felipe.contreras@gmail.com \
    --cc=Matthieu.Moy@imag.fr \
    --cc=bdwalton@gmail.com \
    --cc=casey@nrlssc.navy.mil \
    --cc=drafnel@gmail.com \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    --cc=ilari.liusvaara@elisanet.fi \
    --cc=johannes.schindelin@gmx.de \
    --cc=jrnieder@gmail.com \
    --cc=julian@quantumfyre.co.uk \
    --cc=max@quendi.de \
    --cc=peff@peff.net \
    --cc=pw@padd.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.
Code repositories for project(s) associated with this public inbox

	https://80x24.org/mirrors/git.git

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 read-only IMAP folder(s) and NNTP newsgroup(s).