about summary refs log tree commit homepage
path: root/lib/PublicInbox
diff options
context:
space:
mode:
authorEric Wong <e@80x24.org>2016-12-14 00:31:30 +0000
committerEric Wong <e@80x24.org>2016-12-14 00:31:30 +0000
commitd4cec3bc3e439ab6ea9a2f89da5f98033bd95b4f (patch)
treebb83071053003b68747719f266414a336278fb96 /lib/PublicInbox
parent00488f0cfe9f81d04cd65d09ea783e860c937401 (diff)
downloadpublic-inbox-d4cec3bc3e439ab6ea9a2f89da5f98033bd95b4f.tar.gz
We'll be migrating away from it to minimize dependencies
and surprises, just like the rest of public-inbox did
several months ago.
Diffstat (limited to 'lib/PublicInbox')
-rw-r--r--lib/PublicInbox/RepobrowseGitAtom.pm2
-rw-r--r--lib/PublicInbox/RepobrowseGitBlob.pm2
-rw-r--r--lib/PublicInbox/RepobrowseGitCommit.pm4
-rw-r--r--lib/PublicInbox/RepobrowseGitDiff.pm4
-rw-r--r--lib/PublicInbox/RepobrowseGitLog.pm2
-rw-r--r--lib/PublicInbox/RepobrowseGitPatch.pm4
-rw-r--r--lib/PublicInbox/RepobrowseGitQuery.pm22
-rw-r--r--lib/PublicInbox/RepobrowseGitSnapshot.pm2
-rw-r--r--lib/PublicInbox/RepobrowseGitTag.pm2
-rw-r--r--lib/PublicInbox/RepobrowseGitTree.pm2
10 files changed, 27 insertions, 19 deletions
diff --git a/lib/PublicInbox/RepobrowseGitAtom.pm b/lib/PublicInbox/RepobrowseGitAtom.pm
index 9326841d..063cd2e4 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 f2b38a0c..d38101ed 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 227dad97..2577ea34 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 02a2c562..d65973c1 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 0c360e73..44b405bc 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 b8a44e51..eeffc5cb 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 0ee9df04..1140f6fa 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 8bd4b0a5..4783e150 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 229d5ff0..cf835aed 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 3900cf9d..01f29bb0 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)));