about summary refs log tree commit homepage
diff options
context:
space:
mode:
authorEric Wong <e@yhbt.net>2020-01-10 09:14:15 +0000
committerEric Wong <e@yhbt.net>2020-01-11 06:32:08 +0000
commitcb1c874520153f5c28a932959446977062c7db69 (patch)
treeca4ca2190af9880a25f610333998f4ff6c4a4c13
parent79585642a30f54622541496a9a0090f0aa591692 (diff)
downloadpublic-inbox-cb1c874520153f5c28a932959446977062c7db69.tar.gz
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...
-rw-r--r--lib/PublicInbox/Inbox.pm30
-rw-r--r--t/solver_git.t2
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];