diff options
-rw-r--r-- | debian/changelog | 4 | ||||
-rwxr-xr-x | dgit | 37 |
2 files changed, 29 insertions, 12 deletions
diff --git a/debian/changelog b/debian/changelog index 67086e0..a1f6ba1 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 @@ -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; } |