##// END OF EJS Templates
changegroup: document the cases where reordering complicates linkrevs
Martin von Zweigbergk -
r24977:4289383c default
parent child Browse files
Show More
@@ -385,6 +385,21 b' class cg1packer(object):'
385 yield chunk
385 yield chunk
386 self._verbosenote(_('%8.i (changelog)\n') % size)
386 self._verbosenote(_('%8.i (changelog)\n') % size)
387
387
388 # We need to make sure that the linkrev in the changegroup refers to
389 # the first changeset that introduced the manifest or file revision.
390 # The fastpath is usually safer than the slowpath, because the filelogs
391 # are walked in revlog order.
392 #
393 # When taking the slowpath with reorder=None and the manifest revlog
394 # uses generaldelta, the manifest may be walked in the "wrong" order.
395 # Without 'clrevorder', we would get an incorrect linkrev (see fix in
396 # cc0ff93d0c0c).
397 #
398 # When taking the fastpath, we are only vulnerable to reordering
399 # of the changelog itself. The changelog never uses generaldelta, so
400 # it is only reordered when reorder=True. To handle this case, we
401 # simply take the slowpath, which already has the 'clrevorder' logic.
402 # This was also fixed in cc0ff93d0c0c.
388 fastpathlinkrev = fastpathlinkrev and not self._reorder
403 fastpathlinkrev = fastpathlinkrev and not self._reorder
389 # Callback for the manifest, used to collect linkrevs for filelog
404 # Callback for the manifest, used to collect linkrevs for filelog
390 # revisions.
405 # revisions.
General Comments 0
You need to be logged in to leave comments. Login now