summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIan Jackson <ijackson@chiark.greenend.org.uk>2016-10-19 22:55:55 +0100
committerIan Jackson <ijackson@chiark.greenend.org.uk>2016-10-23 13:31:30 +0100
commit2f3f7b330bf4f06c32bdb101fba8530d90399752 (patch)
tree74e9f1978de7c9c9d94d752b9da86bfe5512aef2
parent3c607d65d5675be05fb41f87fd74cd3a00016b65 (diff)
dgit: ftpmaster api fetch: Check http error code (!)
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>
-rw-r--r--debian/changelog1
-rwxr-xr-xdgit9
2 files changed, 10 insertions, 0 deletions
diff --git a/debian/changelog b/debian/changelog
index 180a3f1..3036438 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -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 19a0835..ae07145 100755
--- 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);
}