From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on dcvr.yhbt.net X-Spam-Level: X-Spam-ASN: X-Spam-Status: No, score=-4.0 required=3.0 tests=ALL_TRUSTED,AWL,BAYES_00 shortcircuit=no autolearn=ham autolearn_force=no version=3.4.2 Received: from localhost (dcvr.yhbt.net [127.0.0.1]) by dcvr.yhbt.net (Postfix) with ESMTP id C64151FD47 for ; Fri, 10 Jan 2020 09:14:19 +0000 (UTC) From: Eric Wong To: meta@public-inbox.org Subject: [PATCH 1/5] inbox: use PublicInbox::Git::host_prefix_url for base_url Date: Fri, 10 Jan 2020 09:14:15 +0000 Message-Id: <20200110091419.12340-2-e@yhbt.net> In-Reply-To: <20200110091419.12340-1-e@yhbt.net> References: <20200110091419.12340-1-e@yhbt.net> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit List-Id: Better not to duplicate the same logic across different classes. Also, our git wrapper class is a strange place for host_prefix_url, but it needs to be usable for coderepos, so it's there, for now... --- lib/PublicInbox/Inbox.pm | 30 +++++++++++++----------------- t/solver_git.t | 2 +- 2 files changed, 14 insertions(+), 18 deletions(-) diff --git a/lib/PublicInbox/Inbox.pm b/lib/PublicInbox/Inbox.pm index a3cdcbc0..ff800965 100644 --- a/lib/PublicInbox/Inbox.pm +++ b/lib/PublicInbox/Inbox.pm @@ -240,26 +240,22 @@ sub cloneurl { } sub base_url { - my ($self, $env) = @_; - my $scheme; - if ($env && ($scheme = $env->{'psgi.url_scheme'})) { # PSGI env - my $host_port = $env->{HTTP_HOST} || - "$env->{SERVER_NAME}:$env->{SERVER_PORT}"; - my $url = "$scheme://$host_port". ($env->{SCRIPT_NAME} || '/'); + my ($self, $env) = @_; # env - PSGI env + if ($env) { + my $url = PublicInbox::Git::host_prefix_url($env, ''); # for mount in Plack::Builder $url .= '/' if $url !~ m!/\z!; - $url .= $self->{name} . '/'; - } else { - # either called from a non-PSGI environment (e.g. NNTP/POP3) - $self->{-base_url} ||= do { - my $url = $self->{url}->[0] or return undef; - # expand protocol-relative URLs to HTTPS if we're - # not inside a web server - $url = "https:$url" if $url =~ m!\A//!; - $url .= '/' if $url !~ m!/\z!; - $url; - }; + return $url .= $self->{name} . '/'; } + # called from a non-PSGI environment (e.g. NNTP/POP3): + $self->{-base_url} ||= do { + my $url = $self->{url}->[0] or return undef; + # expand protocol-relative URLs to HTTPS if we're + # not inside a web server + $url = "https:$url" if $url =~ m!\A//!; + $url .= '/' if $url !~ m!/\z!; + $url; + }; } sub nntp_url { diff --git a/t/solver_git.t b/t/solver_git.t index 55746994..7c5619a7 100644 --- a/t/solver_git.t +++ b/t/solver_git.t @@ -48,7 +48,7 @@ $ibx->{-repo_objs} = [ $git ]; my $res; my $solver = PublicInbox::SolverGit->new($ibx, sub { $res = $_[0] }); open my $log, '+>>', "$inboxdir/solve.log" or die "open: $!"; -my $psgi_env = { 'psgi.errors' => *STDERR }; +my $psgi_env = { 'psgi.errors' => *STDERR, 'psgi.url_scheme' => 'http' }; $solver->solve($psgi_env, $log, '69df7d5', {}); ok($res, 'solved a blob!'); my $wt_git = $res->[0];