diff options
author | Eric Wong <normalperson@yhbt.net> | 2014-03-27 19:38:06 +0000 |
---|---|---|
committer | Eric Wong <e@80x24.org> | 2014-03-28 02:35:21 +0000 |
commit | 67e53d0875a7efcb958fb9680ea87216adaf06cc (patch) | |
tree | 9d0d39852dbd24347976e337dd1af044bafe0cc6 | |
parent | cf0a2370a57fe49d0fca149409f98d2907efeb15 (diff) | |
download | public-inbox-67e53d0875a7efcb958fb9680ea87216adaf06cc.tar.gz |
-rw-r--r-- | examples/public-inbox-config | 12 | ||||
-rw-r--r-- | lib/PublicInbox/Config.pm | 24 | ||||
-rw-r--r-- | t/config.t | 20 |
3 files changed, 53 insertions, 3 deletions
diff --git a/examples/public-inbox-config b/examples/public-inbox-config new file mode 100644 index 00000000..9e781d63 --- /dev/null +++ b/examples/public-inbox-config @@ -0,0 +1,12 @@ +# this usually in ~/.public-inbox/config and parseable with git-config(1) +# update t/config.t if changing this, that test relies on this +[publicinbox "test"] + address = test@public-inbox.org + mainrepo = /home/pi/test-main.git + failrepo = /home/pi/test-fail.git + description = test box, occasionally reset +[publicinbox "bugs"] + address = bugs@public-inbox.org + mainrepo = /home/pi/bugs-main.git + failrepo = /home/pi/bugs-fail.git + description = development discussion diff --git a/lib/PublicInbox/Config.pm b/lib/PublicInbox/Config.pm index 4078585a..d91c28a9 100644 --- a/lib/PublicInbox/Config.pm +++ b/lib/PublicInbox/Config.pm @@ -1,9 +1,11 @@ # Copyright (C) 2014, Eric Wong <normalperson@yhbt.net> and all contributors # License: AGPLv3 or later (https://www.gnu.org/licenses/agpl-3.0.txt) package PublicInbox::Config; +use strict; +use warnings; # returns key-value pairs of config directives in a hash -sub dump { +sub new { my ($class, $file) = @_; local $ENV{GIT_CONFIG} = $file; @@ -12,6 +14,26 @@ sub dump { $? == 0 or die "git config -l failed: $?\n"; chomp @cfg; my %rv = map { split(/=/, $_, 2) } @cfg; + bless \%rv, $class; +} + +sub lookup { + my ($self, $recipient) = @_; + my $addr = lc($recipient); + my $pfx; + + foreach my $k (keys %$self) { + $k =~ /\A(publicinbox\.[A-Z0-9a-z-]+)\.address\z/ or next; + (lc($self->{$k}) eq $addr) or next; + $pfx = $1; + last; + } + + defined $pfx or return; + + my %rv = map { + $_ => $self->{"$pfx.$_"} + } (qw(mainrepo failrepo description address)); \%rv; } @@ -8,16 +8,32 @@ use File::Temp qw/tempdir/; my $tmpdir = tempdir(CLEANUP => 1); { - is(system(qw(git init --bare), $tmpdir), 0, "git init successful"); + is(system(qw(git init -q --bare), $tmpdir), 0, "git init successful"); { local $ENV{GIT_DIR} = $tmpdir; is(system(qw(git config foo.bar hihi)), 0, "set config"); } - my $tmp = PublicInbox::Config->dump("$tmpdir/config"); + my $tmp = PublicInbox::Config->new("$tmpdir/config"); is("hihi", $tmp->{"foo.bar"}, "config read correctly"); is("true", $tmp->{"core.bare"}, "used --bare repo"); } +{ + my $f = "examples/public-inbox-config"; + ok(-r $f, "$f is readable"); + + my $cfg = PublicInbox::Config->new($f); + is_deeply($cfg->lookup('bugs@public-inbox.org'), { + 'failrepo' => '/home/pi/bugs-fail.git', + 'mainrepo' => '/home/pi/bugs-main.git', + 'address' => 'bugs@public-inbox.org', + 'description' => 'development discussion' + }, "lookup matches expected output"); + + is($cfg->lookup('blah@example.com'), undef, + "non-existent lookup returns undef"); +} + done_testing(); |