comparison mercurial/upgrade.py @ 48444:6e045497b20b

upgrade: move the revlog selection code lower down the chain We about about to make revlog section smarter. Moving the code around will make the next changesets clearer. Differential Revision: https://phab.mercurial-scm.org/D11867
author Pierre-Yves David <pierre-yves.david@octobus.net>
date Mon, 06 Dec 2021 11:59:48 +0100
parents 16c18d5e5dc8
children e7420f75d90d
comparison
equal deleted inserted replaced
48443:112184713852 48444:6e045497b20b
43 """Upgrade a repository in place.""" 43 """Upgrade a repository in place."""
44 if optimize is None: 44 if optimize is None:
45 optimize = {} 45 optimize = {}
46 repo = repo.unfiltered() 46 repo = repo.unfiltered()
47 47
48 revlogs = set(upgrade_engine.UPGRADE_ALL_REVLOGS)
49 specentries = ( 48 specentries = (
50 (upgrade_engine.UPGRADE_CHANGELOG, changelog), 49 (upgrade_engine.UPGRADE_CHANGELOG, changelog),
51 (upgrade_engine.UPGRADE_MANIFEST, manifest), 50 (upgrade_engine.UPGRADE_MANIFEST, manifest),
52 (upgrade_engine.UPGRADE_FILELOGS, filelogs), 51 (upgrade_engine.UPGRADE_FILELOGS, filelogs),
53 ) 52 )
53
54 # Ensure the repository can be upgraded.
55 upgrade_actions.check_source_requirements(repo)
56
57 default_options = localrepo.defaultcreateopts(repo.ui)
58 newreqs = localrepo.newreporequirements(repo.ui, default_options)
59 newreqs.update(upgrade_actions.preservedrequirements(repo))
60
61 upgrade_actions.check_requirements_changes(repo, newreqs)
62
63 # Find and validate all improvements that can be made.
64 alloptimizations = upgrade_actions.findoptimizations(repo)
65
66 # Apply and Validate arguments.
67 optimizations = []
68 for o in alloptimizations:
69 if o.name in optimize:
70 optimizations.append(o)
71 optimize.discard(o.name)
72
73 if optimize: # anything left is unknown
74 raise error.Abort(
75 _(b'unknown optimization action requested: %s')
76 % b', '.join(sorted(optimize)),
77 hint=_(b'run without arguments to see valid optimizations'),
78 )
79
80 format_upgrades = upgrade_actions.find_format_upgrades(repo)
81 up_actions = upgrade_actions.determine_upgrade_actions(
82 repo, format_upgrades, optimizations, repo.requirements, newreqs
83 )
84 removed_actions = upgrade_actions.find_format_downgrades(repo)
85
86 removedreqs = repo.requirements - newreqs
87 addedreqs = newreqs - repo.requirements
88
89 # check if we need to touch revlog and if so, which ones
90
91 revlogs = set(upgrade_engine.UPGRADE_ALL_REVLOGS)
54 specified = [(y, x) for (y, x) in specentries if x is not None] 92 specified = [(y, x) for (y, x) in specentries if x is not None]
55 if specified: 93 if specified:
56 # we have some limitation on revlogs to be recloned 94 # we have some limitation on revlogs to be recloned
57 if any(x for y, x in specified): 95 if any(x for y, x in specified):
58 revlogs = set() 96 revlogs = set()
62 else: 100 else:
63 # none are enabled 101 # none are enabled
64 for upgrade, __ in specified: 102 for upgrade, __ in specified:
65 revlogs.discard(upgrade) 103 revlogs.discard(upgrade)
66 104
67 # Ensure the repository can be upgraded. 105 # check the consistency of the revlog selection with the planned action
68 upgrade_actions.check_source_requirements(repo)
69
70 default_options = localrepo.defaultcreateopts(repo.ui)
71 newreqs = localrepo.newreporequirements(repo.ui, default_options)
72 newreqs.update(upgrade_actions.preservedrequirements(repo))
73
74 upgrade_actions.check_requirements_changes(repo, newreqs)
75
76 # Find and validate all improvements that can be made.
77 alloptimizations = upgrade_actions.findoptimizations(repo)
78
79 # Apply and Validate arguments.
80 optimizations = []
81 for o in alloptimizations:
82 if o.name in optimize:
83 optimizations.append(o)
84 optimize.discard(o.name)
85
86 if optimize: # anything left is unknown
87 raise error.Abort(
88 _(b'unknown optimization action requested: %s')
89 % b', '.join(sorted(optimize)),
90 hint=_(b'run without arguments to see valid optimizations'),
91 )
92
93 format_upgrades = upgrade_actions.find_format_upgrades(repo)
94 up_actions = upgrade_actions.determine_upgrade_actions(
95 repo, format_upgrades, optimizations, repo.requirements, newreqs
96 )
97 removed_actions = upgrade_actions.find_format_downgrades(repo)
98
99 removedreqs = repo.requirements - newreqs
100 addedreqs = newreqs - repo.requirements
101 106
102 if revlogs != upgrade_engine.UPGRADE_ALL_REVLOGS: 107 if revlogs != upgrade_engine.UPGRADE_ALL_REVLOGS:
103 incompatible = upgrade_actions.RECLONES_REQUIREMENTS & ( 108 incompatible = upgrade_actions.RECLONES_REQUIREMENTS & (
104 removedreqs | addedreqs 109 removedreqs | addedreqs
105 ) 110 )