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) |