1455 ui.write(_("depth(a): %d depth(b): %d\n") % (pa._depth, pb._depth)) |
1455 ui.write(_("depth(a): %d depth(b): %d\n") % (pa._depth, pb._depth)) |
1456 ui.write(_("delta: %d hdist: %d distance: %d relation: %s\n") % |
1456 ui.write(_("delta: %d hdist: %d distance: %d relation: %s\n") % |
1457 (abs(pa._depth - pb._depth), pvec._hamming(pa._vec, pb._vec), |
1457 (abs(pa._depth - pb._depth), pvec._hamming(pa._vec, pb._vec), |
1458 pa.distance(pb), rel)) |
1458 pa.distance(pb), rel)) |
1459 |
1459 |
|
1460 @command('debugrebuilddirstate|debugrebuildstate', |
|
1461 [('r', 'rev', '', _('revision to rebuild to'), _('REV')), |
|
1462 ('', 'minimal', None, _('only rebuild files that are inconsistent with ' |
|
1463 'the working copy parent')), |
|
1464 ], |
|
1465 _('[-r REV]')) |
|
1466 def debugrebuilddirstate(ui, repo, rev, **opts): |
|
1467 """rebuild the dirstate as it would look like for the given revision |
|
1468 |
|
1469 If no revision is specified the first current parent will be used. |
|
1470 |
|
1471 The dirstate will be set to the files of the given revision. |
|
1472 The actual working directory content or existing dirstate |
|
1473 information such as adds or removes is not considered. |
|
1474 |
|
1475 ``minimal`` will only rebuild the dirstate status for files that claim to be |
|
1476 tracked but are not in the parent manifest, or that exist in the parent |
|
1477 manifest but are not in the dirstate. It will not change adds, removes, or |
|
1478 modified files that are in the working copy parent. |
|
1479 |
|
1480 One use of this command is to make the next :hg:`status` invocation |
|
1481 check the actual file content. |
|
1482 """ |
|
1483 ctx = scmutil.revsingle(repo, rev) |
|
1484 with repo.wlock(): |
|
1485 dirstate = repo.dirstate |
|
1486 changedfiles = None |
|
1487 # See command doc for what minimal does. |
|
1488 if opts.get('minimal'): |
|
1489 manifestfiles = set(ctx.manifest().keys()) |
|
1490 dirstatefiles = set(dirstate) |
|
1491 manifestonly = manifestfiles - dirstatefiles |
|
1492 dsonly = dirstatefiles - manifestfiles |
|
1493 dsnotadded = set(f for f in dsonly if dirstate[f] != 'a') |
|
1494 changedfiles = manifestonly | dsnotadded |
|
1495 |
|
1496 dirstate.rebuild(ctx.node(), ctx.manifest(), changedfiles) |
|
1497 |
1460 @command('debugupgraderepo', [ |
1498 @command('debugupgraderepo', [ |
1461 ('o', 'optimize', [], _('extra optimization to perform'), _('NAME')), |
1499 ('o', 'optimize', [], _('extra optimization to perform'), _('NAME')), |
1462 ('', 'run', False, _('performs an upgrade')), |
1500 ('', 'run', False, _('performs an upgrade')), |
1463 ]) |
1501 ]) |
1464 def debugupgraderepo(ui, repo, run=False, optimize=None): |
1502 def debugupgraderepo(ui, repo, run=False, optimize=None): |