aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorW-Mark Kubacki <wmark@hurrikane.de>2012-08-01 21:12:24 +0200
committerZac Medico <zmedico@gentoo.org>2012-08-01 17:54:44 -0700
commit13abe0398fbe724218c8c9ac2597ebe15d7db7e1 (patch)
treece0071d388d3f00ce97b794fca743f9b28c310c1
parentAdd support for HTTP compression (bzip2, gzip and deflate). (diff)
downloadportage-13abe0398fbe724218c8c9ac2597ebe15d7db7e1.tar.gz
portage-13abe0398fbe724218c8c9ac2597ebe15d7db7e1.tar.bz2
portage-13abe0398fbe724218c8c9ac2597ebe15d7db7e1.zip
Fix index file's mtime, which can differ from TIMESTAMP.
This enables Portage to reliably query for remote indices with HTTP-header If-Modified-Since. Without this patch mtime is greater than TIMESTAMP for large indices and slow storages - because writing a large file takes time. If the difference spans a second (TIMESTAMP 08:00:00, mtime 08:00:01), then Portage will always fetch the remote index because it will appear being modified (mtime is used there) after the copy has been made (local copy's TIMESTAMP is used here).
-rw-r--r--pym/portage/dbapi/bintree.py6
1 files changed, 5 insertions, 1 deletions
diff --git a/pym/portage/dbapi/bintree.py b/pym/portage/dbapi/bintree.py
index 16ae8eccf..03675031e 100644
--- a/pym/portage/dbapi/bintree.py
+++ b/pym/portage/dbapi/bintree.py
@@ -1186,9 +1186,13 @@ class binarytree(object):
pkgindex.packages.append(d)
self._update_pkgindex_header(pkgindex.header)
- f = atomic_ofstream(os.path.join(self.pkgdir, "Packages"))
+ pkgindex_filename = os.path.join(self.pkgdir, "Packages")
+ f = atomic_ofstream(pkgindex_filename)
pkgindex.write(f)
f.close()
+ # some seconds might have elapsed since TIMESTAMP
+ atime = mtime = long(pkgindex.header["TIMESTAMP"])
+ os.utime(pkgindex_filename, (atime, mtime))
finally:
if pkgindex_lock:
unlockfile(pkgindex_lock)