aboutsummaryrefslogtreecommitdiff
path: root/pym
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 /pym
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).
Diffstat (limited to 'pym')
-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)