Mercurial > hg
comparison mercurial/upgrade.py @ 42137:d086ba387ae8
upgrade: support upgrade to/from zstd storage (issue6088)
Now that we have an official config option for a shiny format improvement, we
better make it simple to migrate to/from it.
author | Pierre-Yves David <pierre-yves.david@octobus.net> |
---|---|
date | Fri, 01 Feb 2019 15:51:02 +0100 |
parents | 10a6725dca6e |
children | 896fb9deeaf8 |
comparison
equal
deleted
inserted
replaced
42136:10a6725dca6e | 42137:d086ba387ae8 |
---|---|
22 scmutil, | 22 scmutil, |
23 util, | 23 util, |
24 vfs as vfsmod, | 24 vfs as vfsmod, |
25 ) | 25 ) |
26 | 26 |
27 from .utils import ( | |
28 compression, | |
29 ) | |
30 | |
27 def requiredsourcerequirements(repo): | 31 def requiredsourcerequirements(repo): |
28 """Obtain requirements required to be present to upgrade a repo. | 32 """Obtain requirements required to be present to upgrade a repo. |
29 | 33 |
30 An upgrade will not be allowed if the repository doesn't have the | 34 An upgrade will not be allowed if the repository doesn't have the |
31 requirements returned by this function. | 35 requirements returned by this function. |
59 | 63 |
60 If an upgrade were to create a repository that dropped a requirement, | 64 If an upgrade were to create a repository that dropped a requirement, |
61 the dropped requirement must appear in the returned set for the upgrade | 65 the dropped requirement must appear in the returned set for the upgrade |
62 to be allowed. | 66 to be allowed. |
63 """ | 67 """ |
64 return { | 68 supported = { |
65 localrepo.SPARSEREVLOG_REQUIREMENT, | 69 localrepo.SPARSEREVLOG_REQUIREMENT, |
66 } | 70 } |
71 for name in compression.compengines: | |
72 engine = compression.compengines[name] | |
73 if engine.available() and engine.revlogheader(): | |
74 supported.add(b'exp-compression-%s' % name) | |
75 if engine.name() == 'zstd': | |
76 supported.add(b'revlog-compression-zstd') | |
77 return supported | |
67 | 78 |
68 def supporteddestrequirements(repo): | 79 def supporteddestrequirements(repo): |
69 """Obtain requirements that upgrade supports in the destination. | 80 """Obtain requirements that upgrade supports in the destination. |
70 | 81 |
71 If the result of the upgrade would create requirements not in this set, | 82 If the result of the upgrade would create requirements not in this set, |
72 the upgrade is disallowed. | 83 the upgrade is disallowed. |
73 | 84 |
74 Extensions should monkeypatch this to add their custom requirements. | 85 Extensions should monkeypatch this to add their custom requirements. |
75 """ | 86 """ |
76 return { | 87 supported = { |
77 'dotencode', | 88 'dotencode', |
78 'fncache', | 89 'fncache', |
79 'generaldelta', | 90 'generaldelta', |
80 'revlogv1', | 91 'revlogv1', |
81 'store', | 92 'store', |
82 localrepo.SPARSEREVLOG_REQUIREMENT, | 93 localrepo.SPARSEREVLOG_REQUIREMENT, |
83 } | 94 } |
95 for name in compression.compengines: | |
96 engine = compression.compengines[name] | |
97 if engine.available() and engine.revlogheader(): | |
98 supported.add(b'exp-compression-%s' % name) | |
99 if engine.name() == 'zstd': | |
100 supported.add(b'revlog-compression-zstd') | |
101 return supported | |
84 | 102 |
85 def allowednewrequirements(repo): | 103 def allowednewrequirements(repo): |
86 """Obtain requirements that can be added to a repository during upgrade. | 104 """Obtain requirements that can be added to a repository during upgrade. |
87 | 105 |
88 This is used to disallow proposed requirements from being added when | 106 This is used to disallow proposed requirements from being added when |
90 | 108 |
91 We use a list of allowed requirement additions instead of a list of known | 109 We use a list of allowed requirement additions instead of a list of known |
92 bad additions because the whitelist approach is safer and will prevent | 110 bad additions because the whitelist approach is safer and will prevent |
93 future, unknown requirements from accidentally being added. | 111 future, unknown requirements from accidentally being added. |
94 """ | 112 """ |
95 return { | 113 supported = { |
96 'dotencode', | 114 'dotencode', |
97 'fncache', | 115 'fncache', |
98 'generaldelta', | 116 'generaldelta', |
99 localrepo.SPARSEREVLOG_REQUIREMENT, | 117 localrepo.SPARSEREVLOG_REQUIREMENT, |
100 } | 118 } |
119 for name in compression.compengines: | |
120 engine = compression.compengines[name] | |
121 if engine.available() and engine.revlogheader(): | |
122 supported.add(b'exp-compression-%s' % name) | |
123 if engine.name() == 'zstd': | |
124 supported.add(b'revlog-compression-zstd') | |
125 return supported | |
101 | 126 |
102 def preservedrequirements(repo): | 127 def preservedrequirements(repo): |
103 return set() | 128 return set() |
104 | 129 |
105 deficiency = 'deficiency' | 130 deficiency = 'deficiency' |