summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--debian/changelog4
-rwxr-xr-xdgit37
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
diff --git a/dgit b/dgit
index 1a2ee88..a051622 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;
}