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