comparison mercurial/testing/storage.py @ 47012:d55b71393907

node: replace nullid and friends with nodeconstants class The introduction of 256bit hashes require changes to nullid and other constant magic values. Start pushing them down from repository and revlog where sensible. Differential Revision: https://phab.mercurial-scm.org/D9465
author Joerg Sonnenberger <joerg@bec.de>
date Mon, 29 Mar 2021 01:52:06 +0200
parents e8c11a2c96c0
children 6000f5b25c9b
comparison
equal deleted inserted replaced
46992:5fa019ceb499 47012:d55b71393907
9 9
10 import unittest 10 import unittest
11 11
12 from ..node import ( 12 from ..node import (
13 hex, 13 hex,
14 nullid,
15 nullrev, 14 nullrev,
16 ) 15 )
17 from ..pycompat import getattr 16 from ..pycompat import getattr
18 from .. import ( 17 from .. import (
19 error, 18 error,
49 next(gen) 48 next(gen)
50 49
51 self.assertFalse(f.hasnode(None)) 50 self.assertFalse(f.hasnode(None))
52 self.assertFalse(f.hasnode(0)) 51 self.assertFalse(f.hasnode(0))
53 self.assertFalse(f.hasnode(nullrev)) 52 self.assertFalse(f.hasnode(nullrev))
54 self.assertFalse(f.hasnode(nullid)) 53 self.assertFalse(f.hasnode(f.nullid))
55 self.assertFalse(f.hasnode(b'0')) 54 self.assertFalse(f.hasnode(b'0'))
56 self.assertFalse(f.hasnode(b'a' * 20)) 55 self.assertFalse(f.hasnode(b'a' * 20))
57 56
58 # revs() should evaluate to an empty list. 57 # revs() should evaluate to an empty list.
59 self.assertEqual(list(f.revs()), []) 58 self.assertEqual(list(f.revs()), [])
62 with self.assertRaises(StopIteration): 61 with self.assertRaises(StopIteration):
63 next(revs) 62 next(revs)
64 63
65 self.assertEqual(list(f.revs(start=20)), []) 64 self.assertEqual(list(f.revs(start=20)), [])
66 65
67 # parents() and parentrevs() work with nullid/nullrev. 66 # parents() and parentrevs() work with f.nullid/nullrev.
68 self.assertEqual(f.parents(nullid), (nullid, nullid)) 67 self.assertEqual(f.parents(f.nullid), (f.nullid, f.nullid))
69 self.assertEqual(f.parentrevs(nullrev), (nullrev, nullrev)) 68 self.assertEqual(f.parentrevs(nullrev), (nullrev, nullrev))
70 69
71 with self.assertRaises(error.LookupError): 70 with self.assertRaises(error.LookupError):
72 f.parents(b'\x01' * 20) 71 f.parents(b'\x01' * 20)
73 72
76 continue 75 continue
77 76
78 with self.assertRaises(IndexError): 77 with self.assertRaises(IndexError):
79 f.parentrevs(i) 78 f.parentrevs(i)
80 79
81 # nullid/nullrev lookup always works. 80 # f.nullid/nullrev lookup always works.
82 self.assertEqual(f.rev(nullid), nullrev) 81 self.assertEqual(f.rev(f.nullid), nullrev)
83 self.assertEqual(f.node(nullrev), nullid) 82 self.assertEqual(f.node(nullrev), f.nullid)
84 83
85 with self.assertRaises(error.LookupError): 84 with self.assertRaises(error.LookupError):
86 f.rev(b'\x01' * 20) 85 f.rev(b'\x01' * 20)
87 86
88 for i in range(-5, 5): 87 for i in range(-5, 5):
90 continue 89 continue
91 90
92 with self.assertRaises(IndexError): 91 with self.assertRaises(IndexError):
93 f.node(i) 92 f.node(i)
94 93
95 self.assertEqual(f.lookup(nullid), nullid) 94 self.assertEqual(f.lookup(f.nullid), f.nullid)
96 self.assertEqual(f.lookup(nullrev), nullid) 95 self.assertEqual(f.lookup(nullrev), f.nullid)
97 self.assertEqual(f.lookup(hex(nullid)), nullid) 96 self.assertEqual(f.lookup(hex(f.nullid)), f.nullid)
98 self.assertEqual(f.lookup(b'%d' % nullrev), nullid) 97 self.assertEqual(f.lookup(b'%d' % nullrev), f.nullid)
99 98
100 with self.assertRaises(error.LookupError): 99 with self.assertRaises(error.LookupError):
101 f.lookup(b'badvalue') 100 f.lookup(b'badvalue')
102 101
103 with self.assertRaises(error.LookupError): 102 with self.assertRaises(error.LookupError):
104 f.lookup(hex(nullid)[0:12]) 103 f.lookup(hex(f.nullid)[0:12])
105 104
106 with self.assertRaises(error.LookupError): 105 with self.assertRaises(error.LookupError):
107 f.lookup(b'-2') 106 f.lookup(b'-2')
108 107
109 with self.assertRaises(error.LookupError): 108 with self.assertRaises(error.LookupError):
138 continue 137 continue
139 138
140 with self.assertRaises(IndexError): 139 with self.assertRaises(IndexError):
141 f.iscensored(i) 140 f.iscensored(i)
142 141
143 self.assertEqual(list(f.commonancestorsheads(nullid, nullid)), []) 142 self.assertEqual(list(f.commonancestorsheads(f.nullid, f.nullid)), [])
144 143
145 with self.assertRaises(ValueError): 144 with self.assertRaises(ValueError):
146 self.assertEqual(list(f.descendants([])), []) 145 self.assertEqual(list(f.descendants([])), [])
147 146
148 self.assertEqual(list(f.descendants([nullrev])), []) 147 self.assertEqual(list(f.descendants([nullrev])), [])
149 148
150 self.assertEqual(f.heads(), [nullid]) 149 self.assertEqual(f.heads(), [f.nullid])
151 self.assertEqual(f.heads(nullid), [nullid]) 150 self.assertEqual(f.heads(f.nullid), [f.nullid])
152 self.assertEqual(f.heads(None, [nullid]), [nullid]) 151 self.assertEqual(f.heads(None, [f.nullid]), [f.nullid])
153 self.assertEqual(f.heads(nullid, [nullid]), [nullid]) 152 self.assertEqual(f.heads(f.nullid, [f.nullid]), [f.nullid])
154 153
155 self.assertEqual(f.children(nullid), []) 154 self.assertEqual(f.children(f.nullid), [])
156 155
157 with self.assertRaises(error.LookupError): 156 with self.assertRaises(error.LookupError):
158 f.children(b'\x01' * 20) 157 f.children(b'\x01' * 20)
159 158
160 def testsinglerevision(self): 159 def testsinglerevision(self):
161 f = self._makefilefn() 160 f = self._makefilefn()
162 with self._maketransactionfn() as tr: 161 with self._maketransactionfn() as tr:
163 node = f.add(b'initial', None, tr, 0, nullid, nullid) 162 node = f.add(b'initial', None, tr, 0, f.nullid, f.nullid)
164 163
165 self.assertEqual(len(f), 1) 164 self.assertEqual(len(f), 1)
166 self.assertEqual(list(f), [0]) 165 self.assertEqual(list(f), [0])
167 166
168 gen = iter(f) 167 gen = iter(f)
172 next(gen) 171 next(gen)
173 172
174 self.assertTrue(f.hasnode(node)) 173 self.assertTrue(f.hasnode(node))
175 self.assertFalse(f.hasnode(hex(node))) 174 self.assertFalse(f.hasnode(hex(node)))
176 self.assertFalse(f.hasnode(nullrev)) 175 self.assertFalse(f.hasnode(nullrev))
177 self.assertFalse(f.hasnode(nullid)) 176 self.assertFalse(f.hasnode(f.nullid))
178 self.assertFalse(f.hasnode(node[0:12])) 177 self.assertFalse(f.hasnode(node[0:12]))
179 self.assertFalse(f.hasnode(hex(node)[0:20])) 178 self.assertFalse(f.hasnode(hex(node)[0:20]))
180 179
181 self.assertEqual(list(f.revs()), [0]) 180 self.assertEqual(list(f.revs()), [0])
182 self.assertEqual(list(f.revs(start=1)), []) 181 self.assertEqual(list(f.revs(start=1)), [])
186 self.assertEqual(list(f.revs(1, 1)), []) 185 self.assertEqual(list(f.revs(1, 1)), [])
187 # TODO buggy 186 # TODO buggy
188 self.assertEqual(list(f.revs(1, 0)), [1, 0]) 187 self.assertEqual(list(f.revs(1, 0)), [1, 0])
189 self.assertEqual(list(f.revs(2, 0)), [2, 1, 0]) 188 self.assertEqual(list(f.revs(2, 0)), [2, 1, 0])
190 189
191 self.assertEqual(f.parents(node), (nullid, nullid)) 190 self.assertEqual(f.parents(node), (f.nullid, f.nullid))
192 self.assertEqual(f.parentrevs(0), (nullrev, nullrev)) 191 self.assertEqual(f.parentrevs(0), (nullrev, nullrev))
193 192
194 with self.assertRaises(error.LookupError): 193 with self.assertRaises(error.LookupError):
195 f.parents(b'\x01' * 20) 194 f.parents(b'\x01' * 20)
196 195
207 with self.assertRaises(IndexError): 206 with self.assertRaises(IndexError):
208 f.node(1) 207 f.node(1)
209 208
210 self.assertEqual(f.lookup(node), node) 209 self.assertEqual(f.lookup(node), node)
211 self.assertEqual(f.lookup(0), node) 210 self.assertEqual(f.lookup(0), node)
212 self.assertEqual(f.lookup(-1), nullid) 211 self.assertEqual(f.lookup(-1), f.nullid)
213 self.assertEqual(f.lookup(b'0'), node) 212 self.assertEqual(f.lookup(b'0'), node)
214 self.assertEqual(f.lookup(hex(node)), node) 213 self.assertEqual(f.lookup(hex(node)), node)
215 214
216 with self.assertRaises(error.LookupError): 215 with self.assertRaises(error.LookupError):
217 f.lookup(hex(node)[0:12]) 216 f.lookup(hex(node)[0:12])
254 fulltext1 = fulltext0 + b'y' 253 fulltext1 = fulltext0 + b'y'
255 fulltext2 = b'y' + fulltext0 + b'z' 254 fulltext2 = b'y' + fulltext0 + b'z'
256 255
257 f = self._makefilefn() 256 f = self._makefilefn()
258 with self._maketransactionfn() as tr: 257 with self._maketransactionfn() as tr:
259 node0 = f.add(fulltext0, None, tr, 0, nullid, nullid) 258 node0 = f.add(fulltext0, None, tr, 0, f.nullid, f.nullid)
260 node1 = f.add(fulltext1, None, tr, 1, node0, nullid) 259 node1 = f.add(fulltext1, None, tr, 1, node0, f.nullid)
261 node2 = f.add(fulltext2, None, tr, 3, node1, nullid) 260 node2 = f.add(fulltext2, None, tr, 3, node1, f.nullid)
262 261
263 self.assertEqual(len(f), 3) 262 self.assertEqual(len(f), 3)
264 self.assertEqual(list(f), [0, 1, 2]) 263 self.assertEqual(list(f), [0, 1, 2])
265 264
266 gen = iter(f) 265 gen = iter(f)
282 self.assertEqual(list(f.revs(2, 0)), [2, 1, 0]) 281 self.assertEqual(list(f.revs(2, 0)), [2, 1, 0])
283 self.assertEqual(list(f.revs(2, 1)), [2, 1]) 282 self.assertEqual(list(f.revs(2, 1)), [2, 1])
284 # TODO this is wrong 283 # TODO this is wrong
285 self.assertEqual(list(f.revs(3, 2)), [3, 2]) 284 self.assertEqual(list(f.revs(3, 2)), [3, 2])
286 285
287 self.assertEqual(f.parents(node0), (nullid, nullid)) 286 self.assertEqual(f.parents(node0), (f.nullid, f.nullid))
288 self.assertEqual(f.parents(node1), (node0, nullid)) 287 self.assertEqual(f.parents(node1), (node0, f.nullid))
289 self.assertEqual(f.parents(node2), (node1, nullid)) 288 self.assertEqual(f.parents(node2), (node1, f.nullid))
290 289
291 self.assertEqual(f.parentrevs(0), (nullrev, nullrev)) 290 self.assertEqual(f.parentrevs(0), (nullrev, nullrev))
292 self.assertEqual(f.parentrevs(1), (0, nullrev)) 291 self.assertEqual(f.parentrevs(1), (0, nullrev))
293 self.assertEqual(f.parentrevs(2), (1, nullrev)) 292 self.assertEqual(f.parentrevs(2), (1, nullrev))
294 293
328 self.assertFalse(f.iscensored(2)) 327 self.assertFalse(f.iscensored(2))
329 328
330 with self.assertRaises(IndexError): 329 with self.assertRaises(IndexError):
331 f.iscensored(3) 330 f.iscensored(3)
332 331
333 self.assertEqual(f.commonancestorsheads(node1, nullid), []) 332 self.assertEqual(f.commonancestorsheads(node1, f.nullid), [])
334 self.assertEqual(f.commonancestorsheads(node1, node0), [node0]) 333 self.assertEqual(f.commonancestorsheads(node1, node0), [node0])
335 self.assertEqual(f.commonancestorsheads(node1, node1), [node1]) 334 self.assertEqual(f.commonancestorsheads(node1, node1), [node1])
336 self.assertEqual(f.commonancestorsheads(node0, node1), [node0]) 335 self.assertEqual(f.commonancestorsheads(node0, node1), [node0])
337 self.assertEqual(f.commonancestorsheads(node1, node2), [node1]) 336 self.assertEqual(f.commonancestorsheads(node1, node2), [node1])
338 self.assertEqual(f.commonancestorsheads(node2, node1), [node1]) 337 self.assertEqual(f.commonancestorsheads(node2, node1), [node1])
362 361
363 def testmultipleheads(self): 362 def testmultipleheads(self):
364 f = self._makefilefn() 363 f = self._makefilefn()
365 364
366 with self._maketransactionfn() as tr: 365 with self._maketransactionfn() as tr:
367 node0 = f.add(b'0', None, tr, 0, nullid, nullid) 366 node0 = f.add(b'0', None, tr, 0, f.nullid, f.nullid)
368 node1 = f.add(b'1', None, tr, 1, node0, nullid) 367 node1 = f.add(b'1', None, tr, 1, node0, f.nullid)
369 node2 = f.add(b'2', None, tr, 2, node1, nullid) 368 node2 = f.add(b'2', None, tr, 2, node1, f.nullid)
370 node3 = f.add(b'3', None, tr, 3, node0, nullid) 369 node3 = f.add(b'3', None, tr, 3, node0, f.nullid)
371 node4 = f.add(b'4', None, tr, 4, node3, nullid) 370 node4 = f.add(b'4', None, tr, 4, node3, f.nullid)
372 node5 = f.add(b'5', None, tr, 5, node0, nullid) 371 node5 = f.add(b'5', None, tr, 5, node0, f.nullid)
373 372
374 self.assertEqual(len(f), 6) 373 self.assertEqual(len(f), 6)
375 374
376 self.assertEqual(list(f.descendants([0])), [1, 2, 3, 4, 5]) 375 self.assertEqual(list(f.descendants([0])), [1, 2, 3, 4, 5])
377 self.assertEqual(list(f.descendants([1])), [2]) 376 self.assertEqual(list(f.descendants([1])), [2])
425 continue 424 continue
426 425
427 with self.assertRaises(IndexError): 426 with self.assertRaises(IndexError):
428 f.size(i) 427 f.size(i)
429 428
430 self.assertEqual(f.revision(nullid), b'') 429 self.assertEqual(f.revision(f.nullid), b'')
431 self.assertEqual(f.rawdata(nullid), b'') 430 self.assertEqual(f.rawdata(f.nullid), b'')
432 431
433 with self.assertRaises(error.LookupError): 432 with self.assertRaises(error.LookupError):
434 f.revision(b'\x01' * 20) 433 f.revision(b'\x01' * 20)
435 434
436 self.assertEqual(f.read(nullid), b'') 435 self.assertEqual(f.read(f.nullid), b'')
437 436
438 with self.assertRaises(error.LookupError): 437 with self.assertRaises(error.LookupError):
439 f.read(b'\x01' * 20) 438 f.read(b'\x01' * 20)
440 439
441 self.assertFalse(f.renamed(nullid)) 440 self.assertFalse(f.renamed(f.nullid))
442 441
443 with self.assertRaises(error.LookupError): 442 with self.assertRaises(error.LookupError):
444 f.read(b'\x01' * 20) 443 f.read(b'\x01' * 20)
445 444
446 self.assertTrue(f.cmp(nullid, b'')) 445 self.assertTrue(f.cmp(f.nullid, b''))
447 self.assertTrue(f.cmp(nullid, b'foo')) 446 self.assertTrue(f.cmp(f.nullid, b'foo'))
448 447
449 with self.assertRaises(error.LookupError): 448 with self.assertRaises(error.LookupError):
450 f.cmp(b'\x01' * 20, b'irrelevant') 449 f.cmp(b'\x01' * 20, b'irrelevant')
451 450
452 # Emitting empty list is an empty generator. 451 # Emitting empty list is an empty generator.
453 gen = f.emitrevisions([]) 452 gen = f.emitrevisions([])
454 with self.assertRaises(StopIteration): 453 with self.assertRaises(StopIteration):
455 next(gen) 454 next(gen)
456 455
457 # Emitting null node yields nothing. 456 # Emitting null node yields nothing.
458 gen = f.emitrevisions([nullid]) 457 gen = f.emitrevisions([f.nullid])
459 with self.assertRaises(StopIteration): 458 with self.assertRaises(StopIteration):
460 next(gen) 459 next(gen)
461 460
462 # Requesting unknown node fails. 461 # Requesting unknown node fails.
463 with self.assertRaises(error.LookupError): 462 with self.assertRaises(error.LookupError):
466 def testsinglerevision(self): 465 def testsinglerevision(self):
467 fulltext = b'initial' 466 fulltext = b'initial'
468 467
469 f = self._makefilefn() 468 f = self._makefilefn()
470 with self._maketransactionfn() as tr: 469 with self._maketransactionfn() as tr:
471 node = f.add(fulltext, None, tr, 0, nullid, nullid) 470 node = f.add(fulltext, None, tr, 0, f.nullid, f.nullid)
472 471
473 self.assertEqual(f.storageinfo(), {}) 472 self.assertEqual(f.storageinfo(), {})
474 self.assertEqual( 473 self.assertEqual(
475 f.storageinfo(revisionscount=True, trackedsize=True), 474 f.storageinfo(revisionscount=True, trackedsize=True),
476 {b'revisionscount': 1, b'trackedsize': len(fulltext)}, 475 {b'revisionscount': 1, b'trackedsize': len(fulltext)},
494 # Emitting a single revision works. 493 # Emitting a single revision works.
495 gen = f.emitrevisions([node]) 494 gen = f.emitrevisions([node])
496 rev = next(gen) 495 rev = next(gen)
497 496
498 self.assertEqual(rev.node, node) 497 self.assertEqual(rev.node, node)
499 self.assertEqual(rev.p1node, nullid) 498 self.assertEqual(rev.p1node, f.nullid)
500 self.assertEqual(rev.p2node, nullid) 499 self.assertEqual(rev.p2node, f.nullid)
501 self.assertIsNone(rev.linknode) 500 self.assertIsNone(rev.linknode)
502 self.assertEqual(rev.basenode, nullid) 501 self.assertEqual(rev.basenode, f.nullid)
503 self.assertIsNone(rev.baserevisionsize) 502 self.assertIsNone(rev.baserevisionsize)
504 self.assertIsNone(rev.revision) 503 self.assertIsNone(rev.revision)
505 self.assertIsNone(rev.delta) 504 self.assertIsNone(rev.delta)
506 505
507 with self.assertRaises(StopIteration): 506 with self.assertRaises(StopIteration):
510 # Requesting revision data works. 509 # Requesting revision data works.
511 gen = f.emitrevisions([node], revisiondata=True) 510 gen = f.emitrevisions([node], revisiondata=True)
512 rev = next(gen) 511 rev = next(gen)
513 512
514 self.assertEqual(rev.node, node) 513 self.assertEqual(rev.node, node)
515 self.assertEqual(rev.p1node, nullid) 514 self.assertEqual(rev.p1node, f.nullid)
516 self.assertEqual(rev.p2node, nullid) 515 self.assertEqual(rev.p2node, f.nullid)
517 self.assertIsNone(rev.linknode) 516 self.assertIsNone(rev.linknode)
518 self.assertEqual(rev.basenode, nullid) 517 self.assertEqual(rev.basenode, f.nullid)
519 self.assertIsNone(rev.baserevisionsize) 518 self.assertIsNone(rev.baserevisionsize)
520 self.assertEqual(rev.revision, fulltext) 519 self.assertEqual(rev.revision, fulltext)
521 self.assertIsNone(rev.delta) 520 self.assertIsNone(rev.delta)
522 521
523 with self.assertRaises(StopIteration): 522 with self.assertRaises(StopIteration):
532 fulltext1 = fulltext0 + b'y' 531 fulltext1 = fulltext0 + b'y'
533 fulltext2 = b'y' + fulltext0 + b'z' 532 fulltext2 = b'y' + fulltext0 + b'z'
534 533
535 f = self._makefilefn() 534 f = self._makefilefn()
536 with self._maketransactionfn() as tr: 535 with self._maketransactionfn() as tr:
537 node0 = f.add(fulltext0, None, tr, 0, nullid, nullid) 536 node0 = f.add(fulltext0, None, tr, 0, f.nullid, f.nullid)
538 node1 = f.add(fulltext1, None, tr, 1, node0, nullid) 537 node1 = f.add(fulltext1, None, tr, 1, node0, f.nullid)
539 node2 = f.add(fulltext2, None, tr, 3, node1, nullid) 538 node2 = f.add(fulltext2, None, tr, 3, node1, f.nullid)
540 539
541 self.assertEqual(f.storageinfo(), {}) 540 self.assertEqual(f.storageinfo(), {})
542 self.assertEqual( 541 self.assertEqual(
543 f.storageinfo(revisionscount=True, trackedsize=True), 542 f.storageinfo(revisionscount=True, trackedsize=True),
544 { 543 {
594 gen = f.emitrevisions([node0, node1, node2], revisiondata=True) 593 gen = f.emitrevisions([node0, node1, node2], revisiondata=True)
595 594
596 rev = next(gen) 595 rev = next(gen)
597 596
598 self.assertEqual(rev.node, node0) 597 self.assertEqual(rev.node, node0)
599 self.assertEqual(rev.p1node, nullid) 598 self.assertEqual(rev.p1node, f.nullid)
600 self.assertEqual(rev.p2node, nullid) 599 self.assertEqual(rev.p2node, f.nullid)
601 self.assertIsNone(rev.linknode) 600 self.assertIsNone(rev.linknode)
602 self.assertEqual(rev.basenode, nullid) 601 self.assertEqual(rev.basenode, f.nullid)
603 self.assertIsNone(rev.baserevisionsize) 602 self.assertIsNone(rev.baserevisionsize)
604 self.assertEqual(rev.revision, fulltext0) 603 self.assertEqual(rev.revision, fulltext0)
605 self.assertIsNone(rev.delta) 604 self.assertIsNone(rev.delta)
606 605
607 rev = next(gen) 606 rev = next(gen)
608 607
609 self.assertEqual(rev.node, node1) 608 self.assertEqual(rev.node, node1)
610 self.assertEqual(rev.p1node, node0) 609 self.assertEqual(rev.p1node, node0)
611 self.assertEqual(rev.p2node, nullid) 610 self.assertEqual(rev.p2node, f.nullid)
612 self.assertIsNone(rev.linknode) 611 self.assertIsNone(rev.linknode)
613 self.assertEqual(rev.basenode, node0) 612 self.assertEqual(rev.basenode, node0)
614 self.assertIsNone(rev.baserevisionsize) 613 self.assertIsNone(rev.baserevisionsize)
615 self.assertIsNone(rev.revision) 614 self.assertIsNone(rev.revision)
616 self.assertEqual( 615 self.assertEqual(
620 619
621 rev = next(gen) 620 rev = next(gen)
622 621
623 self.assertEqual(rev.node, node2) 622 self.assertEqual(rev.node, node2)
624 self.assertEqual(rev.p1node, node1) 623 self.assertEqual(rev.p1node, node1)
625 self.assertEqual(rev.p2node, nullid) 624 self.assertEqual(rev.p2node, f.nullid)
626 self.assertIsNone(rev.linknode) 625 self.assertIsNone(rev.linknode)
627 self.assertEqual(rev.basenode, node1) 626 self.assertEqual(rev.basenode, node1)
628 self.assertIsNone(rev.baserevisionsize) 627 self.assertIsNone(rev.baserevisionsize)
629 self.assertIsNone(rev.revision) 628 self.assertIsNone(rev.revision)
630 self.assertEqual( 629 self.assertEqual(
639 gen = f.emitrevisions([node2, node1, node0], revisiondata=True) 638 gen = f.emitrevisions([node2, node1, node0], revisiondata=True)
640 639
641 rev = next(gen) 640 rev = next(gen)
642 641
643 self.assertEqual(rev.node, node0) 642 self.assertEqual(rev.node, node0)
644 self.assertEqual(rev.p1node, nullid) 643 self.assertEqual(rev.p1node, f.nullid)
645 self.assertEqual(rev.p2node, nullid) 644 self.assertEqual(rev.p2node, f.nullid)
646 self.assertIsNone(rev.linknode) 645 self.assertIsNone(rev.linknode)
647 self.assertEqual(rev.basenode, nullid) 646 self.assertEqual(rev.basenode, f.nullid)
648 self.assertIsNone(rev.baserevisionsize) 647 self.assertIsNone(rev.baserevisionsize)
649 self.assertEqual(rev.revision, fulltext0) 648 self.assertEqual(rev.revision, fulltext0)
650 self.assertIsNone(rev.delta) 649 self.assertIsNone(rev.delta)
651 650
652 rev = next(gen) 651 rev = next(gen)
653 652
654 self.assertEqual(rev.node, node1) 653 self.assertEqual(rev.node, node1)
655 self.assertEqual(rev.p1node, node0) 654 self.assertEqual(rev.p1node, node0)
656 self.assertEqual(rev.p2node, nullid) 655 self.assertEqual(rev.p2node, f.nullid)
657 self.assertIsNone(rev.linknode) 656 self.assertIsNone(rev.linknode)
658 self.assertEqual(rev.basenode, node0) 657 self.assertEqual(rev.basenode, node0)
659 self.assertIsNone(rev.baserevisionsize) 658 self.assertIsNone(rev.baserevisionsize)
660 self.assertIsNone(rev.revision) 659 self.assertIsNone(rev.revision)
661 self.assertEqual( 660 self.assertEqual(
665 664
666 rev = next(gen) 665 rev = next(gen)
667 666
668 self.assertEqual(rev.node, node2) 667 self.assertEqual(rev.node, node2)
669 self.assertEqual(rev.p1node, node1) 668 self.assertEqual(rev.p1node, node1)
670 self.assertEqual(rev.p2node, nullid) 669 self.assertEqual(rev.p2node, f.nullid)
671 self.assertIsNone(rev.linknode) 670 self.assertIsNone(rev.linknode)
672 self.assertEqual(rev.basenode, node1) 671 self.assertEqual(rev.basenode, node1)
673 self.assertIsNone(rev.baserevisionsize) 672 self.assertIsNone(rev.baserevisionsize)
674 self.assertIsNone(rev.revision) 673 self.assertIsNone(rev.revision)
675 self.assertEqual( 674 self.assertEqual(
698 ) 697 )
699 698
700 rev = next(gen) 699 rev = next(gen)
701 self.assertEqual(rev.node, node2) 700 self.assertEqual(rev.node, node2)
702 self.assertEqual(rev.p1node, node1) 701 self.assertEqual(rev.p1node, node1)
703 self.assertEqual(rev.p2node, nullid) 702 self.assertEqual(rev.p2node, f.nullid)
704 self.assertEqual(rev.basenode, nullid) 703 self.assertEqual(rev.basenode, f.nullid)
705 self.assertIsNone(rev.baserevisionsize) 704 self.assertIsNone(rev.baserevisionsize)
706 self.assertEqual(rev.revision, fulltext2) 705 self.assertEqual(rev.revision, fulltext2)
707 self.assertIsNone(rev.delta) 706 self.assertIsNone(rev.delta)
708 707
709 rev = next(gen) 708 rev = next(gen)
710 self.assertEqual(rev.node, node0) 709 self.assertEqual(rev.node, node0)
711 self.assertEqual(rev.p1node, nullid) 710 self.assertEqual(rev.p1node, f.nullid)
712 self.assertEqual(rev.p2node, nullid) 711 self.assertEqual(rev.p2node, f.nullid)
713 # Delta behavior is storage dependent, so we can't easily test it. 712 # Delta behavior is storage dependent, so we can't easily test it.
714 713
715 with self.assertRaises(StopIteration): 714 with self.assertRaises(StopIteration):
716 next(gen) 715 next(gen)
717 716
720 gen = f.emitrevisions({node2, node1}, revisiondata=True) 719 gen = f.emitrevisions({node2, node1}, revisiondata=True)
721 720
722 rev = next(gen) 721 rev = next(gen)
723 self.assertEqual(rev.node, node1) 722 self.assertEqual(rev.node, node1)
724 self.assertEqual(rev.p1node, node0) 723 self.assertEqual(rev.p1node, node0)
725 self.assertEqual(rev.p2node, nullid) 724 self.assertEqual(rev.p2node, f.nullid)
726 self.assertEqual(rev.basenode, nullid) 725 self.assertEqual(rev.basenode, f.nullid)
727 self.assertIsNone(rev.baserevisionsize) 726 self.assertIsNone(rev.baserevisionsize)
728 self.assertEqual(rev.revision, fulltext1) 727 self.assertEqual(rev.revision, fulltext1)
729 self.assertIsNone(rev.delta) 728 self.assertIsNone(rev.delta)
730 729
731 rev = next(gen) 730 rev = next(gen)
732 self.assertEqual(rev.node, node2) 731 self.assertEqual(rev.node, node2)
733 self.assertEqual(rev.p1node, node1) 732 self.assertEqual(rev.p1node, node1)
734 self.assertEqual(rev.p2node, nullid) 733 self.assertEqual(rev.p2node, f.nullid)
735 self.assertEqual(rev.basenode, node1) 734 self.assertEqual(rev.basenode, node1)
736 self.assertIsNone(rev.baserevisionsize) 735 self.assertIsNone(rev.baserevisionsize)
737 self.assertIsNone(rev.revision) 736 self.assertIsNone(rev.revision)
738 self.assertEqual( 737 self.assertEqual(
739 rev.delta, 738 rev.delta,
749 ) 748 )
750 749
751 rev = next(gen) 750 rev = next(gen)
752 self.assertEqual(rev.node, node1) 751 self.assertEqual(rev.node, node1)
753 self.assertEqual(rev.p1node, node0) 752 self.assertEqual(rev.p1node, node0)
754 self.assertEqual(rev.p2node, nullid) 753 self.assertEqual(rev.p2node, f.nullid)
755 self.assertEqual(rev.basenode, node0) 754 self.assertEqual(rev.basenode, node0)
756 self.assertIsNone(rev.baserevisionsize) 755 self.assertIsNone(rev.baserevisionsize)
757 self.assertIsNone(rev.revision) 756 self.assertIsNone(rev.revision)
758 self.assertEqual( 757 self.assertEqual(
759 rev.delta, 758 rev.delta,
766 [node0], revisiondata=True, deltamode=repository.CG_DELTAMODE_PREV 765 [node0], revisiondata=True, deltamode=repository.CG_DELTAMODE_PREV
767 ) 766 )
768 767
769 rev = next(gen) 768 rev = next(gen)
770 self.assertEqual(rev.node, node0) 769 self.assertEqual(rev.node, node0)
771 self.assertEqual(rev.p1node, nullid) 770 self.assertEqual(rev.p1node, f.nullid)
772 self.assertEqual(rev.p2node, nullid) 771 self.assertEqual(rev.p2node, f.nullid)
773 self.assertEqual(rev.basenode, nullid) 772 self.assertEqual(rev.basenode, f.nullid)
774 self.assertIsNone(rev.baserevisionsize) 773 self.assertIsNone(rev.baserevisionsize)
775 self.assertIsNone(rev.revision) 774 self.assertIsNone(rev.revision)
776 self.assertEqual( 775 self.assertEqual(
777 rev.delta, 776 rev.delta,
778 b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00' + fulltext0, 777 b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00' + fulltext0,
787 deltamode=repository.CG_DELTAMODE_PREV, 786 deltamode=repository.CG_DELTAMODE_PREV,
788 ) 787 )
789 788
790 rev = next(gen) 789 rev = next(gen)
791 self.assertEqual(rev.node, node0) 790 self.assertEqual(rev.node, node0)
792 self.assertEqual(rev.p1node, nullid) 791 self.assertEqual(rev.p1node, f.nullid)
793 self.assertEqual(rev.p2node, nullid) 792 self.assertEqual(rev.p2node, f.nullid)
794 self.assertEqual(rev.basenode, nullid) 793 self.assertEqual(rev.basenode, f.nullid)
795 self.assertIsNone(rev.baserevisionsize) 794 self.assertIsNone(rev.baserevisionsize)
796 self.assertIsNone(rev.revision) 795 self.assertIsNone(rev.revision)
797 self.assertEqual( 796 self.assertEqual(
798 rev.delta, 797 rev.delta,
799 b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00' + fulltext0, 798 b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00' + fulltext0,
800 ) 799 )
801 800
802 rev = next(gen) 801 rev = next(gen)
803 self.assertEqual(rev.node, node2) 802 self.assertEqual(rev.node, node2)
804 self.assertEqual(rev.p1node, node1) 803 self.assertEqual(rev.p1node, node1)
805 self.assertEqual(rev.p2node, nullid) 804 self.assertEqual(rev.p2node, f.nullid)
806 self.assertEqual(rev.basenode, node0) 805 self.assertEqual(rev.basenode, node0)
807 806
808 with self.assertRaises(StopIteration): 807 with self.assertRaises(StopIteration):
809 next(gen) 808 next(gen)
810 809
839 ] 838 ]
840 ) 839 )
841 840
842 f = self._makefilefn() 841 f = self._makefilefn()
843 with self._maketransactionfn() as tr: 842 with self._maketransactionfn() as tr:
844 node0 = f.add(fulltext0, None, tr, 0, nullid, nullid) 843 node0 = f.add(fulltext0, None, tr, 0, f.nullid, f.nullid)
845 node1 = f.add(fulltext1, meta1, tr, 1, node0, nullid) 844 node1 = f.add(fulltext1, meta1, tr, 1, node0, f.nullid)
846 node2 = f.add(fulltext2, meta2, tr, 2, nullid, nullid) 845 node2 = f.add(fulltext2, meta2, tr, 2, f.nullid, f.nullid)
847 846
848 # Metadata header isn't recognized when parent isn't nullid. 847 # Metadata header isn't recognized when parent isn't f.nullid.
849 self.assertEqual(f.size(1), len(stored1)) 848 self.assertEqual(f.size(1), len(stored1))
850 self.assertEqual(f.size(2), len(fulltext2)) 849 self.assertEqual(f.size(2), len(fulltext2))
851 850
852 self.assertEqual(f.revision(node1), stored1) 851 self.assertEqual(f.revision(node1), stored1)
853 self.assertEqual(f.rawdata(node1), stored1) 852 self.assertEqual(f.rawdata(node1), stored1)
884 ] 883 ]
885 ) 884 )
886 885
887 f = self._makefilefn() 886 f = self._makefilefn()
888 with self._maketransactionfn() as tr: 887 with self._maketransactionfn() as tr:
889 node0 = f.add(fulltext0, {}, tr, 0, nullid, nullid) 888 node0 = f.add(fulltext0, {}, tr, 0, f.nullid, f.nullid)
890 node1 = f.add(fulltext1, meta1, tr, 1, nullid, nullid) 889 node1 = f.add(fulltext1, meta1, tr, 1, f.nullid, f.nullid)
891 890
892 # TODO this is buggy. 891 # TODO this is buggy.
893 self.assertEqual(f.size(0), len(fulltext0) + 4) 892 self.assertEqual(f.size(0), len(fulltext0) + 4)
894 893
895 self.assertEqual(f.size(1), len(fulltext1)) 894 self.assertEqual(f.size(1), len(fulltext1))
914 913
915 fulltext0 = b'foo\n' * 30 914 fulltext0 = b'foo\n' * 30
916 fulltext1 = fulltext0 + b'bar\n' 915 fulltext1 = fulltext0 + b'bar\n'
917 916
918 with self._maketransactionfn() as tr: 917 with self._maketransactionfn() as tr:
919 node0 = f.add(fulltext0, None, tr, 0, nullid, nullid) 918 node0 = f.add(fulltext0, None, tr, 0, f.nullid, f.nullid)
920 node1 = b'\xaa' * 20 919 node1 = b'\xaa' * 20
921 920
922 self._addrawrevisionfn( 921 self._addrawrevisionfn(
923 f, tr, node1, node0, nullid, 1, rawtext=fulltext1 922 f, tr, node1, node0, f.nullid, 1, rawtext=fulltext1
924 ) 923 )
925 924
926 self.assertEqual(len(f), 2) 925 self.assertEqual(len(f), 2)
927 self.assertEqual(f.parents(node1), (node0, nullid)) 926 self.assertEqual(f.parents(node1), (node0, f.nullid))
928 927
929 # revision() raises since it performs hash verification. 928 # revision() raises since it performs hash verification.
930 with self.assertRaises(error.StorageError): 929 with self.assertRaises(error.StorageError):
931 f.revision(node1) 930 f.revision(node1)
932 931
949 948
950 fulltext0 = b'foo\n' * 30 949 fulltext0 = b'foo\n' * 30
951 fulltext1 = fulltext0 + b'bar\n' 950 fulltext1 = fulltext0 + b'bar\n'
952 951
953 with self._maketransactionfn() as tr: 952 with self._maketransactionfn() as tr:
954 node0 = f.add(fulltext0, None, tr, 0, nullid, nullid) 953 node0 = f.add(fulltext0, None, tr, 0, f.nullid, f.nullid)
955 node1 = b'\xaa' * 20 954 node1 = b'\xaa' * 20
956 955
957 self._addrawrevisionfn( 956 self._addrawrevisionfn(
958 f, tr, node1, node0, nullid, 1, rawtext=fulltext1 957 f, tr, node1, node0, f.nullid, 1, rawtext=fulltext1
959 ) 958 )
960 959
961 with self.assertRaises(error.StorageError): 960 with self.assertRaises(error.StorageError):
962 f.rawdata(node1) 961 f.rawdata(node1)
963 962
971 970
972 fulltext0 = b'foo\n' * 30 971 fulltext0 = b'foo\n' * 30
973 fulltext1 = fulltext0 + b'bar\n' 972 fulltext1 = fulltext0 + b'bar\n'
974 973
975 with self._maketransactionfn() as tr: 974 with self._maketransactionfn() as tr:
976 node0 = f.add(fulltext0, None, tr, 0, nullid, nullid) 975 node0 = f.add(fulltext0, None, tr, 0, f.nullid, f.nullid)
977 node1 = b'\xaa' * 20 976 node1 = b'\xaa' * 20
978 977
979 self._addrawrevisionfn( 978 self._addrawrevisionfn(
980 f, tr, node1, node0, nullid, 1, rawtext=fulltext1 979 f, tr, node1, node0, f.nullid, 1, rawtext=fulltext1
981 ) 980 )
982 981
983 with self.assertRaises(error.StorageError): 982 with self.assertRaises(error.StorageError):
984 f.read(node1) 983 f.read(node1)
985 984
992 fulltext0 = b'foo\n' * 31 991 fulltext0 = b'foo\n' * 31
993 fulltext1 = fulltext0 + b'bar\n' 992 fulltext1 = fulltext0 + b'bar\n'
994 fulltext2 = fulltext1 + b'baz\n' 993 fulltext2 = fulltext1 + b'baz\n'
995 994
996 with self._maketransactionfn() as tr: 995 with self._maketransactionfn() as tr:
997 node0 = f.add(fulltext0, None, tr, 0, nullid, nullid) 996 node0 = f.add(fulltext0, None, tr, 0, f.nullid, f.nullid)
998 node1 = b'\xaa' * 20 997 node1 = b'\xaa' * 20
999 998
1000 self._addrawrevisionfn( 999 self._addrawrevisionfn(
1001 f, tr, node1, node0, nullid, 1, rawtext=fulltext1 1000 f, tr, node1, node0, f.nullid, 1, rawtext=fulltext1
1002 ) 1001 )
1003 1002
1004 with self.assertRaises(error.StorageError): 1003 with self.assertRaises(error.StorageError):
1005 f.read(node1) 1004 f.read(node1)
1006 1005
1007 node2 = storageutil.hashrevisionsha1(fulltext2, node1, nullid) 1006 node2 = storageutil.hashrevisionsha1(fulltext2, node1, f.nullid)
1008 1007
1009 with self._maketransactionfn() as tr: 1008 with self._maketransactionfn() as tr:
1010 delta = mdiff.textdiff(fulltext1, fulltext2) 1009 delta = mdiff.textdiff(fulltext1, fulltext2)
1011 self._addrawrevisionfn( 1010 self._addrawrevisionfn(
1012 f, tr, node2, node1, nullid, 2, delta=(1, delta) 1011 f, tr, node2, node1, f.nullid, 2, delta=(1, delta)
1013 ) 1012 )
1014 1013
1015 self.assertEqual(len(f), 3) 1014 self.assertEqual(len(f), 3)
1016 1015
1017 # Assuming a delta is stored, we shouldn't need to validate node1 in 1016 # Assuming a delta is stored, we shouldn't need to validate node1 in
1027 }, 1026 },
1028 b'', 1027 b'',
1029 ) 1028 )
1030 1029
1031 with self._maketransactionfn() as tr: 1030 with self._maketransactionfn() as tr:
1032 node0 = f.add(b'foo', None, tr, 0, nullid, nullid) 1031 node0 = f.add(b'foo', None, tr, 0, f.nullid, f.nullid)
1033 1032
1034 # The node value doesn't matter since we can't verify it. 1033 # The node value doesn't matter since we can't verify it.
1035 node1 = b'\xbb' * 20 1034 node1 = b'\xbb' * 20
1036 1035
1037 self._addrawrevisionfn( 1036 self._addrawrevisionfn(
1038 f, tr, node1, node0, nullid, 1, stored1, censored=True 1037 f, tr, node1, node0, f.nullid, 1, stored1, censored=True
1039 ) 1038 )
1040 1039
1041 self.assertTrue(f.iscensored(1)) 1040 self.assertTrue(f.iscensored(1))
1042 1041
1043 with self.assertRaises(error.CensoredNodeError): 1042 with self.assertRaises(error.CensoredNodeError):
1061 }, 1060 },
1062 b'', 1061 b'',
1063 ) 1062 )
1064 1063
1065 with self._maketransactionfn() as tr: 1064 with self._maketransactionfn() as tr:
1066 node0 = f.add(b'foo', None, tr, 0, nullid, nullid) 1065 node0 = f.add(b'foo', None, tr, 0, f.nullid, f.nullid)
1067 1066
1068 # The node value doesn't matter since we can't verify it. 1067 # The node value doesn't matter since we can't verify it.
1069 node1 = b'\xbb' * 20 1068 node1 = b'\xbb' * 20
1070 1069
1071 self._addrawrevisionfn( 1070 self._addrawrevisionfn(
1072 f, tr, node1, node0, nullid, 1, stored1, censored=True 1071 f, tr, node1, node0, f.nullid, 1, stored1, censored=True
1073 ) 1072 )
1074 1073
1075 with self.assertRaises(error.CensoredNodeError): 1074 with self.assertRaises(error.CensoredNodeError):
1076 f.rawdata(1) 1075 f.rawdata(1)
1077 1076
1086 """ 1085 """
1087 1086
1088 def testaddnoop(self): 1087 def testaddnoop(self):
1089 f = self._makefilefn() 1088 f = self._makefilefn()
1090 with self._maketransactionfn() as tr: 1089 with self._maketransactionfn() as tr:
1091 node0 = f.add(b'foo', None, tr, 0, nullid, nullid) 1090 node0 = f.add(b'foo', None, tr, 0, f.nullid, f.nullid)
1092 node1 = f.add(b'foo', None, tr, 0, nullid, nullid) 1091 node1 = f.add(b'foo', None, tr, 0, f.nullid, f.nullid)
1093 # Varying by linkrev shouldn't impact hash. 1092 # Varying by linkrev shouldn't impact hash.
1094 node2 = f.add(b'foo', None, tr, 1, nullid, nullid) 1093 node2 = f.add(b'foo', None, tr, 1, f.nullid, f.nullid)
1095 1094
1096 self.assertEqual(node1, node0) 1095 self.assertEqual(node1, node0)
1097 self.assertEqual(node2, node0) 1096 self.assertEqual(node2, node0)
1098 self.assertEqual(len(f), 1) 1097 self.assertEqual(len(f), 1)
1099 1098
1100 def testaddrevisionbadnode(self): 1099 def testaddrevisionbadnode(self):
1101 f = self._makefilefn() 1100 f = self._makefilefn()
1102 with self._maketransactionfn() as tr: 1101 with self._maketransactionfn() as tr:
1103 # Adding a revision with bad node value fails. 1102 # Adding a revision with bad node value fails.
1104 with self.assertRaises(error.StorageError): 1103 with self.assertRaises(error.StorageError):
1105 f.addrevision(b'foo', tr, 0, nullid, nullid, node=b'\x01' * 20) 1104 f.addrevision(
1105 b'foo', tr, 0, f.nullid, f.nullid, node=b'\x01' * 20
1106 )
1106 1107
1107 def testaddrevisionunknownflag(self): 1108 def testaddrevisionunknownflag(self):
1108 f = self._makefilefn() 1109 f = self._makefilefn()
1109 with self._maketransactionfn() as tr: 1110 with self._maketransactionfn() as tr:
1110 for i in range(15, 0, -1): 1111 for i in range(15, 0, -1):
1111 if (1 << i) & ~repository.REVISION_FLAGS_KNOWN: 1112 if (1 << i) & ~repository.REVISION_FLAGS_KNOWN:
1112 flags = 1 << i 1113 flags = 1 << i
1113 break 1114 break
1114 1115
1115 with self.assertRaises(error.StorageError): 1116 with self.assertRaises(error.StorageError):
1116 f.addrevision(b'foo', tr, 0, nullid, nullid, flags=flags) 1117 f.addrevision(b'foo', tr, 0, f.nullid, f.nullid, flags=flags)
1117 1118
1118 def testaddgroupsimple(self): 1119 def testaddgroupsimple(self):
1119 f = self._makefilefn() 1120 f = self._makefilefn()
1120 1121
1121 callbackargs = [] 1122 callbackargs = []
1151 1152
1152 fulltext0 = b'foo' 1153 fulltext0 = b'foo'
1153 delta0 = mdiff.trivialdiffheader(len(fulltext0)) + fulltext0 1154 delta0 = mdiff.trivialdiffheader(len(fulltext0)) + fulltext0
1154 1155
1155 with self._maketransactionfn() as tr: 1156 with self._maketransactionfn() as tr:
1156 node0 = f.add(fulltext0, None, tr, 0, nullid, nullid) 1157 node0 = f.add(fulltext0, None, tr, 0, f.nullid, f.nullid)
1157 1158
1158 f = self._makefilefn() 1159 f = self._makefilefn()
1159 1160
1160 deltas = [ 1161 deltas = [
1161 (node0, nullid, nullid, nullid, nullid, delta0, 0, {}), 1162 (node0, f.nullid, f.nullid, f.nullid, f.nullid, delta0, 0, {}),
1162 ] 1163 ]
1163 1164
1164 with self._maketransactionfn() as tr: 1165 with self._maketransactionfn() as tr:
1165 nodes = [] 1166 nodes = []
1166 1167
1205 ] 1206 ]
1206 1207
1207 nodes = [] 1208 nodes = []
1208 with self._maketransactionfn() as tr: 1209 with self._maketransactionfn() as tr:
1209 for fulltext in fulltexts: 1210 for fulltext in fulltexts:
1210 nodes.append(f.add(fulltext, None, tr, 0, nullid, nullid)) 1211 nodes.append(f.add(fulltext, None, tr, 0, f.nullid, f.nullid))
1211 1212
1212 f = self._makefilefn() 1213 f = self._makefilefn()
1213 deltas = [] 1214 deltas = []
1214 for i, fulltext in enumerate(fulltexts): 1215 for i, fulltext in enumerate(fulltexts):
1215 delta = mdiff.trivialdiffheader(len(fulltext)) + fulltext 1216 delta = mdiff.trivialdiffheader(len(fulltext)) + fulltext
1216 1217
1217 deltas.append( 1218 deltas.append(
1218 (nodes[i], nullid, nullid, nullid, nullid, delta, 0, {}) 1219 (nodes[i], f.nullid, f.nullid, f.nullid, f.nullid, delta, 0, {})
1219 ) 1220 )
1220 1221
1221 with self._maketransactionfn() as tr: 1222 with self._maketransactionfn() as tr:
1222 newnodes = [] 1223 newnodes = []
1223 1224
1252 }, 1253 },
1253 b'', 1254 b'',
1254 ) 1255 )
1255 1256
1256 with self._maketransactionfn() as tr: 1257 with self._maketransactionfn() as tr:
1257 node0 = f.add(b'foo\n' * 30, None, tr, 0, nullid, nullid) 1258 node0 = f.add(b'foo\n' * 30, None, tr, 0, f.nullid, f.nullid)
1258 1259
1259 # The node value doesn't matter since we can't verify it. 1260 # The node value doesn't matter since we can't verify it.
1260 node1 = b'\xbb' * 20 1261 node1 = b'\xbb' * 20
1261 1262
1262 self._addrawrevisionfn( 1263 self._addrawrevisionfn(
1263 f, tr, node1, node0, nullid, 1, stored1, censored=True 1264 f, tr, node1, node0, f.nullid, 1, stored1, censored=True
1264 ) 1265 )
1265 1266
1266 delta = mdiff.textdiff(b'bar\n' * 30, (b'bar\n' * 30) + b'baz\n') 1267 delta = mdiff.textdiff(b'bar\n' * 30, (b'bar\n' * 30) + b'baz\n')
1267 deltas = [ 1268 deltas = [
1268 (b'\xcc' * 20, node1, nullid, b'\x01' * 20, node1, delta, 0, {}) 1269 (b'\xcc' * 20, node1, f.nullid, b'\x01' * 20, node1, delta, 0, {})
1269 ] 1270 ]
1270 1271
1271 with self._maketransactionfn() as tr: 1272 with self._maketransactionfn() as tr:
1272 with self.assertRaises(error.CensoredBaseError): 1273 with self.assertRaises(error.CensoredBaseError):
1273 f.addgroup(deltas, lambda x: 0, tr) 1274 f.addgroup(deltas, lambda x: 0, tr)
1274 1275
1275 def testcensorrevisionbasic(self): 1276 def testcensorrevisionbasic(self):
1276 f = self._makefilefn() 1277 f = self._makefilefn()
1277 1278
1278 with self._maketransactionfn() as tr: 1279 with self._maketransactionfn() as tr:
1279 node0 = f.add(b'foo\n' * 30, None, tr, 0, nullid, nullid) 1280 node0 = f.add(b'foo\n' * 30, None, tr, 0, f.nullid, f.nullid)
1280 node1 = f.add(b'foo\n' * 31, None, tr, 1, node0, nullid) 1281 node1 = f.add(b'foo\n' * 31, None, tr, 1, node0, f.nullid)
1281 node2 = f.add(b'foo\n' * 32, None, tr, 2, node1, nullid) 1282 node2 = f.add(b'foo\n' * 32, None, tr, 2, node1, f.nullid)
1282 1283
1283 with self._maketransactionfn() as tr: 1284 with self._maketransactionfn() as tr:
1284 f.censorrevision(tr, node1) 1285 f.censorrevision(tr, node1)
1285 1286
1286 self.assertEqual(len(f), 3) 1287 self.assertEqual(len(f), 3)
1296 # N revisions where none have parents. 1297 # N revisions where none have parents.
1297 f = self._makefilefn() 1298 f = self._makefilefn()
1298 1299
1299 with self._maketransactionfn() as tr: 1300 with self._maketransactionfn() as tr:
1300 for rev in range(10): 1301 for rev in range(10):
1301 f.add(b'%d' % rev, None, tr, rev, nullid, nullid) 1302 f.add(b'%d' % rev, None, tr, rev, f.nullid, f.nullid)
1302 1303
1303 for rev in range(10): 1304 for rev in range(10):
1304 self.assertEqual(f.getstrippoint(rev), (rev, set())) 1305 self.assertEqual(f.getstrippoint(rev), (rev, set()))
1305 1306
1306 def testgetstrippointlinear(self): 1307 def testgetstrippointlinear(self):
1307 # N revisions in a linear chain. 1308 # N revisions in a linear chain.
1308 f = self._makefilefn() 1309 f = self._makefilefn()
1309 1310
1310 with self._maketransactionfn() as tr: 1311 with self._maketransactionfn() as tr:
1311 p1 = nullid 1312 p1 = f.nullid
1312 1313
1313 for rev in range(10): 1314 for rev in range(10):
1314 f.add(b'%d' % rev, None, tr, rev, p1, nullid) 1315 f.add(b'%d' % rev, None, tr, rev, p1, f.nullid)
1315 1316
1316 for rev in range(10): 1317 for rev in range(10):
1317 self.assertEqual(f.getstrippoint(rev), (rev, set())) 1318 self.assertEqual(f.getstrippoint(rev), (rev, set()))
1318 1319
1319 def testgetstrippointmultipleheads(self): 1320 def testgetstrippointmultipleheads(self):
1320 f = self._makefilefn() 1321 f = self._makefilefn()
1321 1322
1322 with self._maketransactionfn() as tr: 1323 with self._maketransactionfn() as tr:
1323 node0 = f.add(b'0', None, tr, 0, nullid, nullid) 1324 node0 = f.add(b'0', None, tr, 0, f.nullid, f.nullid)
1324 node1 = f.add(b'1', None, tr, 1, node0, nullid) 1325 node1 = f.add(b'1', None, tr, 1, node0, f.nullid)
1325 f.add(b'2', None, tr, 2, node1, nullid) 1326 f.add(b'2', None, tr, 2, node1, f.nullid)
1326 f.add(b'3', None, tr, 3, node0, nullid) 1327 f.add(b'3', None, tr, 3, node0, f.nullid)
1327 f.add(b'4', None, tr, 4, node0, nullid) 1328 f.add(b'4', None, tr, 4, node0, f.nullid)
1328 1329
1329 for rev in range(5): 1330 for rev in range(5):
1330 self.assertEqual(f.getstrippoint(rev), (rev, set())) 1331 self.assertEqual(f.getstrippoint(rev), (rev, set()))
1331 1332
1332 def testgetstrippointearlierlinkrevs(self): 1333 def testgetstrippointearlierlinkrevs(self):
1333 f = self._makefilefn() 1334 f = self._makefilefn()
1334 1335
1335 with self._maketransactionfn() as tr: 1336 with self._maketransactionfn() as tr:
1336 node0 = f.add(b'0', None, tr, 0, nullid, nullid) 1337 node0 = f.add(b'0', None, tr, 0, f.nullid, f.nullid)
1337 f.add(b'1', None, tr, 10, node0, nullid) 1338 f.add(b'1', None, tr, 10, node0, f.nullid)
1338 f.add(b'2', None, tr, 5, node0, nullid) 1339 f.add(b'2', None, tr, 5, node0, f.nullid)
1339 1340
1340 self.assertEqual(f.getstrippoint(0), (0, set())) 1341 self.assertEqual(f.getstrippoint(0), (0, set()))
1341 self.assertEqual(f.getstrippoint(1), (1, set())) 1342 self.assertEqual(f.getstrippoint(1), (1, set()))
1342 self.assertEqual(f.getstrippoint(2), (1, set())) 1343 self.assertEqual(f.getstrippoint(2), (1, set()))
1343 self.assertEqual(f.getstrippoint(3), (1, set())) 1344 self.assertEqual(f.getstrippoint(3), (1, set()))
1360 1361
1361 def teststripall(self): 1362 def teststripall(self):
1362 f = self._makefilefn() 1363 f = self._makefilefn()
1363 1364
1364 with self._maketransactionfn() as tr: 1365 with self._maketransactionfn() as tr:
1365 p1 = nullid 1366 p1 = f.nullid
1366 for rev in range(10): 1367 for rev in range(10):
1367 p1 = f.add(b'%d' % rev, None, tr, rev, p1, nullid) 1368 p1 = f.add(b'%d' % rev, None, tr, rev, p1, f.nullid)
1368 1369
1369 self.assertEqual(len(f), 10) 1370 self.assertEqual(len(f), 10)
1370 1371
1371 with self._maketransactionfn() as tr: 1372 with self._maketransactionfn() as tr:
1372 f.strip(0, tr) 1373 f.strip(0, tr)
1375 1376
1376 def teststrippartial(self): 1377 def teststrippartial(self):
1377 f = self._makefilefn() 1378 f = self._makefilefn()
1378 1379
1379 with self._maketransactionfn() as tr: 1380 with self._maketransactionfn() as tr:
1380 f.add(b'0', None, tr, 0, nullid, nullid) 1381 f.add(b'0', None, tr, 0, f.nullid, f.nullid)
1381 node1 = f.add(b'1', None, tr, 5, nullid, nullid) 1382 node1 = f.add(b'1', None, tr, 5, f.nullid, f.nullid)
1382 node2 = f.add(b'2', None, tr, 10, nullid, nullid) 1383 node2 = f.add(b'2', None, tr, 10, f.nullid, f.nullid)
1383 1384
1384 self.assertEqual(len(f), 3) 1385 self.assertEqual(len(f), 3)
1385 1386
1386 with self._maketransactionfn() as tr: 1387 with self._maketransactionfn() as tr:
1387 f.strip(11, tr) 1388 f.strip(11, tr)