bookmark: also make bookmark cache depends of the changelog stable
authorPierre-Yves David <pierre-yves.david@octobus.net>
Mon, 20 May 2019 10:08:28 +0200
branchstable
changeset 42324 2338bdea4474
parent 42323 c2b83c957621
child 42349 ffab9eed3921
child 42376 89c0c8edc9d4
bookmark: also make bookmark cache depends of the changelog Since the changelog is also used during the parsing of bookmark data, it should be listed as a file cache dependency. This fix the race condition we just introduced a test for. This is a simple fix that might lead bookmark data to be invalidated more often than necessary. We could have more complicated code to deal with this race in a more "optimal" way. I feel it would be unsuitable for stable. In addition, the performance impact of this is probably minimal and I don't foresee the more advanced fix to actually be necessary.
mercurial/localrepo.py
tests/test-bookmarks-corner-case.t
--- a/mercurial/localrepo.py	Mon May 20 10:08:17 2019 +0200
+++ b/mercurial/localrepo.py	Mon May 20 10:08:28 2019 +0200
@@ -1219,7 +1219,8 @@
         cls = repoview.newtype(self.unfiltered().__class__)
         return cls(self, name, visibilityexceptions)
 
-    @repofilecache('bookmarks', 'bookmarks.current')
+    @mixedrepostorecache(('bookmarks', ''), ('bookmarks.current', ''),
+                         ('00changelog.i', 'store'))
     def _bookmarks(self):
         return bookmarks.bmstore(self)
 
--- a/tests/test-bookmarks-corner-case.t	Mon May 20 10:08:17 2019 +0200
+++ b/tests/test-bookmarks-corner-case.t	Mon May 20 10:08:28 2019 +0200
@@ -212,7 +212,7 @@
   |  summary:     A1
   |
   | o  changeset:   3:f26c3b5167d1
-  | |  bookmark:    book-B (false !)
+  | |  bookmark:    book-B
   | |  user:        test
   | |  date:        Thu Jan 01 00:00:00 1970 +0000
   | |  summary:     B1
@@ -235,4 +235,4 @@
   
   $ hg -R bookrace-server book
      book-A                    4:9ce3b28c16de
-     book-B                    3:f26c3b5167d1 (false !)
+     book-B                    3:f26c3b5167d1