# remote-helpers and refs without a value

5 messages from 2011-03-27 to 2011-03-30. Participants: Mike Hommey, Tay Ray Chuan.
Thread: https://gitlist.dev/t/26878

## Mike Hommey, 2011-03-27 08:24

Subject: remote-helpers and refs without a value
Message-ID: <20110327082428.GA4428@glandium.org>
URL: https://gitlist.dev/e/20110327082428.GA4428%40glandium.org

```
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, 2011-03-28 07:22

Subject: Re: remote-helpers and refs without a value
Message-ID: <AANLkTi=cNin=XYqbAJMggWj7OcZ8=9PGCVGGg=JRO-bj@mail.gmail.com>
URL: https://gitlist.dev/e/AANLkTi%3DcNin%3DXYqbAJMggWj7OcZ8%3D9PGCVGGg%3DJRO-bj%40mail.gmail.com
In-Reply-To: <20110327082428.GA4428@glandium.org>

```
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, 2011-03-28 07:50

Subject: Re: remote-helpers and refs without a value
Message-ID: <20110328075009.GA5115@glandium.org>
URL: https://gitlist.dev/e/20110328075009.GA5115%40glandium.org
In-Reply-To: <AANLkTi=cNin=XYqbAJMggWj7OcZ8=9PGCVGGg=JRO-bj@mail.gmail.com>

```
On Mon, Mar 28, 2011 at 03:22:57PM +0800, Tay Ray Chuan wrote:
> 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, 2011-03-30 01:59

Subject: Re: remote-helpers and refs without a value
Message-ID: <AANLkTikVPevgKGf2B881ox0zZ5xqBLd9hH1pQF2pW2Jx@mail.gmail.com>
URL: https://gitlist.dev/e/AANLkTikVPevgKGf2B881ox0zZ5xqBLd9hH1pQF2pW2Jx%40mail.gmail.com
In-Reply-To: <20110328075009.GA5115@glandium.org>

```
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, 2011-03-30 06:25

Subject: Re: remote-helpers and refs without a value
Message-ID: <20110330062504.GA3559@glandium.org>
URL: https://gitlist.dev/e/20110330062504.GA3559%40glandium.org
In-Reply-To: <AANLkTikVPevgKGf2B881ox0zZ5xqBLd9hH1pQF2pW2Jx@mail.gmail.com>

```
On Wed, Mar 30, 2011 at 09:59:42AM +0800, Tay Ray Chuan wrote:
> 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

```
