From 6a8f914beb77ec4cc36ed0aecb0e5da31a450418 Mon Sep 17 00:00:00 2001 From: Ian Jackson Date: Tue, 14 Jul 2015 20:23:11 +0100 Subject: [PATCH] Memoise git config lookups (big speedup!) --- debian/changelog | 4 +++- dgit | 37 ++++++++++++++++++++++++++----------- 2 files changed, 29 insertions(+), 12 deletions(-) diff --git a/debian/changelog b/debian/changelog index 67086e0f..a1f6ba11 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,5 +1,8 @@ dgit (0.31~~) unstable; urgency=low + Improvements: + * Memoise git config lookups (big speedup!) + Documentation: * dgit(1): Remove some obsolete caveats from BUGS. * dgit(1); Mention that -wgf can avoid need for build-deps. @@ -14,7 +17,6 @@ dgit (0.31~~) unstable; urgency=low * Make dgit-ssh-dispatch not spew (harmless) warnings if caller tries for a shell session (ie SSH_ORIGINAL_COMMAND not set). - -- dgit (0.30) unstable; urgency=high diff --git a/dgit b/dgit index 1a2ee88f..a051622d 100755 --- a/dgit +++ b/dgit @@ -485,20 +485,35 @@ our %defcfg = ('dgit.default.distro' => 'debian', 'dgit-distro.test-dummy.upload-host' => 'test-dummy', ); +sub git_get_config ($) { + my ($c) = @_; + + our %git_get_config_memo; + if (exists $git_get_config_memo{$c}) { + return $git_get_config_memo{$c}; + } + + my $v; + my @cmd = (@git, qw(config --), $c); + { + local ($debuglevel) = $debuglevel-2; + $v = cmdoutput_errok @cmd; + }; + if ($?==0) { + } elsif ($?==256) { + $v = undef; + } else { + failedcmd @cmd; + } + $git_get_config_memo{$c} = $v; + return $v; +} + sub cfg { foreach my $c (@_) { return undef if $c =~ /RETURN-UNDEF/; - my @cmd = (@git, qw(config --), $c); - my $v; - { - local ($debuglevel) = $debuglevel-2; - $v = cmdoutput_errok @cmd; - }; - if ($?==0) { - return $v; - } elsif ($?!=256) { - failedcmd @cmd; - } + my $v = git_get_config($c); + return $v if defined $v; my $dv = $defcfg{$c}; return $dv if defined $dv; } -- 2.30.2