$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)));
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';
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';
--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} = '';
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};
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} = '';
$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';
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';
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 {
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 {
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) = @_;
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) = @_;
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)));