From 13abe0398fbe724218c8c9ac2597ebe15d7db7e1 Mon Sep 17 00:00:00 2001 From: W-Mark Kubacki Date: Wed, 1 Aug 2012 21:12:24 +0200 Subject: 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). --- pym/portage/dbapi/bintree.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'pym') 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) -- cgit v1.2.3-65-gdbad