##// END OF EJS Templates
debugcommands: add a `--paranoid` option to `debug-repair-issue-6528`...
Raphaël Gomès -
r48625:855463b5 stable
parent child Browse files
Show More
@@ -1470,6 +1470,12 b' def debugfileset(ui, repo, expr, **opts)'
1470 _(b'repair revisions listed in this report file'),
1470 _(b'repair revisions listed in this report file'),
1471 _(b'FILE'),
1471 _(b'FILE'),
1472 ),
1472 ),
1473 (
1474 b'',
1475 b'paranoid',
1476 False,
1477 _(b'check that both detection methods do the same thing'),
1478 ),
1473 ]
1479 ]
1474 + cmdutil.dryrunopts,
1480 + cmdutil.dryrunopts,
1475 )
1481 )
@@ -1491,6 +1497,11 b' def debug_repair_issue6528(ui, repo, **o'
1491 Note that this does *not* mean that this repairs future affected revisions,
1497 Note that this does *not* mean that this repairs future affected revisions,
1492 that needs a separate fix at the exchange level that hasn't been written yet
1498 that needs a separate fix at the exchange level that hasn't been written yet
1493 (as of 5.9rc0).
1499 (as of 5.9rc0).
1500
1501 There is a `--paranoid` flag to test that the fast implementation is correct
1502 by checking it against the slow implementation. Since this matter is quite
1503 urgent and testing every edge-case is probably quite costly, we use this
1504 method to test on large repositories as a fuzzing method of sorts.
1494 """
1505 """
1495 cmdutil.check_incompatible_arguments(
1506 cmdutil.check_incompatible_arguments(
1496 opts, 'to_report', ['from_report', 'dry_run']
1507 opts, 'to_report', ['from_report', 'dry_run']
@@ -1498,6 +1509,7 b' def debug_repair_issue6528(ui, repo, **o'
1498 dry_run = opts.get('dry_run')
1509 dry_run = opts.get('dry_run')
1499 to_report = opts.get('to_report')
1510 to_report = opts.get('to_report')
1500 from_report = opts.get('from_report')
1511 from_report = opts.get('from_report')
1512 paranoid = opts.get('paranoid')
1501 # TODO maybe add filelog pattern and revision pattern parameters to help
1513 # TODO maybe add filelog pattern and revision pattern parameters to help
1502 # narrow down the search for users that know what they're looking for?
1514 # narrow down the search for users that know what they're looking for?
1503
1515
@@ -1506,7 +1518,12 b' def debug_repair_issue6528(ui, repo, **o'
1506 raise error.Abort(_(msg))
1518 raise error.Abort(_(msg))
1507
1519
1508 rewrite.repair_issue6528(
1520 rewrite.repair_issue6528(
1509 ui, repo, dry_run=dry_run, to_report=to_report, from_report=from_report
1521 ui,
1522 repo,
1523 dry_run=dry_run,
1524 to_report=to_report,
1525 from_report=from_report,
1526 paranoid=paranoid,
1510 )
1527 )
1511
1528
1512
1529
@@ -672,7 +672,9 b' def _from_report(ui, repo, context, from'
672 _reorder_filelog_parents(repo, fl, sorted(to_fix))
672 _reorder_filelog_parents(repo, fl, sorted(to_fix))
673
673
674
674
675 def repair_issue6528(ui, repo, dry_run=False, to_report=None, from_report=None):
675 def repair_issue6528(
676 ui, repo, dry_run=False, to_report=None, from_report=None, paranoid=False
677 ):
676 from .. import store # avoid cycle
678 from .. import store # avoid cycle
677
679
678 @contextlib.contextmanager
680 @contextlib.contextmanager
@@ -719,6 +721,12 b' def repair_issue6528(ui, repo, dry_run=F'
719 affected = _is_revision_affected_fast(
721 affected = _is_revision_affected_fast(
720 repo, fl, filerev, metadata_cache
722 repo, fl, filerev, metadata_cache
721 )
723 )
724 if paranoid:
725 slow = _is_revision_affected(fl, filerev)
726 if slow != affected:
727 msg = _(b"paranoid check failed for '%s' at node %s")
728 node = binascii.hexlify(fl.node(filerev))
729 raise error.Abort(msg % (filename, node))
722 if affected:
730 if affected:
723 msg = b"found affected revision %d for filelog '%s'\n"
731 msg = b"found affected revision %d for filelog '%s'\n"
724 ui.warn(msg % (filerev, path))
732 ui.warn(msg % (filerev, path))
@@ -267,7 +267,7 b' Show all commands + options'
267 config: untrusted, exp-all-known, edit, local, source, shared, non-shared, global, template
267 config: untrusted, exp-all-known, edit, local, source, shared, non-shared, global, template
268 continue: dry-run
268 continue: dry-run
269 copy: forget, after, at-rev, force, include, exclude, dry-run
269 copy: forget, after, at-rev, force, include, exclude, dry-run
270 debug-repair-issue6528: to-report, from-report, dry-run
270 debug-repair-issue6528: to-report, from-report, paranoid, dry-run
271 debugancestor:
271 debugancestor:
272 debugantivirusrunning:
272 debugantivirusrunning:
273 debugapplystreamclonebundle:
273 debugapplystreamclonebundle:
@@ -220,6 +220,25 b' Dry-run the fix'
220 0 6 2a8d3833f2fb 000000000000 000000000000
220 0 6 2a8d3833f2fb 000000000000 000000000000
221 1 7 2a80419dfc31 2a8d3833f2fb 000000000000
221 1 7 2a80419dfc31 2a8d3833f2fb 000000000000
222
222
223 Test the --paranoid option
224 $ hg debug-repair-issue6528 --dry-run --paranoid
225 found affected revision 1 for filelog 'data/D.txt.i'
226 found affected revision 1 for filelog 'data/b.txt.i'
227 found affected revision 3 for filelog 'data/b.txt.i'
228 $ hg st
229 M D.txt
230 M b.txt
231 $ hg debugrevlogindex b.txt
232 rev linkrev nodeid p1 p2
233 0 2 05b806ebe5ea 000000000000 000000000000
234 1 3 a58b36ad6b65 05b806ebe5ea 000000000000
235 2 6 216a5fe8b8ed 000000000000 000000000000
236 3 7 ea4f2f2463cc 216a5fe8b8ed 000000000000
237 $ hg debugrevlogindex D.txt
238 rev linkrev nodeid p1 p2
239 0 6 2a8d3833f2fb 000000000000 000000000000
240 1 7 2a80419dfc31 2a8d3833f2fb 000000000000
241
223 Run the fix
242 Run the fix
224 $ hg debug-repair-issue6528
243 $ hg debug-repair-issue6528
225 found affected revision 1 for filelog 'data/D.txt.i'
244 found affected revision 1 for filelog 'data/D.txt.i'
General Comments 0
You need to be logged in to leave comments. Login now