From: "SZEDER Gábor" <szeder@ira.uka.de>
To: Erik Faye-Lund <kusmabite@gmail.com>
Cc: Junio C Hamano <gitster@pobox.com>,
Jakob Pfender <jpfender@elegosoft.com>,
Johannes Schindelin <Johannes.Schindelin@gmx.de>,
<git@vger.kernel.org>, <lee.marlow@gmail.com>,
<markus.heidelberg@web.de>, <spearce@spearce.org>,
<bebarino@gmail.com>, <ted@tedpavlic.com>, <tlikonen@iki.fi>,
<trast@student.ethz.ch>
Subject: Re: [PATCH] git-completion: Add git help completion for aliases
Date: Tue, 22 Mar 2011 21:25:18 +0100 [thread overview]
Message-ID: <20110322202518.GA30604@neumann> (raw)
In-Reply-To: <AANLkTik8BaAJCnCRdDNTdu=nV1Q7cFLiwOuV_4wdXUE6@mail.gmail.com>
On Tue, Mar 22, 2011 at 11:28:01AM +0100, Erik Faye-Lund wrote:
> 2011/3/22 SZEDER Gábor <szeder@ira.uka.de>:
> > On Tue, Mar 22, 2011 at 10:16:16AM +0100, Erik Faye-Lund wrote:
> >> 2011/3/22 SZEDER Gábor <szeder@ira.uka.de>:
> >> > On Tue, Mar 22, 2011 at 12:53:43AM -0700, Junio C Hamano wrote:
> >> >> This is a constructive tangent but if we are going to run $(__git_aliases)
> >> >> every time we run _git_help, perhaps it would want a hack similar to the
> >> >> way the value for $__git_all_commands is generated just once?
> >> >
> >> > I think this is not necessary. We already run __git_aliases() every
> >> > time after 'git <TAB>', and it was not an issue so far. And indeed, I
> >> > just created 50 aliases, and the time required for __git_aliases()
> >> > seems to be negligible:
> >> >
> >> > $ time __git_aliases
> >> > <bunch of aliases>
> >> >
> >> > real 0m0.028s
> >> > user 0m0.016s
> >> > sys 0m0.004s
> >> >
> >>
> >> Unfortunately, the situation is not quite so good on Windows:
> >> $ time __git_aliases
> >> <bunch of aliases>
> >>
> >> real 0m0.112s
> >> user 0m0.030s
> >> sys 0m0.015s
> >>
> >> This is with 50 aliases, with 0 aliases I get this:
> >> $ time __git_aliases
> >> test
> >>
> >> real 0m0.063s
> >> user 0m0.015s
> >> sys 0m0.015s
> >
> > I see. However, on Windows everything git-related tends to be slow,
> > so this is nothing new.
>
> That's not the case. Every thing Git-related isn't slow on Windows,
> but there are some things in Git that is.
>
> > The question is whether the slowness of a known slow platform would
> > justify the regression on all platforms.
> >
>
> Windows isn't slow. Get over this way of thinking, it's just wrong.
> Windows has some different performance characteristics for some
> operations than e.g Linux, but saying that it's slow is just wrong.
> However, _Bash for Windows_ is quite slow, much due to Windows' lack
> of fork(), which means that some very involved emulation needs to be
> performed.
I meant the above only in the context of git, based on my last -- it
seems outdated -- experiences with msysgit about (more than?) a year
ago, when I found such builtins like commit and checkout to be quite
noticeably slow. I'm glad to hear that things are changing for good.
Anyway, with the following silly "benchmarking" on top of the
thread-starter patch[*] ...
diff --git a/contrib/completion/git-completion.bash b/contrib/completion/git-completion.bash
index d2b8746..12aa613 100755
--- a/contrib/completion/git-completion.bash
+++ b/contrib/completion/git-completion.bash
@@ -2742,7 +2742,7 @@ _git ()
fi
local completion_func="_git_${command//-/_}"
- declare -f $completion_func >/dev/null && $completion_func && return
+ declare -f $completion_func >/dev/null && time $completion_func && return
local expansion=$(__git_aliased_command "$command")
if [ -n "$expansion" ]; then
... the time required for 'git help <TAB>' with msysgit is around
120-140ms.
With the caching of aliases for 'git help' ...
diff --git a/contrib/completion/git-completion.bash b/contrib/completion/git-completion.bash
index 12aa613..466578b 100755
--- a/contrib/completion/git-completion.bash
+++ b/contrib/completion/git-completion.bash
@@ -963,6 +963,12 @@ __git_aliases ()
done
}
+__git_aliases=
+__git_compute_aliases ()
+{
+ : ${__git_aliases:=$(__git_aliases)}
+}
+
# __git_aliased_command requires 1 argument
__git_aliased_command ()
{
@@ -1508,7 +1514,8 @@ _git_help ()
;;
esac
__git_compute_all_commands
- __gitcomp "$__git_all_commands $(__git_aliases)
+ __git_compute_aliases
+ __gitcomp "$__git_all_commands $__git_aliases
attributes cli core-tutorial cvs-migration
diffcore gitk glossary hooks ignore modules
repository-layout tutorial tutorial-2
... it goes down to around 50ms.
Looking at the numbers it seems to be a significant improvement, but
in practice I'm not sure I noticed anything; perhaps it's more
noticeable on slower hardware. Just for the record, the numbers on
linux are ~50ms without and ~40ms with alias caching.
> But even so, at least 25% of the git user base is on Windows,
> according to the latest Git User Survey. That makes this stuff matter.
The other point of view is that it will cause a regression without a
compensating benefit for maybe more than 75% of the user base ;)
Best,
Gábor
[*] - off topic: Was it just me, or that simple patch really couldn't
be applied with a simple 'git am' on today's master? What exactly
caused the conflict? I looked quite hard, but couldn't find
anything...
next prev parent reply other threads:[~2011-03-22 20:25 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-03-21 9:25 [PATCH] git-completion: Add git help completion for aliases Jakob Pfender
2011-03-21 21:48 ` Junio C Hamano
2011-03-21 22:07 ` Johannes Schindelin
2011-03-22 7:53 ` Junio C Hamano
2011-03-22 8:44 ` Johannes Schindelin
2011-03-22 8:50 ` SZEDER Gábor
2011-03-22 9:16 ` Erik Faye-Lund
2011-03-22 9:18 ` Erik Faye-Lund
2011-03-22 10:09 ` SZEDER Gábor
2011-03-22 10:28 ` Erik Faye-Lund
2011-03-22 16:38 ` Michael J Gruber
2011-03-22 20:25 ` SZEDER Gábor [this message]
2011-03-23 10:32 ` Erik Faye-Lund
2011-03-23 12:11 ` Jakub Narebski
2011-03-23 12:16 ` Erik Faye-Lund
2011-03-22 17:25 ` Junio C Hamano
2011-03-22 21:21 ` SZEDER Gábor
2011-03-22 8:23 ` SZEDER Gábor
2011-03-22 9:23 ` Michael J Gruber
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20110322202518.GA30604@neumann \
--to=szeder@ira.uka.de \
--cc=Johannes.Schindelin@gmx.de \
--cc=bebarino@gmail.com \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=jpfender@elegosoft.com \
--cc=kusmabite@gmail.com \
--cc=lee.marlow@gmail.com \
--cc=markus.heidelberg@web.de \
--cc=spearce@spearce.org \
--cc=ted@tedpavlic.com \
--cc=tlikonen@iki.fi \
--cc=trast@student.ethz.ch \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).