commit:     42ccbf74f36ae7ed31045607ac872717808a065b
Author:     David James <davidjames <AT> google <DOT> com>
AuthorDate: Sun Nov  2 18:07:53 2014 +0000
Commit:     Zac Medico <zmedico <AT> gentoo <DOT> org>
CommitDate: Sun Nov  2 18:07:53 2014 +0000
URL:        
http://sources.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=42ccbf74

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 <AT> chromium.org>
Reviewed-by: Mike Frysinger <vapier <AT> chromium.org>
Reviewed-by: Zac Medico <zmedico <AT> gentoo.org>
Acked-by: Brian Dolbec <dolsen <AT> gentoo.org>

---
 pym/portage/dbapi/bintree.py | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)

diff --git a/pym/portage/dbapi/bintree.py b/pym/portage/dbapi/bintree.py
index 229ce3b..a5d7ac9 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)

Reply via email to