]> Sergey Matveev's repositories - public-inbox.git/commitdiff
git-http-backend: fixes for mod_perl
authorEric Wong <e@80x24.org>
Mon, 29 Feb 2016 01:34:33 +0000 (01:34 +0000)
committerEric Wong <e@80x24.org>
Mon, 29 Feb 2016 01:34:33 +0000 (01:34 +0000)
Apache2 mod_perl does not give us a real file handle, so
we must translate that before giving that to git-http-backend(1).

Also, parse the Status: correctly for errors since we failed to
set %ENV properly before the previous fix for SpawnPP

lib/PublicInbox/GitHTTPBackend.pm

index 8e6d8b648985445e93d215b5c8faf0525f2fb41a..56bf24f4588c97036bf39291cb93016621528896 100644 (file)
@@ -132,9 +132,10 @@ sub serve_smart {
        my $buf;
        my $in;
        my $err = $env->{'psgi.errors'};
-       if (fileno($input) >= 0) {
+       my $fd = eval { fileno($input) };
+       if (defined $fd && $fd >= 0) {
                $in = $input;
-       } else { # FIXME untested
+       } else {
                $in = input_to_file($env) or return r(500);
        }
        my ($rpipe, $wpipe);
@@ -208,7 +209,7 @@ sub serve_smart {
                        foreach my $l (split(/\r\n/, $h)) {
                                my ($k, $v) = split(/:\s*/, $l, 2);
                                if ($k =~ /\AStatus\z/i) {
-                                       $code = int($v);
+                                       ($code) = ($v =~ /\b(\d+)\b/);
                                } else {
                                        push @h, $k, $v;
                                }
@@ -233,7 +234,6 @@ sub serve_smart {
        }
 }
 
-# FIXME: untested, our -httpd _always_ gives a real file handle
 sub input_to_file {
        my ($env) = @_;
        my $in = IO::File->new_tmpfile;