chiark / gitweb /
dgit: ftpmaster api fetch: Check http error code (!)
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Wed, 19 Oct 2016 21:55:55 +0000 (22:55 +0100)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Sun, 23 Oct 2016 12:31:30 +0000 (13:31 +0100)
We are going to want to handle 404 specially so do not just use -f.

Handle file:/// specially since curl just always invents 000 for the
http error code in that case.

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
debian/changelog
dgit

index 180a3f1d298dd6af563ebb51088ee6df5f039b9b..3036438d5a35f3ea20963b1e2323a01dd9b59e11 100644 (file)
@@ -1,5 +1,6 @@
 dgit (2.6~) unstable; urgency=medium
 
+  * Check for non-2xx HTTP status codes from ftpmaster api server.
   * Always honour --curl= and --curl:.
 
  --
diff --git a/dgit b/dgit
index 19a0835a09096809f788bc96d346e6d96805d391..ae07145cb1e58d818d4a232a72cdf8c5737bf705 100755 (executable)
--- a/dgit
+++ b/dgit
@@ -989,7 +989,16 @@ sub api_query ($$) {
     badcfg "ftpmasterapi archive query method takes no data part"
        if length $data;
     my @cmd = archive_api_query_cmd($subpath);
+    my $url = $cmd[$#cmd];
+    push @cmd, qw(-w %{http_code});
     my $json = cmdoutput @cmd;
+    unless ($json =~ s/\d+\d+\d$//) {
+       failedcmd_report_cmd undef, @cmd;
+       fail "curl failed to print 3-digit HTTP code";
+    }
+    my $code = $&;
+    fail "fetch of $url gave HTTP code $code"
+       unless $url =~ m#^file://# or $code =~ m/^2/;
     return decode_json($json);
 }