Mercurial > public > mercurial-scm > hg-stable
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): |