From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.2 (2011-06-06) on dcvr.yhbt.net X-Spam-Level: X-Spam-ASN: X-Spam-Status: No, score=-2.6 required=3.0 tests=ALL_TRUSTED,AWL,BAYES_00, RP_MATCHES_RCVD,URIBL_BLOCKED shortcircuit=no autolearn=unavailable version=3.3.2 X-Original-To: meta@public-inbox.org Received: from localhost (dcvr.yhbt.net [127.0.0.1]) by dcvr.yhbt.net (Postfix) with ESMTP id F0A746338C3 for ; Tue, 22 Dec 2015 01:02:18 +0000 (UTC) From: Eric Wong To: meta@public-inbox.org Subject: [PATCH 1/4] config: hoist out common functions Date: Tue, 22 Dec 2015 01:02:13 +0000 Message-Id: <20151222010216.6684-2-e@80x24.org> In-Reply-To: <20151222010216.6684-1-e@80x24.org> References: <20151222010216.6684-1-e@80x24.org> List-Id: These will be reused elsewhere. --- lib/PublicInbox/Config.pm | 72 +++++++++++++++++++++++++++++------------------ 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 353a1fb..844f666 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 d00dfe7..5cd3bc6 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; -- EW