From: Eric Wong Date: Wed, 14 Dec 2016 00:31:30 +0000 (+0000) Subject: repobrowse: start reducing Plack::Request dependencies X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=d4cec3bc3e439ab6ea9a2f89da5f98033bd95b4f;p=thirdparty%2Fpublic-inbox.git repobrowse: start reducing Plack::Request dependencies We'll be migrating away from it to minimize dependencies and surprises, just like the rest of public-inbox did several months ago. --- diff --git a/lib/PublicInbox/RepobrowseGitAtom.pm b/lib/PublicInbox/RepobrowseGitAtom.pm index 9326841d8..063cd2e42 100644 --- a/lib/PublicInbox/RepobrowseGitAtom.pm +++ b/lib/PublicInbox/RepobrowseGitAtom.pm @@ -21,7 +21,7 @@ sub call_git_atom { $max = 50 if $max == 0; my $git = $repo_info->{git}; - my $q = PublicInbox::RepobrowseGitQuery->new($req->{cgi}); + my $q = PublicInbox::RepobrowseGitQuery->new($req->{env}); my $h = $q->{h}; $h eq '' and chomp($h = $git->qx(qw(symbolic-ref --short HEAD))); diff --git a/lib/PublicInbox/RepobrowseGitBlob.pm b/lib/PublicInbox/RepobrowseGitBlob.pm index f2b38a0c3..d38101ed2 100644 --- a/lib/PublicInbox/RepobrowseGitBlob.pm +++ b/lib/PublicInbox/RepobrowseGitBlob.pm @@ -12,7 +12,7 @@ our @EXPORT = qw(git_blob_mime_type git_blob_stream_response); sub call_git_blob { my ($self, $req) = @_; my $git = $req->{repo_info}->{git}; - my $q = PublicInbox::RepobrowseGitQuery->new($req->{cgi}); + my $q = PublicInbox::RepobrowseGitQuery->new($req->{env}); my $id = $q->{id}; $id eq '' and $id = 'HEAD'; diff --git a/lib/PublicInbox/RepobrowseGitCommit.pm b/lib/PublicInbox/RepobrowseGitCommit.pm index 227dad97b..2577ea345 100644 --- a/lib/PublicInbox/RepobrowseGitCommit.pm +++ b/lib/PublicInbox/RepobrowseGitCommit.pm @@ -144,7 +144,7 @@ sub git_commit_stream ($$$$) { sub call_git_commit { my ($self, $req) = @_; - my $q = PublicInbox::RepobrowseGitQuery->new($req->{cgi}); + my $q = PublicInbox::RepobrowseGitQuery->new($req->{env}); my $id = $q->{id}; $id eq '' and $id = 'HEAD'; @@ -160,7 +160,7 @@ sub call_git_commit { --no-notes --no-color -c), $git->abbrev, GIT_FMT, $id, '--' ]; $req->{rpipe} = $git->popen($cmd, undef, { 2 => $git->err_begin }); - my $env = $req->{cgi}->env; + my $env = $req->{env}; my $err = $env->{'psgi.errors'}; my $vin; $req->{dbuf} = ''; diff --git a/lib/PublicInbox/RepobrowseGitDiff.pm b/lib/PublicInbox/RepobrowseGitDiff.pm index 02a2c5621..d65973c1a 100644 --- a/lib/PublicInbox/RepobrowseGitDiff.pm +++ b/lib/PublicInbox/RepobrowseGitDiff.pm @@ -20,7 +20,7 @@ use PublicInbox::RepobrowseGitDiffCommon qw/git_diffstat_emit sub call_git_diff { my ($self, $req) = @_; my $git = $req->{repo_info}->{git}; - my $q = PublicInbox::RepobrowseGitQuery->new($req->{cgi}); + my $q = PublicInbox::RepobrowseGitQuery->new($req->{env}); my $id = $q->{id}; my $id2 = $q->{id2}; @@ -30,7 +30,7 @@ sub call_git_diff { my $expath = $req->{expath}; push @cmd, $expath if defined $expath; $req->{rpipe} = $git->popen(\@cmd, undef, { 2 => $git->err_begin }); - my $env = $req->{cgi}->env; + my $env = $req->{env}; my $err = $env->{'psgi.errors'}; my ($vin); $req->{dbuf} = ''; diff --git a/lib/PublicInbox/RepobrowseGitLog.pm b/lib/PublicInbox/RepobrowseGitLog.pm index 0c360e737..44b405bcd 100644 --- a/lib/PublicInbox/RepobrowseGitLog.pm +++ b/lib/PublicInbox/RepobrowseGitLog.pm @@ -19,7 +19,7 @@ sub call_git_log { $max = int($max); $max = 50 if $max == 0; - my $q = PublicInbox::RepobrowseGitQuery->new($req->{cgi}); + my $q = PublicInbox::RepobrowseGitQuery->new($req->{env}); my $h = $q->{h}; $h eq '' and $h = 'HEAD'; diff --git a/lib/PublicInbox/RepobrowseGitPatch.pm b/lib/PublicInbox/RepobrowseGitPatch.pm index b8a44e512..eeffc5cb2 100644 --- a/lib/PublicInbox/RepobrowseGitPatch.pm +++ b/lib/PublicInbox/RepobrowseGitPatch.pm @@ -15,7 +15,8 @@ my $sig = '--signature=git '.join(' ', @CMD); sub call_git_patch { my ($self, $req) = @_; my $git = $req->{repo_info}->{git}; - my $q = PublicInbox::RepobrowseGitQuery->new($req->{cgi}); + my $env = $req->{env}; + my $q = PublicInbox::RepobrowseGitQuery->new($env); my $id = $q->{id}; $id =~ /\A[\w-]+([~\^][~\^\d])*\z/ or $id = 'HEAD'; @@ -27,7 +28,6 @@ sub call_git_patch { push @cmd, $expath; } my $rpipe = $git->popen(@cmd); - my $env = $req->{cgi}->env; my $err = $env->{'psgi.errors'}; my ($n, $res, $vin, $fh); my $end = sub { diff --git a/lib/PublicInbox/RepobrowseGitQuery.pm b/lib/PublicInbox/RepobrowseGitQuery.pm index 0ee9df046..1140f6faf 100644 --- a/lib/PublicInbox/RepobrowseGitQuery.pm +++ b/lib/PublicInbox/RepobrowseGitQuery.pm @@ -6,17 +6,25 @@ package PublicInbox::RepobrowseGitQuery; use strict; use warnings; use PublicInbox::Hval; +use URI::Escape qw(uri_unescape); my @KNOWN_PARAMS = qw(id id2 h ofs); sub new { - my ($class, $cgi) = @_; - my $self = bless {}, $class; - - foreach my $k (@KNOWN_PARAMS) { - my $v = $cgi->param($k); - $self->{$k} = defined $v ? $v : ''; + my ($class, $env) = @_; + # we don't care about multi-value + my %tmp = map { + my ($k, $v) = split('=', uri_unescape($_), 2); + $v = '' unless defined $v; + $v =~ tr/+/ /; + ($k, $v) + } split(/[&;]/, $env->{QUERY_STRING}); + + my $self = {}; + foreach (@KNOWN_PARAMS) { + my $v = $tmp{$_}; + $self->{$_} = defined $v ? $v : ''; } - $self; + bless $self, $class; } sub qs { diff --git a/lib/PublicInbox/RepobrowseGitSnapshot.pm b/lib/PublicInbox/RepobrowseGitSnapshot.pm index 8bd4b0a57..4783e1506 100644 --- a/lib/PublicInbox/RepobrowseGitSnapshot.pm +++ b/lib/PublicInbox/RepobrowseGitSnapshot.pm @@ -76,7 +76,7 @@ sub call_git_snapshot ($$) { # invoked by PublicInbox::RepobrowseBase::call my @cmd = ('archive', "--prefix=$pfx", "--format=$fmt", $tree); $req->{rpipe} = $git->popen(\@cmd, undef, { 2 => $git->err_begin }); - my $env = $req->{cgi}->env; + my $env = $req->{env}; my $vin; my $end = sub { my ($n) = @_; diff --git a/lib/PublicInbox/RepobrowseGitTag.pm b/lib/PublicInbox/RepobrowseGitTag.pm index 229d5ff09..cf835aed2 100644 --- a/lib/PublicInbox/RepobrowseGitTag.pm +++ b/lib/PublicInbox/RepobrowseGitTag.pm @@ -18,7 +18,7 @@ my %cmd_map = ( # type => action sub call_git_tag { my ($self, $req) = @_; - my $q = PublicInbox::RepobrowseGitQuery->new($req->{cgi}); + my $q = PublicInbox::RepobrowseGitQuery->new($req->{env}); my $h = $q->{h}; $h eq '' and return sub { my ($res) = @_; diff --git a/lib/PublicInbox/RepobrowseGitTree.pm b/lib/PublicInbox/RepobrowseGitTree.pm index 3900cf9d1..01f29bb0b 100644 --- a/lib/PublicInbox/RepobrowseGitTree.pm +++ b/lib/PublicInbox/RepobrowseGitTree.pm @@ -20,7 +20,7 @@ sub git_tree_stream { my ($self, $req, $res) = @_; # res: Plack callback my @extra = @{$req->{extra}}; my $git = $req->{repo_info}->{git}; - my $q = PublicInbox::RepobrowseGitQuery->new($req->{cgi}); + my $q = PublicInbox::RepobrowseGitQuery->new($req->{env}); my $id = $q->{id}; if ($id eq '') { chomp($id = $git->qx(qw(rev-parse --short=10 HEAD)));