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 [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html