653 # The dirstate does not exist on an empty repo or a repo with no |
653 # The dirstate does not exist on an empty repo or a repo with no |
654 # revision checked out |
654 # revision checked out |
655 pass |
655 pass |
656 |
656 |
657 assert srcrepo.dirstate._use_dirstate_v2 == (old == b'v2') |
657 assert srcrepo.dirstate._use_dirstate_v2 == (old == b'v2') |
|
658 use_v2 = new == b'v2' |
|
659 if use_v2: |
|
660 # Write the requirements *before* upgrading |
|
661 scmutil.writereporequirements(srcrepo, upgrade_op.new_requirements) |
|
662 |
658 srcrepo.dirstate._map.preload() |
663 srcrepo.dirstate._map.preload() |
659 srcrepo.dirstate._use_dirstate_v2 = new == b'v2' |
664 srcrepo.dirstate._use_dirstate_v2 = use_v2 |
660 srcrepo.dirstate._map._use_dirstate_v2 = srcrepo.dirstate._use_dirstate_v2 |
665 srcrepo.dirstate._map._use_dirstate_v2 = use_v2 |
661 srcrepo.dirstate._dirty = True |
666 srcrepo.dirstate._dirty = True |
662 try: |
667 try: |
663 srcrepo.vfs.unlink(b'dirstate') |
668 srcrepo.vfs.unlink(b'dirstate') |
664 except FileNotFoundError: |
669 except FileNotFoundError: |
665 # The dirstate does not exist on an empty repo or a repo with no |
670 # The dirstate does not exist on an empty repo or a repo with no |
666 # revision checked out |
671 # revision checked out |
667 pass |
672 pass |
668 |
673 |
669 srcrepo.dirstate.write(None) |
674 srcrepo.dirstate.write(None) |
670 |
675 if not use_v2: |
671 scmutil.writereporequirements(srcrepo, upgrade_op.new_requirements) |
676 # Remove the v2 requirement *after* downgrading |
|
677 scmutil.writereporequirements(srcrepo, upgrade_op.new_requirements) |
672 |
678 |
673 |
679 |
674 def upgrade_tracked_hint(ui, srcrepo, upgrade_op, add): |
680 def upgrade_tracked_hint(ui, srcrepo, upgrade_op, add): |
675 if add: |
681 if add: |
676 srcrepo.dirstate._use_tracked_hint = True |
682 srcrepo.dirstate._use_tracked_hint = True |