threads / discuss / 26878

remote-helpers and refs without a value

Subject: remote-helpers and refs without a value

## tl;dr

5 messages between Mar 27, 2011 and Mar 30, 2011.

replies: 4people: 2as markdown or json

Mike Hommey· Mar 27, 2011, 08:24 UTC · lore
Hi,

If I understand correctly how remote helpers work, the values that the helper returns to the list command is then used to update the remote branches, or FETCH_HEAD, dependint how the fetch happened.

But when the helper returns a '?' value to the list command, I don't see how things are supposed to be updated. It looks like the helper is the only one, then, to be able to update the refs. But it also doesn't have any way to know which refs it needs to update...

Is it a misunderstanding from my part, or is it something that should be improved in the remote-helpers support?

Mike
Tay Ray Chuan· Mar 28, 2011, 07:22 UTC · re: Mike Hommey · lore

Re: remote-helpers and refs without a value

Hi,
On Sun, Mar 27, 2011 at 4:24 PM, Mike Hommey <mh@glandium.org> wrote:
> But when the helper returns a '?' value to the list command, I don't see
> how things are supposed to be updated. It looks like the helper is
> the only one, then, to be able to update the refs. But it also doesn't
> have any way to know which refs it needs to update...

I don't think that's right. The transport machinery (transport.c, transport-helper.c) in git is the one who calls the shots - the transport machinery first 1) asks for the list of refs, 2) does the appropriate "matching" (of what refs to fetch/push), then 3) sends this down to the remote helper.

If the remote helper sends back a '?', the transport machinery should be implemented to fail and die. A quick scan of transport.c does not show this, but I assume the failure would happen at the ref matching level, leading to failure of the whole fetch/push.

-- 
Cheers,
Ray Chuan
Mike Hommey· Mar 28, 2011, 07:50 UTC · re: Tay Ray Chuan · lore

Re: remote-helpers and refs without a value

On Mon, Mar 28, 2011 at 03:22:57PM +0800, Tay Ray Chuan wrote:
Show 18 quoted lines
> Hi,
> 
> On Sun, Mar 27, 2011 at 4:24 PM, Mike Hommey <mh@glandium.org> wrote:
> > But when the helper returns a '?' value to the list command, I don't see
> > how things are supposed to be updated. It looks like the helper is
> > the only one, then, to be able to update the refs. But it also doesn't
> > have any way to know which refs it needs to update...
> 
> I don't think that's right. The transport machinery (transport.c,
> transport-helper.c) in git is the one who calls the shots - the
> transport machinery first 1) asks for the list of refs, 2) does the
> appropriate "matching" (of what refs to fetch/push), then 3) sends
> this down to the remote helper.
> 
> If the remote helper sends back a '?', the transport machinery should
> be implemented to fail and die. A quick scan of transport.c does not
> show this, but I assume the failure would happen at the ref matching
> level, leading to failure of the whole fetch/push.

Failing wouldn't make sense. That'd mean '?' may not be used by remote-helpers, and that they'd need to grab everything from the remote before git even decides what to grab.

Mike
Tay Ray Chuan· Mar 30, 2011, 01:59 UTC · re: Mike Hommey · lore

Re: remote-helpers and refs without a value

On Mon, Mar 28, 2011 at 3:50 PM, Mike Hommey <mh@glandium.org> wrote:
> Failing wouldn't make sense. That'd mean '?' may not be used by
> remote-helpers, and that they'd need to grab everything from the remote
> before git even decides what to grab.

I guess from "grab" you mean fetching the actual objects etc. However, I believe the '?' is used only in the ref fetching/matching step, which is before the step where the actual objects are fetched.

So, if a '?' was reported by the helper, then the transport machinery would most likely be unable to properly match refs; then, it would not direct the remote-helpers to fetch anything (ie. objects).

-- 
Cheers,
Ray Chuan
Mike Hommey· Mar 30, 2011, 06:25 UTC · re: Tay Ray Chuan · lore

Re: remote-helpers and refs without a value

On Wed, Mar 30, 2011 at 09:59:42AM +0800, Tay Ray Chuan wrote:
Show 12 quoted lines
> On Mon, Mar 28, 2011 at 3:50 PM, Mike Hommey <mh@glandium.org> wrote:
> > Failing wouldn't make sense. That'd mean '?' may not be used by
> > remote-helpers, and that they'd need to grab everything from the remote
> > before git even decides what to grab.
> 
> I guess from "grab" you mean fetching the actual objects etc. However,
> I believe the '?' is used only in the ref fetching/matching step,
> which is before the step where the actual objects are fetched.
> 
> So, if a '?' was reported by the helper, then the transport machinery
> would most likely be unable to properly match refs; then, it would not
> direct the remote-helpers to fetch anything (ie. objects).

Which means the helper is doomed not to report '?', and for that, it needs to fetch from the remote. Which makes the fetch method pretty useless for non git remotes, while it has some advantages over import method.

Mike

← back to recent threads