hgweb: use latest mtime for caching tag (issue4814) stable
authorMatt Mackall <mpm@selenic.com>
Thu, 03 Sep 2015 12:19:43 -0500
branchstable
changeset 26150 ee31ede3afb8
parent 26122 d0843f7e16b4
child 26151 0dda3692ec9b
hgweb: use latest mtime for caching tag (issue4814) Previously, we were using the last mtime we saw when reporting the HTTP cache etag. When we added bookmarks to the end of the list of files checked, unchanged or missing bookmarks would keep the client cache from being invalidated.
mercurial/hgweb/hgweb_mod.py
--- a/mercurial/hgweb/hgweb_mod.py	Tue Sep 01 16:38:33 2015 -0500
+++ b/mercurial/hgweb/hgweb_mod.py	Thu Sep 03 12:19:43 2015 -0500
@@ -131,11 +131,13 @@
 
     def refresh(self, request=None):
         repostate = []
+        mtime = 0
         # file of interrests mtime and size
         for meth, fname in foi:
             prefix = getattr(self.repo, meth)
             st = get_stat(prefix, fname)
             repostate.append((st.st_mtime, st.st_size))
+            mtime = max(mtime, st.st_mtime)
         repostate = tuple(repostate)
         # we need to compare file size in addition to mtime to catch
         # changes made less than a second ago
@@ -153,7 +155,7 @@
             # update these last to avoid threads seeing empty settings
             self.repostate = repostate
             # mtime is needed for ETag
-            self.mtime = st.st_mtime
+            self.mtime = mtime
         if request:
             self.repo.ui.environ = request.env