From 3273b47d02dd353cd2efe1cd0bdeca1334e3942e Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Thu, 10 Dec 2015 04:16:43 +0000 Subject: config: hoist out common functions These will be reused elsewhere. --- lib/PublicInbox/Config.pm | 72 +++++++++++++++++++++++++++++------------------ lib/PublicInbox/WWW.pm | 13 +-------- 2 files changed, 46 insertions(+), 39 deletions(-) (limited to 'lib') 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; -- cgit v1.2.3-24-ge0c7