Mercurial > public > mercurial-scm > hg
diff mercurial/changegroup.py @ 36760:7bf80d9d9543
merge with stable
There were a handful of merge conflicts in the wire protocol code due
to significant refactoring in default. When resolving the conflicts,
I tried to produce the minimal number of changes to make the incoming
security patches work with the new code.
I will send some follow-up commits to get the security patches better
integrated into default.
author | Gregory Szorc <gregory.szorc@gmail.com> |
---|---|
date | Tue, 06 Mar 2018 14:32:14 -0800 |
parents | 2a5024109490 d031609b3cb7 |
children | 5bc7ff103081 |
line wrap: on
line diff
--- a/mercurial/changegroup.py Sun Mar 04 21:16:36 2018 -0500 +++ b/mercurial/changegroup.py Tue Mar 06 14:32:14 2018 -0800 @@ -774,6 +774,8 @@ progress(msgbundling, None) def deltaparent(self, revlog, rev, p1, p2, prev): + if not revlog.candelta(prev, rev): + raise error.ProgrammingError('cg1 should not be used in this case') return prev def revchunk(self, revlog, rev, prev, linknode): @@ -833,16 +835,19 @@ # expensive. The revlog caches should have prev cached, meaning # less CPU for changegroup generation. There is likely room to add # a flag and/or config option to control this behavior. - return prev + base = prev elif dp == nullrev: # revlog is configured to use full snapshot for a reason, # stick to full snapshot. - return nullrev + base = nullrev elif dp not in (p1, p2, prev): # Pick prev when we can't be sure remote has the base revision. return prev else: - return dp + base = dp + if base != nullrev and not revlog.candelta(base, rev): + base = nullrev + return base def builddeltaheader(self, node, p1n, p2n, basenode, linknode, flags): # Do nothing with flags, it is implicitly 0 in cg1 and cg2