mercurial/changegroup.py
changeset 47073 64cd1496bb70
parent 47012 d55b71393907
child 47075 5554aacd783f
equal deleted inserted replaced
47072:4c041c71ec01 47073:64cd1496bb70
    31     util,
    31     util,
    32 )
    32 )
    33 
    33 
    34 from .interfaces import repository
    34 from .interfaces import repository
    35 from .revlogutils import sidedata as sidedatamod
    35 from .revlogutils import sidedata as sidedatamod
       
    36 from .revlogutils import constants as revlog_constants
    36 
    37 
    37 _CHANGEGROUPV1_DELTA_HEADER = struct.Struct(b"20s20s20s20s")
    38 _CHANGEGROUPV1_DELTA_HEADER = struct.Struct(b"20s20s20s20s")
    38 _CHANGEGROUPV2_DELTA_HEADER = struct.Struct(b"20s20s20s20s20s")
    39 _CHANGEGROUPV2_DELTA_HEADER = struct.Struct(b"20s20s20s20s20s")
    39 _CHANGEGROUPV3_DELTA_HEADER = struct.Struct(b">20s20s20s20s20sH")
    40 _CHANGEGROUPV3_DELTA_HEADER = struct.Struct(b">20s20s20s20s20sH")
    40 
    41 
   383             # changesets.
   384             # changesets.
   384             progress = repo.ui.makeprogress(
   385             progress = repo.ui.makeprogress(
   385                 _(b'manifests'), unit=_(b'chunks'), total=changesets
   386                 _(b'manifests'), unit=_(b'chunks'), total=changesets
   386             )
   387             )
   387             on_manifest_rev = None
   388             on_manifest_rev = None
   388             if sidedata_helpers and b'manifest' in sidedata_helpers[1]:
   389             if sidedata_helpers:
   389 
   390                 if revlog_constants.KIND_MANIFESTLOG in sidedata_helpers[1]:
   390                 def on_manifest_rev(manifest, rev):
   391 
   391                     range = touched_manifests.get(manifest)
   392                     def on_manifest_rev(manifest, rev):
   392                     if not range:
   393                         range = touched_manifests.get(manifest)
   393                         touched_manifests[manifest] = (rev, rev)
   394                         if not range:
   394                     else:
   395                             touched_manifests[manifest] = (rev, rev)
   395                         assert rev == range[1] + 1
   396                         else:
   396                         touched_manifests[manifest] = (range[0], rev)
   397                             assert rev == range[1] + 1
       
   398                             touched_manifests[manifest] = (range[0], rev)
   397 
   399 
   398             self._unpackmanifests(
   400             self._unpackmanifests(
   399                 repo,
   401                 repo,
   400                 revmap,
   402                 revmap,
   401                 trp,
   403                 trp,
   414                     # store file nodes we must see
   416                     # store file nodes we must see
   415                     for f, n in pycompat.iteritems(mfest):
   417                     for f, n in pycompat.iteritems(mfest):
   416                         needfiles.setdefault(f, set()).add(n)
   418                         needfiles.setdefault(f, set()).add(n)
   417 
   419 
   418             on_filelog_rev = None
   420             on_filelog_rev = None
   419             if sidedata_helpers and b'filelog' in sidedata_helpers[1]:
   421             if sidedata_helpers:
   420 
   422                 if revlog_constants.KIND_FILELOG in sidedata_helpers[1]:
   421                 def on_filelog_rev(filelog, rev):
   423 
   422                     range = touched_filelogs.get(filelog)
   424                     def on_filelog_rev(filelog, rev):
   423                     if not range:
   425                         range = touched_filelogs.get(filelog)
   424                         touched_filelogs[filelog] = (rev, rev)
   426                         if not range:
   425                     else:
   427                             touched_filelogs[filelog] = (rev, rev)
   426                         assert rev == range[1] + 1
   428                         else:
   427                         touched_filelogs[filelog] = (range[0], rev)
   429                             assert rev == range[1] + 1
       
   430                             touched_filelogs[filelog] = (range[0], rev)
   428 
   431 
   429             # process the files
   432             # process the files
   430             repo.ui.status(_(b"adding file changes\n"))
   433             repo.ui.status(_(b"adding file changes\n"))
   431             newrevs, newfiles = _addchangegroupfiles(
   434             newrevs, newfiles = _addchangegroupfiles(
   432                 repo,
   435                 repo,
   437                 needfiles,
   440                 needfiles,
   438                 addrevisioncb=on_filelog_rev,
   441                 addrevisioncb=on_filelog_rev,
   439             )
   442             )
   440 
   443 
   441             if sidedata_helpers:
   444             if sidedata_helpers:
   442                 if b'changelog' in sidedata_helpers[1]:
   445                 if revlog_constants.KIND_CHANGELOG in sidedata_helpers[1]:
   443                     cl.rewrite_sidedata(sidedata_helpers, clstart, clend - 1)
   446                     cl.rewrite_sidedata(sidedata_helpers, clstart, clend - 1)
   444                 for mf, (startrev, endrev) in touched_manifests.items():
   447                 for mf, (startrev, endrev) in touched_manifests.items():
   445                     mf.rewrite_sidedata(sidedata_helpers, startrev, endrev)
   448                     mf.rewrite_sidedata(sidedata_helpers, startrev, endrev)
   446                 for fl, (startrev, endrev) in touched_filelogs.items():
   449                 for fl, (startrev, endrev) in touched_filelogs.items():
   447                     fl.rewrite_sidedata(sidedata_helpers, startrev, endrev)
   450                     fl.rewrite_sidedata(sidedata_helpers, startrev, endrev)