diff options
author | David James <davidjames@google.com> | 2014-11-02 10:07:53 -0800 |
---|---|---|
committer | Zac Medico <zmedico@gentoo.org> | 2014-11-02 10:07:53 -0800 |
commit | 42ccbf74f36ae7ed31045607ac872717808a065b (patch) | |
tree | 4a24620e4f87d702aeecec883e6490fcd306e89b | |
parent | LocationsManager: enable user package.bashrc (diff) | |
download | portage-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.py | 16 |
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) |