comparison mercurial/filelog.py @ 40387:f1a39128da95

filelog: add a hasnode() method (API) Missing in the file storage interface is the ability to query whether a specified value is a known node. This commit defines that interface member and implements it on the revlog and sqlite file stores. Storage unit tests have been added. The revlog implementation is a bit more complicated because index lookups don't consistently raise the same exception. For SQLite, we can simply look for a key in a dict. Differential Revision: https://phab.mercurial-scm.org/D5163
author Gregory Szorc <gregory.szorc@gmail.com>
date Wed, 03 Oct 2018 14:57:29 -0700
parents 324b4b10351e
children 1b183edbb68e
comparison
equal deleted inserted replaced
40386:4a81d82474e9 40387:f1a39128da95
5 # This software may be used and distributed according to the terms of the 5 # This software may be used and distributed according to the terms of the
6 # GNU General Public License version 2 or any later version. 6 # GNU General Public License version 2 or any later version.
7 7
8 from __future__ import absolute_import 8 from __future__ import absolute_import
9 9
10 from .node import (
11 nullid,
12 nullrev,
13 )
10 from . import ( 14 from . import (
11 error, 15 error,
12 repository, 16 repository,
13 revlog, 17 revlog,
14 ) 18 )
30 def __len__(self): 34 def __len__(self):
31 return len(self._revlog) 35 return len(self._revlog)
32 36
33 def __iter__(self): 37 def __iter__(self):
34 return self._revlog.__iter__() 38 return self._revlog.__iter__()
39
40 def hasnode(self, node):
41 if node in (nullid, nullrev):
42 return False
43
44 try:
45 self._revlog.rev(node)
46 return True
47 except (TypeError, ValueError, IndexError, error.LookupError):
48 return False
35 49
36 def revs(self, start=0, stop=None): 50 def revs(self, start=0, stop=None):
37 return self._revlog.revs(start=start, stop=stop) 51 return self._revlog.revs(start=start, stop=stop)
38 52
39 def parents(self, node): 53 def parents(self, node):