Mercurial > public > mercurial-scm > hg
comparison mercurial/testing/storage.py @ 40002:0e8836be9541
storageutil: implement file identifier resolution method (BC)
revlog.lookup() has a number of advanced features, including partial
node matching.
These advanced features aren't needed for file id lookup because file
identifiers are almost always from internal sources. (An exception to
this is hgweb, which appears to have some code paths that attempt
to resolve a user-supplied string to a node.)
This commit implements a new function for resolving file identifiers
to nodes. It behaves like revlog.lookup() but without the
advanced features.
Tests reveal behavior changes:
* Partial hex nodes are no longer resolved to nodes.
* "-1" now returns nullid instead of raising LookupError.
* "0" on an empty store now raises LookupError instead of returning
nullid.
I'm not sure why "-1" wasn't recognized before. But it seems reasonable
to accept it as a value since integer -1 resolves to nullid.
These changes all seem reasonable to me. And with the exception of
partial hex node matching, we may want to consider changing
revlog.lookup() as well.
Differential Revision: https://phab.mercurial-scm.org/D4797
author | Gregory Szorc <gregory.szorc@gmail.com> |
---|---|
date | Fri, 28 Sep 2018 11:03:17 -0700 |
parents | 215fd73cfe52 |
children | ad8389ecd3f5 |
comparison
equal
deleted
inserted
replaced
40001:215fd73cfe52 | 40002:0e8836be9541 |
---|---|
83 f.node(i) | 83 f.node(i) |
84 | 84 |
85 self.assertEqual(f.lookup(nullid), nullid) | 85 self.assertEqual(f.lookup(nullid), nullid) |
86 self.assertEqual(f.lookup(nullrev), nullid) | 86 self.assertEqual(f.lookup(nullrev), nullid) |
87 self.assertEqual(f.lookup(hex(nullid)), nullid) | 87 self.assertEqual(f.lookup(hex(nullid)), nullid) |
88 | 88 self.assertEqual(f.lookup(b'%d' % nullrev), nullid) |
89 # String converted to integer doesn't work for nullrev. | |
90 with self.assertRaises(error.LookupError): | |
91 f.lookup(b'%d' % nullrev) | |
92 | 89 |
93 with self.assertRaises(error.LookupError): | 90 with self.assertRaises(error.LookupError): |
94 f.lookup(b'badvalue') | 91 f.lookup(b'badvalue') |
95 | 92 |
96 self.assertEqual(f.lookup(hex(nullid)[0:12]), nullid) | 93 with self.assertRaises(error.LookupError): |
94 f.lookup(hex(nullid)[0:12]) | |
97 | 95 |
98 with self.assertRaises(error.LookupError): | 96 with self.assertRaises(error.LookupError): |
99 f.lookup(b'-2') | 97 f.lookup(b'-2') |
100 | 98 |
101 # TODO this is wonky. | 99 with self.assertRaises(error.LookupError): |
102 self.assertEqual(f.lookup(b'0'), nullid) | 100 f.lookup(b'0') |
103 | 101 |
104 with self.assertRaises(error.LookupError): | 102 with self.assertRaises(error.LookupError): |
105 f.lookup(b'1') | 103 f.lookup(b'1') |
106 | 104 |
107 with self.assertRaises(error.LookupError): | 105 with self.assertRaises(error.LookupError): |
195 self.assertEqual(f.lookup(node), node) | 193 self.assertEqual(f.lookup(node), node) |
196 self.assertEqual(f.lookup(0), node) | 194 self.assertEqual(f.lookup(0), node) |
197 self.assertEqual(f.lookup(-1), nullid) | 195 self.assertEqual(f.lookup(-1), nullid) |
198 self.assertEqual(f.lookup(b'0'), node) | 196 self.assertEqual(f.lookup(b'0'), node) |
199 self.assertEqual(f.lookup(hex(node)), node) | 197 self.assertEqual(f.lookup(hex(node)), node) |
200 self.assertEqual(f.lookup(hex(node)[0:12]), node) | 198 |
199 with self.assertRaises(error.LookupError): | |
200 f.lookup(hex(node)[0:12]) | |
201 | 201 |
202 with self.assertRaises(IndexError): | 202 with self.assertRaises(IndexError): |
203 f.lookup(-2) | 203 f.lookup(-2) |
204 | 204 |
205 with self.assertRaises(error.LookupError): | 205 with self.assertRaises(error.LookupError): |