241 |
241 |
242 def _processflags(self, text, flags, operation, raw=False): |
242 def _processflags(self, text, flags, operation, raw=False): |
243 if flags == 0: |
243 if flags == 0: |
244 return text, True |
244 return text, True |
245 |
245 |
|
246 if flags & ~revlog.REVIDX_KNOWN_FLAGS: |
|
247 raise error.RevlogError(_("incompatible revision flag '%#x'") % |
|
248 (flags & ~revlog.REVIDX_KNOWN_FLAGS)) |
|
249 |
246 validatehash = True |
250 validatehash = True |
247 # Depending on the operation (read or write), the order might be |
251 # Depending on the operation (read or write), the order might be |
248 # reversed due to non-commutative transforms. |
252 # reversed due to non-commutative transforms. |
249 orderedflags = revlog.REVIDX_FLAGS_ORDER |
253 orderedflags = revlog.REVIDX_FLAGS_ORDER |
250 if operation == 'write': |
254 if operation == 'write': |
403 # Required by verify. |
407 # Required by verify. |
404 def checksize(self): |
408 def checksize(self): |
405 return 0, 0 |
409 return 0, 0 |
406 |
410 |
407 def add(self, text, meta, transaction, linkrev, p1, p2): |
411 def add(self, text, meta, transaction, linkrev, p1, p2): |
408 transaction.addbackup(self._indexpath) |
|
409 |
|
410 if meta or text.startswith(b'\1\n'): |
412 if meta or text.startswith(b'\1\n'): |
411 text = filelog.packmeta(meta, text) |
413 text = filelog.packmeta(meta, text) |
412 |
414 |
413 return self.addrevision(text, transaction, linkrev, p1, p2) |
415 return self.addrevision(text, transaction, linkrev, p1, p2) |
414 |
416 |
415 def addrevision(self, text, transaction, linkrev, p1, p2, node=None, |
417 def addrevision(self, text, transaction, linkrev, p1, p2, node=None, |
416 flags=0): |
418 flags=revlog.REVIDX_DEFAULT_FLAGS, cachedelta=None): |
417 validatenode(p1) |
419 validatenode(p1) |
418 validatenode(p2) |
420 validatenode(p2) |
419 |
421 |
420 if flags: |
422 if flags: |
421 node = node or revlog.hash(text, p1, p2) |
423 node = node or revlog.hash(text, p1, p2) |
428 return node |
430 return node |
429 |
431 |
430 if validatehash: |
432 if validatehash: |
431 self.checkhash(rawtext, node, p1=p1, p2=p2) |
433 self.checkhash(rawtext, node, p1=p1, p2=p2) |
432 |
434 |
|
435 return self._addrawrevision(node, rawtext, transaction, linkrev, p1, p2, |
|
436 flags) |
|
437 |
|
438 def _addrawrevision(self, node, rawtext, transaction, link, p1, p2, flags): |
|
439 transaction.addbackup(self._indexpath) |
|
440 |
433 path = b'/'.join([self._storepath, hex(node)]) |
441 path = b'/'.join([self._storepath, hex(node)]) |
434 |
442 |
435 self._svfs.write(path, text) |
443 self._svfs.write(path, rawtext) |
436 |
444 |
437 self._indexdata.append({ |
445 self._indexdata.append({ |
438 b'node': node, |
446 b'node': node, |
439 b'p1': p1, |
447 b'p1': p1, |
440 b'p2': p2, |
448 b'p2': p2, |
441 b'linkrev': linkrev, |
449 b'linkrev': link, |
442 b'flags': flags, |
450 b'flags': flags, |
443 }) |
451 }) |
444 |
452 |
445 self._reflectindexupdate() |
453 self._reflectindexupdate() |
446 |
454 |
455 |
463 |
456 transaction.addbackup(self._indexpath) |
464 transaction.addbackup(self._indexpath) |
457 |
465 |
458 for node, p1, p2, linknode, deltabase, delta, flags in deltas: |
466 for node, p1, p2, linknode, deltabase, delta, flags in deltas: |
459 linkrev = linkmapper(linknode) |
467 linkrev = linkmapper(linknode) |
|
468 flags = flags or revlog.REVIDX_DEFAULT_FLAGS |
460 |
469 |
461 nodes.append(node) |
470 nodes.append(node) |
462 |
471 |
463 if node in self._indexbynode: |
472 if node in self._indexbynode: |
464 continue |
473 continue |
467 if deltabase == nullid: |
476 if deltabase == nullid: |
468 text = mdiff.patch(b'', delta) |
477 text = mdiff.patch(b'', delta) |
469 else: |
478 else: |
470 text = mdiff.patch(self.revision(deltabase), delta) |
479 text = mdiff.patch(self.revision(deltabase), delta) |
471 |
480 |
472 self.addrevision(text, transaction, linkrev, p1, p2, flags) |
481 self._addrawrevision(node, text, transaction, linkrev, p1, p2, |
|
482 flags) |
473 |
483 |
474 if addrevisioncb: |
484 if addrevisioncb: |
475 addrevisioncb(self, node) |
485 addrevisioncb(self, node) |
476 |
486 |
477 return nodes |
487 return nodes |