* [PATCH 3/6] config: handle key-only entries as booleans
2023-09-24 5:42 5% [PATCH 0/6] lei config fixes and improvements Eric Wong
@ 2023-09-24 5:42 7% ` Eric Wong
0 siblings, 0 replies; 2+ results
From: Eric Wong @ 2023-09-24 5:42 UTC (permalink / raw)
To: meta
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 ++++-
t/config.t | 19 +++++++++++++++++++
2 files changed, 23 insertions(+), 1 deletion(-)
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);
diff --git a/t/config.t b/t/config.t
index 80f214cd..8a27a920 100644
--- a/t/config.t
+++ b/t/config.t
@@ -7,6 +7,25 @@ use_ok 'PublicInbox';
ok(defined(eval('$PublicInbox::VERSION')), 'VERSION defined');
use_ok 'PublicInbox::Config';
my ($tmpdir, $for_destroy) = tmpdir();
+use autodie qw(open close);
+my $validate_git_behavior = $ENV{TEST_VALIDATE_GIT_BEHAVIOR};
+
+{
+ my $f = "$tmpdir/bool_config";
+ open my $fh, '>', $f;
+ print $fh <<EOM;
+[imap]
+ debug
+ port = 2
+EOM
+ close $fh;
+ my $cfg = PublicInbox::Config->git_config_dump($f);
+ $validate_git_behavior and
+ is(xqx([qw(git config -f), $f, qw(--bool imap.debug)]),
+ "true\n", 'git handles key-only as truth');
+ ok($cfg->git_bool($cfg->{'imap.debug'}), 'key-only value handled');
+ is($cfg->{'imap.port'}, 2, 'normal k=v read after key-only');
+}
{
PublicInbox::Import::init_bare($tmpdir);
^ permalink raw reply related [relevance 7%]
* [PATCH 0/6] lei config fixes and improvements
@ 2023-09-24 5:42 5% Eric Wong
2023-09-24 5:42 7% ` [PATCH 3/6] config: handle key-only entries as booleans Eric Wong
0 siblings, 1 reply; 2+ results
From: Eric Wong @ 2023-09-24 5:42 UTC (permalink / raw)
To: meta
Fixing `-c NAME=VALUE' was something I noticed working on
improving *BSD support the other week. Everything else
here was noticed while fixing -c. And 6/6 is because I'm
annoyed at seeing test-only code in Config.pm
Eric Wong (6):
lei: check git-config(1) failures
lei view_text: used tied ProcessPipe for `git config'
config: handle key-only entries as booleans
lei config: send `git config' errors to pager
lei: fix `-c NAME=VALUE' config support
config: drop scalar ref support from internal API
lib/PublicInbox/Config.pm | 78 ++++++++++------
lib/PublicInbox/LEI.pm | 102 +++++++++++----------
lib/PublicInbox/LeiAddWatch.pm | 7 +-
lib/PublicInbox/LeiConfig.pm | 35 +++++---
lib/PublicInbox/LeiForgetExternal.pm | 3 +-
lib/PublicInbox/LeiInit.pm | 4 +-
lib/PublicInbox/LeiMirror.pm | 5 +-
lib/PublicInbox/LeiRmWatch.pm | 2 +-
lib/PublicInbox/LeiViewText.pm | 9 +-
lib/PublicInbox/TestCommon.pm | 20 +++--
t/config.t | 128 +++++++++++++++------------
t/config_limiter.t | 31 +++----
t/inbox_idle.t | 15 ++--
t/lei.t | 17 +++-
t/psgi_bad_mids.t | 18 ++--
t/psgi_mount.t | 14 ++-
t/psgi_multipart_not.t | 16 ++--
t/psgi_scan_all.t | 18 ++--
t/psgi_search.t | 12 ++-
t/psgi_text.t | 21 ++---
t/watch_filter_rubylang.t | 30 +++----
t/watch_imap.t | 20 +++--
t/watch_maildir.t | 24 ++---
t/watch_maildir_v2.t | 44 ++++-----
t/watch_multiple_headers.t | 21 +++--
25 files changed, 381 insertions(+), 313 deletions(-)
^ permalink raw reply [relevance 5%]
Results 1-2 of 2 | reverse | options above
-- pct% links below jump to the message on this page, permalinks otherwise --
2023-09-24 5:42 5% [PATCH 0/6] lei config fixes and improvements Eric Wong
2023-09-24 5:42 7% ` [PATCH 3/6] config: handle key-only entries as booleans Eric Wong
Code repositories for project(s) associated with this public inbox
https://80x24.org/public-inbox.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).