diff options
author | Ævar Arnfjörð Bjarmason <avarab@gmail.com> | 2021-05-28 11:23:51 +0200 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2021-05-28 18:38:07 +0900 |
commit | c95e3a3f0b8107b5dc7eac9dfdb9e5238280c9fb (patch) | |
tree | 915442f5fa9899f43916728f0e2aabe37a8cc9b0 /t/t5411/test-0030-report-ok.sh | |
parent | perl: lazily load some common Git.pm setup code (diff) | |
download | tgif-c95e3a3f0b8107b5dc7eac9dfdb9e5238280c9fb.tar.xz |
send-email: move trivial config handling to Perl
Optimize the startup time of git-send-email by using an amended
config_regexp() function to retrieve the list of config keys and
values we're interested in.
For boolean keys we can handle the [true|false] case ourselves, and
the "--get" case didn't need any parsing. Let's leave "--path" and
other "--bool" cases to "git config". I'm not bothering with the
"undef" or "" case (true and false, respectively), let's just punt on
those and others and have "git config --type=bool" handle it.
The "grep { defined } @values" here covers a rather subtle case. For
list values such as sendemail.to it is possible as with any other
config key to provide a plain "-c sendemail.to", i.e. to set the key
as a boolean true. In that case the Git::config() API will return an
empty string, but this new parser will correctly return "undef".
However, that means we can end up with "undef" in the middle of a
list. E.g. for sendemail.smtpserveroption in conjuction with
sendemail.smtpserver as a path this would have produce a warning. For
most of the other keys we'd behave the same despite the subtle change
in the value, e.g. sendemail.to would behave the same because
Mail::Address->parse() happens to return an empty list if fed
"undef". For the boolean values we were already prepared to handle
these variables being initialized as undef anyway.
This brings the runtime of "git send-email" from ~60-~70ms to a very
steady ~40ms on my test box. We now run just one "git config"
invocation on startup instead of 8, the exact number will differ based
on the local sendemail.* config. I happen to have 8 of those set.
This brings the runtime of t9001-send-email.sh from ~13s down to ~12s
for me. The change there is less impressive as many of those tests set
various config values, and we're also getting to the point of
diminishing returns for optimizing "git send-email" itself.
Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 't/t5411/test-0030-report-ok.sh')
0 files changed, 0 insertions, 0 deletions