mercurial/changegroup.py
changeset 36760 7bf80d9d9543
parent 36737 2a5024109490
parent 36743 d031609b3cb7
child 36835 5bc7ff103081
equal deleted inserted replaced
36747:4c71a26a4009 36760:7bf80d9d9543
   772                     yield chunk
   772                     yield chunk
   773                 self._verbosenote(_('%8.i  %s\n') % (size, fname))
   773                 self._verbosenote(_('%8.i  %s\n') % (size, fname))
   774         progress(msgbundling, None)
   774         progress(msgbundling, None)
   775 
   775 
   776     def deltaparent(self, revlog, rev, p1, p2, prev):
   776     def deltaparent(self, revlog, rev, p1, p2, prev):
       
   777         if not revlog.candelta(prev, rev):
       
   778             raise error.ProgrammingError('cg1 should not be used in this case')
   777         return prev
   779         return prev
   778 
   780 
   779     def revchunk(self, revlog, rev, prev, linknode):
   781     def revchunk(self, revlog, rev, prev, linknode):
   780         node = revlog.node(rev)
   782         node = revlog.node(rev)
   781         p1, p2 = revlog.parentrevs(rev)
   783         p1, p2 = revlog.parentrevs(rev)
   831             # be smaller in the common case. However, computing a delta against
   833             # be smaller in the common case. However, computing a delta against
   832             # p1 may require resolving the raw text of p1, which could be
   834             # p1 may require resolving the raw text of p1, which could be
   833             # expensive. The revlog caches should have prev cached, meaning
   835             # expensive. The revlog caches should have prev cached, meaning
   834             # less CPU for changegroup generation. There is likely room to add
   836             # less CPU for changegroup generation. There is likely room to add
   835             # a flag and/or config option to control this behavior.
   837             # a flag and/or config option to control this behavior.
   836             return prev
   838             base = prev
   837         elif dp == nullrev:
   839         elif dp == nullrev:
   838             # revlog is configured to use full snapshot for a reason,
   840             # revlog is configured to use full snapshot for a reason,
   839             # stick to full snapshot.
   841             # stick to full snapshot.
   840             return nullrev
   842             base = nullrev
   841         elif dp not in (p1, p2, prev):
   843         elif dp not in (p1, p2, prev):
   842             # Pick prev when we can't be sure remote has the base revision.
   844             # Pick prev when we can't be sure remote has the base revision.
   843             return prev
   845             return prev
   844         else:
   846         else:
   845             return dp
   847             base = dp
       
   848         if base != nullrev and not revlog.candelta(base, rev):
       
   849             base = nullrev
       
   850         return base
   846 
   851 
   847     def builddeltaheader(self, node, p1n, p2n, basenode, linknode, flags):
   852     def builddeltaheader(self, node, p1n, p2n, basenode, linknode, flags):
   848         # Do nothing with flags, it is implicitly 0 in cg1 and cg2
   853         # Do nothing with flags, it is implicitly 0 in cg1 and cg2
   849         return struct.pack(self.deltaheader, node, p1n, p2n, basenode, linknode)
   854         return struct.pack(self.deltaheader, node, p1n, p2n, basenode, linknode)
   850 
   855