Hi Peff,

On Thu, 4 Feb 2016, Jeff King wrote:

> On Thu, Feb 04, 2016 at 11:34:59AM +0100, Sebastian Schuberth wrote:
> 
> > This avoids output like
> > 
> >     warning: ignoring broken ref refs/remotes/origin/HEAD
> > 
> > while completing branch names.
> 
> Hmm. I feel like this case (HEAD points to a branch, then `fetch
> --prune` deletes it) came up recently and we discussed quieting that
> warning. But now I cannot seem to find it.

I am pretty certain that it came up in my patch series:

        http://thread.gmane.org/gmane.comp.version-control.git/278538

> Anyway, I this is a reasonable workaround. Errors from bash completion
> scripts are almost always going to be useless and get in the way of
> reading your own prompt.

Maybe we should just shut up the completions in more cases? Dunno...

> > diff --git a/contrib/completion/git-completion.bash 
> > b/contrib/completion/git-completion.bash
> > index 15ebba5..7c0549d 100644
> > --- a/contrib/completion/git-completion.bash
> > +++ b/contrib/completion/git-completion.bash
> > @@ -317,7 +317,7 @@ __git_heads ()
> >     local dir="$(__gitdir)"
> >     if [ -d "$dir" ]; then
> >             git --git-dir="$dir" for-each-ref --format='%(refname:short)' \
> > -                   refs/heads
> > +                   refs/heads 2>/dev/null
> >             return
> 
> Not really related to your topic, but digging into it caused me to read
> b7dd2d2 (for-each-ref: Do not lookup objects when they will not be used,
> 2009-05-27), which is about making sure for-each-ref is very fast in
> completion.
> 
> It looks like %(refname:short) is actually kind of expensive:

Yep, this was reported on the Git for Windows bug tracker, too:

        https://github.com/git-for-windows/git/issues/524

> $ time git for-each-ref --format='%(refname)' refs/tags  >/dev/null
> 
> real    0m0.004s
> user    0m0.000s
> sys     0m0.004s
> 
> $ time git for-each-ref --format='%(refname:short)' refs/tags >/dev/null
> 
> real    0m0.009s
> user    0m0.004s
> sys     0m0.004s

And the timings in the ticket I mentioned above are not pretty small:
0.055s vs 1.341s

> The upcoming refname:strip does much better:
> 
> $ time git for-each-ref --format='%(refname:strip=2)' refs/tags >/dev/null
> 
> real    0m0.004s
> user    0m0.000s
> sys     0m0.004s

This is funny: after reading the commit message at
https://github.com/git/git/commit/0571979b it eludes me why strip=2 should
be so much faster than short...

Ciao,
Dscho
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to