summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAbderrahim Kitouni <akitouni@gnome.org>2020-03-18 11:56:35 +0100
committerAbderrahim Kitouni <akitouni@gnome.org>2020-03-21 16:50:20 +0100
commit605b5fbcf50ca1c22c5ed3cbe5446b39fd784589 (patch)
tree107d1eae3a2c98ce1c6525f95761018965e80239
parent341940a1bf1a83e7d5c8b422fdfe8baa12a1fd70 (diff)
downloadbuildstream-abderrahim/etag.tar.gz
_downloadablefilesource.py: don't download the file if etag matchesabderrahim/etag
Some servers don't honor the 'If-None-Match' header and send the file even with matching etag
-rw-r--r--src/buildstream/plugins/sources/_downloadablefilesource.py6
1 files changed, 5 insertions, 1 deletions
diff --git a/src/buildstream/plugins/sources/_downloadablefilesource.py b/src/buildstream/plugins/sources/_downloadablefilesource.py
index 50f8561fb..ad8fe9f22 100644
--- a/src/buildstream/plugins/sources/_downloadablefilesource.py
+++ b/src/buildstream/plugins/sources/_downloadablefilesource.py
@@ -178,7 +178,11 @@ class DownloadableFileSource(Source):
with contextlib.closing(opener.open(request)) as response:
info = response.info()
- etag = info["ETag"] if "ETag" in info else None
+ # some servers don't honor the 'If-None-Match' header
+ if self.ref and etag and info["ETag"] == etag:
+ return self.ref
+
+ etag = info["ETag"]
filename = info.get_filename(default_name)
filename = os.path.basename(filename)