comparison mercurial/changegroup.py @ 24190:903c7e8c97ad

changegroup: emit full-replacement deltas if either revision is censored To ensure that exchanged deltas in the presence of censored revisions can always be applied to the recipient repository, the deltas must replace the entire base text. To make this restriction reasonably enforceable, the delta must do so with a single patch operation. For background and broader design of the censorship feature, see: http://mercurial.selenic.com/wiki/CensorPlan
author Mike Edgar <adgar@google.com>
date Wed, 21 Jan 2015 22:09:32 -0500
parents d8e0c591781c
children e0e28e910fa3
comparison
equal deleted inserted replaced
24189:8b4b9ee6001a 24190:903c7e8c97ad
480 node = revlog.node(rev) 480 node = revlog.node(rev)
481 p1, p2 = revlog.parentrevs(rev) 481 p1, p2 = revlog.parentrevs(rev)
482 base = self.deltaparent(revlog, rev, p1, p2, prev) 482 base = self.deltaparent(revlog, rev, p1, p2, prev)
483 483
484 prefix = '' 484 prefix = ''
485 if base == nullrev: 485 if revlog.iscensored(base) or revlog.iscensored(rev):
486 try:
487 delta = revlog.revision(node)
488 except error.CensoredNodeError, e:
489 delta = e.tombstone
490 if base == nullrev:
491 prefix = mdiff.trivialdiffheader(len(delta))
492 else:
493 baselen = revlog.rawsize(base)
494 prefix = mdiff.replacediffheader(baselen, len(delta))
495 elif base == nullrev:
486 delta = revlog.revision(node) 496 delta = revlog.revision(node)
487 prefix = mdiff.trivialdiffheader(len(delta)) 497 prefix = mdiff.trivialdiffheader(len(delta))
488 else: 498 else:
489 delta = revlog.revdiff(base, rev) 499 delta = revlog.revdiff(base, rev)
490 p1n, p2n = revlog.parents(node) 500 p1n, p2n = revlog.parents(node)