diff options
author | Eric Wong <e@80x24.org> | 2014-04-11 21:08:50 +0000 |
---|---|---|
committer | Eric Wong <e@80x24.org> | 2014-04-11 22:24:30 +0000 |
commit | 6d2a5e604d689b33586c653d8a04473e33973ac6 (patch) | |
tree | 0931a5692561a871ecd86cf92c7c94702141c520 /lib/PublicInbox | |
parent | 8add30044d04c1feccc00a3c5b8f9a0f75c64bf5 (diff) | |
download | public-inbox-6d2a5e604d689b33586c653d8a04473e33973ac6.tar.gz |
This makes it possible to gradually migrate to new address in case of list name changes, and is one step closer to operating in "stealth hijack mode" :)
Diffstat (limited to 'lib/PublicInbox')
-rw-r--r-- | lib/PublicInbox/Config.pm | 40 |
1 files changed, 33 insertions, 7 deletions
diff --git a/lib/PublicInbox/Config.pm b/lib/PublicInbox/Config.pm index 300dd88b..c8f2a8d8 100644 --- a/lib/PublicInbox/Config.pm +++ b/lib/PublicInbox/Config.pm @@ -6,6 +6,7 @@ use warnings; use File::Path::Expand qw/expand_filename/; # returns key-value pairs of config directives in a hash +# if keys may be multi-value, the value is an array ref containing all values sub new { my ($class, $file) = @_; @@ -14,7 +15,21 @@ sub new { my @cfg = `git config -l`; $? == 0 or die "git config -l failed: $?\n"; chomp @cfg; - my %rv = map { split(/=/, $_, 2) } @cfg; + my %rv; + foreach my $line (@cfg) { + my ($k, $v) = split(/=/, $line, 2); + my $cur = $rv{$k}; + + if (defined $cur) { + if (ref($cur) eq "ARRAY") { + push @$cur, $v; + } else { + $rv{$k} = [ $cur, $v ]; + } + } else { + $rv{$k} = $v; + } + } bless \%rv, $class; } @@ -25,16 +40,27 @@ sub lookup { 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; + my $v = $self->{$k}; + if (ref($v) eq "ARRAY") { + foreach my $alias (@$v) { + (lc($alias) eq $addr) or next; + $pfx = $1; + last; + } + } else { + (lc($v) eq $addr) or next; + $pfx = $1; + last; + } } defined $pfx or return; - my %rv = map { - $_ => $self->{"$pfx.$_"} - } (qw(mainrepo description address)); + my %rv; + foreach my $k (qw(mainrepo description address)) { + my $v = $self->{"$pfx.$k"}; + $rv{$k} = $v if defined $v; + } my $listname = $pfx; $listname =~ s/\Apublicinbox\.//; $rv{listname} = $listname; |