obscache: extract the cache key validation in its own function
This help keep the "up to date logic" simpler and prepare a more complex
version of the "upgradeneeded" logic that would return the full data needed for
the upgrade.
--- a/hgext3rd/evolve/obscache.py Wed May 10 11:52:11 2017 +0200
+++ b/hgext3rd/evolve/obscache.py Thu May 11 16:05:50 2017 +0200
@@ -109,22 +109,13 @@
# In pratice the cache is only updated after each transaction within a
# lock. So we should be fine. We could enforce this with a new repository
# requirement (or fix the race, that is not too hard).
- invalid = (False, 0, 0)
- if key is None:
- return invalid
- ### Is the cache valid ?
+ status = _checkkey(repo, key)
+ if status is None:
+ return (False, 0, 0)
+
keytiprev, keytipnode, keyobslength, keyobssize, keyobskey = key
- # check for changelog strip
- cl = repo.changelog
- tiprev = len(cl) - 1
- if (tiprev < keytiprev
- or cl.node(keytiprev) != keytipnode):
- return invalid
- # check for obsstore strip
- obssize, obskey = repo.obsstore.cachekey(index=keyobssize)
- if obskey != keyobskey:
- return invalid
+ tiprev, obssize, __ = status
### cache is valid, is there anything to update
@@ -140,6 +131,24 @@
return True, startrev, startidx
+def _checkkey(repo, key):
+ """internal function"""
+ if key is None:
+ return None
+
+ ### Is the cache valid ?
+ keytiprev, keytipnode, keyobslength, keyobssize, keyobskey = key
+ # check for changelog strip
+ cl = repo.changelog
+ tiprev = len(cl) - 1
+ if (tiprev < keytiprev
+ or cl.node(keytiprev) != keytipnode):
+ return None
+ # check for obsstore strip
+ obssize, obskey = repo.obsstore.cachekey(index=keyobssize)
+ if obskey != keyobskey:
+ return None
+ return tiprev, obssize, obskey
# XXX copied as is from Mercurial 4.2 and added the "offset" parameters
@util.nogc