aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid James <davidjames@google.com>2014-11-02 10:07:53 -0800
committerZac Medico <zmedico@gentoo.org>2014-11-02 10:07:53 -0800
commit42ccbf74f36ae7ed31045607ac872717808a065b (patch)
tree4a24620e4f87d702aeecec883e6490fcd306e89b
parentLocationsManager: enable user package.bashrc (diff)
downloadportage-42ccbf74f36ae7ed31045607ac872717808a065b.tar.gz
portage-42ccbf74f36ae7ed31045607ac872717808a065b.tar.bz2
portage-42ccbf74f36ae7ed31045607ac872717808a065b.zip
If a binhost file sets a TTL header, honor it.
Reviewed-on: https://chromium-review.googlesource.com/225279 Reviewed-on: https://chromium-review.googlesource.com/225423 Tested-by: David James <davidjames@chromium.org> Reviewed-by: Mike Frysinger <vapier@chromium.org> Reviewed-by: Zac Medico <zmedico@gentoo.org> Acked-by: Brian Dolbec <dolsen@gentoo.org>
-rw-r--r--pym/portage/dbapi/bintree.py16
1 files changed, 16 insertions, 0 deletions
diff --git a/pym/portage/dbapi/bintree.py b/pym/portage/dbapi/bintree.py
index 229ce3b18..a5d7ac93c 100644
--- a/pym/portage/dbapi/bintree.py
+++ b/pym/portage/dbapi/bintree.py
@@ -43,6 +43,7 @@ import subprocess
import sys
import tempfile
import textwrap
+import time
import traceback
import warnings
from gzip import GzipFile
@@ -879,6 +880,11 @@ class binarytree(object):
if e.errno != errno.ENOENT:
raise
local_timestamp = pkgindex.header.get("TIMESTAMP", None)
+ try:
+ download_timestamp = \
+ float(pkgindex.header.get("DOWNLOAD_TIMESTAMP", 0))
+ except ValueError:
+ download_timestamp = 0
remote_timestamp = None
rmt_idx = self._new_pkgindex()
proc = None
@@ -890,6 +896,15 @@ class binarytree(object):
url = base_url.rstrip("/") + "/Packages"
f = None
+ try:
+ ttl = float(pkgindex.header.get("TTL", 0))
+ except ValueError:
+ pass
+ else:
+ if download_timestamp and ttl and \
+ download_timestamp + ttl > time.time():
+ raise UseCachedCopyOfRemoteIndex()
+
# Don't use urlopen for https, since it doesn't support
# certificate/hostname verification (bug #469888).
if parsed_url.scheme not in ('https',):
@@ -1022,6 +1037,7 @@ class binarytree(object):
pass
if pkgindex is rmt_idx:
pkgindex.modified = False # don't update the header
+ pkgindex.header["DOWNLOAD_TIMESTAMP"] = "%d" % time.time()
try:
ensure_dirs(os.path.dirname(pkgindex_file))
f = atomic_ofstream(pkgindex_file)