threads / discuss / 39659

Git completion not using ls-remote to auto-complete during push

Subject: Git completion not using ls-remote to auto-complete during push

## tl;dr

6 messages between Jun 17, 2015 and Jun 18, 2015.

replies: 5people: 3as markdown or json

Robert Dailey· Jun 17, 2015, 16:10 UTC · lore
I do the following:
$ git push origin :topic

If I stop halfway through typing 'topic' and hit TAB, auto-completion does not work if I do not have a local branch by that name (sometimes I delete my local branch first, then I push to delete it remotely). I thought that git completion code was supposed to use ls-remote to auto complete refs used in push operations. Is this supposed to work?

I'm using Git 2.4.3. Tested on both MSYS2 in Windows and Linux Mint. Same behavior in both. I am using the latest git completion code from the master branch in the git repo.

Stefan Näwe· Jun 18, 2015, 07:03 UTC · re: Robert Dailey · lore

Re: Git completion not using ls-remote to auto-complete during push

Am 17.06.2015 um 18:10 schrieb Robert Dailey:
Show 13 quoted lines
> I do the following:
> 
> $ git push origin :topic
> 
> If I stop halfway through typing 'topic' and hit TAB, auto-completion
> does not work if I do not have a local branch by that name (sometimes
> I delete my local branch first, then I push to delete it remotely). I
> thought that git completion code was supposed to use ls-remote to auto
> complete refs used in push operations. Is this supposed to work?
> 
> I'm using Git 2.4.3. Tested on both MSYS2 in Windows and Linux Mint.
> Same behavior in both. I am using the latest git completion code from
> the master branch in the git repo.
Same here!

But it works in my self-compiled version of msysgit (yes, the old 'Git for Windows' development environment) which is rebased onto v2.2.2. Time for 'git bisect' I guess...

Stefan
-- 
----------------------------------------------------------------
/dev/random says: A cat sleeps fat, yet walks thin.
python -c "print '73746566616e2e6e616577654061746c61732d656c656b74726f6e696b2e636f6d'.decode('hex')" 
GPG Key fingerprint = 2DF5 E01B 09C3 7501 BCA9  9666 829B 49C5 9221 27AF
SZEDER Gábor· Jun 18, 2015, 11:29 UTC · re: Robert Dailey · lore

Re: Git completion not using ls-remote to auto-complete during push

Quoting Robert Dailey <rcdailey.lists@gmail.com>
Show 9 quoted lines
> I do the following:
> 
> $ git push origin :topic
> 
> If I stop halfway through typing 'topic' and hit TAB, auto-completion
> does not work if I do not have a local branch by that name (sometimes
> I delete my local branch first, then I push to delete it remotely). I
> thought that git completion code was supposed to use ls-remote to auto
> complete refs used in push operations. Is this supposed to work?

It's intentional. Running 'git ls-remote' with a far away remote can take ages, so instead we grab the refs on the remote from the locally stored refs under 'refs/remotes/<remote>/'.

See e832f5c096 (completion: avoid ls-remote in certain scenarios, 2013-05-28). The commit message mentions that you can "force" completion of remote refs via 'git ls-remote' by starting with the full refname, i.e. 'refs/<TAB>', however, that seems to work only on the left hand side of the colon in the push refspec.

Gábor
Robert Dailey· Jun 18, 2015, 15:27 UTC · re: SZEDER Gábor · lore

Re: Git completion not using ls-remote to auto-complete during push

On Thu, Jun 18, 2015 at 6:29 AM, SZEDER Gábor <szeder@ira.uka.de> wrote:
Show 23 quoted lines
> Quoting Robert Dailey <rcdailey.lists@gmail.com>
>> I do the following:
>>
>> $ git push origin :topic
>>
>> If I stop halfway through typing 'topic' and hit TAB, auto-completion
>> does not work if I do not have a local branch by that name (sometimes
>> I delete my local branch first, then I push to delete it remotely). I
>> thought that git completion code was supposed to use ls-remote to auto
>> complete refs used in push operations. Is this supposed to work?
>
> It's intentional.  Running 'git ls-remote' with a far away remote can
> take ages, so instead we grab the refs on the remote from the locally
> stored refs under 'refs/remotes/<remote>/'.
>
> See e832f5c096 (completion: avoid ls-remote in certain scenarios,
> 2013-05-28).  The commit message mentions that you can "force"
> completion of remote refs via 'git ls-remote' by starting with the full
> refname, i.e.  'refs/<TAB>', however, that seems to work only on the
> left hand side of the colon in the push refspec.
>
> Gábor
>

If that's indeed the case, then completion should work. I have a 'refs/remotes/origin/topic'. Why will auto complete not work even though this exists? Do multiple remotes cause issues (in theory there is no reason why it should cause problems, since it should know I'm auto-completing a ref on 'origin')?

