From: W-Mark Kubacki Date: Wed, 1 Aug 2012 19:12:24 +0000 (+0200) Subject: Fix index file's mtime, which can differ from TIMESTAMP. X-Git-Tag: v2.2.0_alpha121~16 X-Git-Url: http://git.tremily.us/?a=commitdiff_plain;h=13abe0398fbe724218c8c9ac2597ebe15d7db7e1;p=portage.git 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). --- 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)