diff options
author | Eric Wong <e@80x24.org> | 2015-12-10 04:16:43 +0000 |
---|---|---|
committer | Eric Wong <e@80x24.org> | 2015-12-22 00:58:01 +0000 |
commit | 3273b47d02dd353cd2efe1cd0bdeca1334e3942e (patch) | |
tree | 41402862b42179ec6bb105cb295d1b5fe981a3ef /lib | |
parent | 84130495f67b9d50e663f64c8e11293614bf0a24 (diff) | |
download | public-inbox-3273b47d02dd353cd2efe1cd0bdeca1334e3942e.tar.gz |
These will be reused elsewhere.
Diffstat (limited to 'lib')
-rw-r--r-- | lib/PublicInbox/Config.pm | 72 | ||||
-rw-r--r-- | lib/PublicInbox/WWW.pm | 13 |
2 files changed, 46 insertions, 39 deletions
diff --git a/lib/PublicInbox/Config.pm b/lib/PublicInbox/Config.pm index 353a1fb2..844f666e 100644 --- a/lib/PublicInbox/Config.pm +++ b/lib/PublicInbox/Config.pm @@ -5,38 +5,16 @@ package PublicInbox::Config; use strict; use warnings; +use base qw/Exporter/; +our @EXPORT_OK = qw/try_cat/; 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) = @_; - my ($in, $out); - $file = default_file() unless defined($file); - my @cmd = (qw/git config/, "--file=$file", '-l'); - my $cmd = join(' ', @cmd); - my $pid = open(my $fh, '-|', @cmd); - defined $pid or die "$cmd failed: $!\n"; - my %rv; - foreach my $line (<$fh>) { - chomp $line; - 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; - } - } - close $fh or die "failed to close ($cmd) pipe: $!\n"; - $? and warn "$$ $cmd exited with: ($pid) $?\n"; - bless \%rv, $class; + bless git_config_dump($file), $class; } sub lookup { @@ -81,11 +59,51 @@ sub get { $self->{"publicinbox.$listname.$key"}; } +sub config_dir { $ENV{PI_DIR} || expand_filename('~/.public-inbox') } + sub default_file { my $f = $ENV{PI_CONFIG}; return $f if defined $f; - my $pi_dir = $ENV{PI_DIR} || expand_filename('~/.public-inbox'); - "$pi_dir/config"; + config_dir() . '/config'; +} + +sub git_config_dump { + my ($file) = @_; + my ($in, $out); + my @cmd = (qw/git config/, "--file=$file", '-l'); + my $cmd = join(' ', @cmd); + my $pid = open(my $fh, '-|', @cmd); + defined $pid or die "$cmd failed: $!\n"; + my %rv; + foreach my $line (<$fh>) { + chomp $line; + 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; + } + } + close $fh or die "failed to close ($cmd) pipe: $!\n"; + $? and warn "$$ $cmd exited with: ($pid) $?\n"; + \%rv; +} + +sub try_cat { + my ($path) = @_; + my $rv; + if (open(my $fh, '<', $path)) { + local $/; + $rv = <$fh>; + close $fh; + } + $rv; } 1; diff --git a/lib/PublicInbox/WWW.pm b/lib/PublicInbox/WWW.pm index d00dfe7c..5cd3bc6f 100644 --- a/lib/PublicInbox/WWW.pm +++ b/lib/PublicInbox/WWW.pm @@ -13,7 +13,7 @@ package PublicInbox::WWW; use 5.008; use strict; use warnings; -use PublicInbox::Config; +use PublicInbox::Config qw(try_cat); use URI::Escape qw(uri_escape_utf8 uri_unescape); use constant SSOMA_URL => 'http://ssoma.public-inbox.org/'; use constant PI_URL => 'http://public-inbox.org/'; @@ -218,17 +218,6 @@ sub ctx_get { $val; } -sub try_cat { - my ($path) = @_; - my $rv; - if (open(my $fh, '<', $path)) { - local $/; - $rv = <$fh>; - close $fh; - } - $rv; -} - sub footer { my ($ctx) = @_; return '' unless $ctx; |