mercurial/changegroup.py
changeset 49765 152d9c011bcd
parent 49611 35d4c2124073
child 50928 d718eddf01d9
equal deleted inserted replaced
49764:4188e75af983 49765:152d9c011bcd
   418         revmap,
   418         revmap,
   419         trp,
   419         trp,
   420         prog,
   420         prog,
   421         addrevisioncb=None,
   421         addrevisioncb=None,
   422         debug_info=None,
   422         debug_info=None,
       
   423         delta_base_reuse_policy=None,
   423     ):
   424     ):
   424         self.callback = prog.increment
   425         self.callback = prog.increment
   425         # no need to check for empty manifest group here:
   426         # no need to check for empty manifest group here:
   426         # if the result of the merge of 1 and 2 is the same in 3 and 4,
   427         # if the result of the merge of 1 and 2 is the same in 3 and 4,
   427         # no new manifest will be created and the manifest group will
   428         # no new manifest will be created and the manifest group will
   433             deltas,
   434             deltas,
   434             revmap,
   435             revmap,
   435             trp,
   436             trp,
   436             addrevisioncb=addrevisioncb,
   437             addrevisioncb=addrevisioncb,
   437             debug_info=debug_info,
   438             debug_info=debug_info,
       
   439             delta_base_reuse_policy=delta_base_reuse_policy,
   438         )
   440         )
   439         prog.complete()
   441         prog.complete()
   440         self.callback = None
   442         self.callback = None
   441 
   443 
   442     def apply(
   444     def apply(
   446         srctype,
   448         srctype,
   447         url,
   449         url,
   448         targetphase=phases.draft,
   450         targetphase=phases.draft,
   449         expectedtotal=None,
   451         expectedtotal=None,
   450         sidedata_categories=None,
   452         sidedata_categories=None,
       
   453         delta_base_reuse_policy=None,
   451     ):
   454     ):
   452         """Add the changegroup returned by source.read() to this repo.
   455         """Add the changegroup returned by source.read() to this repo.
   453         srctype is a string like 'push', 'pull', or 'unbundle'.  url is
   456         srctype is a string like 'push', 'pull', or 'unbundle'.  url is
   454         the URL of the repo where this changegroup is coming from.
   457         the URL of the repo where this changegroup is coming from.
   455 
   458 
   459         - fewer heads than before: -1-removed heads (-2..-n)
   462         - fewer heads than before: -1-removed heads (-2..-n)
   460         - number of heads stays the same: 1
   463         - number of heads stays the same: 1
   461 
   464 
   462         `sidedata_categories` is an optional set of the remote's sidedata wanted
   465         `sidedata_categories` is an optional set of the remote's sidedata wanted
   463         categories.
   466         categories.
       
   467 
       
   468         `delta_base_reuse_policy` is an optional argument, when set to a value
       
   469         it will control the way the delta contained into the bundle are reused
       
   470         when applied in the revlog.
       
   471 
       
   472         See `DELTA_BASE_REUSE_*` entry in mercurial.revlogutils.constants.
   464         """
   473         """
   465         repo = repo.unfiltered()
   474         repo = repo.unfiltered()
   466 
   475 
   467         debug_info = None
   476         debug_info = None
   468         if repo.ui.configbool(b'debug', b'unbundling-stats'):
   477         if repo.ui.configbool(b'debug', b'unbundling-stats'):
   541                 trp,
   550                 trp,
   542                 alwayscache=True,
   551                 alwayscache=True,
   543                 addrevisioncb=onchangelog,
   552                 addrevisioncb=onchangelog,
   544                 duplicaterevisioncb=ondupchangelog,
   553                 duplicaterevisioncb=ondupchangelog,
   545                 debug_info=debug_info,
   554                 debug_info=debug_info,
       
   555                 delta_base_reuse_policy=delta_base_reuse_policy,
   546             ):
   556             ):
   547                 repo.ui.develwarn(
   557                 repo.ui.develwarn(
   548                     b'applied empty changelog from changegroup',
   558                     b'applied empty changelog from changegroup',
   549                     config=b'warn-empty-changegroup',
   559                     config=b'warn-empty-changegroup',
   550                 )
   560                 )
   589                 revmap,
   599                 revmap,
   590                 trp,
   600                 trp,
   591                 progress,
   601                 progress,
   592                 addrevisioncb=on_manifest_rev,
   602                 addrevisioncb=on_manifest_rev,
   593                 debug_info=debug_info,
   603                 debug_info=debug_info,
       
   604                 delta_base_reuse_policy=delta_base_reuse_policy,
   594             )
   605             )
   595 
   606 
   596             needfiles = {}
   607             needfiles = {}
   597             if repo.ui.configbool(b'server', b'validate'):
   608             if repo.ui.configbool(b'server', b'validate'):
   598                 cl = repo.changelog
   609                 cl = repo.changelog
   626                 trp,
   637                 trp,
   627                 efiles,
   638                 efiles,
   628                 needfiles,
   639                 needfiles,
   629                 addrevisioncb=on_filelog_rev,
   640                 addrevisioncb=on_filelog_rev,
   630                 debug_info=debug_info,
   641                 debug_info=debug_info,
       
   642                 delta_base_reuse_policy=delta_base_reuse_policy,
   631             )
   643             )
   632 
   644 
   633             if sidedata_helpers:
   645             if sidedata_helpers:
   634                 if revlog_constants.KIND_CHANGELOG in sidedata_helpers[1]:
   646                 if revlog_constants.KIND_CHANGELOG in sidedata_helpers[1]:
   635                     cl.rewrite_sidedata(
   647                     cl.rewrite_sidedata(
   813         revmap,
   825         revmap,
   814         trp,
   826         trp,
   815         prog,
   827         prog,
   816         addrevisioncb=None,
   828         addrevisioncb=None,
   817         debug_info=None,
   829         debug_info=None,
       
   830         delta_base_reuse_policy=None,
   818     ):
   831     ):
   819         super(cg3unpacker, self)._unpackmanifests(
   832         super(cg3unpacker, self)._unpackmanifests(
   820             repo,
   833             repo,
   821             revmap,
   834             revmap,
   822             trp,
   835             trp,
   823             prog,
   836             prog,
   824             addrevisioncb=addrevisioncb,
   837             addrevisioncb=addrevisioncb,
   825             debug_info=debug_info,
   838             debug_info=debug_info,
       
   839             delta_base_reuse_policy=delta_base_reuse_policy,
   826         )
   840         )
   827         for chunkdata in iter(self.filelogheader, {}):
   841         for chunkdata in iter(self.filelogheader, {}):
   828             # If we get here, there are directory manifests in the changegroup
   842             # If we get here, there are directory manifests in the changegroup
   829             d = chunkdata[b"filename"]
   843             d = chunkdata[b"filename"]
   830             repo.ui.debug(b"adding %s revisions\n" % d)
   844             repo.ui.debug(b"adding %s revisions\n" % d)
   833                 deltas,
   847                 deltas,
   834                 revmap,
   848                 revmap,
   835                 trp,
   849                 trp,
   836                 addrevisioncb=addrevisioncb,
   850                 addrevisioncb=addrevisioncb,
   837                 debug_info=debug_info,
   851                 debug_info=debug_info,
       
   852                 delta_base_reuse_policy=delta_base_reuse_policy,
   838             ):
   853             ):
   839                 raise error.Abort(_(b"received dir revlog group is empty"))
   854                 raise error.Abort(_(b"received dir revlog group is empty"))
   840 
   855 
   841 
   856 
   842 class cg4unpacker(cg3unpacker):
   857 class cg4unpacker(cg3unpacker):
  2370     trp,
  2385     trp,
  2371     expectedfiles,
  2386     expectedfiles,
  2372     needfiles,
  2387     needfiles,
  2373     addrevisioncb=None,
  2388     addrevisioncb=None,
  2374     debug_info=None,
  2389     debug_info=None,
       
  2390     delta_base_reuse_policy=None,
  2375 ):
  2391 ):
  2376     revisions = 0
  2392     revisions = 0
  2377     files = 0
  2393     files = 0
  2378     progress = repo.ui.makeprogress(
  2394     progress = repo.ui.makeprogress(
  2379         _(b'files'), unit=_(b'files'), total=expectedfiles
  2395         _(b'files'), unit=_(b'files'), total=expectedfiles
  2391                 deltas,
  2407                 deltas,
  2392                 revmap,
  2408                 revmap,
  2393                 trp,
  2409                 trp,
  2394                 addrevisioncb=addrevisioncb,
  2410                 addrevisioncb=addrevisioncb,
  2395                 debug_info=debug_info,
  2411                 debug_info=debug_info,
       
  2412                 delta_base_reuse_policy=delta_base_reuse_policy,
  2396             )
  2413             )
  2397             if not added:
  2414             if not added:
  2398                 raise error.Abort(_(b"received file revlog group is empty"))
  2415                 raise error.Abort(_(b"received file revlog group is empty"))
  2399         except error.CensoredBaseError as e:
  2416         except error.CensoredBaseError as e:
  2400             raise error.Abort(_(b"received delta base is censored: %s") % e)
  2417             raise error.Abort(_(b"received delta base is censored: %s") % e)