annotate mercurial/upgrade_utils/actions.py @ 47277:ed0d54b20c5b

dirstate-v2: Add a new experimental `exp-dirstate-v2` repository requirement This requirement is added to `.hg/requires` when creating a new repository if Rust extensions are enabled and the `format.exp-dirstate-v2` config is set. Nothing yet changes based on this requirement, but its mere presence affects some tests (for example if they print `.hg/requires`). The next two changesets update tests’ expected outputs accordingly. There is no CI so far that enables this configuration. Differential Revision: https://phab.mercurial-scm.org/D10716
author Simon Sapin <simon.sapin@octobus.net>
date Wed, 19 May 2021 13:14:59 +0200
parents 60668fce06d0
children e985a36c2aa3
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
31894
9379689b6c10 upgrade: update the header comment
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 31893
diff changeset
1 # upgrade.py - functions for in place upgrade of Mercurial repository
4702
18e91c9def0c strip: move strip code to a new repair module
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
2 #
31895
783b4c9bd5f5 upgrade: update the copyright statement
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 31894
diff changeset
3 # Copyright (c) 2016-present, Gregory Szorc
4702
18e91c9def0c strip: move strip code to a new repair module
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
4 #
8225
46293a0c7e9f updated license to be explicit about GPL version 2
Martin Geisler <mg@lazybytes.net>
parents: 8073
diff changeset
5 # This software may be used and distributed according to the terms of the
10263
25e572394f5c Update license to GPLv2+
Matt Mackall <mpm@selenic.com>
parents: 9150
diff changeset
6 # GNU General Public License version 2 or any later version.
4702
18e91c9def0c strip: move strip code to a new repair module
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
7
25970
d1419cfbd4f4 repair: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25874
diff changeset
8 from __future__ import absolute_import
d1419cfbd4f4 repair: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25874
diff changeset
9
46047
4b89cf08d8dc upgrade: split definition and management of the actions from the main code
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46046
diff changeset
10 from ..i18n import _
4b89cf08d8dc upgrade: split definition and management of the actions from the main code
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46046
diff changeset
11 from .. import (
46048
f4f956342cf1 upgrade: move requirements checking in a dedicated function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46047
diff changeset
12 error,
31893
165428b05fca upgrade: import 'localrepo' globally
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 31875
diff changeset
13 localrepo,
47006
e050efe97fbe typing: enable pytype processing on mercurial/upgrade_utils/actions.py
Matt Harbison <matt_harbison@yahoo.com>
parents: 46903
diff changeset
14 pycompat,
45372
77b8588dd84e requirements: introduce new requirements related module
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45371
diff changeset
15 requirements,
46215
82f3ee1a505f actions: store deltareuse mode of whole operation in UpgradeOperation
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46213
diff changeset
16 revlog,
25970
d1419cfbd4f4 repair: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25874
diff changeset
17 util,
46046
f105c49e89cd upgrade: split actual upgrade code away from the main module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46035
diff changeset
18 )
f105c49e89cd upgrade: split actual upgrade code away from the main module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46035
diff changeset
19
46047
4b89cf08d8dc upgrade: split definition and management of the actions from the main code
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46046
diff changeset
20 from ..utils import compression
42137
d086ba387ae8 upgrade: support upgrade to/from zstd storage (issue6088)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42136
diff changeset
21
47006
e050efe97fbe typing: enable pytype processing on mercurial/upgrade_utils/actions.py
Matt Harbison <matt_harbison@yahoo.com>
parents: 46903
diff changeset
22 if pycompat.TYPE_CHECKING:
e050efe97fbe typing: enable pytype processing on mercurial/upgrade_utils/actions.py
Matt Harbison <matt_harbison@yahoo.com>
parents: 46903
diff changeset
23 from typing import (
e050efe97fbe typing: enable pytype processing on mercurial/upgrade_utils/actions.py
Matt Harbison <matt_harbison@yahoo.com>
parents: 46903
diff changeset
24 List,
e050efe97fbe typing: enable pytype processing on mercurial/upgrade_utils/actions.py
Matt Harbison <matt_harbison@yahoo.com>
parents: 46903
diff changeset
25 Type,
e050efe97fbe typing: enable pytype processing on mercurial/upgrade_utils/actions.py
Matt Harbison <matt_harbison@yahoo.com>
parents: 46903
diff changeset
26 )
e050efe97fbe typing: enable pytype processing on mercurial/upgrade_utils/actions.py
Matt Harbison <matt_harbison@yahoo.com>
parents: 46903
diff changeset
27
e050efe97fbe typing: enable pytype processing on mercurial/upgrade_utils/actions.py
Matt Harbison <matt_harbison@yahoo.com>
parents: 46903
diff changeset
28
42832
a3c2ffcd266f upgrade: make sure we reclone all revlogs when updating to some format
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42831
diff changeset
29 # list of requirements that request a clone of all revlog if added/removed
a3c2ffcd266f upgrade: make sure we reclone all revlogs when updating to some format
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42831
diff changeset
30 RECLONES_REQUIREMENTS = {
46627
f4c325bf80fc requirements: also add a generaldelta constant
Raphaël Gomès <rgomes@octobus.net>
parents: 46626
diff changeset
31 requirements.GENERALDELTA_REQUIREMENT,
45373
d7dcc75a3eae localrepo: move requirements constant to requirements module
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45372
diff changeset
32 requirements.SPARSEREVLOG_REQUIREMENT,
47232
33096e77598c revlogv2: mark revlogv2 as requires a full upgrade
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47229
diff changeset
33 requirements.REVLOGV2_REQUIREMENT,
47264
60668fce06d0 changelogv2: allow upgrade from and to this format
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47263
diff changeset
34 requirements.CHANGELOGV2_REQUIREMENT,
42832
a3c2ffcd266f upgrade: make sure we reclone all revlogs when updating to some format
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42831
diff changeset
35 }
a3c2ffcd266f upgrade: make sure we reclone all revlogs when updating to some format
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42831
diff changeset
36
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43031
diff changeset
37
35302
ad2b35ebf670 upgraderepo: allow extension to register preserved requirements
Boris Feld <boris.feld@octobus.net>
parents: 33438
diff changeset
38 def preservedrequirements(repo):
ad2b35ebf670 upgraderepo: allow extension to register preserved requirements
Boris Feld <boris.feld@octobus.net>
parents: 33438
diff changeset
39 return set()
ad2b35ebf670 upgraderepo: allow extension to register preserved requirements
Boris Feld <boris.feld@octobus.net>
parents: 33438
diff changeset
40
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43031
diff changeset
41
46206
9540945e51fd actions: rename DEFICIENCY constant to FORMAT_VARIANT
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46205
diff changeset
42 FORMAT_VARIANT = b'deficiency'
45994
cfae98c4e1f1 upgrade: capitalize the `deficiency` constant
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 45993
diff changeset
43 OPTIMISATION = b'optimization'
30776
3997edc4a86d repair: determine what upgrade will do
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30775
diff changeset
44
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43031
diff changeset
45
31868
9f84ccb1b282 upgrade: drop the prefix to the 'improvement' class
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 31867
diff changeset
46 class improvement(object):
30776
3997edc4a86d repair: determine what upgrade will do
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30775
diff changeset
47 """Represents an improvement that can be made as part of an upgrade.
3997edc4a86d repair: determine what upgrade will do
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30775
diff changeset
48
3997edc4a86d repair: determine what upgrade will do
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30775
diff changeset
49 The following attributes are defined on each instance:
3997edc4a86d repair: determine what upgrade will do
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30775
diff changeset
50
3997edc4a86d repair: determine what upgrade will do
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30775
diff changeset
51 name
3997edc4a86d repair: determine what upgrade will do
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30775
diff changeset
52 Machine-readable string uniquely identifying this improvement. It
3997edc4a86d repair: determine what upgrade will do
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30775
diff changeset
53 will be mapped to an action later in the upgrade process.
3997edc4a86d repair: determine what upgrade will do
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30775
diff changeset
54
3997edc4a86d repair: determine what upgrade will do
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30775
diff changeset
55 type
46206
9540945e51fd actions: rename DEFICIENCY constant to FORMAT_VARIANT
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46205
diff changeset
56 Either ``FORMAT_VARIANT`` or ``OPTIMISATION``.
9540945e51fd actions: rename DEFICIENCY constant to FORMAT_VARIANT
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46205
diff changeset
57 A format variant is where we change the storage format. Not all format
9540945e51fd actions: rename DEFICIENCY constant to FORMAT_VARIANT
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46205
diff changeset
58 variant changes are an obvious problem.
9540945e51fd actions: rename DEFICIENCY constant to FORMAT_VARIANT
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46205
diff changeset
59 An optimization is an action (sometimes optional) that
30776
3997edc4a86d repair: determine what upgrade will do
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30775
diff changeset
60 can be taken to further improve the state of the repository.
3997edc4a86d repair: determine what upgrade will do
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30775
diff changeset
61
3997edc4a86d repair: determine what upgrade will do
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30775
diff changeset
62 description
3997edc4a86d repair: determine what upgrade will do
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30775
diff changeset
63 Message intended for humans explaining the improvement in more detail,
46206
9540945e51fd actions: rename DEFICIENCY constant to FORMAT_VARIANT
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46205
diff changeset
64 including the implications of it. For ``FORMAT_VARIANT`` types, should be
45994
cfae98c4e1f1 upgrade: capitalize the `deficiency` constant
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 45993
diff changeset
65 worded in the present tense. For ``OPTIMISATION`` types, should be
30776
3997edc4a86d repair: determine what upgrade will do
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30775
diff changeset
66 worded in the future tense.
3997edc4a86d repair: determine what upgrade will do
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30775
diff changeset
67
3997edc4a86d repair: determine what upgrade will do
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30775
diff changeset
68 upgrademessage
3997edc4a86d repair: determine what upgrade will do
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30775
diff changeset
69 Message intended for humans explaining what an upgrade addressing this
3997edc4a86d repair: determine what upgrade will do
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30775
diff changeset
70 issue will do. Should be worded in the future tense.
46213
30310886d423 upgrade: introduce post upgrade and downgrade message for improvements
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46212
diff changeset
71
30310886d423 upgrade: introduce post upgrade and downgrade message for improvements
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46212
diff changeset
72 postupgrademessage
30310886d423 upgrade: introduce post upgrade and downgrade message for improvements
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46212
diff changeset
73 Message intended for humans which will be shown post an upgrade
30310886d423 upgrade: introduce post upgrade and downgrade message for improvements
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46212
diff changeset
74 operation when the improvement will be added
30310886d423 upgrade: introduce post upgrade and downgrade message for improvements
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46212
diff changeset
75
30310886d423 upgrade: introduce post upgrade and downgrade message for improvements
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46212
diff changeset
76 postdowngrademessage
30310886d423 upgrade: introduce post upgrade and downgrade message for improvements
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46212
diff changeset
77 Message intended for humans which will be shown post an upgrade
30310886d423 upgrade: introduce post upgrade and downgrade message for improvements
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46212
diff changeset
78 operation in which this improvement was removed
46376
a83e1496d943 actions: calculate what all parts does the operation touches
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46375
diff changeset
79
a83e1496d943 actions: calculate what all parts does the operation touches
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46375
diff changeset
80 touches_filelogs (bool)
a83e1496d943 actions: calculate what all parts does the operation touches
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46375
diff changeset
81 Whether this improvement touches filelogs
a83e1496d943 actions: calculate what all parts does the operation touches
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46375
diff changeset
82
a83e1496d943 actions: calculate what all parts does the operation touches
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46375
diff changeset
83 touches_manifests (bool)
a83e1496d943 actions: calculate what all parts does the operation touches
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46375
diff changeset
84 Whether this improvement touches manifests
a83e1496d943 actions: calculate what all parts does the operation touches
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46375
diff changeset
85
a83e1496d943 actions: calculate what all parts does the operation touches
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46375
diff changeset
86 touches_changelog (bool)
a83e1496d943 actions: calculate what all parts does the operation touches
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46375
diff changeset
87 Whether this improvement touches changelog
a83e1496d943 actions: calculate what all parts does the operation touches
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46375
diff changeset
88
a83e1496d943 actions: calculate what all parts does the operation touches
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46375
diff changeset
89 touches_requirements (bool)
a83e1496d943 actions: calculate what all parts does the operation touches
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46375
diff changeset
90 Whether this improvement changes repository requirements
30776
3997edc4a86d repair: determine what upgrade will do
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30775
diff changeset
91 """
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43031
diff changeset
92
32030
e47223576b8d upgrade: introduce a 'formatvariant' class
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 32029
diff changeset
93 def __init__(self, name, type, description, upgrademessage):
30776
3997edc4a86d repair: determine what upgrade will do
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30775
diff changeset
94 self.name = name
3997edc4a86d repair: determine what upgrade will do
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30775
diff changeset
95 self.type = type
3997edc4a86d repair: determine what upgrade will do
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30775
diff changeset
96 self.description = description
3997edc4a86d repair: determine what upgrade will do
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30775
diff changeset
97 self.upgrademessage = upgrademessage
46213
30310886d423 upgrade: introduce post upgrade and downgrade message for improvements
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46212
diff changeset
98 self.postupgrademessage = None
30310886d423 upgrade: introduce post upgrade and downgrade message for improvements
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46212
diff changeset
99 self.postdowngrademessage = None
46376
a83e1496d943 actions: calculate what all parts does the operation touches
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46375
diff changeset
100 # By default for now, we assume every improvement touches
a83e1496d943 actions: calculate what all parts does the operation touches
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46375
diff changeset
101 # all the things
a83e1496d943 actions: calculate what all parts does the operation touches
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46375
diff changeset
102 self.touches_filelogs = True
a83e1496d943 actions: calculate what all parts does the operation touches
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46375
diff changeset
103 self.touches_manifests = True
a83e1496d943 actions: calculate what all parts does the operation touches
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46375
diff changeset
104 self.touches_changelog = True
a83e1496d943 actions: calculate what all parts does the operation touches
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46375
diff changeset
105 self.touches_requirements = True
30776
3997edc4a86d repair: determine what upgrade will do
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30775
diff changeset
106
31902
6557f0d4ab8e upgrade: implement equality for 'improvement' object
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 31901
diff changeset
107 def __eq__(self, other):
6557f0d4ab8e upgrade: implement equality for 'improvement' object
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 31901
diff changeset
108 if not isinstance(other, improvement):
6557f0d4ab8e upgrade: implement equality for 'improvement' object
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 31901
diff changeset
109 # This is what python tell use to do
6557f0d4ab8e upgrade: implement equality for 'improvement' object
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 31901
diff changeset
110 return NotImplemented
6557f0d4ab8e upgrade: implement equality for 'improvement' object
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 31901
diff changeset
111 return self.name == other.name
6557f0d4ab8e upgrade: implement equality for 'improvement' object
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 31901
diff changeset
112
32028
99f63f476a72 upgrade: implement '__ne__' on 'improvement' class
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 31904
diff changeset
113 def __ne__(self, other):
40997
038108a9811c upgrade: correct implementation of improvement.__ne__
Benjamin Peterson <benjamin@python.org>
parents: 40918
diff changeset
114 return not (self == other)
32028
99f63f476a72 upgrade: implement '__ne__' on 'improvement' class
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 31904
diff changeset
115
32029
9e35848fa007 upgrade: implement '__hash__' on 'improvement' class
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 32028
diff changeset
116 def __hash__(self):
9e35848fa007 upgrade: implement '__hash__' on 'improvement' class
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 32028
diff changeset
117 return hash(self.name)
9e35848fa007 upgrade: implement '__hash__' on 'improvement' class
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 32028
diff changeset
118
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43031
diff changeset
119
47006
e050efe97fbe typing: enable pytype processing on mercurial/upgrade_utils/actions.py
Matt Harbison <matt_harbison@yahoo.com>
parents: 46903
diff changeset
120 allformatvariant = [] # type: List[Type['formatvariant']]
32032
189778a06743 upgrade: register all format variants in a list
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 32031
diff changeset
121
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43031
diff changeset
122
32032
189778a06743 upgrade: register all format variants in a list
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 32031
diff changeset
123 def registerformatvariant(cls):
189778a06743 upgrade: register all format variants in a list
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 32031
diff changeset
124 allformatvariant.append(cls)
189778a06743 upgrade: register all format variants in a list
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 32031
diff changeset
125 return cls
189778a06743 upgrade: register all format variants in a list
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 32031
diff changeset
126
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43031
diff changeset
127
32030
e47223576b8d upgrade: introduce a 'formatvariant' class
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 32029
diff changeset
128 class formatvariant(improvement):
32031
11a2461fc9b1 upgrade: move descriptions and selection logic in individual classes
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 32030
diff changeset
129 """an improvement subclass dedicated to repository format"""
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43031
diff changeset
130
46206
9540945e51fd actions: rename DEFICIENCY constant to FORMAT_VARIANT
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46205
diff changeset
131 type = FORMAT_VARIANT
32031
11a2461fc9b1 upgrade: move descriptions and selection logic in individual classes
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 32030
diff changeset
132 ### The following attributes should be defined for each class:
11a2461fc9b1 upgrade: move descriptions and selection logic in individual classes
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 32030
diff changeset
133
11a2461fc9b1 upgrade: move descriptions and selection logic in individual classes
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 32030
diff changeset
134 # machine-readable string uniquely identifying this improvement. it will be
11a2461fc9b1 upgrade: move descriptions and selection logic in individual classes
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 32030
diff changeset
135 # mapped to an action later in the upgrade process.
11a2461fc9b1 upgrade: move descriptions and selection logic in individual classes
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 32030
diff changeset
136 name = None
32030
e47223576b8d upgrade: introduce a 'formatvariant' class
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 32029
diff changeset
137
32031
11a2461fc9b1 upgrade: move descriptions and selection logic in individual classes
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 32030
diff changeset
138 # message intended for humans explaining the improvement in more detail,
46206
9540945e51fd actions: rename DEFICIENCY constant to FORMAT_VARIANT
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46205
diff changeset
139 # including the implications of it ``FORMAT_VARIANT`` types, should be
9540945e51fd actions: rename DEFICIENCY constant to FORMAT_VARIANT
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46205
diff changeset
140 # worded
32031
11a2461fc9b1 upgrade: move descriptions and selection logic in individual classes
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 32030
diff changeset
141 # in the present tense.
11a2461fc9b1 upgrade: move descriptions and selection logic in individual classes
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 32030
diff changeset
142 description = None
11a2461fc9b1 upgrade: move descriptions and selection logic in individual classes
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 32030
diff changeset
143
11a2461fc9b1 upgrade: move descriptions and selection logic in individual classes
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 32030
diff changeset
144 # message intended for humans explaining what an upgrade addressing this
11a2461fc9b1 upgrade: move descriptions and selection logic in individual classes
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 32030
diff changeset
145 # issue will do. should be worded in the future tense.
11a2461fc9b1 upgrade: move descriptions and selection logic in individual classes
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 32030
diff changeset
146 upgrademessage = None
32030
e47223576b8d upgrade: introduce a 'formatvariant' class
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 32029
diff changeset
147
32031
11a2461fc9b1 upgrade: move descriptions and selection logic in individual classes
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 32030
diff changeset
148 # value of current Mercurial default for new repository
11a2461fc9b1 upgrade: move descriptions and selection logic in individual classes
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 32030
diff changeset
149 default = None
11a2461fc9b1 upgrade: move descriptions and selection logic in individual classes
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 32030
diff changeset
150
46213
30310886d423 upgrade: introduce post upgrade and downgrade message for improvements
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46212
diff changeset
151 # Message intended for humans which will be shown post an upgrade
30310886d423 upgrade: introduce post upgrade and downgrade message for improvements
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46212
diff changeset
152 # operation when the improvement will be added
30310886d423 upgrade: introduce post upgrade and downgrade message for improvements
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46212
diff changeset
153 postupgrademessage = None
30310886d423 upgrade: introduce post upgrade and downgrade message for improvements
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46212
diff changeset
154
30310886d423 upgrade: introduce post upgrade and downgrade message for improvements
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46212
diff changeset
155 # Message intended for humans which will be shown post an upgrade
30310886d423 upgrade: introduce post upgrade and downgrade message for improvements
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46212
diff changeset
156 # operation in which this improvement was removed
30310886d423 upgrade: introduce post upgrade and downgrade message for improvements
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46212
diff changeset
157 postdowngrademessage = None
30310886d423 upgrade: introduce post upgrade and downgrade message for improvements
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46212
diff changeset
158
46376
a83e1496d943 actions: calculate what all parts does the operation touches
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46375
diff changeset
159 # By default for now, we assume every improvement touches all the things
a83e1496d943 actions: calculate what all parts does the operation touches
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46375
diff changeset
160 touches_filelogs = True
a83e1496d943 actions: calculate what all parts does the operation touches
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46375
diff changeset
161 touches_manifests = True
a83e1496d943 actions: calculate what all parts does the operation touches
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46375
diff changeset
162 touches_changelog = True
a83e1496d943 actions: calculate what all parts does the operation touches
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46375
diff changeset
163 touches_requirements = True
a83e1496d943 actions: calculate what all parts does the operation touches
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46375
diff changeset
164
32031
11a2461fc9b1 upgrade: move descriptions and selection logic in individual classes
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 32030
diff changeset
165 def __init__(self):
11a2461fc9b1 upgrade: move descriptions and selection logic in individual classes
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 32030
diff changeset
166 raise NotImplementedError()
11a2461fc9b1 upgrade: move descriptions and selection logic in individual classes
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 32030
diff changeset
167
11a2461fc9b1 upgrade: move descriptions and selection logic in individual classes
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 32030
diff changeset
168 @staticmethod
11a2461fc9b1 upgrade: move descriptions and selection logic in individual classes
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 32030
diff changeset
169 def fromrepo(repo):
11a2461fc9b1 upgrade: move descriptions and selection logic in individual classes
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 32030
diff changeset
170 """current value of the variant in the repository"""
11a2461fc9b1 upgrade: move descriptions and selection logic in individual classes
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 32030
diff changeset
171 raise NotImplementedError()
32030
e47223576b8d upgrade: introduce a 'formatvariant' class
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 32029
diff changeset
172
32031
11a2461fc9b1 upgrade: move descriptions and selection logic in individual classes
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 32030
diff changeset
173 @staticmethod
11a2461fc9b1 upgrade: move descriptions and selection logic in individual classes
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 32030
diff changeset
174 def fromconfig(repo):
11a2461fc9b1 upgrade: move descriptions and selection logic in individual classes
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 32030
diff changeset
175 """current value of the variant in the configuration"""
11a2461fc9b1 upgrade: move descriptions and selection logic in individual classes
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 32030
diff changeset
176 raise NotImplementedError()
11a2461fc9b1 upgrade: move descriptions and selection logic in individual classes
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 32030
diff changeset
177
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43031
diff changeset
178
32031
11a2461fc9b1 upgrade: move descriptions and selection logic in individual classes
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 32030
diff changeset
179 class requirementformatvariant(formatvariant):
11a2461fc9b1 upgrade: move descriptions and selection logic in individual classes
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 32030
diff changeset
180 """formatvariant based on a 'requirement' name.
11a2461fc9b1 upgrade: move descriptions and selection logic in individual classes
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 32030
diff changeset
181
11a2461fc9b1 upgrade: move descriptions and selection logic in individual classes
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 32030
diff changeset
182 Many format variant are controlled by a 'requirement'. We define a small
11a2461fc9b1 upgrade: move descriptions and selection logic in individual classes
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 32030
diff changeset
183 subclass to factor the code.
32030
e47223576b8d upgrade: introduce a 'formatvariant' class
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 32029
diff changeset
184 """
e47223576b8d upgrade: introduce a 'formatvariant' class
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 32029
diff changeset
185
32031
11a2461fc9b1 upgrade: move descriptions and selection logic in individual classes
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 32030
diff changeset
186 # the requirement that control this format variant
11a2461fc9b1 upgrade: move descriptions and selection logic in individual classes
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 32030
diff changeset
187 _requirement = None
11a2461fc9b1 upgrade: move descriptions and selection logic in individual classes
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 32030
diff changeset
188
11a2461fc9b1 upgrade: move descriptions and selection logic in individual classes
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 32030
diff changeset
189 @staticmethod
39546
41aa5dced975 localrepo: pass ui to newreporequirements() (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39243
diff changeset
190 def _newreporequirements(ui):
39996
dbcb466d0065 localrepo: define storage backend in creation options (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39870
diff changeset
191 return localrepo.newreporequirements(
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43031
diff changeset
192 ui, localrepo.defaultcreateopts(ui)
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43031
diff changeset
193 )
32031
11a2461fc9b1 upgrade: move descriptions and selection logic in individual classes
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 32030
diff changeset
194
11a2461fc9b1 upgrade: move descriptions and selection logic in individual classes
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 32030
diff changeset
195 @classmethod
11a2461fc9b1 upgrade: move descriptions and selection logic in individual classes
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 32030
diff changeset
196 def fromrepo(cls, repo):
11a2461fc9b1 upgrade: move descriptions and selection logic in individual classes
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 32030
diff changeset
197 assert cls._requirement is not None
11a2461fc9b1 upgrade: move descriptions and selection logic in individual classes
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 32030
diff changeset
198 return cls._requirement in repo.requirements
11a2461fc9b1 upgrade: move descriptions and selection logic in individual classes
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 32030
diff changeset
199
11a2461fc9b1 upgrade: move descriptions and selection logic in individual classes
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 32030
diff changeset
200 @classmethod
11a2461fc9b1 upgrade: move descriptions and selection logic in individual classes
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 32030
diff changeset
201 def fromconfig(cls, repo):
11a2461fc9b1 upgrade: move descriptions and selection logic in individual classes
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 32030
diff changeset
202 assert cls._requirement is not None
39546
41aa5dced975 localrepo: pass ui to newreporequirements() (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39243
diff changeset
203 return cls._requirement in cls._newreporequirements(repo.ui)
32031
11a2461fc9b1 upgrade: move descriptions and selection logic in individual classes
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 32030
diff changeset
204
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43031
diff changeset
205
32032
189778a06743 upgrade: register all format variants in a list
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 32031
diff changeset
206 @registerformatvariant
32031
11a2461fc9b1 upgrade: move descriptions and selection logic in individual classes
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 32030
diff changeset
207 class fncache(requirementformatvariant):
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
208 name = b'fncache'
32031
11a2461fc9b1 upgrade: move descriptions and selection logic in individual classes
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 32030
diff changeset
209
46638
b4c2a2af25e2 requirements: also add a fncache constant
Raphaël Gomès <rgomes@octobus.net>
parents: 46637
diff changeset
210 _requirement = requirements.FNCACHE_REQUIREMENT
32031
11a2461fc9b1 upgrade: move descriptions and selection logic in individual classes
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 32030
diff changeset
211
11a2461fc9b1 upgrade: move descriptions and selection logic in individual classes
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 32030
diff changeset
212 default = True
11a2461fc9b1 upgrade: move descriptions and selection logic in individual classes
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 32030
diff changeset
213
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43031
diff changeset
214 description = _(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
215 b'long and reserved filenames may not work correctly; '
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
216 b'repository performance is sub-optimal'
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43031
diff changeset
217 )
32031
11a2461fc9b1 upgrade: move descriptions and selection logic in individual classes
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 32030
diff changeset
218
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43031
diff changeset
219 upgrademessage = _(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
220 b'repository will be more resilient to storing '
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
221 b'certain paths and performance of certain '
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
222 b'operations should be improved'
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43031
diff changeset
223 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43031
diff changeset
224
32031
11a2461fc9b1 upgrade: move descriptions and selection logic in individual classes
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 32030
diff changeset
225
32032
189778a06743 upgrade: register all format variants in a list
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 32031
diff changeset
226 @registerformatvariant
32031
11a2461fc9b1 upgrade: move descriptions and selection logic in individual classes
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 32030
diff changeset
227 class dotencode(requirementformatvariant):
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
228 name = b'dotencode'
32031
11a2461fc9b1 upgrade: move descriptions and selection logic in individual classes
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 32030
diff changeset
229
46636
c3773636ddbb requirements: also add a dotencode constant
Raphaël Gomès <rgomes@octobus.net>
parents: 46627
diff changeset
230 _requirement = requirements.DOTENCODE_REQUIREMENT
32031
11a2461fc9b1 upgrade: move descriptions and selection logic in individual classes
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 32030
diff changeset
231
11a2461fc9b1 upgrade: move descriptions and selection logic in individual classes
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 32030
diff changeset
232 default = True
11a2461fc9b1 upgrade: move descriptions and selection logic in individual classes
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 32030
diff changeset
233
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43031
diff changeset
234 description = _(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
235 b'storage of filenames beginning with a period or '
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
236 b'space may not work correctly'
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43031
diff changeset
237 )
32031
11a2461fc9b1 upgrade: move descriptions and selection logic in individual classes
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 32030
diff changeset
238
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43031
diff changeset
239 upgrademessage = _(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
240 b'repository will be better able to store files '
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
241 b'beginning with a space or period'
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43031
diff changeset
242 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43031
diff changeset
243
32031
11a2461fc9b1 upgrade: move descriptions and selection logic in individual classes
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 32030
diff changeset
244
32032
189778a06743 upgrade: register all format variants in a list
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 32031
diff changeset
245 @registerformatvariant
32031
11a2461fc9b1 upgrade: move descriptions and selection logic in individual classes
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 32030
diff changeset
246 class generaldelta(requirementformatvariant):
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
247 name = b'generaldelta'
32031
11a2461fc9b1 upgrade: move descriptions and selection logic in individual classes
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 32030
diff changeset
248
46627
f4c325bf80fc requirements: also add a generaldelta constant
Raphaël Gomès <rgomes@octobus.net>
parents: 46626
diff changeset
249 _requirement = requirements.GENERALDELTA_REQUIREMENT
32031
11a2461fc9b1 upgrade: move descriptions and selection logic in individual classes
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 32030
diff changeset
250
11a2461fc9b1 upgrade: move descriptions and selection logic in individual classes
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 32030
diff changeset
251 default = True
11a2461fc9b1 upgrade: move descriptions and selection logic in individual classes
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 32030
diff changeset
252
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43031
diff changeset
253 description = _(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
254 b'deltas within internal storage are unable to '
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
255 b'choose optimal revisions; repository is larger and '
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
256 b'slower than it could be; interaction with other '
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
257 b'repositories may require extra network and CPU '
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
258 b'resources, making "hg push" and "hg pull" slower'
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43031
diff changeset
259 )
32031
11a2461fc9b1 upgrade: move descriptions and selection logic in individual classes
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 32030
diff changeset
260
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43031
diff changeset
261 upgrademessage = _(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
262 b'repository storage will be able to create '
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
263 b'optimal deltas; new repository data will be '
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
264 b'smaller and read times should decrease; '
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
265 b'interacting with other repositories using this '
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
266 b'storage model should require less network and '
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
267 b'CPU resources, making "hg push" and "hg pull" '
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
268 b'faster'
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43031
diff changeset
269 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43031
diff changeset
270
32031
11a2461fc9b1 upgrade: move descriptions and selection logic in individual classes
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 32030
diff changeset
271
32032
189778a06743 upgrade: register all format variants in a list
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 32031
diff changeset
272 @registerformatvariant
46047
4b89cf08d8dc upgrade: split definition and management of the actions from the main code
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46046
diff changeset
273 class sharesafe(requirementformatvariant):
46334
4b0192f592cf share: move share safe functionality out of experimental
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46230
diff changeset
274 name = b'share-safe'
46002
705c37f22859 upgrade: add support for experimental safe share mode
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45997
diff changeset
275 _requirement = requirements.SHARESAFE_REQUIREMENT
705c37f22859 upgrade: add support for experimental safe share mode
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45997
diff changeset
276
705c37f22859 upgrade: add support for experimental safe share mode
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45997
diff changeset
277 default = False
705c37f22859 upgrade: add support for experimental safe share mode
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45997
diff changeset
278
705c37f22859 upgrade: add support for experimental safe share mode
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45997
diff changeset
279 description = _(
705c37f22859 upgrade: add support for experimental safe share mode
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45997
diff changeset
280 b'old shared repositories do not share source repository '
705c37f22859 upgrade: add support for experimental safe share mode
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45997
diff changeset
281 b'requirements and config. This leads to various problems '
705c37f22859 upgrade: add support for experimental safe share mode
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45997
diff changeset
282 b'when the source repository format is upgraded or some new '
705c37f22859 upgrade: add support for experimental safe share mode
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45997
diff changeset
283 b'extensions are enabled.'
705c37f22859 upgrade: add support for experimental safe share mode
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45997
diff changeset
284 )
705c37f22859 upgrade: add support for experimental safe share mode
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45997
diff changeset
285
705c37f22859 upgrade: add support for experimental safe share mode
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45997
diff changeset
286 upgrademessage = _(
705c37f22859 upgrade: add support for experimental safe share mode
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45997
diff changeset
287 b'Upgrades a repository to share-safe format so that future '
705c37f22859 upgrade: add support for experimental safe share mode
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45997
diff changeset
288 b'shares of this repository share its requirements and configs.'
705c37f22859 upgrade: add support for experimental safe share mode
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45997
diff changeset
289 )
705c37f22859 upgrade: add support for experimental safe share mode
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45997
diff changeset
290
46213
30310886d423 upgrade: introduce post upgrade and downgrade message for improvements
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46212
diff changeset
291 postdowngrademessage = _(
30310886d423 upgrade: introduce post upgrade and downgrade message for improvements
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46212
diff changeset
292 b'repository downgraded to not use share safe mode, '
30310886d423 upgrade: introduce post upgrade and downgrade message for improvements
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46212
diff changeset
293 b'existing shares will not work and needs to'
30310886d423 upgrade: introduce post upgrade and downgrade message for improvements
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46212
diff changeset
294 b' be reshared.'
30310886d423 upgrade: introduce post upgrade and downgrade message for improvements
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46212
diff changeset
295 )
30310886d423 upgrade: introduce post upgrade and downgrade message for improvements
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46212
diff changeset
296
30310886d423 upgrade: introduce post upgrade and downgrade message for improvements
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46212
diff changeset
297 postupgrademessage = _(
30310886d423 upgrade: introduce post upgrade and downgrade message for improvements
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46212
diff changeset
298 b'repository upgraded to share safe mode, existing'
30310886d423 upgrade: introduce post upgrade and downgrade message for improvements
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46212
diff changeset
299 b' shares will still work in old non-safe mode. '
30310886d423 upgrade: introduce post upgrade and downgrade message for improvements
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46212
diff changeset
300 b'Re-share existing shares to use them in safe mode'
30310886d423 upgrade: introduce post upgrade and downgrade message for improvements
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46212
diff changeset
301 b' New shares will be created in safe mode.'
30310886d423 upgrade: introduce post upgrade and downgrade message for improvements
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46212
diff changeset
302 )
30310886d423 upgrade: introduce post upgrade and downgrade message for improvements
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46212
diff changeset
303
46377
60ea95471b83 upgrade: mark sharesafe improvement as only touching requirements
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46376
diff changeset
304 # upgrade only needs to change the requirements
60ea95471b83 upgrade: mark sharesafe improvement as only touching requirements
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46376
diff changeset
305 touches_filelogs = False
60ea95471b83 upgrade: mark sharesafe improvement as only touching requirements
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46376
diff changeset
306 touches_manifests = False
60ea95471b83 upgrade: mark sharesafe improvement as only touching requirements
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46376
diff changeset
307 touches_changelog = False
60ea95471b83 upgrade: mark sharesafe improvement as only touching requirements
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46376
diff changeset
308 touches_requirements = True
60ea95471b83 upgrade: mark sharesafe improvement as only touching requirements
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46376
diff changeset
309
46002
705c37f22859 upgrade: add support for experimental safe share mode
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45997
diff changeset
310
705c37f22859 upgrade: add support for experimental safe share mode
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45997
diff changeset
311 @registerformatvariant
38719
4ad2a1ff0404 upgrade: add information about sparse-revlog
Paul Morelle <paul.morelle@octobus.net>
parents: 38399
diff changeset
312 class sparserevlog(requirementformatvariant):
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
313 name = b'sparserevlog'
38719
4ad2a1ff0404 upgrade: add information about sparse-revlog
Paul Morelle <paul.morelle@octobus.net>
parents: 38399
diff changeset
314
45373
d7dcc75a3eae localrepo: move requirements constant to requirements module
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45372
diff changeset
315 _requirement = requirements.SPARSEREVLOG_REQUIREMENT
38719
4ad2a1ff0404 upgrade: add information about sparse-revlog
Paul Morelle <paul.morelle@octobus.net>
parents: 38399
diff changeset
316
40918
3764330f76a6 sparse-revlog: enabled by default
Boris Feld <boris.feld@octobus.net>
parents: 40837
diff changeset
317 default = True
38719
4ad2a1ff0404 upgrade: add information about sparse-revlog
Paul Morelle <paul.morelle@octobus.net>
parents: 38399
diff changeset
318
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43031
diff changeset
319 description = _(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
320 b'in order to limit disk reading and memory usage on older '
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
321 b'version, the span of a delta chain from its root to its '
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
322 b'end is limited, whatever the relevant data in this span. '
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
323 b'This can severly limit Mercurial ability to build good '
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
324 b'chain of delta resulting is much more storage space being '
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
325 b'taken and limit reusability of on disk delta during '
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
326 b'exchange.'
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43031
diff changeset
327 )
38719
4ad2a1ff0404 upgrade: add information about sparse-revlog
Paul Morelle <paul.morelle@octobus.net>
parents: 38399
diff changeset
328
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43031
diff changeset
329 upgrademessage = _(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
330 b'Revlog supports delta chain with more unused data '
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
331 b'between payload. These gaps will be skipped at read '
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
332 b'time. This allows for better delta chains, making a '
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
333 b'better compression and faster exchange with server.'
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43031
diff changeset
334 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43031
diff changeset
335
38719
4ad2a1ff0404 upgrade: add information about sparse-revlog
Paul Morelle <paul.morelle@octobus.net>
parents: 38399
diff changeset
336
4ad2a1ff0404 upgrade: add information about sparse-revlog
Paul Morelle <paul.morelle@octobus.net>
parents: 38399
diff changeset
337 @registerformatvariant
44799
ea9563e9e65a nodemap: teach `hg debugformat` about the persistent nodemap option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 44798
diff changeset
338 class persistentnodemap(requirementformatvariant):
ea9563e9e65a nodemap: teach `hg debugformat` about the persistent nodemap option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 44798
diff changeset
339 name = b'persistent-nodemap'
ea9563e9e65a nodemap: teach `hg debugformat` about the persistent nodemap option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 44798
diff changeset
340
45373
d7dcc75a3eae localrepo: move requirements constant to requirements module
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45372
diff changeset
341 _requirement = requirements.NODEMAP_REQUIREMENT
44799
ea9563e9e65a nodemap: teach `hg debugformat` about the persistent nodemap option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 44798
diff changeset
342
ea9563e9e65a nodemap: teach `hg debugformat` about the persistent nodemap option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 44798
diff changeset
343 default = False
ea9563e9e65a nodemap: teach `hg debugformat` about the persistent nodemap option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 44798
diff changeset
344
ea9563e9e65a nodemap: teach `hg debugformat` about the persistent nodemap option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 44798
diff changeset
345 description = _(
ea9563e9e65a nodemap: teach `hg debugformat` about the persistent nodemap option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 44798
diff changeset
346 b'persist the node -> rev mapping on disk to speedup lookup'
ea9563e9e65a nodemap: teach `hg debugformat` about the persistent nodemap option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 44798
diff changeset
347 )
ea9563e9e65a nodemap: teach `hg debugformat` about the persistent nodemap option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 44798
diff changeset
348
ea9563e9e65a nodemap: teach `hg debugformat` about the persistent nodemap option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 44798
diff changeset
349 upgrademessage = _(b'Speedup revision lookup by node id.')
ea9563e9e65a nodemap: teach `hg debugformat` about the persistent nodemap option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 44798
diff changeset
350
ea9563e9e65a nodemap: teach `hg debugformat` about the persistent nodemap option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 44798
diff changeset
351
ea9563e9e65a nodemap: teach `hg debugformat` about the persistent nodemap option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 44798
diff changeset
352 @registerformatvariant
43138
f9dc98a97cdb sidedatacopies: teach upgrade about the new requirement
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 43135
diff changeset
353 class copiessdc(requirementformatvariant):
f9dc98a97cdb sidedatacopies: teach upgrade about the new requirement
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 43135
diff changeset
354 name = b'copies-sdc'
f9dc98a97cdb sidedatacopies: teach upgrade about the new requirement
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 43135
diff changeset
355
45373
d7dcc75a3eae localrepo: move requirements constant to requirements module
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45372
diff changeset
356 _requirement = requirements.COPIESSDC_REQUIREMENT
43138
f9dc98a97cdb sidedatacopies: teach upgrade about the new requirement
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 43135
diff changeset
357
f9dc98a97cdb sidedatacopies: teach upgrade about the new requirement
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 43135
diff changeset
358 default = False
f9dc98a97cdb sidedatacopies: teach upgrade about the new requirement
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 43135
diff changeset
359
f9dc98a97cdb sidedatacopies: teach upgrade about the new requirement
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 43135
diff changeset
360 description = _(b'Stores copies information alongside changesets.')
f9dc98a97cdb sidedatacopies: teach upgrade about the new requirement
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 43135
diff changeset
361
f9dc98a97cdb sidedatacopies: teach upgrade about the new requirement
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 43135
diff changeset
362 upgrademessage = _(
f9dc98a97cdb sidedatacopies: teach upgrade about the new requirement
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 43135
diff changeset
363 b'Allows to use more efficient algorithm to deal with ' b'copy tracing.'
f9dc98a97cdb sidedatacopies: teach upgrade about the new requirement
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 43135
diff changeset
364 )
f9dc98a97cdb sidedatacopies: teach upgrade about the new requirement
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 43135
diff changeset
365
f9dc98a97cdb sidedatacopies: teach upgrade about the new requirement
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 43135
diff changeset
366
f9dc98a97cdb sidedatacopies: teach upgrade about the new requirement
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 43135
diff changeset
367 @registerformatvariant
46705
fd55a9eb1507 revlogv2: allow upgrading to v2
Raphaël Gomès <rgomes@octobus.net>
parents: 46638
diff changeset
368 class revlogv2(requirementformatvariant):
fd55a9eb1507 revlogv2: allow upgrading to v2
Raphaël Gomès <rgomes@octobus.net>
parents: 46638
diff changeset
369 name = b'revlog-v2'
fd55a9eb1507 revlogv2: allow upgrading to v2
Raphaël Gomès <rgomes@octobus.net>
parents: 46638
diff changeset
370 _requirement = requirements.REVLOGV2_REQUIREMENT
fd55a9eb1507 revlogv2: allow upgrading to v2
Raphaël Gomès <rgomes@octobus.net>
parents: 46638
diff changeset
371 default = False
fd55a9eb1507 revlogv2: allow upgrading to v2
Raphaël Gomès <rgomes@octobus.net>
parents: 46638
diff changeset
372 description = _(b'Version 2 of the revlog.')
fd55a9eb1507 revlogv2: allow upgrading to v2
Raphaël Gomès <rgomes@octobus.net>
parents: 46638
diff changeset
373 upgrademessage = _(b'very experimental')
fd55a9eb1507 revlogv2: allow upgrading to v2
Raphaël Gomès <rgomes@octobus.net>
parents: 46638
diff changeset
374
fd55a9eb1507 revlogv2: allow upgrading to v2
Raphaël Gomès <rgomes@octobus.net>
parents: 46638
diff changeset
375
fd55a9eb1507 revlogv2: allow upgrading to v2
Raphaël Gomès <rgomes@octobus.net>
parents: 46638
diff changeset
376 @registerformatvariant
47263
6c84fc9c9a90 changelogv2: introduce a "changelogv2" feature
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47232
diff changeset
377 class changelogv2(requirementformatvariant):
6c84fc9c9a90 changelogv2: introduce a "changelogv2" feature
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47232
diff changeset
378 name = b'changelog-v2'
6c84fc9c9a90 changelogv2: introduce a "changelogv2" feature
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47232
diff changeset
379 _requirement = requirements.CHANGELOGV2_REQUIREMENT
6c84fc9c9a90 changelogv2: introduce a "changelogv2" feature
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47232
diff changeset
380 default = False
6c84fc9c9a90 changelogv2: introduce a "changelogv2" feature
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47232
diff changeset
381 description = _(b'An iteration of the revlog focussed on changelog needs.')
6c84fc9c9a90 changelogv2: introduce a "changelogv2" feature
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47232
diff changeset
382 upgrademessage = _(b'quite experimental')
6c84fc9c9a90 changelogv2: introduce a "changelogv2" feature
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47232
diff changeset
383
6c84fc9c9a90 changelogv2: introduce a "changelogv2" feature
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47232
diff changeset
384
6c84fc9c9a90 changelogv2: introduce a "changelogv2" feature
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47232
diff changeset
385 @registerformatvariant
32031
11a2461fc9b1 upgrade: move descriptions and selection logic in individual classes
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 32030
diff changeset
386 class removecldeltachain(formatvariant):
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
387 name = b'plain-cl-delta'
32031
11a2461fc9b1 upgrade: move descriptions and selection logic in individual classes
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 32030
diff changeset
388
11a2461fc9b1 upgrade: move descriptions and selection logic in individual classes
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 32030
diff changeset
389 default = True
11a2461fc9b1 upgrade: move descriptions and selection logic in individual classes
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 32030
diff changeset
390
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43031
diff changeset
391 description = _(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
392 b'changelog storage is using deltas instead of '
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
393 b'raw entries; changelog reading and any '
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
394 b'operation relying on changelog data are slower '
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
395 b'than they could be'
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43031
diff changeset
396 )
32031
11a2461fc9b1 upgrade: move descriptions and selection logic in individual classes
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 32030
diff changeset
397
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43031
diff changeset
398 upgrademessage = _(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
399 b'changelog storage will be reformated to '
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
400 b'store raw entries; changelog reading will be '
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
401 b'faster; changelog size may be reduced'
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43031
diff changeset
402 )
32031
11a2461fc9b1 upgrade: move descriptions and selection logic in individual classes
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 32030
diff changeset
403
11a2461fc9b1 upgrade: move descriptions and selection logic in individual classes
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 32030
diff changeset
404 @staticmethod
11a2461fc9b1 upgrade: move descriptions and selection logic in individual classes
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 32030
diff changeset
405 def fromrepo(repo):
11a2461fc9b1 upgrade: move descriptions and selection logic in individual classes
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 32030
diff changeset
406 # Mercurial 4.0 changed changelogs to not use delta chains. Search for
11a2461fc9b1 upgrade: move descriptions and selection logic in individual classes
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 32030
diff changeset
407 # changelogs with deltas.
11a2461fc9b1 upgrade: move descriptions and selection logic in individual classes
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 32030
diff changeset
408 cl = repo.changelog
11a2461fc9b1 upgrade: move descriptions and selection logic in individual classes
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 32030
diff changeset
409 chainbase = cl.chainbase
11a2461fc9b1 upgrade: move descriptions and selection logic in individual classes
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 32030
diff changeset
410 return all(rev == chainbase(rev) for rev in cl)
11a2461fc9b1 upgrade: move descriptions and selection logic in individual classes
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 32030
diff changeset
411
11a2461fc9b1 upgrade: move descriptions and selection logic in individual classes
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 32030
diff changeset
412 @staticmethod
11a2461fc9b1 upgrade: move descriptions and selection logic in individual classes
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 32030
diff changeset
413 def fromconfig(repo):
11a2461fc9b1 upgrade: move descriptions and selection logic in individual classes
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 32030
diff changeset
414 return True
32030
e47223576b8d upgrade: introduce a 'formatvariant' class
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 32029
diff changeset
415
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43031
diff changeset
416
46874
84a93fa7ecfd revlog-compression: use zstd by default (if available)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46851
diff changeset
417 _has_zstd = (
84a93fa7ecfd revlog-compression: use zstd by default (if available)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46851
diff changeset
418 b'zstd' in util.compengines
84a93fa7ecfd revlog-compression: use zstd by default (if available)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46851
diff changeset
419 and util.compengines[b'zstd'].available()
84a93fa7ecfd revlog-compression: use zstd by default (if available)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46851
diff changeset
420 and util.compengines[b'zstd'].revlogheader()
84a93fa7ecfd revlog-compression: use zstd by default (if available)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46851
diff changeset
421 )
84a93fa7ecfd revlog-compression: use zstd by default (if available)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46851
diff changeset
422
84a93fa7ecfd revlog-compression: use zstd by default (if available)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46851
diff changeset
423
35340
ead01b74be04 upgrade: register compression as a format variants
Boris Feld <boris.feld@octobus.net>
parents: 35335
diff changeset
424 @registerformatvariant
ead01b74be04 upgrade: register compression as a format variants
Boris Feld <boris.feld@octobus.net>
parents: 35335
diff changeset
425 class compressionengine(formatvariant):
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
426 name = b'compression'
46874
84a93fa7ecfd revlog-compression: use zstd by default (if available)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46851
diff changeset
427
84a93fa7ecfd revlog-compression: use zstd by default (if available)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46851
diff changeset
428 if _has_zstd:
84a93fa7ecfd revlog-compression: use zstd by default (if available)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46851
diff changeset
429 default = b'zstd'
84a93fa7ecfd revlog-compression: use zstd by default (if available)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46851
diff changeset
430 else:
84a93fa7ecfd revlog-compression: use zstd by default (if available)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46851
diff changeset
431 default = b'zlib'
35340
ead01b74be04 upgrade: register compression as a format variants
Boris Feld <boris.feld@octobus.net>
parents: 35335
diff changeset
432
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43031
diff changeset
433 description = _(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
434 b'Compresion algorithm used to compress data. '
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
435 b'Some engine are faster than other'
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43031
diff changeset
436 )
35340
ead01b74be04 upgrade: register compression as a format variants
Boris Feld <boris.feld@octobus.net>
parents: 35335
diff changeset
437
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43031
diff changeset
438 upgrademessage = _(
43117
8ff1ecfadcd1 cleanup: join string literals that are already on one line
Martin von Zweigbergk <martinvonz@google.com>
parents: 43089
diff changeset
439 b'revlog content will be recompressed with the new algorithm.'
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43031
diff changeset
440 )
35340
ead01b74be04 upgrade: register compression as a format variants
Boris Feld <boris.feld@octobus.net>
parents: 35335
diff changeset
441
ead01b74be04 upgrade: register compression as a format variants
Boris Feld <boris.feld@octobus.net>
parents: 35335
diff changeset
442 @classmethod
ead01b74be04 upgrade: register compression as a format variants
Boris Feld <boris.feld@octobus.net>
parents: 35335
diff changeset
443 def fromrepo(cls, repo):
42136
10a6725dca6e compression: introduce an official `zstd-revlog` requirement
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42046
diff changeset
444 # we allow multiple compression engine requirement to co-exist because
10a6725dca6e compression: introduce an official `zstd-revlog` requirement
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42046
diff changeset
445 # strickly speaking, revlog seems to support mixed compression style.
10a6725dca6e compression: introduce an official `zstd-revlog` requirement
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42046
diff changeset
446 #
10a6725dca6e compression: introduce an official `zstd-revlog` requirement
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42046
diff changeset
447 # The compression used for new entries will be "the last one"
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
448 compression = b'zlib'
35340
ead01b74be04 upgrade: register compression as a format variants
Boris Feld <boris.feld@octobus.net>
parents: 35335
diff changeset
449 for req in repo.requirements:
42136
10a6725dca6e compression: introduce an official `zstd-revlog` requirement
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42046
diff changeset
450 prefix = req.startswith
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
451 if prefix(b'revlog-compression-') or prefix(b'exp-compression-'):
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
452 compression = req.split(b'-', 2)[2]
42136
10a6725dca6e compression: introduce an official `zstd-revlog` requirement
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42046
diff changeset
453 return compression
35340
ead01b74be04 upgrade: register compression as a format variants
Boris Feld <boris.feld@octobus.net>
parents: 35335
diff changeset
454
ead01b74be04 upgrade: register compression as a format variants
Boris Feld <boris.feld@octobus.net>
parents: 35335
diff changeset
455 @classmethod
ead01b74be04 upgrade: register compression as a format variants
Boris Feld <boris.feld@octobus.net>
parents: 35335
diff changeset
456 def fromconfig(cls, repo):
44382
f0027a3dd7cb revlog-compression: update the config to be a list
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 43805
diff changeset
457 compengines = repo.ui.configlist(b'format', b'revlog-compression')
f0027a3dd7cb revlog-compression: update the config to be a list
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 43805
diff changeset
458 # return the first valid value as the selection code would do
f0027a3dd7cb revlog-compression: update the config to be a list
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 43805
diff changeset
459 for comp in compengines:
f0027a3dd7cb revlog-compression: update the config to be a list
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 43805
diff changeset
460 if comp in util.compengines:
46851
3aa78f2aea48 revlog-compression: fix computation of engine availability
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46706
diff changeset
461 e = util.compengines[comp]
3aa78f2aea48 revlog-compression: fix computation of engine availability
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46706
diff changeset
462 if e.available() and e.revlogheader():
3aa78f2aea48 revlog-compression: fix computation of engine availability
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46706
diff changeset
463 return comp
44382
f0027a3dd7cb revlog-compression: update the config to be a list
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 43805
diff changeset
464
f0027a3dd7cb revlog-compression: update the config to be a list
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 43805
diff changeset
465 # no valide compression found lets display it all for clarity
f0027a3dd7cb revlog-compression: update the config to be a list
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 43805
diff changeset
466 return b','.join(compengines)
35340
ead01b74be04 upgrade: register compression as a format variants
Boris Feld <boris.feld@octobus.net>
parents: 35335
diff changeset
467
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43031
diff changeset
468
42045
d7e751ec679e compression: display compression level in debugformat
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 41089
diff changeset
469 @registerformatvariant
d7e751ec679e compression: display compression level in debugformat
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 41089
diff changeset
470 class compressionlevel(formatvariant):
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
471 name = b'compression-level'
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
472 default = b'default'
42045
d7e751ec679e compression: display compression level in debugformat
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 41089
diff changeset
473
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
474 description = _(b'compression level')
42045
d7e751ec679e compression: display compression level in debugformat
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 41089
diff changeset
475
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
476 upgrademessage = _(b'revlog content will be recompressed')
42045
d7e751ec679e compression: display compression level in debugformat
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 41089
diff changeset
477
d7e751ec679e compression: display compression level in debugformat
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 41089
diff changeset
478 @classmethod
d7e751ec679e compression: display compression level in debugformat
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 41089
diff changeset
479 def fromrepo(cls, repo):
d7e751ec679e compression: display compression level in debugformat
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 41089
diff changeset
480 comp = compressionengine.fromrepo(repo)
d7e751ec679e compression: display compression level in debugformat
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 41089
diff changeset
481 level = None
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
482 if comp == b'zlib':
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
483 level = repo.ui.configint(b'storage', b'revlog.zlib.level')
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
484 elif comp == b'zstd':
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
485 level = repo.ui.configint(b'storage', b'revlog.zstd.level')
42045
d7e751ec679e compression: display compression level in debugformat
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 41089
diff changeset
486 if level is None:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
487 return b'default'
42045
d7e751ec679e compression: display compression level in debugformat
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 41089
diff changeset
488 return bytes(level)
d7e751ec679e compression: display compression level in debugformat
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 41089
diff changeset
489
d7e751ec679e compression: display compression level in debugformat
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 41089
diff changeset
490 @classmethod
d7e751ec679e compression: display compression level in debugformat
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 41089
diff changeset
491 def fromconfig(cls, repo):
d7e751ec679e compression: display compression level in debugformat
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 41089
diff changeset
492 comp = compressionengine.fromconfig(repo)
d7e751ec679e compression: display compression level in debugformat
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 41089
diff changeset
493 level = None
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
494 if comp == b'zlib':
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
495 level = repo.ui.configint(b'storage', b'revlog.zlib.level')
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
496 elif comp == b'zstd':
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
497 level = repo.ui.configint(b'storage', b'revlog.zstd.level')
42045
d7e751ec679e compression: display compression level in debugformat
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 41089
diff changeset
498 if level is None:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
499 return b'default'
42045
d7e751ec679e compression: display compression level in debugformat
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 41089
diff changeset
500 return bytes(level)
d7e751ec679e compression: display compression level in debugformat
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 41089
diff changeset
501
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43031
diff changeset
502
46205
53d083fa1f83 upgrade: rename finddeficiences() to find_format_upgrades()
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46192
diff changeset
503 def find_format_upgrades(repo):
53d083fa1f83 upgrade: rename finddeficiences() to find_format_upgrades()
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46192
diff changeset
504 """returns a list of format upgrades which can be perform on the repo"""
53d083fa1f83 upgrade: rename finddeficiences() to find_format_upgrades()
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46192
diff changeset
505 upgrades = []
30776
3997edc4a86d repair: determine what upgrade will do
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30775
diff changeset
506
3997edc4a86d repair: determine what upgrade will do
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30775
diff changeset
507 # We could detect lack of revlogv1 and store here, but they were added
3997edc4a86d repair: determine what upgrade will do
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30775
diff changeset
508 # in 0.9.2 and we don't support upgrading repos without these
3997edc4a86d repair: determine what upgrade will do
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30775
diff changeset
509 # requirements, so let's not bother.
3997edc4a86d repair: determine what upgrade will do
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30775
diff changeset
510
32032
189778a06743 upgrade: register all format variants in a list
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 32031
diff changeset
511 for fv in allformatvariant:
189778a06743 upgrade: register all format variants in a list
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 32031
diff changeset
512 if not fv.fromrepo(repo):
46205
53d083fa1f83 upgrade: rename finddeficiences() to find_format_upgrades()
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46192
diff changeset
513 upgrades.append(fv)
30776
3997edc4a86d repair: determine what upgrade will do
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30775
diff changeset
514
46205
53d083fa1f83 upgrade: rename finddeficiences() to find_format_upgrades()
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46192
diff changeset
515 return upgrades
30776
3997edc4a86d repair: determine what upgrade will do
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30775
diff changeset
516
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43031
diff changeset
517
46212
c97d8e0406a6 actions: introduce function to calculate downgrades
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46210
diff changeset
518 def find_format_downgrades(repo):
c97d8e0406a6 actions: introduce function to calculate downgrades
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46210
diff changeset
519 """returns a list of format downgrades which will be performed on the repo
c97d8e0406a6 actions: introduce function to calculate downgrades
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46210
diff changeset
520 because of disabled config option for them"""
c97d8e0406a6 actions: introduce function to calculate downgrades
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46210
diff changeset
521
c97d8e0406a6 actions: introduce function to calculate downgrades
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46210
diff changeset
522 downgrades = []
c97d8e0406a6 actions: introduce function to calculate downgrades
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46210
diff changeset
523
c97d8e0406a6 actions: introduce function to calculate downgrades
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46210
diff changeset
524 for fv in allformatvariant:
46230
1fcab88ab85c downgrade: if a compression is removed, consider that too
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46218
diff changeset
525 if fv.name == b'compression':
1fcab88ab85c downgrade: if a compression is removed, consider that too
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46218
diff changeset
526 # If there is a compression change between repository
1fcab88ab85c downgrade: if a compression is removed, consider that too
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46218
diff changeset
527 # and config, destination repository compression will change
1fcab88ab85c downgrade: if a compression is removed, consider that too
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46218
diff changeset
528 # and current compression will be removed.
1fcab88ab85c downgrade: if a compression is removed, consider that too
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46218
diff changeset
529 if fv.fromrepo(repo) != fv.fromconfig(repo):
1fcab88ab85c downgrade: if a compression is removed, consider that too
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46218
diff changeset
530 downgrades.append(fv)
1fcab88ab85c downgrade: if a compression is removed, consider that too
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46218
diff changeset
531 continue
46212
c97d8e0406a6 actions: introduce function to calculate downgrades
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46210
diff changeset
532 # format variant exist in repo but does not exist in new repository
c97d8e0406a6 actions: introduce function to calculate downgrades
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46210
diff changeset
533 # config
c97d8e0406a6 actions: introduce function to calculate downgrades
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46210
diff changeset
534 if fv.fromrepo(repo) and not fv.fromconfig(repo):
c97d8e0406a6 actions: introduce function to calculate downgrades
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46210
diff changeset
535 downgrades.append(fv)
c97d8e0406a6 actions: introduce function to calculate downgrades
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46210
diff changeset
536
c97d8e0406a6 actions: introduce function to calculate downgrades
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46210
diff changeset
537 return downgrades
c97d8e0406a6 actions: introduce function to calculate downgrades
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46210
diff changeset
538
c97d8e0406a6 actions: introduce function to calculate downgrades
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46210
diff changeset
539
45995
32dcd783a985 upgrade: move optimisation to something more declarative
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 45994
diff changeset
540 ALL_OPTIMISATIONS = []
32dcd783a985 upgrade: move optimisation to something more declarative
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 45994
diff changeset
541
32dcd783a985 upgrade: move optimisation to something more declarative
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 45994
diff changeset
542
32dcd783a985 upgrade: move optimisation to something more declarative
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 45994
diff changeset
543 def register_optimization(obj):
32dcd783a985 upgrade: move optimisation to something more declarative
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 45994
diff changeset
544 ALL_OPTIMISATIONS.append(obj)
32dcd783a985 upgrade: move optimisation to something more declarative
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 45994
diff changeset
545 return obj
32dcd783a985 upgrade: move optimisation to something more declarative
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 45994
diff changeset
546
32dcd783a985 upgrade: move optimisation to something more declarative
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 45994
diff changeset
547
32dcd783a985 upgrade: move optimisation to something more declarative
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 45994
diff changeset
548 register_optimization(
32dcd783a985 upgrade: move optimisation to something more declarative
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 45994
diff changeset
549 improvement(
32dcd783a985 upgrade: move optimisation to something more declarative
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 45994
diff changeset
550 name=b're-delta-parent',
32dcd783a985 upgrade: move optimisation to something more declarative
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 45994
diff changeset
551 type=OPTIMISATION,
32dcd783a985 upgrade: move optimisation to something more declarative
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 45994
diff changeset
552 description=_(
32dcd783a985 upgrade: move optimisation to something more declarative
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 45994
diff changeset
553 b'deltas within internal storage will be recalculated to '
32dcd783a985 upgrade: move optimisation to something more declarative
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 45994
diff changeset
554 b'choose an optimal base revision where this was not '
32dcd783a985 upgrade: move optimisation to something more declarative
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 45994
diff changeset
555 b'already done; the size of the repository may shrink and '
32dcd783a985 upgrade: move optimisation to something more declarative
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 45994
diff changeset
556 b'various operations may become faster; the first time '
32dcd783a985 upgrade: move optimisation to something more declarative
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 45994
diff changeset
557 b'this optimization is performed could slow down upgrade '
32dcd783a985 upgrade: move optimisation to something more declarative
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 45994
diff changeset
558 b'execution considerably; subsequent invocations should '
32dcd783a985 upgrade: move optimisation to something more declarative
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 45994
diff changeset
559 b'not run noticeably slower'
32dcd783a985 upgrade: move optimisation to something more declarative
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 45994
diff changeset
560 ),
32dcd783a985 upgrade: move optimisation to something more declarative
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 45994
diff changeset
561 upgrademessage=_(
32dcd783a985 upgrade: move optimisation to something more declarative
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 45994
diff changeset
562 b'deltas within internal storage will choose a new '
32dcd783a985 upgrade: move optimisation to something more declarative
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 45994
diff changeset
563 b'base revision if needed'
32dcd783a985 upgrade: move optimisation to something more declarative
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 45994
diff changeset
564 ),
32dcd783a985 upgrade: move optimisation to something more declarative
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 45994
diff changeset
565 )
32dcd783a985 upgrade: move optimisation to something more declarative
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 45994
diff changeset
566 )
32dcd783a985 upgrade: move optimisation to something more declarative
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 45994
diff changeset
567
32dcd783a985 upgrade: move optimisation to something more declarative
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 45994
diff changeset
568 register_optimization(
32dcd783a985 upgrade: move optimisation to something more declarative
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 45994
diff changeset
569 improvement(
32dcd783a985 upgrade: move optimisation to something more declarative
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 45994
diff changeset
570 name=b're-delta-multibase',
32dcd783a985 upgrade: move optimisation to something more declarative
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 45994
diff changeset
571 type=OPTIMISATION,
32dcd783a985 upgrade: move optimisation to something more declarative
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 45994
diff changeset
572 description=_(
32dcd783a985 upgrade: move optimisation to something more declarative
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 45994
diff changeset
573 b'deltas within internal storage will be recalculated '
32dcd783a985 upgrade: move optimisation to something more declarative
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 45994
diff changeset
574 b'against multiple base revision and the smallest '
32dcd783a985 upgrade: move optimisation to something more declarative
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 45994
diff changeset
575 b'difference will be used; the size of the repository may '
32dcd783a985 upgrade: move optimisation to something more declarative
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 45994
diff changeset
576 b'shrink significantly when there are many merges; this '
32dcd783a985 upgrade: move optimisation to something more declarative
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 45994
diff changeset
577 b'optimization will slow down execution in proportion to '
32dcd783a985 upgrade: move optimisation to something more declarative
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 45994
diff changeset
578 b'the number of merges in the repository and the amount '
32dcd783a985 upgrade: move optimisation to something more declarative
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 45994
diff changeset
579 b'of files in the repository; this slow down should not '
32dcd783a985 upgrade: move optimisation to something more declarative
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 45994
diff changeset
580 b'be significant unless there are tens of thousands of '
32dcd783a985 upgrade: move optimisation to something more declarative
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 45994
diff changeset
581 b'files and thousands of merges'
32dcd783a985 upgrade: move optimisation to something more declarative
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 45994
diff changeset
582 ),
32dcd783a985 upgrade: move optimisation to something more declarative
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 45994
diff changeset
583 upgrademessage=_(
32dcd783a985 upgrade: move optimisation to something more declarative
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 45994
diff changeset
584 b'deltas within internal storage will choose an '
32dcd783a985 upgrade: move optimisation to something more declarative
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 45994
diff changeset
585 b'optimal delta by computing deltas against multiple '
32dcd783a985 upgrade: move optimisation to something more declarative
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 45994
diff changeset
586 b'parents; may slow down execution time '
32dcd783a985 upgrade: move optimisation to something more declarative
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 45994
diff changeset
587 b'significantly'
32dcd783a985 upgrade: move optimisation to something more declarative
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 45994
diff changeset
588 ),
32dcd783a985 upgrade: move optimisation to something more declarative
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 45994
diff changeset
589 )
32dcd783a985 upgrade: move optimisation to something more declarative
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 45994
diff changeset
590 )
32dcd783a985 upgrade: move optimisation to something more declarative
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 45994
diff changeset
591
32dcd783a985 upgrade: move optimisation to something more declarative
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 45994
diff changeset
592 register_optimization(
32dcd783a985 upgrade: move optimisation to something more declarative
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 45994
diff changeset
593 improvement(
32dcd783a985 upgrade: move optimisation to something more declarative
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 45994
diff changeset
594 name=b're-delta-all',
32dcd783a985 upgrade: move optimisation to something more declarative
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 45994
diff changeset
595 type=OPTIMISATION,
32dcd783a985 upgrade: move optimisation to something more declarative
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 45994
diff changeset
596 description=_(
32dcd783a985 upgrade: move optimisation to something more declarative
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 45994
diff changeset
597 b'deltas within internal storage will always be '
32dcd783a985 upgrade: move optimisation to something more declarative
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 45994
diff changeset
598 b'recalculated without reusing prior deltas; this will '
32dcd783a985 upgrade: move optimisation to something more declarative
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 45994
diff changeset
599 b'likely make execution run several times slower; this '
32dcd783a985 upgrade: move optimisation to something more declarative
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 45994
diff changeset
600 b'optimization is typically not needed'
32dcd783a985 upgrade: move optimisation to something more declarative
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 45994
diff changeset
601 ),
32dcd783a985 upgrade: move optimisation to something more declarative
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 45994
diff changeset
602 upgrademessage=_(
32dcd783a985 upgrade: move optimisation to something more declarative
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 45994
diff changeset
603 b'deltas within internal storage will be fully '
32dcd783a985 upgrade: move optimisation to something more declarative
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 45994
diff changeset
604 b'recomputed; this will likely drastically slow down '
32dcd783a985 upgrade: move optimisation to something more declarative
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 45994
diff changeset
605 b'execution time'
32dcd783a985 upgrade: move optimisation to something more declarative
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 45994
diff changeset
606 ),
32dcd783a985 upgrade: move optimisation to something more declarative
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 45994
diff changeset
607 )
32dcd783a985 upgrade: move optimisation to something more declarative
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 45994
diff changeset
608 )
32dcd783a985 upgrade: move optimisation to something more declarative
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 45994
diff changeset
609
32dcd783a985 upgrade: move optimisation to something more declarative
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 45994
diff changeset
610 register_optimization(
32dcd783a985 upgrade: move optimisation to something more declarative
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 45994
diff changeset
611 improvement(
32dcd783a985 upgrade: move optimisation to something more declarative
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 45994
diff changeset
612 name=b're-delta-fulladd',
32dcd783a985 upgrade: move optimisation to something more declarative
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 45994
diff changeset
613 type=OPTIMISATION,
32dcd783a985 upgrade: move optimisation to something more declarative
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 45994
diff changeset
614 description=_(
32dcd783a985 upgrade: move optimisation to something more declarative
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 45994
diff changeset
615 b'every revision will be re-added as if it was new '
32dcd783a985 upgrade: move optimisation to something more declarative
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 45994
diff changeset
616 b'content. It will go through the full storage '
32dcd783a985 upgrade: move optimisation to something more declarative
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 45994
diff changeset
617 b'mechanism giving extensions a chance to process it '
32dcd783a985 upgrade: move optimisation to something more declarative
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 45994
diff changeset
618 b'(eg. lfs). This is similar to "re-delta-all" but even '
32dcd783a985 upgrade: move optimisation to something more declarative
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 45994
diff changeset
619 b'slower since more logic is involved.'
32dcd783a985 upgrade: move optimisation to something more declarative
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 45994
diff changeset
620 ),
32dcd783a985 upgrade: move optimisation to something more declarative
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 45994
diff changeset
621 upgrademessage=_(
32dcd783a985 upgrade: move optimisation to something more declarative
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 45994
diff changeset
622 b'each revision will be added as new content to the '
32dcd783a985 upgrade: move optimisation to something more declarative
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 45994
diff changeset
623 b'internal storage; this will likely drastically slow '
32dcd783a985 upgrade: move optimisation to something more declarative
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 45994
diff changeset
624 b'down execution time, but some extensions might need '
32dcd783a985 upgrade: move optimisation to something more declarative
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 45994
diff changeset
625 b'it'
32dcd783a985 upgrade: move optimisation to something more declarative
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 45994
diff changeset
626 ),
32dcd783a985 upgrade: move optimisation to something more declarative
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 45994
diff changeset
627 )
32dcd783a985 upgrade: move optimisation to something more declarative
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 45994
diff changeset
628 )
32dcd783a985 upgrade: move optimisation to something more declarative
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 45994
diff changeset
629
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43031
diff changeset
630
31896
127b41e975fd upgrade: split finding deficiencies from finding optimisations
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 31895
diff changeset
631 def findoptimizations(repo):
127b41e975fd upgrade: split finding deficiencies from finding optimisations
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 31895
diff changeset
632 """Determine optimisation that could be used during upgrade"""
30776
3997edc4a86d repair: determine what upgrade will do
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30775
diff changeset
633 # These are unconditionally added. There is logic later that figures out
3997edc4a86d repair: determine what upgrade will do
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30775
diff changeset
634 # which ones to apply.
45995
32dcd783a985 upgrade: move optimisation to something more declarative
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 45994
diff changeset
635 return list(ALL_OPTIMISATIONS)
30776
3997edc4a86d repair: determine what upgrade will do
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30775
diff changeset
636
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43031
diff changeset
637
46210
6b40aac4da8e upgrade: rename actions to upgrade_actions
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46209
diff changeset
638 def determine_upgrade_actions(
46209
a51d345f1404 upgrade: move optimization addition to determineactions()
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46206
diff changeset
639 repo, format_upgrades, optimizations, sourcereqs, destreqs
a51d345f1404 upgrade: move optimization addition to determineactions()
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46206
diff changeset
640 ):
30776
3997edc4a86d repair: determine what upgrade will do
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30775
diff changeset
641 """Determine upgrade actions that will be performed.
3997edc4a86d repair: determine what upgrade will do
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30775
diff changeset
642
46205
53d083fa1f83 upgrade: rename finddeficiences() to find_format_upgrades()
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46192
diff changeset
643 Given a list of improvements as returned by ``find_format_upgrades`` and
31896
127b41e975fd upgrade: split finding deficiencies from finding optimisations
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 31895
diff changeset
644 ``findoptimizations``, determine the list of upgrade actions that
127b41e975fd upgrade: split finding deficiencies from finding optimisations
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 31895
diff changeset
645 will be performed.
30776
3997edc4a86d repair: determine what upgrade will do
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30775
diff changeset
646
3997edc4a86d repair: determine what upgrade will do
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30775
diff changeset
647 The role of this function is to filter improvements if needed, apply
3997edc4a86d repair: determine what upgrade will do
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30775
diff changeset
648 recommended optimizations from the improvements list that make sense,
3997edc4a86d repair: determine what upgrade will do
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30775
diff changeset
649 etc.
3997edc4a86d repair: determine what upgrade will do
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30775
diff changeset
650
3997edc4a86d repair: determine what upgrade will do
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30775
diff changeset
651 Returns a list of action names.
3997edc4a86d repair: determine what upgrade will do
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30775
diff changeset
652 """
3997edc4a86d repair: determine what upgrade will do
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30775
diff changeset
653 newactions = []
3997edc4a86d repair: determine what upgrade will do
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30775
diff changeset
654
46205
53d083fa1f83 upgrade: rename finddeficiences() to find_format_upgrades()
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46192
diff changeset
655 for d in format_upgrades:
44746
c36a3fcfc36b upgrade: properly filter action depending on planned work
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 44452
diff changeset
656 name = d._requirement
30776
3997edc4a86d repair: determine what upgrade will do
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30775
diff changeset
657
3997edc4a86d repair: determine what upgrade will do
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30775
diff changeset
658 # If the action is a requirement that doesn't show up in the
3997edc4a86d repair: determine what upgrade will do
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30775
diff changeset
659 # destination requirements, prune the action.
44746
c36a3fcfc36b upgrade: properly filter action depending on planned work
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 44452
diff changeset
660 if name is not None and name not in destreqs:
30776
3997edc4a86d repair: determine what upgrade will do
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30775
diff changeset
661 continue
3997edc4a86d repair: determine what upgrade will do
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30775
diff changeset
662
31903
fa1088de2119 upgrade: use 'improvement' object for action too
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 31902
diff changeset
663 newactions.append(d)
30776
3997edc4a86d repair: determine what upgrade will do
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30775
diff changeset
664
46209
a51d345f1404 upgrade: move optimization addition to determineactions()
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46206
diff changeset
665 newactions.extend(o for o in sorted(optimizations) if o not in newactions)
a51d345f1404 upgrade: move optimization addition to determineactions()
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46206
diff changeset
666
30776
3997edc4a86d repair: determine what upgrade will do
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30775
diff changeset
667 # FUTURE consider adding some optimizations here for certain transitions.
3997edc4a86d repair: determine what upgrade will do
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30775
diff changeset
668 # e.g. adding generaldelta could schedule parent redeltas.
3997edc4a86d repair: determine what upgrade will do
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30775
diff changeset
669
3997edc4a86d repair: determine what upgrade will do
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30775
diff changeset
670 return newactions
46048
f4f956342cf1 upgrade: move requirements checking in a dedicated function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46047
diff changeset
671
f4f956342cf1 upgrade: move requirements checking in a dedicated function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46047
diff changeset
672
46056
c407513a44a3 upgrade: start moving the "to be happening" data in a dedicated object
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46052
diff changeset
673 class UpgradeOperation(object):
c407513a44a3 upgrade: start moving the "to be happening" data in a dedicated object
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46052
diff changeset
674 """represent the work to be done during an upgrade"""
c407513a44a3 upgrade: start moving the "to be happening" data in a dedicated object
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46052
diff changeset
675
46191
aba979b1b90b upgrade: move `printrequirements()` to UpgradeOperation class
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46190
diff changeset
676 def __init__(
aba979b1b90b upgrade: move `printrequirements()` to UpgradeOperation class
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46190
diff changeset
677 self,
aba979b1b90b upgrade: move `printrequirements()` to UpgradeOperation class
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46190
diff changeset
678 ui,
aba979b1b90b upgrade: move `printrequirements()` to UpgradeOperation class
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46190
diff changeset
679 new_requirements,
aba979b1b90b upgrade: move `printrequirements()` to UpgradeOperation class
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46190
diff changeset
680 current_requirements,
46210
6b40aac4da8e upgrade: rename actions to upgrade_actions
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46209
diff changeset
681 upgrade_actions,
46213
30310886d423 upgrade: introduce post upgrade and downgrade message for improvements
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46212
diff changeset
682 removed_actions,
46191
aba979b1b90b upgrade: move `printrequirements()` to UpgradeOperation class
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46190
diff changeset
683 revlogs_to_process,
46375
2e8a844d0ae0 upgrade: don't create store backup if `--no-backup` is passed
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46334
diff changeset
684 backup_store,
46191
aba979b1b90b upgrade: move `printrequirements()` to UpgradeOperation class
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46190
diff changeset
685 ):
46188
945b33a7edfd upgrade: move `print_affected_revlogs()` to UpgradeOperation class
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46056
diff changeset
686 self.ui = ui
46191
aba979b1b90b upgrade: move `printrequirements()` to UpgradeOperation class
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46190
diff changeset
687 self.new_requirements = new_requirements
aba979b1b90b upgrade: move `printrequirements()` to UpgradeOperation class
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46190
diff changeset
688 self.current_requirements = current_requirements
46210
6b40aac4da8e upgrade: rename actions to upgrade_actions
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46209
diff changeset
689 # list of upgrade actions the operation will perform
6b40aac4da8e upgrade: rename actions to upgrade_actions
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46209
diff changeset
690 self.upgrade_actions = upgrade_actions
6b40aac4da8e upgrade: rename actions to upgrade_actions
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46209
diff changeset
691 self._upgrade_actions_names = set([a.name for a in upgrade_actions])
46213
30310886d423 upgrade: introduce post upgrade and downgrade message for improvements
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46212
diff changeset
692 self.removed_actions = removed_actions
46056
c407513a44a3 upgrade: start moving the "to be happening" data in a dedicated object
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46052
diff changeset
693 self.revlogs_to_process = revlogs_to_process
46191
aba979b1b90b upgrade: move `printrequirements()` to UpgradeOperation class
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46190
diff changeset
694 # requirements which will be added by the operation
aba979b1b90b upgrade: move `printrequirements()` to UpgradeOperation class
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46190
diff changeset
695 self._added_requirements = (
aba979b1b90b upgrade: move `printrequirements()` to UpgradeOperation class
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46190
diff changeset
696 self.new_requirements - self.current_requirements
aba979b1b90b upgrade: move `printrequirements()` to UpgradeOperation class
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46190
diff changeset
697 )
aba979b1b90b upgrade: move `printrequirements()` to UpgradeOperation class
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46190
diff changeset
698 # requirements which will be removed by the operation
aba979b1b90b upgrade: move `printrequirements()` to UpgradeOperation class
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46190
diff changeset
699 self._removed_requirements = (
aba979b1b90b upgrade: move `printrequirements()` to UpgradeOperation class
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46190
diff changeset
700 self.current_requirements - self.new_requirements
aba979b1b90b upgrade: move `printrequirements()` to UpgradeOperation class
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46190
diff changeset
701 )
aba979b1b90b upgrade: move `printrequirements()` to UpgradeOperation class
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46190
diff changeset
702 # requirements which will be preserved by the operation
aba979b1b90b upgrade: move `printrequirements()` to UpgradeOperation class
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46190
diff changeset
703 self._preserved_requirements = (
aba979b1b90b upgrade: move `printrequirements()` to UpgradeOperation class
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46190
diff changeset
704 self.current_requirements & self.new_requirements
aba979b1b90b upgrade: move `printrequirements()` to UpgradeOperation class
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46190
diff changeset
705 )
46192
25d11b24dedf upgrade: move printing of unused optimizations to UpgradeOperation class
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46191
diff changeset
706 # optimizations which are not used and it's recommended that they
25d11b24dedf upgrade: move printing of unused optimizations to UpgradeOperation class
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46191
diff changeset
707 # should use them
25d11b24dedf upgrade: move printing of unused optimizations to UpgradeOperation class
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46191
diff changeset
708 all_optimizations = findoptimizations(None)
25d11b24dedf upgrade: move printing of unused optimizations to UpgradeOperation class
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46191
diff changeset
709 self.unused_optimizations = [
46210
6b40aac4da8e upgrade: rename actions to upgrade_actions
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46209
diff changeset
710 i for i in all_optimizations if i not in self.upgrade_actions
46192
25d11b24dedf upgrade: move printing of unused optimizations to UpgradeOperation class
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46191
diff changeset
711 ]
46056
c407513a44a3 upgrade: start moving the "to be happening" data in a dedicated object
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46052
diff changeset
712
46215
82f3ee1a505f actions: store deltareuse mode of whole operation in UpgradeOperation
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46213
diff changeset
713 # delta reuse mode of this upgrade operation
82f3ee1a505f actions: store deltareuse mode of whole operation in UpgradeOperation
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46213
diff changeset
714 self.delta_reuse_mode = revlog.revlog.DELTAREUSEALWAYS
82f3ee1a505f actions: store deltareuse mode of whole operation in UpgradeOperation
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46213
diff changeset
715 if b're-delta-all' in self._upgrade_actions_names:
82f3ee1a505f actions: store deltareuse mode of whole operation in UpgradeOperation
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46213
diff changeset
716 self.delta_reuse_mode = revlog.revlog.DELTAREUSENEVER
82f3ee1a505f actions: store deltareuse mode of whole operation in UpgradeOperation
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46213
diff changeset
717 elif b're-delta-parent' in self._upgrade_actions_names:
82f3ee1a505f actions: store deltareuse mode of whole operation in UpgradeOperation
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46213
diff changeset
718 self.delta_reuse_mode = revlog.revlog.DELTAREUSESAMEREVS
82f3ee1a505f actions: store deltareuse mode of whole operation in UpgradeOperation
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46213
diff changeset
719 elif b're-delta-multibase' in self._upgrade_actions_names:
82f3ee1a505f actions: store deltareuse mode of whole operation in UpgradeOperation
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46213
diff changeset
720 self.delta_reuse_mode = revlog.revlog.DELTAREUSESAMEREVS
82f3ee1a505f actions: store deltareuse mode of whole operation in UpgradeOperation
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46213
diff changeset
721 elif b're-delta-fulladd' in self._upgrade_actions_names:
82f3ee1a505f actions: store deltareuse mode of whole operation in UpgradeOperation
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46213
diff changeset
722 self.delta_reuse_mode = revlog.revlog.DELTAREUSEFULLADD
82f3ee1a505f actions: store deltareuse mode of whole operation in UpgradeOperation
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46213
diff changeset
723
46218
3f92a9bb80f0 engine: prevent multiple checking of re-delta-multibase
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46215
diff changeset
724 # should this operation force re-delta of both parents
3f92a9bb80f0 engine: prevent multiple checking of re-delta-multibase
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46215
diff changeset
725 self.force_re_delta_both_parents = (
3f92a9bb80f0 engine: prevent multiple checking of re-delta-multibase
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46215
diff changeset
726 b're-delta-multibase' in self._upgrade_actions_names
3f92a9bb80f0 engine: prevent multiple checking of re-delta-multibase
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46215
diff changeset
727 )
3f92a9bb80f0 engine: prevent multiple checking of re-delta-multibase
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46215
diff changeset
728
46375
2e8a844d0ae0 upgrade: don't create store backup if `--no-backup` is passed
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46334
diff changeset
729 # should this operation create a backup of the store
2e8a844d0ae0 upgrade: don't create store backup if `--no-backup` is passed
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46334
diff changeset
730 self.backup_store = backup_store
2e8a844d0ae0 upgrade: don't create store backup if `--no-backup` is passed
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46334
diff changeset
731
46376
a83e1496d943 actions: calculate what all parts does the operation touches
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46375
diff changeset
732 # whether the operation touches different revlogs at all or not
a83e1496d943 actions: calculate what all parts does the operation touches
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46375
diff changeset
733 self.touches_filelogs = self._touches_filelogs()
a83e1496d943 actions: calculate what all parts does the operation touches
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46375
diff changeset
734 self.touches_manifests = self._touches_manifests()
a83e1496d943 actions: calculate what all parts does the operation touches
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46375
diff changeset
735 self.touches_changelog = self._touches_changelog()
a83e1496d943 actions: calculate what all parts does the operation touches
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46375
diff changeset
736 # whether the operation touches requirements file or not
a83e1496d943 actions: calculate what all parts does the operation touches
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46375
diff changeset
737 self.touches_requirements = self._touches_requirements()
a83e1496d943 actions: calculate what all parts does the operation touches
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46375
diff changeset
738 self.touches_store = (
a83e1496d943 actions: calculate what all parts does the operation touches
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46375
diff changeset
739 self.touches_filelogs
a83e1496d943 actions: calculate what all parts does the operation touches
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46375
diff changeset
740 or self.touches_manifests
a83e1496d943 actions: calculate what all parts does the operation touches
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46375
diff changeset
741 or self.touches_changelog
a83e1496d943 actions: calculate what all parts does the operation touches
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46375
diff changeset
742 )
a83e1496d943 actions: calculate what all parts does the operation touches
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46375
diff changeset
743 # does the operation only touches repository requirement
a83e1496d943 actions: calculate what all parts does the operation touches
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46375
diff changeset
744 self.requirements_only = (
a83e1496d943 actions: calculate what all parts does the operation touches
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46375
diff changeset
745 self.touches_requirements and not self.touches_store
a83e1496d943 actions: calculate what all parts does the operation touches
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46375
diff changeset
746 )
a83e1496d943 actions: calculate what all parts does the operation touches
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46375
diff changeset
747
a83e1496d943 actions: calculate what all parts does the operation touches
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46375
diff changeset
748 def _touches_filelogs(self):
a83e1496d943 actions: calculate what all parts does the operation touches
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46375
diff changeset
749 for a in self.upgrade_actions:
a83e1496d943 actions: calculate what all parts does the operation touches
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46375
diff changeset
750 # in optimisations, we re-process the revlogs again
a83e1496d943 actions: calculate what all parts does the operation touches
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46375
diff changeset
751 if a.type == OPTIMISATION:
a83e1496d943 actions: calculate what all parts does the operation touches
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46375
diff changeset
752 return True
a83e1496d943 actions: calculate what all parts does the operation touches
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46375
diff changeset
753 elif a.touches_filelogs:
a83e1496d943 actions: calculate what all parts does the operation touches
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46375
diff changeset
754 return True
a83e1496d943 actions: calculate what all parts does the operation touches
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46375
diff changeset
755 for a in self.removed_actions:
a83e1496d943 actions: calculate what all parts does the operation touches
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46375
diff changeset
756 if a.touches_filelogs:
a83e1496d943 actions: calculate what all parts does the operation touches
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46375
diff changeset
757 return True
a83e1496d943 actions: calculate what all parts does the operation touches
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46375
diff changeset
758 return False
a83e1496d943 actions: calculate what all parts does the operation touches
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46375
diff changeset
759
a83e1496d943 actions: calculate what all parts does the operation touches
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46375
diff changeset
760 def _touches_manifests(self):
a83e1496d943 actions: calculate what all parts does the operation touches
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46375
diff changeset
761 for a in self.upgrade_actions:
a83e1496d943 actions: calculate what all parts does the operation touches
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46375
diff changeset
762 # in optimisations, we re-process the revlogs again
a83e1496d943 actions: calculate what all parts does the operation touches
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46375
diff changeset
763 if a.type == OPTIMISATION:
a83e1496d943 actions: calculate what all parts does the operation touches
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46375
diff changeset
764 return True
a83e1496d943 actions: calculate what all parts does the operation touches
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46375
diff changeset
765 elif a.touches_manifests:
a83e1496d943 actions: calculate what all parts does the operation touches
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46375
diff changeset
766 return True
a83e1496d943 actions: calculate what all parts does the operation touches
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46375
diff changeset
767 for a in self.removed_actions:
a83e1496d943 actions: calculate what all parts does the operation touches
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46375
diff changeset
768 if a.touches_manifests:
a83e1496d943 actions: calculate what all parts does the operation touches
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46375
diff changeset
769 return True
a83e1496d943 actions: calculate what all parts does the operation touches
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46375
diff changeset
770 return False
a83e1496d943 actions: calculate what all parts does the operation touches
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46375
diff changeset
771
a83e1496d943 actions: calculate what all parts does the operation touches
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46375
diff changeset
772 def _touches_changelog(self):
a83e1496d943 actions: calculate what all parts does the operation touches
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46375
diff changeset
773 for a in self.upgrade_actions:
a83e1496d943 actions: calculate what all parts does the operation touches
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46375
diff changeset
774 # in optimisations, we re-process the revlogs again
a83e1496d943 actions: calculate what all parts does the operation touches
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46375
diff changeset
775 if a.type == OPTIMISATION:
a83e1496d943 actions: calculate what all parts does the operation touches
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46375
diff changeset
776 return True
a83e1496d943 actions: calculate what all parts does the operation touches
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46375
diff changeset
777 elif a.touches_changelog:
a83e1496d943 actions: calculate what all parts does the operation touches
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46375
diff changeset
778 return True
a83e1496d943 actions: calculate what all parts does the operation touches
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46375
diff changeset
779 for a in self.removed_actions:
a83e1496d943 actions: calculate what all parts does the operation touches
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46375
diff changeset
780 if a.touches_changelog:
a83e1496d943 actions: calculate what all parts does the operation touches
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46375
diff changeset
781 return True
a83e1496d943 actions: calculate what all parts does the operation touches
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46375
diff changeset
782 return False
a83e1496d943 actions: calculate what all parts does the operation touches
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46375
diff changeset
783
a83e1496d943 actions: calculate what all parts does the operation touches
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46375
diff changeset
784 def _touches_requirements(self):
a83e1496d943 actions: calculate what all parts does the operation touches
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46375
diff changeset
785 for a in self.upgrade_actions:
a83e1496d943 actions: calculate what all parts does the operation touches
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46375
diff changeset
786 # optimisations are used to re-process revlogs and does not result
a83e1496d943 actions: calculate what all parts does the operation touches
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46375
diff changeset
787 # in a requirement being added or removed
a83e1496d943 actions: calculate what all parts does the operation touches
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46375
diff changeset
788 if a.type == OPTIMISATION:
a83e1496d943 actions: calculate what all parts does the operation touches
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46375
diff changeset
789 pass
a83e1496d943 actions: calculate what all parts does the operation touches
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46375
diff changeset
790 elif a.touches_requirements:
a83e1496d943 actions: calculate what all parts does the operation touches
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46375
diff changeset
791 return True
a83e1496d943 actions: calculate what all parts does the operation touches
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46375
diff changeset
792 for a in self.removed_actions:
a83e1496d943 actions: calculate what all parts does the operation touches
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46375
diff changeset
793 if a.touches_requirements:
a83e1496d943 actions: calculate what all parts does the operation touches
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46375
diff changeset
794 return True
a83e1496d943 actions: calculate what all parts does the operation touches
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46375
diff changeset
795
a83e1496d943 actions: calculate what all parts does the operation touches
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46375
diff changeset
796 return False
a83e1496d943 actions: calculate what all parts does the operation touches
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46375
diff changeset
797
46190
9ab2ab5bf9af upgrade: move `printoptimisations() to UpgradeOperation class
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46189
diff changeset
798 def _write_labeled(self, l, label):
9ab2ab5bf9af upgrade: move `printoptimisations() to UpgradeOperation class
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46189
diff changeset
799 """
9ab2ab5bf9af upgrade: move `printoptimisations() to UpgradeOperation class
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46189
diff changeset
800 Utility function to aid writing of a list under one label
9ab2ab5bf9af upgrade: move `printoptimisations() to UpgradeOperation class
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46189
diff changeset
801 """
9ab2ab5bf9af upgrade: move `printoptimisations() to UpgradeOperation class
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46189
diff changeset
802 first = True
9ab2ab5bf9af upgrade: move `printoptimisations() to UpgradeOperation class
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46189
diff changeset
803 for r in sorted(l):
9ab2ab5bf9af upgrade: move `printoptimisations() to UpgradeOperation class
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46189
diff changeset
804 if not first:
9ab2ab5bf9af upgrade: move `printoptimisations() to UpgradeOperation class
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46189
diff changeset
805 self.ui.write(b', ')
9ab2ab5bf9af upgrade: move `printoptimisations() to UpgradeOperation class
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46189
diff changeset
806 self.ui.write(r, label=label)
9ab2ab5bf9af upgrade: move `printoptimisations() to UpgradeOperation class
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46189
diff changeset
807 first = False
9ab2ab5bf9af upgrade: move `printoptimisations() to UpgradeOperation class
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46189
diff changeset
808
46191
aba979b1b90b upgrade: move `printrequirements()` to UpgradeOperation class
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46190
diff changeset
809 def print_requirements(self):
aba979b1b90b upgrade: move `printrequirements()` to UpgradeOperation class
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46190
diff changeset
810 self.ui.write(_(b'requirements\n'))
aba979b1b90b upgrade: move `printrequirements()` to UpgradeOperation class
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46190
diff changeset
811 self.ui.write(_(b' preserved: '))
aba979b1b90b upgrade: move `printrequirements()` to UpgradeOperation class
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46190
diff changeset
812 self._write_labeled(
aba979b1b90b upgrade: move `printrequirements()` to UpgradeOperation class
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46190
diff changeset
813 self._preserved_requirements, "upgrade-repo.requirement.preserved"
aba979b1b90b upgrade: move `printrequirements()` to UpgradeOperation class
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46190
diff changeset
814 )
aba979b1b90b upgrade: move `printrequirements()` to UpgradeOperation class
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46190
diff changeset
815 self.ui.write((b'\n'))
aba979b1b90b upgrade: move `printrequirements()` to UpgradeOperation class
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46190
diff changeset
816 if self._removed_requirements:
aba979b1b90b upgrade: move `printrequirements()` to UpgradeOperation class
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46190
diff changeset
817 self.ui.write(_(b' removed: '))
aba979b1b90b upgrade: move `printrequirements()` to UpgradeOperation class
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46190
diff changeset
818 self._write_labeled(
aba979b1b90b upgrade: move `printrequirements()` to UpgradeOperation class
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46190
diff changeset
819 self._removed_requirements, "upgrade-repo.requirement.removed"
aba979b1b90b upgrade: move `printrequirements()` to UpgradeOperation class
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46190
diff changeset
820 )
aba979b1b90b upgrade: move `printrequirements()` to UpgradeOperation class
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46190
diff changeset
821 self.ui.write((b'\n'))
aba979b1b90b upgrade: move `printrequirements()` to UpgradeOperation class
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46190
diff changeset
822 if self._added_requirements:
aba979b1b90b upgrade: move `printrequirements()` to UpgradeOperation class
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46190
diff changeset
823 self.ui.write(_(b' added: '))
aba979b1b90b upgrade: move `printrequirements()` to UpgradeOperation class
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46190
diff changeset
824 self._write_labeled(
aba979b1b90b upgrade: move `printrequirements()` to UpgradeOperation class
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46190
diff changeset
825 self._added_requirements, "upgrade-repo.requirement.added"
aba979b1b90b upgrade: move `printrequirements()` to UpgradeOperation class
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46190
diff changeset
826 )
aba979b1b90b upgrade: move `printrequirements()` to UpgradeOperation class
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46190
diff changeset
827 self.ui.write((b'\n'))
aba979b1b90b upgrade: move `printrequirements()` to UpgradeOperation class
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46190
diff changeset
828 self.ui.write(b'\n')
aba979b1b90b upgrade: move `printrequirements()` to UpgradeOperation class
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46190
diff changeset
829
46190
9ab2ab5bf9af upgrade: move `printoptimisations() to UpgradeOperation class
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46189
diff changeset
830 def print_optimisations(self):
46210
6b40aac4da8e upgrade: rename actions to upgrade_actions
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46209
diff changeset
831 optimisations = [
6b40aac4da8e upgrade: rename actions to upgrade_actions
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46209
diff changeset
832 a for a in self.upgrade_actions if a.type == OPTIMISATION
6b40aac4da8e upgrade: rename actions to upgrade_actions
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46209
diff changeset
833 ]
46190
9ab2ab5bf9af upgrade: move `printoptimisations() to UpgradeOperation class
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46189
diff changeset
834 optimisations.sort(key=lambda a: a.name)
9ab2ab5bf9af upgrade: move `printoptimisations() to UpgradeOperation class
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46189
diff changeset
835 if optimisations:
9ab2ab5bf9af upgrade: move `printoptimisations() to UpgradeOperation class
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46189
diff changeset
836 self.ui.write(_(b'optimisations: '))
9ab2ab5bf9af upgrade: move `printoptimisations() to UpgradeOperation class
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46189
diff changeset
837 self._write_labeled(
9ab2ab5bf9af upgrade: move `printoptimisations() to UpgradeOperation class
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46189
diff changeset
838 [a.name for a in optimisations],
9ab2ab5bf9af upgrade: move `printoptimisations() to UpgradeOperation class
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46189
diff changeset
839 "upgrade-repo.optimisation.performed",
9ab2ab5bf9af upgrade: move `printoptimisations() to UpgradeOperation class
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46189
diff changeset
840 )
9ab2ab5bf9af upgrade: move `printoptimisations() to UpgradeOperation class
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46189
diff changeset
841 self.ui.write(b'\n\n')
9ab2ab5bf9af upgrade: move `printoptimisations() to UpgradeOperation class
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46189
diff changeset
842
46189
dfddcbb0c244 upgrade: move `printupgradeactions()` to UpgradeOperation class
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46188
diff changeset
843 def print_upgrade_actions(self):
46210
6b40aac4da8e upgrade: rename actions to upgrade_actions
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46209
diff changeset
844 for a in self.upgrade_actions:
46189
dfddcbb0c244 upgrade: move `printupgradeactions()` to UpgradeOperation class
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46188
diff changeset
845 self.ui.status(b'%s\n %s\n\n' % (a.name, a.upgrademessage))
dfddcbb0c244 upgrade: move `printupgradeactions()` to UpgradeOperation class
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46188
diff changeset
846
46188
945b33a7edfd upgrade: move `print_affected_revlogs()` to UpgradeOperation class
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46056
diff changeset
847 def print_affected_revlogs(self):
945b33a7edfd upgrade: move `print_affected_revlogs()` to UpgradeOperation class
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46056
diff changeset
848 if not self.revlogs_to_process:
945b33a7edfd upgrade: move `print_affected_revlogs()` to UpgradeOperation class
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46056
diff changeset
849 self.ui.write((b'no revlogs to process\n'))
945b33a7edfd upgrade: move `print_affected_revlogs()` to UpgradeOperation class
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46056
diff changeset
850 else:
945b33a7edfd upgrade: move `print_affected_revlogs()` to UpgradeOperation class
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46056
diff changeset
851 self.ui.write((b'processed revlogs:\n'))
945b33a7edfd upgrade: move `print_affected_revlogs()` to UpgradeOperation class
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46056
diff changeset
852 for r in sorted(self.revlogs_to_process):
945b33a7edfd upgrade: move `print_affected_revlogs()` to UpgradeOperation class
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46056
diff changeset
853 self.ui.write((b' - %s\n' % r))
945b33a7edfd upgrade: move `print_affected_revlogs()` to UpgradeOperation class
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46056
diff changeset
854 self.ui.write((b'\n'))
945b33a7edfd upgrade: move `print_affected_revlogs()` to UpgradeOperation class
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46056
diff changeset
855
46192
25d11b24dedf upgrade: move printing of unused optimizations to UpgradeOperation class
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46191
diff changeset
856 def print_unused_optimizations(self):
25d11b24dedf upgrade: move printing of unused optimizations to UpgradeOperation class
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46191
diff changeset
857 for i in self.unused_optimizations:
25d11b24dedf upgrade: move printing of unused optimizations to UpgradeOperation class
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46191
diff changeset
858 self.ui.status(_(b'%s\n %s\n\n') % (i.name, i.description))
25d11b24dedf upgrade: move printing of unused optimizations to UpgradeOperation class
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46191
diff changeset
859
46210
6b40aac4da8e upgrade: rename actions to upgrade_actions
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46209
diff changeset
860 def has_upgrade_action(self, name):
47062
f38bf44e077f black: make codebase compatible with black v21.4b2 and v20.8b1
Kyle Lippincott <spectral@google.com>
parents: 47006
diff changeset
861 """Check whether the upgrade operation will perform this action"""
46210
6b40aac4da8e upgrade: rename actions to upgrade_actions
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46209
diff changeset
862 return name in self._upgrade_actions_names
46189
dfddcbb0c244 upgrade: move `printupgradeactions()` to UpgradeOperation class
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46188
diff changeset
863
46213
30310886d423 upgrade: introduce post upgrade and downgrade message for improvements
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46212
diff changeset
864 def print_post_op_messages(self):
47062
f38bf44e077f black: make codebase compatible with black v21.4b2 and v20.8b1
Kyle Lippincott <spectral@google.com>
parents: 47006
diff changeset
865 """print post upgrade operation warning messages"""
46213
30310886d423 upgrade: introduce post upgrade and downgrade message for improvements
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46212
diff changeset
866 for a in self.upgrade_actions:
30310886d423 upgrade: introduce post upgrade and downgrade message for improvements
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46212
diff changeset
867 if a.postupgrademessage is not None:
30310886d423 upgrade: introduce post upgrade and downgrade message for improvements
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46212
diff changeset
868 self.ui.warn(b'%s\n' % a.postupgrademessage)
30310886d423 upgrade: introduce post upgrade and downgrade message for improvements
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46212
diff changeset
869 for a in self.removed_actions:
30310886d423 upgrade: introduce post upgrade and downgrade message for improvements
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46212
diff changeset
870 if a.postdowngrademessage is not None:
30310886d423 upgrade: introduce post upgrade and downgrade message for improvements
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46212
diff changeset
871 self.ui.warn(b'%s\n' % a.postdowngrademessage)
30310886d423 upgrade: introduce post upgrade and downgrade message for improvements
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46212
diff changeset
872
46056
c407513a44a3 upgrade: start moving the "to be happening" data in a dedicated object
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46052
diff changeset
873
46049
a2a59cde9b9f upgrade: gather code about source checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46048
diff changeset
874 ### Code checking if a repository can got through the upgrade process at all. #
a2a59cde9b9f upgrade: gather code about source checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46048
diff changeset
875
a2a59cde9b9f upgrade: gather code about source checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46048
diff changeset
876
a2a59cde9b9f upgrade: gather code about source checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46048
diff changeset
877 def requiredsourcerequirements(repo):
a2a59cde9b9f upgrade: gather code about source checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46048
diff changeset
878 """Obtain requirements required to be present to upgrade a repo.
a2a59cde9b9f upgrade: gather code about source checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46048
diff changeset
879
a2a59cde9b9f upgrade: gather code about source checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46048
diff changeset
880 An upgrade will not be allowed if the repository doesn't have the
a2a59cde9b9f upgrade: gather code about source checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46048
diff changeset
881 requirements returned by this function.
a2a59cde9b9f upgrade: gather code about source checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46048
diff changeset
882 """
a2a59cde9b9f upgrade: gather code about source checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46048
diff changeset
883 return {
a2a59cde9b9f upgrade: gather code about source checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46048
diff changeset
884 # Introduced in Mercurial 0.9.2.
46637
ab58098bebed requirements: also add a store constant
Raphaël Gomès <rgomes@octobus.net>
parents: 46636
diff changeset
885 requirements.STORE_REQUIREMENT,
46049
a2a59cde9b9f upgrade: gather code about source checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46048
diff changeset
886 }
a2a59cde9b9f upgrade: gather code about source checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46048
diff changeset
887
a2a59cde9b9f upgrade: gather code about source checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46048
diff changeset
888
a2a59cde9b9f upgrade: gather code about source checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46048
diff changeset
889 def blocksourcerequirements(repo):
a2a59cde9b9f upgrade: gather code about source checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46048
diff changeset
890 """Obtain requirements that will prevent an upgrade from occurring.
a2a59cde9b9f upgrade: gather code about source checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46048
diff changeset
891
a2a59cde9b9f upgrade: gather code about source checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46048
diff changeset
892 An upgrade cannot be performed if the source repository contains a
a2a59cde9b9f upgrade: gather code about source checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46048
diff changeset
893 requirements in the returned set.
a2a59cde9b9f upgrade: gather code about source checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46048
diff changeset
894 """
a2a59cde9b9f upgrade: gather code about source checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46048
diff changeset
895 return {
a2a59cde9b9f upgrade: gather code about source checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46048
diff changeset
896 # The upgrade code does not yet support these experimental features.
a2a59cde9b9f upgrade: gather code about source checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46048
diff changeset
897 # This is an artificial limitation.
a2a59cde9b9f upgrade: gather code about source checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46048
diff changeset
898 requirements.TREEMANIFEST_REQUIREMENT,
a2a59cde9b9f upgrade: gather code about source checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46048
diff changeset
899 # This was a precursor to generaldelta and was never enabled by default.
a2a59cde9b9f upgrade: gather code about source checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46048
diff changeset
900 # It should (hopefully) not exist in the wild.
a2a59cde9b9f upgrade: gather code about source checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46048
diff changeset
901 b'parentdelta',
a2a59cde9b9f upgrade: gather code about source checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46048
diff changeset
902 # Upgrade should operate on the actual store, not the shared link.
a2a59cde9b9f upgrade: gather code about source checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46048
diff changeset
903 requirements.SHARED_REQUIREMENT,
a2a59cde9b9f upgrade: gather code about source checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46048
diff changeset
904 }
a2a59cde9b9f upgrade: gather code about source checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46048
diff changeset
905
a2a59cde9b9f upgrade: gather code about source checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46048
diff changeset
906
46705
fd55a9eb1507 revlogv2: allow upgrading to v2
Raphaël Gomès <rgomes@octobus.net>
parents: 46638
diff changeset
907 def check_revlog_version(reqs):
fd55a9eb1507 revlogv2: allow upgrading to v2
Raphaël Gomès <rgomes@octobus.net>
parents: 46638
diff changeset
908 """Check that the requirements contain at least one Revlog version"""
fd55a9eb1507 revlogv2: allow upgrading to v2
Raphaël Gomès <rgomes@octobus.net>
parents: 46638
diff changeset
909 all_revlogs = {
fd55a9eb1507 revlogv2: allow upgrading to v2
Raphaël Gomès <rgomes@octobus.net>
parents: 46638
diff changeset
910 requirements.REVLOGV1_REQUIREMENT,
fd55a9eb1507 revlogv2: allow upgrading to v2
Raphaël Gomès <rgomes@octobus.net>
parents: 46638
diff changeset
911 requirements.REVLOGV2_REQUIREMENT,
fd55a9eb1507 revlogv2: allow upgrading to v2
Raphaël Gomès <rgomes@octobus.net>
parents: 46638
diff changeset
912 }
fd55a9eb1507 revlogv2: allow upgrading to v2
Raphaël Gomès <rgomes@octobus.net>
parents: 46638
diff changeset
913 if not all_revlogs.intersection(reqs):
fd55a9eb1507 revlogv2: allow upgrading to v2
Raphaël Gomès <rgomes@octobus.net>
parents: 46638
diff changeset
914 msg = _(b'cannot upgrade repository; missing a revlog version')
fd55a9eb1507 revlogv2: allow upgrading to v2
Raphaël Gomès <rgomes@octobus.net>
parents: 46638
diff changeset
915 raise error.Abort(msg)
fd55a9eb1507 revlogv2: allow upgrading to v2
Raphaël Gomès <rgomes@octobus.net>
parents: 46638
diff changeset
916
fd55a9eb1507 revlogv2: allow upgrading to v2
Raphaël Gomès <rgomes@octobus.net>
parents: 46638
diff changeset
917
46048
f4f956342cf1 upgrade: move requirements checking in a dedicated function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46047
diff changeset
918 def check_source_requirements(repo):
f4f956342cf1 upgrade: move requirements checking in a dedicated function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46047
diff changeset
919 """Ensure that no existing requirements prevent the repository upgrade"""
f4f956342cf1 upgrade: move requirements checking in a dedicated function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46047
diff changeset
920
46705
fd55a9eb1507 revlogv2: allow upgrading to v2
Raphaël Gomès <rgomes@octobus.net>
parents: 46638
diff changeset
921 check_revlog_version(repo.requirements)
46048
f4f956342cf1 upgrade: move requirements checking in a dedicated function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46047
diff changeset
922 required = requiredsourcerequirements(repo)
f4f956342cf1 upgrade: move requirements checking in a dedicated function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46047
diff changeset
923 missingreqs = required - repo.requirements
f4f956342cf1 upgrade: move requirements checking in a dedicated function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46047
diff changeset
924 if missingreqs:
f4f956342cf1 upgrade: move requirements checking in a dedicated function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46047
diff changeset
925 msg = _(b'cannot upgrade repository; requirement missing: %s')
f4f956342cf1 upgrade: move requirements checking in a dedicated function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46047
diff changeset
926 missingreqs = b', '.join(sorted(missingreqs))
f4f956342cf1 upgrade: move requirements checking in a dedicated function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46047
diff changeset
927 raise error.Abort(msg % missingreqs)
f4f956342cf1 upgrade: move requirements checking in a dedicated function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46047
diff changeset
928
f4f956342cf1 upgrade: move requirements checking in a dedicated function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46047
diff changeset
929 blocking = blocksourcerequirements(repo)
f4f956342cf1 upgrade: move requirements checking in a dedicated function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46047
diff changeset
930 blockingreqs = blocking & repo.requirements
f4f956342cf1 upgrade: move requirements checking in a dedicated function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46047
diff changeset
931 if blockingreqs:
f4f956342cf1 upgrade: move requirements checking in a dedicated function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46047
diff changeset
932 m = _(b'cannot upgrade repository; unsupported source requirement: %s')
f4f956342cf1 upgrade: move requirements checking in a dedicated function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46047
diff changeset
933 blockingreqs = b', '.join(sorted(blockingreqs))
f4f956342cf1 upgrade: move requirements checking in a dedicated function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46047
diff changeset
934 raise error.Abort(m % blockingreqs)
46051
72b7b4bf3e65 upgrade: extract the checking of target requirements change
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46049
diff changeset
935
72b7b4bf3e65 upgrade: extract the checking of target requirements change
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46049
diff changeset
936
72b7b4bf3e65 upgrade: extract the checking of target requirements change
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46049
diff changeset
937 ### Verify the validity of the planned requirement changes ####################
72b7b4bf3e65 upgrade: extract the checking of target requirements change
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46049
diff changeset
938
72b7b4bf3e65 upgrade: extract the checking of target requirements change
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46049
diff changeset
939
46052
08802795ae90 upgrade: gather code about requirement checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46051
diff changeset
940 def supportremovedrequirements(repo):
08802795ae90 upgrade: gather code about requirement checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46051
diff changeset
941 """Obtain requirements that can be removed during an upgrade.
08802795ae90 upgrade: gather code about requirement checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46051
diff changeset
942
08802795ae90 upgrade: gather code about requirement checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46051
diff changeset
943 If an upgrade were to create a repository that dropped a requirement,
08802795ae90 upgrade: gather code about requirement checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46051
diff changeset
944 the dropped requirement must appear in the returned set for the upgrade
08802795ae90 upgrade: gather code about requirement checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46051
diff changeset
945 to be allowed.
08802795ae90 upgrade: gather code about requirement checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46051
diff changeset
946 """
08802795ae90 upgrade: gather code about requirement checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46051
diff changeset
947 supported = {
08802795ae90 upgrade: gather code about requirement checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46051
diff changeset
948 requirements.SPARSEREVLOG_REQUIREMENT,
08802795ae90 upgrade: gather code about requirement checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46051
diff changeset
949 requirements.COPIESSDC_REQUIREMENT,
08802795ae90 upgrade: gather code about requirement checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46051
diff changeset
950 requirements.NODEMAP_REQUIREMENT,
08802795ae90 upgrade: gather code about requirement checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46051
diff changeset
951 requirements.SHARESAFE_REQUIREMENT,
46705
fd55a9eb1507 revlogv2: allow upgrading to v2
Raphaël Gomès <rgomes@octobus.net>
parents: 46638
diff changeset
952 requirements.REVLOGV2_REQUIREMENT,
47264
60668fce06d0 changelogv2: allow upgrade from and to this format
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47263
diff changeset
953 requirements.CHANGELOGV2_REQUIREMENT,
46705
fd55a9eb1507 revlogv2: allow upgrading to v2
Raphaël Gomès <rgomes@octobus.net>
parents: 46638
diff changeset
954 requirements.REVLOGV1_REQUIREMENT,
46052
08802795ae90 upgrade: gather code about requirement checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46051
diff changeset
955 }
08802795ae90 upgrade: gather code about requirement checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46051
diff changeset
956 for name in compression.compengines:
08802795ae90 upgrade: gather code about requirement checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46051
diff changeset
957 engine = compression.compengines[name]
08802795ae90 upgrade: gather code about requirement checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46051
diff changeset
958 if engine.available() and engine.revlogheader():
08802795ae90 upgrade: gather code about requirement checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46051
diff changeset
959 supported.add(b'exp-compression-%s' % name)
08802795ae90 upgrade: gather code about requirement checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46051
diff changeset
960 if engine.name() == b'zstd':
08802795ae90 upgrade: gather code about requirement checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46051
diff changeset
961 supported.add(b'revlog-compression-zstd')
08802795ae90 upgrade: gather code about requirement checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46051
diff changeset
962 return supported
08802795ae90 upgrade: gather code about requirement checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46051
diff changeset
963
08802795ae90 upgrade: gather code about requirement checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46051
diff changeset
964
08802795ae90 upgrade: gather code about requirement checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46051
diff changeset
965 def supporteddestrequirements(repo):
08802795ae90 upgrade: gather code about requirement checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46051
diff changeset
966 """Obtain requirements that upgrade supports in the destination.
08802795ae90 upgrade: gather code about requirement checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46051
diff changeset
967
08802795ae90 upgrade: gather code about requirement checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46051
diff changeset
968 If the result of the upgrade would create requirements not in this set,
08802795ae90 upgrade: gather code about requirement checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46051
diff changeset
969 the upgrade is disallowed.
08802795ae90 upgrade: gather code about requirement checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46051
diff changeset
970
08802795ae90 upgrade: gather code about requirement checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46051
diff changeset
971 Extensions should monkeypatch this to add their custom requirements.
08802795ae90 upgrade: gather code about requirement checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46051
diff changeset
972 """
08802795ae90 upgrade: gather code about requirement checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46051
diff changeset
973 supported = {
46636
c3773636ddbb requirements: also add a dotencode constant
Raphaël Gomès <rgomes@octobus.net>
parents: 46627
diff changeset
974 requirements.DOTENCODE_REQUIREMENT,
46638
b4c2a2af25e2 requirements: also add a fncache constant
Raphaël Gomès <rgomes@octobus.net>
parents: 46637
diff changeset
975 requirements.FNCACHE_REQUIREMENT,
46627
f4c325bf80fc requirements: also add a generaldelta constant
Raphaël Gomès <rgomes@octobus.net>
parents: 46626
diff changeset
976 requirements.GENERALDELTA_REQUIREMENT,
46705
fd55a9eb1507 revlogv2: allow upgrading to v2
Raphaël Gomès <rgomes@octobus.net>
parents: 46638
diff changeset
977 requirements.REVLOGV1_REQUIREMENT, # allowed in case of downgrade
46637
ab58098bebed requirements: also add a store constant
Raphaël Gomès <rgomes@octobus.net>
parents: 46636
diff changeset
978 requirements.STORE_REQUIREMENT,
46052
08802795ae90 upgrade: gather code about requirement checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46051
diff changeset
979 requirements.SPARSEREVLOG_REQUIREMENT,
08802795ae90 upgrade: gather code about requirement checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46051
diff changeset
980 requirements.COPIESSDC_REQUIREMENT,
08802795ae90 upgrade: gather code about requirement checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46051
diff changeset
981 requirements.NODEMAP_REQUIREMENT,
08802795ae90 upgrade: gather code about requirement checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46051
diff changeset
982 requirements.SHARESAFE_REQUIREMENT,
46705
fd55a9eb1507 revlogv2: allow upgrading to v2
Raphaël Gomès <rgomes@octobus.net>
parents: 46638
diff changeset
983 requirements.REVLOGV2_REQUIREMENT,
47264
60668fce06d0 changelogv2: allow upgrade from and to this format
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47263
diff changeset
984 requirements.CHANGELOGV2_REQUIREMENT,
47277
ed0d54b20c5b dirstate-v2: Add a new experimental `exp-dirstate-v2` repository requirement
Simon Sapin <simon.sapin@octobus.net>
parents: 47264
diff changeset
985 requirements.DIRSTATE_V2_REQUIREMENT,
46052
08802795ae90 upgrade: gather code about requirement checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46051
diff changeset
986 }
08802795ae90 upgrade: gather code about requirement checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46051
diff changeset
987 for name in compression.compengines:
08802795ae90 upgrade: gather code about requirement checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46051
diff changeset
988 engine = compression.compengines[name]
08802795ae90 upgrade: gather code about requirement checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46051
diff changeset
989 if engine.available() and engine.revlogheader():
08802795ae90 upgrade: gather code about requirement checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46051
diff changeset
990 supported.add(b'exp-compression-%s' % name)
08802795ae90 upgrade: gather code about requirement checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46051
diff changeset
991 if engine.name() == b'zstd':
08802795ae90 upgrade: gather code about requirement checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46051
diff changeset
992 supported.add(b'revlog-compression-zstd')
08802795ae90 upgrade: gather code about requirement checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46051
diff changeset
993 return supported
08802795ae90 upgrade: gather code about requirement checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46051
diff changeset
994
08802795ae90 upgrade: gather code about requirement checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46051
diff changeset
995
08802795ae90 upgrade: gather code about requirement checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46051
diff changeset
996 def allowednewrequirements(repo):
08802795ae90 upgrade: gather code about requirement checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46051
diff changeset
997 """Obtain requirements that can be added to a repository during upgrade.
08802795ae90 upgrade: gather code about requirement checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46051
diff changeset
998
08802795ae90 upgrade: gather code about requirement checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46051
diff changeset
999 This is used to disallow proposed requirements from being added when
08802795ae90 upgrade: gather code about requirement checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46051
diff changeset
1000 they weren't present before.
08802795ae90 upgrade: gather code about requirement checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46051
diff changeset
1001
08802795ae90 upgrade: gather code about requirement checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46051
diff changeset
1002 We use a list of allowed requirement additions instead of a list of known
08802795ae90 upgrade: gather code about requirement checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46051
diff changeset
1003 bad additions because the whitelist approach is safer and will prevent
08802795ae90 upgrade: gather code about requirement checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46051
diff changeset
1004 future, unknown requirements from accidentally being added.
08802795ae90 upgrade: gather code about requirement checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46051
diff changeset
1005 """
08802795ae90 upgrade: gather code about requirement checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46051
diff changeset
1006 supported = {
46636
c3773636ddbb requirements: also add a dotencode constant
Raphaël Gomès <rgomes@octobus.net>
parents: 46627
diff changeset
1007 requirements.DOTENCODE_REQUIREMENT,
46638
b4c2a2af25e2 requirements: also add a fncache constant
Raphaël Gomès <rgomes@octobus.net>
parents: 46637
diff changeset
1008 requirements.FNCACHE_REQUIREMENT,
46627
f4c325bf80fc requirements: also add a generaldelta constant
Raphaël Gomès <rgomes@octobus.net>
parents: 46626
diff changeset
1009 requirements.GENERALDELTA_REQUIREMENT,
46052
08802795ae90 upgrade: gather code about requirement checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46051
diff changeset
1010 requirements.SPARSEREVLOG_REQUIREMENT,
08802795ae90 upgrade: gather code about requirement checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46051
diff changeset
1011 requirements.COPIESSDC_REQUIREMENT,
08802795ae90 upgrade: gather code about requirement checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46051
diff changeset
1012 requirements.NODEMAP_REQUIREMENT,
08802795ae90 upgrade: gather code about requirement checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46051
diff changeset
1013 requirements.SHARESAFE_REQUIREMENT,
46705
fd55a9eb1507 revlogv2: allow upgrading to v2
Raphaël Gomès <rgomes@octobus.net>
parents: 46638
diff changeset
1014 requirements.REVLOGV1_REQUIREMENT,
fd55a9eb1507 revlogv2: allow upgrading to v2
Raphaël Gomès <rgomes@octobus.net>
parents: 46638
diff changeset
1015 requirements.REVLOGV2_REQUIREMENT,
47264
60668fce06d0 changelogv2: allow upgrade from and to this format
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47263
diff changeset
1016 requirements.CHANGELOGV2_REQUIREMENT,
46052
08802795ae90 upgrade: gather code about requirement checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46051
diff changeset
1017 }
08802795ae90 upgrade: gather code about requirement checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46051
diff changeset
1018 for name in compression.compengines:
08802795ae90 upgrade: gather code about requirement checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46051
diff changeset
1019 engine = compression.compengines[name]
08802795ae90 upgrade: gather code about requirement checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46051
diff changeset
1020 if engine.available() and engine.revlogheader():
08802795ae90 upgrade: gather code about requirement checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46051
diff changeset
1021 supported.add(b'exp-compression-%s' % name)
08802795ae90 upgrade: gather code about requirement checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46051
diff changeset
1022 if engine.name() == b'zstd':
08802795ae90 upgrade: gather code about requirement checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46051
diff changeset
1023 supported.add(b'revlog-compression-zstd')
08802795ae90 upgrade: gather code about requirement checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46051
diff changeset
1024 return supported
08802795ae90 upgrade: gather code about requirement checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46051
diff changeset
1025
08802795ae90 upgrade: gather code about requirement checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46051
diff changeset
1026
46051
72b7b4bf3e65 upgrade: extract the checking of target requirements change
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46049
diff changeset
1027 def check_requirements_changes(repo, new_reqs):
72b7b4bf3e65 upgrade: extract the checking of target requirements change
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46049
diff changeset
1028 old_reqs = repo.requirements
46705
fd55a9eb1507 revlogv2: allow upgrading to v2
Raphaël Gomès <rgomes@octobus.net>
parents: 46638
diff changeset
1029 check_revlog_version(repo.requirements)
46051
72b7b4bf3e65 upgrade: extract the checking of target requirements change
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46049
diff changeset
1030 support_removal = supportremovedrequirements(repo)
72b7b4bf3e65 upgrade: extract the checking of target requirements change
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46049
diff changeset
1031 no_remove_reqs = old_reqs - new_reqs - support_removal
72b7b4bf3e65 upgrade: extract the checking of target requirements change
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46049
diff changeset
1032 if no_remove_reqs:
72b7b4bf3e65 upgrade: extract the checking of target requirements change
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46049
diff changeset
1033 msg = _(b'cannot upgrade repository; requirement would be removed: %s')
72b7b4bf3e65 upgrade: extract the checking of target requirements change
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46049
diff changeset
1034 no_remove_reqs = b', '.join(sorted(no_remove_reqs))
72b7b4bf3e65 upgrade: extract the checking of target requirements change
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46049
diff changeset
1035 raise error.Abort(msg % no_remove_reqs)
72b7b4bf3e65 upgrade: extract the checking of target requirements change
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46049
diff changeset
1036
72b7b4bf3e65 upgrade: extract the checking of target requirements change
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46049
diff changeset
1037 support_addition = allowednewrequirements(repo)
72b7b4bf3e65 upgrade: extract the checking of target requirements change
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46049
diff changeset
1038 no_add_reqs = new_reqs - old_reqs - support_addition
72b7b4bf3e65 upgrade: extract the checking of target requirements change
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46049
diff changeset
1039 if no_add_reqs:
72b7b4bf3e65 upgrade: extract the checking of target requirements change
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46049
diff changeset
1040 m = _(b'cannot upgrade repository; do not support adding requirement: ')
72b7b4bf3e65 upgrade: extract the checking of target requirements change
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46049
diff changeset
1041 no_add_reqs = b', '.join(sorted(no_add_reqs))
72b7b4bf3e65 upgrade: extract the checking of target requirements change
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46049
diff changeset
1042 raise error.Abort(m + no_add_reqs)
72b7b4bf3e65 upgrade: extract the checking of target requirements change
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46049
diff changeset
1043
72b7b4bf3e65 upgrade: extract the checking of target requirements change
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46049
diff changeset
1044 supported = supporteddestrequirements(repo)
72b7b4bf3e65 upgrade: extract the checking of target requirements change
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46049
diff changeset
1045 unsupported_reqs = new_reqs - supported
72b7b4bf3e65 upgrade: extract the checking of target requirements change
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46049
diff changeset
1046 if unsupported_reqs:
72b7b4bf3e65 upgrade: extract the checking of target requirements change
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46049
diff changeset
1047 msg = _(
72b7b4bf3e65 upgrade: extract the checking of target requirements change
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46049
diff changeset
1048 b'cannot upgrade repository; do not support destination '
72b7b4bf3e65 upgrade: extract the checking of target requirements change
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46049
diff changeset
1049 b'requirement: %s'
72b7b4bf3e65 upgrade: extract the checking of target requirements change
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46049
diff changeset
1050 )
72b7b4bf3e65 upgrade: extract the checking of target requirements change
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46049
diff changeset
1051 unsupported_reqs = b', '.join(sorted(unsupported_reqs))
72b7b4bf3e65 upgrade: extract the checking of target requirements change
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46049
diff changeset
1052 raise error.Abort(msg % unsupported_reqs)