chiark / gitweb /
Dgit.pm: git_slurp_config_src: Break out from dgit
[dgit.git] / Debian / Dgit.pm
index aef0112aebb975ce49cca55699808fbe6cf99922..3d97848ff2df75b96491a8fc2ac2d6bd5224a86a 100644 (file)
@@ -58,6 +58,7 @@ BEGIN {
                       $debugprefix *debuglevel *DEBUG
                       shellquote printcmd messagequote
                       $negate_harmful_gitattrs
                       $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)] );
                       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 (<GITS>) {
+       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) = @_;
 sub workarea_setup ($) {
     # for use in the workarea
     my ($t_local_git_cfg) = @_;