From e11420993bf3b9e630f2797e07d8f6abd8d74e28 Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Sun, 24 Sep 2023 05:42:11 +0000 Subject: config: handle key-only entries as booleans It's how git-config works, so our `git config --list' parser must be able to handle it. Fortunately this doesn't seem to incur a measurable overhead when parsing a config with 50k inboxes. --- lib/PublicInbox/Config.pm | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'lib/PublicInbox/Config.pm') diff --git a/lib/PublicInbox/Config.pm b/lib/PublicInbox/Config.pm index 0a6b210f..f6236d84 100644 --- a/lib/PublicInbox/Config.pm +++ b/lib/PublicInbox/Config.pm @@ -151,8 +151,11 @@ sub config_fh_parse ($$$) { local $/ = $rs; while (defined($line = <$fh>)) { # perf critical with giant configs $i = index($line, $fs); + # $i may be -1 if $fs not found and it's a key-only entry + # (meaning boolean true). Either way the -1 will drop the + # $rs either from $k or $v. $k = substr($line, 0, $i); - $v = substr($line, $i + 1, -1); # chop off $fs + $v = $i >= 0 ? substr($line, $i + 1, -1) : 1; $section = substr($k, 0, rindex($k, '.')); $seen{$section} //= push(@section_order, $section); -- cgit v1.2.3-24-ge0c7