changeset 2347:24bf0e3d84e3

obsstore: also guard agains changing object in '_checkkey' The 'upgradeneeded' function needs to be able to pass the object it fetched once.
author Pierre-Yves David <pierre-yves.david@octobus.net>
date Thu, 11 May 2017 17:00:55 +0200
parents 34c6382dbb82
children 521a18a10a06
files hgext3rd/evolve/obscache.py
diffstat 1 files changed, 6 insertions(+), 7 deletions(-) [+]
line wrap: on
line diff
--- a/hgext3rd/evolve/obscache.py	Thu May 11 16:58:43 2017 +0200
+++ b/hgext3rd/evolve/obscache.py	Thu May 11 17:00:55 2017 +0200
@@ -107,7 +107,7 @@
 
     reset = False
 
-    status = _checkkey(repo, key)
+    status = _checkkey(cl, obsstore, key)
     if status is None:
         reset = True
         key = emptykey
@@ -144,7 +144,7 @@
 
     return reset, revs, markers, (obssize, obskey)
 
-def _checkkey(repo, key):
+def _checkkey(changelog, obsstore, key):
     """internal function"""
     if key is None:
         return None
@@ -152,13 +152,12 @@
     ### Is the cache valid ?
     keytiprev, keytipnode, keyobslength, keyobssize, keyobskey = key
     # check for changelog strip
-    cl = repo.changelog
-    tiprev = len(cl) - 1
+    tiprev = len(changelog) - 1
     if (tiprev < keytiprev
-            or cl.node(keytiprev) != keytipnode):
+            or changelog.node(keytiprev) != keytipnode):
         return None
     # check for obsstore strip
-    obssize, obskey = repo.obsstore.cachekey(index=keyobssize)
+    obssize, obskey = obsstore.cachekey(index=keyobssize)
     if obskey != keyobskey:
         return None
     return tiprev, obssize, obskey
@@ -257,7 +256,7 @@
     def uptodate(self, repo):
         if self._cachekey is None:
             self.load(repo)
-        status = _checkkey(repo, self._cachekey)
+        status = _checkkey(repo.changelog, repo.obsstore, self._cachekey)
         return (status is not None
                 and status[0] == self._cachekey[0] # tiprev
                 and status[1] == self._cachekey[3]) # obssize