SZEDER Gábor· Jun 18, 2015, 15:55 UTC · re: Robert Dailey · lore

Re: Git completion not using ls-remote to auto-complete during push

Quoting Robert Dailey <rcdailey.lists@gmail.com>:
Show 30 quoted lines
> On Thu, Jun 18, 2015 at 6:29 AM, SZEDER Gábor <szeder@ira.uka.de> wrote:
>> Quoting Robert Dailey <rcdailey.lists@gmail.com>
>>> I do the following:
>>>
>>> $ git push origin :topic
>>>
>>> If I stop halfway through typing 'topic' and hit TAB, auto-completion
>>> does not work if I do not have a local branch by that name (sometimes
>>> I delete my local branch first, then I push to delete it remotely). I
>>> thought that git completion code was supposed to use ls-remote to auto
>>> complete refs used in push operations. Is this supposed to work?
>>
>> It's intentional.  Running 'git ls-remote' with a far away remote can
>> take ages, so instead we grab the refs on the remote from the locally
>> stored refs under 'refs/remotes/<remote>/'.
>>
>> See e832f5c096 (completion: avoid ls-remote in certain scenarios,
>> 2013-05-28).  The commit message mentions that you can "force"
>> completion of remote refs via 'git ls-remote' by starting with the full
>> refname, i.e.  'refs/<TAB>', however, that seems to work only on the
>> left hand side of the colon in the push refspec.
>>
>> Gábor
>>
>
> If that's indeed the case, then completion should work. I have a
> 'refs/remotes/origin/topic'. Why will auto complete not work even
> though this exists? Do multiple remotes cause issues (in theory there
> is no reason why it should cause problems, since it should know I'm
> auto-completing a ref on 'origin')?

The number of remotes doesn't matter. What matters is which side of the colon the ref to be completed is.

You can complete
   git push origin refs/<TAB>
and
   git fetch origin refs/<TAB>

will even list you refs freshly queried via 'git ls-remote'. However,

   git push origin :refs/<TAB>
   git push origin branch:refs/<TAB>

don't work, because there are no refs starting with the prefix ':refs/' or 'branch:refs/'.

Gábor
Robert Dailey· Jun 18, 2015, 19:12 UTC · re: SZEDER Gábor · lore

Re: Git completion not using ls-remote to auto-complete during push

On Thu, Jun 18, 2015 at 10:55 AM, SZEDER Gábor <szeder@ira.uka.de> wrote:
Show 60 quoted lines
>
> Quoting Robert Dailey <rcdailey.lists@gmail.com>:
>
>> On Thu, Jun 18, 2015 at 6:29 AM, SZEDER Gábor <szeder@ira.uka.de> wrote:
>>>
>>> Quoting Robert Dailey <rcdailey.lists@gmail.com>
>>>>
>>>> I do the following:
>>>>
>>>> $ git push origin :topic
>>>>
>>>> If I stop halfway through typing 'topic' and hit TAB, auto-completion
>>>> does not work if I do not have a local branch by that name (sometimes
>>>> I delete my local branch first, then I push to delete it remotely). I
>>>> thought that git completion code was supposed to use ls-remote to auto
>>>> complete refs used in push operations. Is this supposed to work?
>>>
>>>
>>> It's intentional.  Running 'git ls-remote' with a far away remote can
>>> take ages, so instead we grab the refs on the remote from the locally
>>> stored refs under 'refs/remotes/<remote>/'.
>>>
>>> See e832f5c096 (completion: avoid ls-remote in certain scenarios,
>>> 2013-05-28).  The commit message mentions that you can "force"
>>> completion of remote refs via 'git ls-remote' by starting with the full
>>> refname, i.e.  'refs/<TAB>', however, that seems to work only on the
>>> left hand side of the colon in the push refspec.
>>>
>>> Gábor
>>>
>>
>> If that's indeed the case, then completion should work. I have a
>> 'refs/remotes/origin/topic'. Why will auto complete not work even
>> though this exists? Do multiple remotes cause issues (in theory there
>> is no reason why it should cause problems, since it should know I'm
>> auto-completing a ref on 'origin')?
>
>
> The number of remotes doesn't matter.
> What matters is which side of the colon the ref to be completed is.
>
> You can complete
>
>   git push origin refs/<TAB>
>
> and
>
>   git fetch origin refs/<TAB>
>
> will even list you refs freshly queried via 'git ls-remote'.
> However,
>
>   git push origin :refs/<TAB>
>   git push origin branch:refs/<TAB>
>
> don't work, because there are no refs starting with the prefix ':refs/' or
> 'branch:refs/'.
>
> Gábor
>

Interesting. So is it just a glaring bug that the git completion script isn't ignoring the : and anything to the left of it? Or is this beyond the control of the script?

← back to recent threads