From be85ba38f1d9099179b6b6cc7cafac769ccf11da Mon Sep 17 00:00:00 2001 From: Ian Jackson Date: Fri, 14 Jul 2017 10:53:33 +0100 Subject: [PATCH] Dgit.pm: git_slurp_config_src: Break out from dgit We are going to want this so we can provide better subtree setup functions in Dgit.pm, including the config transfer. No functional change, except that we now run just "git" from the path, rather than honouring dgit's @git (which is not available in Dgit.pm). Signed-off-by: Ian Jackson --- Debian/Dgit.pm | 25 +++++++++++++++++++++++++ dgit | 18 +----------------- 2 files changed, 26 insertions(+), 17 deletions(-) diff --git a/Debian/Dgit.pm b/Debian/Dgit.pm index aef0112a..3d97848f 100644 --- a/Debian/Dgit.pm +++ b/Debian/Dgit.pm @@ -58,6 +58,7 @@ BEGIN { $debugprefix *debuglevel *DEBUG shellquote printcmd messagequote $negate_harmful_gitattrs + git_slurp_config_src workarea_setup); # implicitly uses $main::us %EXPORT_TAGS = ( policyflags => [qw(NOFFCHECK FRESHREPO NOCOMMITCHECK)] ); @@ -417,6 +418,30 @@ sub is_fast_fwd ($$) { } } +sub git_slurp_config_src ($) { + my ($src) = @_; + # returns $r such that $r->{KEY}[] = VALUE + my @cmd = (qw(git config -z --get-regexp), "--$src", qw(.*)); + debugcmd "|",@cmd; + + local ($debuglevel) = $debuglevel-2; + local $/="\0"; + + my $r = { }; + open GITS, "-|", @cmd or die $!; + while () { + chomp or die; + printdebug "=> ", (messagequote $_), "\n"; + m/\n/ or die "$_ ?"; + push @{ $r->{$`} }, $'; #'; + } + $!=0; $?=0; + close GITS + or ($!==0 && $?==256) + or failedcmd @cmd; + return $r; +} + sub workarea_setup ($) { # for use in the workarea my ($t_local_git_cfg) = @_; diff --git a/dgit b/dgit index 89f496d7..4b193841 100755 --- a/dgit +++ b/dgit @@ -641,30 +641,14 @@ our %gitcfgs; our @gitcfgsources = qw(cmdline local global system); sub git_slurp_config () { - local ($debuglevel) = $debuglevel-2; - local $/="\0"; - # This algoritm is a bit subtle, but this is needed so that for # options which we want to be single-valued, we allow the # different config sources to override properly. See #835858. foreach my $src (@gitcfgsources) { next if $src eq 'cmdline'; # we do this ourselves since git doesn't handle it - - my @cmd = (@git, qw(config -z --get-regexp), "--$src", qw(.*)); - debugcmd "|",@cmd; - open GITS, "-|", @cmd or die $!; - while () { - chomp or die; - printdebug "=> ", (messagequote $_), "\n"; - m/\n/ or die "$_ ?"; - push @{ $gitcfgs{$src}{$`} }, $'; #'; - } - $!=0; $?=0; - close GITS - or ($!==0 && $?==256) - or failedcmd @cmd; + $gitcfgs{$src} = git_slurp_config_src $src; } } -- 2.30.2