diff options
author | W-Mark Kubacki <wmark@hurrikane.de> | 2012-08-01 21:12:24 +0200 |
---|---|---|
committer | Zac Medico <zmedico@gentoo.org> | 2012-08-01 17:54:44 -0700 |
commit | 13abe0398fbe724218c8c9ac2597ebe15d7db7e1 (patch) | |
tree | ce0071d388d3f00ce97b794fca743f9b28c310c1 | |
parent | cbebf76d8e5666aad4984f87c2be83d474fe5a7e (diff) | |
download | portage-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.py | 6 |
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) |