From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on dcvr.yhbt.net X-Spam-Level: X-Spam-ASN: X-Spam-Status: No, score=-4.0 required=3.0 tests=ALL_TRUSTED,BAYES_00 shortcircuit=no autolearn=ham autolearn_force=no version=3.4.2 Received: from localhost (dcvr.yhbt.net [127.0.0.1]) by dcvr.yhbt.net (Postfix) with ESMTP id CB41E1F463 for ; Sat, 28 Sep 2019 20:59:30 +0000 (UTC) From: Eric Wong To: meta@public-inbox.org Subject: [PATCH] config: use NUL-delimited git-config(1) output Date: Sat, 28 Sep 2019 20:59:30 +0000 Message-Id: <20190928205930.18417-1-e@80x24.org> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit List-Id: This allows us to deal with newlines in config values, since git-config(1) acquired "-z" support in git v1.5.3. I'm not sure if it's actually useful in our case, but maybe some multi-line texts could be added. And newlines in path names are super useful! --- lib/PublicInbox/Config.pm | 6 +++--- t/config.t | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/lib/PublicInbox/Config.pm b/lib/PublicInbox/Config.pm index ef277c40..4fcb20d2 100644 --- a/lib/PublicInbox/Config.pm +++ b/lib/PublicInbox/Config.pm @@ -151,14 +151,14 @@ sub git_config_dump { my ($file) = @_; my (%section_seen, @section_order); return {} unless -e $file; - my @cmd = (qw/git config/, "--file=$file", '-l'); + my @cmd = (qw/git config -z -l/, "--file=$file"); my $cmd = join(' ', @cmd); my $fh = popen_rd(\@cmd) or die "popen_rd failed for $file: $!\n"; my %rv; - local $/ = "\n"; + local $/ = "\0"; while (defined(my $line = <$fh>)) { chomp $line; - my ($k, $v) = split(/=/, $line, 2); + my ($k, $v) = split(/\n/, $line, 2); my ($section) = ($k =~ /\A(\S+)\.[^\.]+\z/); unless (defined $section_seen{$section}) { diff --git a/t/config.t b/t/config.t index a4e76150..a3c74fa2 100644 --- a/t/config.t +++ b/t/config.t @@ -9,12 +9,12 @@ my $tmpdir = tempdir('pi-config-XXXXXX', TMPDIR => 1, CLEANUP => 1); { is(system(qw(git init -q --bare), $tmpdir), 0, "git init successful"); - my @cmd = ('git', "--git-dir=$tmpdir", qw(config foo.bar hihi)); + my @cmd = ('git', "--git-dir=$tmpdir", qw(config foo.bar), "hi\nhi"); is(system(@cmd), 0, "set config"); my $tmp = PublicInbox::Config->new("$tmpdir/config"); - is("hihi", $tmp->{"foo.bar"}, "config read correctly"); + is("hi\nhi", $tmp->{"foo.bar"}, "config read correctly"); is("true", $tmp->{"core.bare"}, "used --bare repo"); } -- EW