diff options
author | Ian Jackson <ijackson@chiark.greenend.org.uk> | 2015-07-14 20:23:11 +0100 |
---|---|---|
committer | Ian Jackson <ijackson@chiark.greenend.org.uk> | 2015-07-19 15:29:02 +0100 |
commit | 6a8f914beb77ec4cc36ed0aecb0e5da31a450418 (patch) | |
tree | 853d32237009bfa3071bfd6c155291c49d646c75 /dgit | |
parent | 236b11e106008dcf767ede43a5926d9b985f59e7 (diff) |
Memoise git config lookups (big speedup!)
Diffstat (limited to 'dgit')
-rwxr-xr-x | dgit | 37 |
1 files changed, 26 insertions, 11 deletions
@@ -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; } |