annotate mercurial/upgrade_utils/actions.py @ 48295:bf11ff22a9af

dirstate-v2: freeze the on-disk format It seems the format as reached a good balance. With a core of new capabilities that motivated it initially and enough new feature and room for future improvement to be a clear progress we can set a milestone for. Having the format frozen will help the feature to get real life testing, outside of the test suite. The feature itself stay experimental but the config gains a new name to avoid people enable non-frozen version by default. If too many bugs are reported during the RC we might move the format back to experimental and drop its support in future version (in favor of a new one) Differential Revision: https://phab.mercurial-scm.org/D11709
author Pierre-Yves David <pierre-yves.david@octobus.net>
date Wed, 20 Oct 2021 00:57:02 +0200
parents 4259a72fe528
children 7ee07e1a25c0
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
46051
4b89cf08d8dc upgrade: split definition and management of the actions from the main code
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46050
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: 46050
diff changeset
11 from .. import (
46052
f4f956342cf1 upgrade: move requirements checking in a dedicated function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46051
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,
45392
77b8588dd84e requirements: introduce new requirements related module
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45391
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,
46050
f105c49e89cd upgrade: split actual upgrade code away from the main module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46039
diff changeset
18 )
f105c49e89cd upgrade: split actual upgrade code away from the main module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46039
diff changeset
19
46051
4b89cf08d8dc upgrade: split definition and management of the actions from the main code
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46050
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
42842
a3c2ffcd266f upgrade: make sure we reclone all revlogs when updating to some format
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42841
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: 42841
diff changeset
30 RECLONES_REQUIREMENTS = {
46666
f4c325bf80fc requirements: also add a generaldelta constant
Rapha?l Gom?s <rgomes@octobus.net>
parents: 46665
diff changeset
31 requirements.GENERALDELTA_REQUIREMENT,
45393
d7dcc75a3eae localrepo: move requirements constant to requirements module
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45392
diff changeset
32 requirements.SPARSEREVLOG_REQUIREMENT,
47243
33096e77598c revlogv2: mark revlogv2 as requires a full upgrade
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47240
diff changeset
33 requirements.REVLOGV2_REQUIREMENT,
47275
60668fce06d0 changelogv2: allow upgrade from and to this format
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47274
diff changeset
34 requirements.CHANGELOGV2_REQUIREMENT,
42842
a3c2ffcd266f upgrade: make sure we reclone all revlogs when updating to some format
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42841
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: 42841
diff changeset
36
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43031
diff changeset
37
35311
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'
46009
cfae98c4e1f1 upgrade: capitalize the `deficiency` constant
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46008
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):
47327
e985a36c2aa3 upgrade: Use `improvement` subclasses everywhere, not instances
Simon Sapin <simon.sapin@octobus.net>
parents: 47288
diff changeset
47 """Represents an improvement that can be made as part of an upgrade."""
30776
3997edc4a86d repair: determine what upgrade will do
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30775
diff changeset
48
47327
e985a36c2aa3 upgrade: Use `improvement` subclasses everywhere, not instances
Simon Sapin <simon.sapin@octobus.net>
parents: 47288
diff changeset
49 ### The following attributes should be defined for each subclass:
46448
a83e1496d943 actions: calculate what all parts does the operation touches
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46447
diff changeset
50
47327
e985a36c2aa3 upgrade: Use `improvement` subclasses everywhere, not instances
Simon Sapin <simon.sapin@octobus.net>
parents: 47288
diff changeset
51 # Either ``FORMAT_VARIANT`` or ``OPTIMISATION``.
e985a36c2aa3 upgrade: Use `improvement` subclasses everywhere, not instances
Simon Sapin <simon.sapin@octobus.net>
parents: 47288
diff changeset
52 # A format variant is where we change the storage format. Not all format
e985a36c2aa3 upgrade: Use `improvement` subclasses everywhere, not instances
Simon Sapin <simon.sapin@octobus.net>
parents: 47288
diff changeset
53 # variant changes are an obvious problem.
e985a36c2aa3 upgrade: Use `improvement` subclasses everywhere, not instances
Simon Sapin <simon.sapin@octobus.net>
parents: 47288
diff changeset
54 # An optimization is an action (sometimes optional) that
e985a36c2aa3 upgrade: Use `improvement` subclasses everywhere, not instances
Simon Sapin <simon.sapin@octobus.net>
parents: 47288
diff changeset
55 # can be taken to further improve the state of the repository.
e985a36c2aa3 upgrade: Use `improvement` subclasses everywhere, not instances
Simon Sapin <simon.sapin@octobus.net>
parents: 47288
diff changeset
56 type = None
32031
11a2461fc9b1 upgrade: move descriptions and selection logic in individual classes
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 32030
diff changeset
57
11a2461fc9b1 upgrade: move descriptions and selection logic in individual classes
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 32030
diff changeset
58 # 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
59 # 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
60 name = None
32030
e47223576b8d upgrade: introduce a 'formatvariant' class
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 32029
diff changeset
61
32031
11a2461fc9b1 upgrade: move descriptions and selection logic in individual classes
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 32030
diff changeset
62 # 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
63 # 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
64 # 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
65 # 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
66 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
67
11a2461fc9b1 upgrade: move descriptions and selection logic in individual classes
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 32030
diff changeset
68 # 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
69 # 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
70 upgrademessage = None
32030
e47223576b8d upgrade: introduce a 'formatvariant' class
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 32029
diff changeset
71
32031
11a2461fc9b1 upgrade: move descriptions and selection logic in individual classes
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 32030
diff changeset
72 # 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
73 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
74
46213
30310886d423 upgrade: introduce post upgrade and downgrade message for improvements
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46212
diff changeset
75 # 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
76 # 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
77 postupgrademessage = None
30310886d423 upgrade: introduce post upgrade and downgrade message for improvements
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46212
diff changeset
78
30310886d423 upgrade: introduce post upgrade and downgrade message for improvements
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46212
diff changeset
79 # 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
80 # 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
81 postdowngrademessage = None
30310886d423 upgrade: introduce post upgrade and downgrade message for improvements
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46212
diff changeset
82
47328
a43d256c041a dirstate-v2: Add `hg debugupgraderepo` command support
Simon Sapin <simon.sapin@octobus.net>
parents: 47327
diff changeset
83 # By default we assume that every improvement touches requirements and all revlogs
47327
e985a36c2aa3 upgrade: Use `improvement` subclasses everywhere, not instances
Simon Sapin <simon.sapin@octobus.net>
parents: 47288
diff changeset
84
e985a36c2aa3 upgrade: Use `improvement` subclasses everywhere, not instances
Simon Sapin <simon.sapin@octobus.net>
parents: 47288
diff changeset
85 # Whether this improvement touches filelogs
46448
a83e1496d943 actions: calculate what all parts does the operation touches
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46447
diff changeset
86 touches_filelogs = True
47327
e985a36c2aa3 upgrade: Use `improvement` subclasses everywhere, not instances
Simon Sapin <simon.sapin@octobus.net>
parents: 47288
diff changeset
87
e985a36c2aa3 upgrade: Use `improvement` subclasses everywhere, not instances
Simon Sapin <simon.sapin@octobus.net>
parents: 47288
diff changeset
88 # Whether this improvement touches manifests
46448
a83e1496d943 actions: calculate what all parts does the operation touches
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46447
diff changeset
89 touches_manifests = True
47327
e985a36c2aa3 upgrade: Use `improvement` subclasses everywhere, not instances
Simon Sapin <simon.sapin@octobus.net>
parents: 47288
diff changeset
90
e985a36c2aa3 upgrade: Use `improvement` subclasses everywhere, not instances
Simon Sapin <simon.sapin@octobus.net>
parents: 47288
diff changeset
91 # Whether this improvement touches changelog
46448
a83e1496d943 actions: calculate what all parts does the operation touches
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46447
diff changeset
92 touches_changelog = True
47327
e985a36c2aa3 upgrade: Use `improvement` subclasses everywhere, not instances
Simon Sapin <simon.sapin@octobus.net>
parents: 47288
diff changeset
93
e985a36c2aa3 upgrade: Use `improvement` subclasses everywhere, not instances
Simon Sapin <simon.sapin@octobus.net>
parents: 47288
diff changeset
94 # Whether this improvement changes repository requirements
46448
a83e1496d943 actions: calculate what all parts does the operation touches
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46447
diff changeset
95 touches_requirements = True
a83e1496d943 actions: calculate what all parts does the operation touches
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46447
diff changeset
96
47328
a43d256c041a dirstate-v2: Add `hg debugupgraderepo` command support
Simon Sapin <simon.sapin@octobus.net>
parents: 47327
diff changeset
97 # Whether this improvement touches the dirstate
a43d256c041a dirstate-v2: Add `hg debugupgraderepo` command support
Simon Sapin <simon.sapin@octobus.net>
parents: 47327
diff changeset
98 touches_dirstate = False
a43d256c041a dirstate-v2: Add `hg debugupgraderepo` command support
Simon Sapin <simon.sapin@octobus.net>
parents: 47327
diff changeset
99
47327
e985a36c2aa3 upgrade: Use `improvement` subclasses everywhere, not instances
Simon Sapin <simon.sapin@octobus.net>
parents: 47288
diff changeset
100
e985a36c2aa3 upgrade: Use `improvement` subclasses everywhere, not instances
Simon Sapin <simon.sapin@octobus.net>
parents: 47288
diff changeset
101 allformatvariant = [] # type: List[Type['formatvariant']]
e985a36c2aa3 upgrade: Use `improvement` subclasses everywhere, not instances
Simon Sapin <simon.sapin@octobus.net>
parents: 47288
diff changeset
102
e985a36c2aa3 upgrade: Use `improvement` subclasses everywhere, not instances
Simon Sapin <simon.sapin@octobus.net>
parents: 47288
diff changeset
103
e985a36c2aa3 upgrade: Use `improvement` subclasses everywhere, not instances
Simon Sapin <simon.sapin@octobus.net>
parents: 47288
diff changeset
104 def registerformatvariant(cls):
e985a36c2aa3 upgrade: Use `improvement` subclasses everywhere, not instances
Simon Sapin <simon.sapin@octobus.net>
parents: 47288
diff changeset
105 allformatvariant.append(cls)
e985a36c2aa3 upgrade: Use `improvement` subclasses everywhere, not instances
Simon Sapin <simon.sapin@octobus.net>
parents: 47288
diff changeset
106 return cls
e985a36c2aa3 upgrade: Use `improvement` subclasses everywhere, not instances
Simon Sapin <simon.sapin@octobus.net>
parents: 47288
diff changeset
107
e985a36c2aa3 upgrade: Use `improvement` subclasses everywhere, not instances
Simon Sapin <simon.sapin@octobus.net>
parents: 47288
diff changeset
108
e985a36c2aa3 upgrade: Use `improvement` subclasses everywhere, not instances
Simon Sapin <simon.sapin@octobus.net>
parents: 47288
diff changeset
109 class formatvariant(improvement):
e985a36c2aa3 upgrade: Use `improvement` subclasses everywhere, not instances
Simon Sapin <simon.sapin@octobus.net>
parents: 47288
diff changeset
110 """an improvement subclass dedicated to repository format"""
e985a36c2aa3 upgrade: Use `improvement` subclasses everywhere, not instances
Simon Sapin <simon.sapin@octobus.net>
parents: 47288
diff changeset
111
e985a36c2aa3 upgrade: Use `improvement` subclasses everywhere, not instances
Simon Sapin <simon.sapin@octobus.net>
parents: 47288
diff changeset
112 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
113
11a2461fc9b1 upgrade: move descriptions and selection logic in individual classes
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 32030
diff changeset
114 @staticmethod
11a2461fc9b1 upgrade: move descriptions and selection logic in individual classes
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 32030
diff changeset
115 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
116 """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
117 raise NotImplementedError()
32030
e47223576b8d upgrade: introduce a 'formatvariant' class
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 32029
diff changeset
118
32031
11a2461fc9b1 upgrade: move descriptions and selection logic in individual classes
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 32030
diff changeset
119 @staticmethod
11a2461fc9b1 upgrade: move descriptions and selection logic in individual classes
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 32030
diff changeset
120 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
121 """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
122 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
123
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43031
diff changeset
124
32031
11a2461fc9b1 upgrade: move descriptions and selection logic in individual classes
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 32030
diff changeset
125 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
126 """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
127
11a2461fc9b1 upgrade: move descriptions and selection logic in individual classes
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 32030
diff changeset
128 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
129 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
130 """
e47223576b8d upgrade: introduce a 'formatvariant' class
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 32029
diff changeset
131
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 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
133 _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
134
11a2461fc9b1 upgrade: move descriptions and selection logic in individual classes
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 32030
diff changeset
135 @staticmethod
39563
41aa5dced975 localrepo: pass ui to newreporequirements() (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39271
diff changeset
136 def _newreporequirements(ui):
39997
dbcb466d0065 localrepo: define storage backend in creation options (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39875
diff changeset
137 return localrepo.newreporequirements(
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43031
diff changeset
138 ui, localrepo.defaultcreateopts(ui)
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43031
diff changeset
139 )
32031
11a2461fc9b1 upgrade: move descriptions and selection logic in individual classes
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 32030
diff changeset
140
11a2461fc9b1 upgrade: move descriptions and selection logic in individual classes
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 32030
diff changeset
141 @classmethod
11a2461fc9b1 upgrade: move descriptions and selection logic in individual classes
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 32030
diff changeset
142 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
143 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
144 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
145
11a2461fc9b1 upgrade: move descriptions and selection logic in individual classes
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 32030
diff changeset
146 @classmethod
11a2461fc9b1 upgrade: move descriptions and selection logic in individual classes
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 32030
diff changeset
147 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
148 assert cls._requirement is not None
39563
41aa5dced975 localrepo: pass ui to newreporequirements() (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39271
diff changeset
149 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
150
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43031
diff changeset
151
32032
189778a06743 upgrade: register all format variants in a list
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 32031
diff changeset
152 @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
153 class fncache(requirementformatvariant):
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
154 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
155
46677
b4c2a2af25e2 requirements: also add a fncache constant
Rapha?l Gom?s <rgomes@octobus.net>
parents: 46676
diff changeset
156 _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
157
11a2461fc9b1 upgrade: move descriptions and selection logic in individual classes
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 32030
diff changeset
158 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
159
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43031
diff changeset
160 description = _(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
161 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
162 b'repository performance is sub-optimal'
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43031
diff changeset
163 )
32031
11a2461fc9b1 upgrade: move descriptions and selection logic in individual classes
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 32030
diff changeset
164
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43031
diff changeset
165 upgrademessage = _(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
166 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
167 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
168 b'operations should be improved'
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43031
diff changeset
169 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43031
diff changeset
170
32031
11a2461fc9b1 upgrade: move descriptions and selection logic in individual classes
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 32030
diff changeset
171
32032
189778a06743 upgrade: register all format variants in a list
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 32031
diff changeset
172 @registerformatvariant
47328
a43d256c041a dirstate-v2: Add `hg debugupgraderepo` command support
Simon Sapin <simon.sapin@octobus.net>
parents: 47327
diff changeset
173 class dirstatev2(requirementformatvariant):
a43d256c041a dirstate-v2: Add `hg debugupgraderepo` command support
Simon Sapin <simon.sapin@octobus.net>
parents: 47327
diff changeset
174 name = b'dirstate-v2'
a43d256c041a dirstate-v2: Add `hg debugupgraderepo` command support
Simon Sapin <simon.sapin@octobus.net>
parents: 47327
diff changeset
175 _requirement = requirements.DIRSTATE_V2_REQUIREMENT
a43d256c041a dirstate-v2: Add `hg debugupgraderepo` command support
Simon Sapin <simon.sapin@octobus.net>
parents: 47327
diff changeset
176
a43d256c041a dirstate-v2: Add `hg debugupgraderepo` command support
Simon Sapin <simon.sapin@octobus.net>
parents: 47327
diff changeset
177 default = False
a43d256c041a dirstate-v2: Add `hg debugupgraderepo` command support
Simon Sapin <simon.sapin@octobus.net>
parents: 47327
diff changeset
178
a43d256c041a dirstate-v2: Add `hg debugupgraderepo` command support
Simon Sapin <simon.sapin@octobus.net>
parents: 47327
diff changeset
179 description = _(
a43d256c041a dirstate-v2: Add `hg debugupgraderepo` command support
Simon Sapin <simon.sapin@octobus.net>
parents: 47327
diff changeset
180 b'version 1 of the dirstate file format requires '
48295
bf11ff22a9af dirstate-v2: freeze the on-disk format
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47646
diff changeset
181 b'reading and parsing it all at once.\n'
bf11ff22a9af dirstate-v2: freeze the on-disk format
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47646
diff changeset
182 b'Version 2 has a better structure,'
bf11ff22a9af dirstate-v2: freeze the on-disk format
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47646
diff changeset
183 b'better information and lighter update mechanism'
47328
a43d256c041a dirstate-v2: Add `hg debugupgraderepo` command support
Simon Sapin <simon.sapin@octobus.net>
parents: 47327
diff changeset
184 )
a43d256c041a dirstate-v2: Add `hg debugupgraderepo` command support
Simon Sapin <simon.sapin@octobus.net>
parents: 47327
diff changeset
185
a43d256c041a dirstate-v2: Add `hg debugupgraderepo` command support
Simon Sapin <simon.sapin@octobus.net>
parents: 47327
diff changeset
186 upgrademessage = _(b'"hg status" will be faster')
a43d256c041a dirstate-v2: Add `hg debugupgraderepo` command support
Simon Sapin <simon.sapin@octobus.net>
parents: 47327
diff changeset
187
a43d256c041a dirstate-v2: Add `hg debugupgraderepo` command support
Simon Sapin <simon.sapin@octobus.net>
parents: 47327
diff changeset
188 touches_filelogs = False
a43d256c041a dirstate-v2: Add `hg debugupgraderepo` command support
Simon Sapin <simon.sapin@octobus.net>
parents: 47327
diff changeset
189 touches_manifests = False
a43d256c041a dirstate-v2: Add `hg debugupgraderepo` command support
Simon Sapin <simon.sapin@octobus.net>
parents: 47327
diff changeset
190 touches_changelog = False
a43d256c041a dirstate-v2: Add `hg debugupgraderepo` command support
Simon Sapin <simon.sapin@octobus.net>
parents: 47327
diff changeset
191 touches_requirements = True
a43d256c041a dirstate-v2: Add `hg debugupgraderepo` command support
Simon Sapin <simon.sapin@octobus.net>
parents: 47327
diff changeset
192 touches_dirstate = True
a43d256c041a dirstate-v2: Add `hg debugupgraderepo` command support
Simon Sapin <simon.sapin@octobus.net>
parents: 47327
diff changeset
193
a43d256c041a dirstate-v2: Add `hg debugupgraderepo` command support
Simon Sapin <simon.sapin@octobus.net>
parents: 47327
diff changeset
194
a43d256c041a dirstate-v2: Add `hg debugupgraderepo` command support
Simon Sapin <simon.sapin@octobus.net>
parents: 47327
diff changeset
195 @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
196 class dotencode(requirementformatvariant):
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
197 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
198
46675
c3773636ddbb requirements: also add a dotencode constant
Rapha?l Gom?s <rgomes@octobus.net>
parents: 46666
diff changeset
199 _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
200
11a2461fc9b1 upgrade: move descriptions and selection logic in individual classes
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 32030
diff changeset
201 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
202
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43031
diff changeset
203 description = _(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
204 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
205 b'space may not work correctly'
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43031
diff changeset
206 )
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
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43031
diff changeset
208 upgrademessage = _(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
209 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
210 b'beginning with a space or period'
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43031
diff changeset
211 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43031
diff changeset
212
32031
11a2461fc9b1 upgrade: move descriptions and selection logic in individual classes
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 32030
diff changeset
213
32032
189778a06743 upgrade: register all format variants in a list
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 32031
diff changeset
214 @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
215 class generaldelta(requirementformatvariant):
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
216 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
217
46666
f4c325bf80fc requirements: also add a generaldelta constant
Rapha?l Gom?s <rgomes@octobus.net>
parents: 46665
diff changeset
218 _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
219
11a2461fc9b1 upgrade: move descriptions and selection logic in individual classes
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 32030
diff changeset
220 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
221
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43031
diff changeset
222 description = _(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
223 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
224 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
225 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
226 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
227 b'resources, making "hg push" and "hg pull" slower'
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43031
diff changeset
228 )
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
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43031
diff changeset
230 upgrademessage = _(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
231 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
232 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
233 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
234 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
235 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
236 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
237 b'faster'
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43031
diff changeset
238 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43031
diff changeset
239
32031
11a2461fc9b1 upgrade: move descriptions and selection logic in individual classes
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 32030
diff changeset
240
32032
189778a06743 upgrade: register all format variants in a list
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 32031
diff changeset
241 @registerformatvariant
46051
4b89cf08d8dc upgrade: split definition and management of the actions from the main code
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46050
diff changeset
242 class sharesafe(requirementformatvariant):
46334
6e81446bf1d9 share: move share safe functionality out of experimental
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46230
diff changeset
243 name = b'share-safe'
46017
705c37f22859 upgrade: add support for experimental safe share mode
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46012
diff changeset
244 _requirement = requirements.SHARESAFE_REQUIREMENT
705c37f22859 upgrade: add support for experimental safe share mode
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46012
diff changeset
245
705c37f22859 upgrade: add support for experimental safe share mode
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46012
diff changeset
246 default = False
705c37f22859 upgrade: add support for experimental safe share mode
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46012
diff changeset
247
705c37f22859 upgrade: add support for experimental safe share mode
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46012
diff changeset
248 description = _(
705c37f22859 upgrade: add support for experimental safe share mode
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46012
diff changeset
249 b'old shared repositories do not share source repository '
705c37f22859 upgrade: add support for experimental safe share mode
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46012
diff changeset
250 b'requirements and config. This leads to various problems '
705c37f22859 upgrade: add support for experimental safe share mode
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46012
diff changeset
251 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: 46012
diff changeset
252 b'extensions are enabled.'
705c37f22859 upgrade: add support for experimental safe share mode
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46012
diff changeset
253 )
705c37f22859 upgrade: add support for experimental safe share mode
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46012
diff changeset
254
705c37f22859 upgrade: add support for experimental safe share mode
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46012
diff changeset
255 upgrademessage = _(
705c37f22859 upgrade: add support for experimental safe share mode
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46012
diff changeset
256 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: 46012
diff changeset
257 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: 46012
diff changeset
258 )
705c37f22859 upgrade: add support for experimental safe share mode
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46012
diff changeset
259
46213
30310886d423 upgrade: introduce post upgrade and downgrade message for improvements
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46212
diff changeset
260 postdowngrademessage = _(
30310886d423 upgrade: introduce post upgrade and downgrade message for improvements
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46212
diff changeset
261 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
262 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
263 b' be reshared.'
30310886d423 upgrade: introduce post upgrade and downgrade message for improvements
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46212
diff changeset
264 )
30310886d423 upgrade: introduce post upgrade and downgrade message for improvements
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46212
diff changeset
265
30310886d423 upgrade: introduce post upgrade and downgrade message for improvements
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46212
diff changeset
266 postupgrademessage = _(
30310886d423 upgrade: introduce post upgrade and downgrade message for improvements
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46212
diff changeset
267 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
268 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
269 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
270 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
271 )
30310886d423 upgrade: introduce post upgrade and downgrade message for improvements
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46212
diff changeset
272
46449
60ea95471b83 upgrade: mark sharesafe improvement as only touching requirements
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46448
diff changeset
273 # upgrade only needs to change the requirements
60ea95471b83 upgrade: mark sharesafe improvement as only touching requirements
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46448
diff changeset
274 touches_filelogs = False
60ea95471b83 upgrade: mark sharesafe improvement as only touching requirements
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46448
diff changeset
275 touches_manifests = False
60ea95471b83 upgrade: mark sharesafe improvement as only touching requirements
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46448
diff changeset
276 touches_changelog = False
60ea95471b83 upgrade: mark sharesafe improvement as only touching requirements
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46448
diff changeset
277 touches_requirements = True
60ea95471b83 upgrade: mark sharesafe improvement as only touching requirements
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46448
diff changeset
278
46017
705c37f22859 upgrade: add support for experimental safe share mode
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46012
diff changeset
279
705c37f22859 upgrade: add support for experimental safe share mode
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46012
diff changeset
280 @registerformatvariant
38719
4ad2a1ff0404 upgrade: add information about sparse-revlog
Paul Morelle <paul.morelle@octobus.net>
parents: 38405
diff changeset
281 class sparserevlog(requirementformatvariant):
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
282 name = b'sparserevlog'
38719
4ad2a1ff0404 upgrade: add information about sparse-revlog
Paul Morelle <paul.morelle@octobus.net>
parents: 38405
diff changeset
283
45393
d7dcc75a3eae localrepo: move requirements constant to requirements module
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45392
diff changeset
284 _requirement = requirements.SPARSEREVLOG_REQUIREMENT
38719
4ad2a1ff0404 upgrade: add information about sparse-revlog
Paul Morelle <paul.morelle@octobus.net>
parents: 38405
diff changeset
285
40936
3764330f76a6 sparse-revlog: enabled by default
Boris Feld <boris.feld@octobus.net>
parents: 40855
diff changeset
286 default = True
38719
4ad2a1ff0404 upgrade: add information about sparse-revlog
Paul Morelle <paul.morelle@octobus.net>
parents: 38405
diff changeset
287
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43031
diff changeset
288 description = _(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
289 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
290 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
291 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
292 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
293 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
294 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
295 b'exchange.'
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43031
diff changeset
296 )
38719
4ad2a1ff0404 upgrade: add information about sparse-revlog
Paul Morelle <paul.morelle@octobus.net>
parents: 38405
diff changeset
297
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43031
diff changeset
298 upgrademessage = _(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
299 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
300 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
301 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
302 b'better compression and faster exchange with server.'
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43031
diff changeset
303 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43031
diff changeset
304
38719
4ad2a1ff0404 upgrade: add information about sparse-revlog
Paul Morelle <paul.morelle@octobus.net>
parents: 38405
diff changeset
305
4ad2a1ff0404 upgrade: add information about sparse-revlog
Paul Morelle <paul.morelle@octobus.net>
parents: 38405
diff changeset
306 @registerformatvariant
44876
ea9563e9e65a nodemap: teach `hg debugformat` about the persistent nodemap option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 44875
diff changeset
307 class persistentnodemap(requirementformatvariant):
ea9563e9e65a nodemap: teach `hg debugformat` about the persistent nodemap option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 44875
diff changeset
308 name = b'persistent-nodemap'
ea9563e9e65a nodemap: teach `hg debugformat` about the persistent nodemap option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 44875
diff changeset
309
45393
d7dcc75a3eae localrepo: move requirements constant to requirements module
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45392
diff changeset
310 _requirement = requirements.NODEMAP_REQUIREMENT
44876
ea9563e9e65a nodemap: teach `hg debugformat` about the persistent nodemap option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 44875
diff changeset
311
ea9563e9e65a nodemap: teach `hg debugformat` about the persistent nodemap option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 44875
diff changeset
312 default = False
ea9563e9e65a nodemap: teach `hg debugformat` about the persistent nodemap option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 44875
diff changeset
313
ea9563e9e65a nodemap: teach `hg debugformat` about the persistent nodemap option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 44875
diff changeset
314 description = _(
ea9563e9e65a nodemap: teach `hg debugformat` about the persistent nodemap option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 44875
diff changeset
315 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: 44875
diff changeset
316 )
ea9563e9e65a nodemap: teach `hg debugformat` about the persistent nodemap option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 44875
diff changeset
317
ea9563e9e65a nodemap: teach `hg debugformat` about the persistent nodemap option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 44875
diff changeset
318 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: 44875
diff changeset
319
ea9563e9e65a nodemap: teach `hg debugformat` about the persistent nodemap option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 44875
diff changeset
320
ea9563e9e65a nodemap: teach `hg debugformat` about the persistent nodemap option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 44875
diff changeset
321 @registerformatvariant
43138
f9dc98a97cdb sidedatacopies: teach upgrade about the new requirement
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 43135
diff changeset
322 class copiessdc(requirementformatvariant):
f9dc98a97cdb sidedatacopies: teach upgrade about the new requirement
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 43135
diff changeset
323 name = b'copies-sdc'
f9dc98a97cdb sidedatacopies: teach upgrade about the new requirement
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 43135
diff changeset
324
45393
d7dcc75a3eae localrepo: move requirements constant to requirements module
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45392
diff changeset
325 _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
326
f9dc98a97cdb sidedatacopies: teach upgrade about the new requirement
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 43135
diff changeset
327 default = False
f9dc98a97cdb sidedatacopies: teach upgrade about the new requirement
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 43135
diff changeset
328
f9dc98a97cdb sidedatacopies: teach upgrade about the new requirement
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 43135
diff changeset
329 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
330
f9dc98a97cdb sidedatacopies: teach upgrade about the new requirement
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 43135
diff changeset
331 upgrademessage = _(
f9dc98a97cdb sidedatacopies: teach upgrade about the new requirement
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 43135
diff changeset
332 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
333 )
f9dc98a97cdb sidedatacopies: teach upgrade about the new requirement
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 43135
diff changeset
334
f9dc98a97cdb sidedatacopies: teach upgrade about the new requirement
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 43135
diff changeset
335
f9dc98a97cdb sidedatacopies: teach upgrade about the new requirement
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 43135
diff changeset
336 @registerformatvariant
46718
fd55a9eb1507 revlogv2: allow upgrading to v2
Rapha?l Gom?s <rgomes@octobus.net>
parents: 46677
diff changeset
337 class revlogv2(requirementformatvariant):
fd55a9eb1507 revlogv2: allow upgrading to v2
Rapha?l Gom?s <rgomes@octobus.net>
parents: 46677
diff changeset
338 name = b'revlog-v2'
fd55a9eb1507 revlogv2: allow upgrading to v2
Rapha?l Gom?s <rgomes@octobus.net>
parents: 46677
diff changeset
339 _requirement = requirements.REVLOGV2_REQUIREMENT
fd55a9eb1507 revlogv2: allow upgrading to v2
Rapha?l Gom?s <rgomes@octobus.net>
parents: 46677
diff changeset
340 default = False
fd55a9eb1507 revlogv2: allow upgrading to v2
Rapha?l Gom?s <rgomes@octobus.net>
parents: 46677
diff changeset
341 description = _(b'Version 2 of the revlog.')
fd55a9eb1507 revlogv2: allow upgrading to v2
Rapha?l Gom?s <rgomes@octobus.net>
parents: 46677
diff changeset
342 upgrademessage = _(b'very experimental')
fd55a9eb1507 revlogv2: allow upgrading to v2
Rapha?l Gom?s <rgomes@octobus.net>
parents: 46677
diff changeset
343
fd55a9eb1507 revlogv2: allow upgrading to v2
Rapha?l Gom?s <rgomes@octobus.net>
parents: 46677
diff changeset
344
fd55a9eb1507 revlogv2: allow upgrading to v2
Rapha?l Gom?s <rgomes@octobus.net>
parents: 46677
diff changeset
345 @registerformatvariant
47274
6c84fc9c9a90 changelogv2: introduce a "changelogv2" feature
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47243
diff changeset
346 class changelogv2(requirementformatvariant):
6c84fc9c9a90 changelogv2: introduce a "changelogv2" feature
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47243
diff changeset
347 name = b'changelog-v2'
6c84fc9c9a90 changelogv2: introduce a "changelogv2" feature
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47243
diff changeset
348 _requirement = requirements.CHANGELOGV2_REQUIREMENT
6c84fc9c9a90 changelogv2: introduce a "changelogv2" feature
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47243
diff changeset
349 default = False
6c84fc9c9a90 changelogv2: introduce a "changelogv2" feature
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47243
diff changeset
350 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: 47243
diff changeset
351 upgrademessage = _(b'quite experimental')
6c84fc9c9a90 changelogv2: introduce a "changelogv2" feature
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47243
diff changeset
352
6c84fc9c9a90 changelogv2: introduce a "changelogv2" feature
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47243
diff changeset
353
6c84fc9c9a90 changelogv2: introduce a "changelogv2" feature
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47243
diff changeset
354 @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
355 class removecldeltachain(formatvariant):
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
356 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
357
11a2461fc9b1 upgrade: move descriptions and selection logic in individual classes
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 32030
diff changeset
358 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
359
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43031
diff changeset
360 description = _(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
361 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
362 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
363 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
364 b'than they could be'
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43031
diff changeset
365 )
32031
11a2461fc9b1 upgrade: move descriptions and selection logic in individual classes
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 32030
diff changeset
366
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43031
diff changeset
367 upgrademessage = _(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
368 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
369 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
370 b'faster; changelog size may be reduced'
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43031
diff changeset
371 )
32031
11a2461fc9b1 upgrade: move descriptions and selection logic in individual classes
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 32030
diff changeset
372
11a2461fc9b1 upgrade: move descriptions and selection logic in individual classes
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 32030
diff changeset
373 @staticmethod
11a2461fc9b1 upgrade: move descriptions and selection logic in individual classes
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 32030
diff changeset
374 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
375 # 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
376 # 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
377 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
378 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
379 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
380
11a2461fc9b1 upgrade: move descriptions and selection logic in individual classes
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 32030
diff changeset
381 @staticmethod
11a2461fc9b1 upgrade: move descriptions and selection logic in individual classes
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 32030
diff changeset
382 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
383 return True
32030
e47223576b8d upgrade: introduce a 'formatvariant' class
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 32029
diff changeset
384
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43031
diff changeset
385
46874
84a93fa7ecfd revlog-compression: use zstd by default (if available)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46851
diff changeset
386 _has_zstd = (
84a93fa7ecfd revlog-compression: use zstd by default (if available)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46851
diff changeset
387 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
388 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
389 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
390 )
84a93fa7ecfd revlog-compression: use zstd by default (if available)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46851
diff changeset
391
84a93fa7ecfd revlog-compression: use zstd by default (if available)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46851
diff changeset
392
35349
ead01b74be04 upgrade: register compression as a format variants
Boris Feld <boris.feld@octobus.net>
parents: 35344
diff changeset
393 @registerformatvariant
ead01b74be04 upgrade: register compression as a format variants
Boris Feld <boris.feld@octobus.net>
parents: 35344
diff changeset
394 class compressionengine(formatvariant):
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
395 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
396
84a93fa7ecfd revlog-compression: use zstd by default (if available)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46851
diff changeset
397 if _has_zstd:
84a93fa7ecfd revlog-compression: use zstd by default (if available)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46851
diff changeset
398 default = b'zstd'
84a93fa7ecfd revlog-compression: use zstd by default (if available)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46851
diff changeset
399 else:
84a93fa7ecfd revlog-compression: use zstd by default (if available)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46851
diff changeset
400 default = b'zlib'
35349
ead01b74be04 upgrade: register compression as a format variants
Boris Feld <boris.feld@octobus.net>
parents: 35344
diff changeset
401
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43031
diff changeset
402 description = _(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
403 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
404 b'Some engine are faster than other'
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43031
diff changeset
405 )
35349
ead01b74be04 upgrade: register compression as a format variants
Boris Feld <boris.feld@octobus.net>
parents: 35344
diff changeset
406
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43031
diff changeset
407 upgrademessage = _(
43117
8ff1ecfadcd1 cleanup: join string literals that are already on one line
Martin von Zweigbergk <martinvonz@google.com>
parents: 43089
diff changeset
408 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
409 )
35349
ead01b74be04 upgrade: register compression as a format variants
Boris Feld <boris.feld@octobus.net>
parents: 35344
diff changeset
410
ead01b74be04 upgrade: register compression as a format variants
Boris Feld <boris.feld@octobus.net>
parents: 35344
diff changeset
411 @classmethod
ead01b74be04 upgrade: register compression as a format variants
Boris Feld <boris.feld@octobus.net>
parents: 35344
diff changeset
412 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
413 # 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
414 # 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
415 #
10a6725dca6e compression: introduce an official `zstd-revlog` requirement
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42046
diff changeset
416 # 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
417 compression = b'zlib'
35349
ead01b74be04 upgrade: register compression as a format variants
Boris Feld <boris.feld@octobus.net>
parents: 35344
diff changeset
418 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
419 prefix = req.startswith
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
420 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
421 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
422 return compression
35349
ead01b74be04 upgrade: register compression as a format variants
Boris Feld <boris.feld@octobus.net>
parents: 35344
diff changeset
423
ead01b74be04 upgrade: register compression as a format variants
Boris Feld <boris.feld@octobus.net>
parents: 35344
diff changeset
424 @classmethod
ead01b74be04 upgrade: register compression as a format variants
Boris Feld <boris.feld@octobus.net>
parents: 35344
diff changeset
425 def fromconfig(cls, repo):
44413
f0027a3dd7cb revlog-compression: update the config to be a list
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 43823
diff changeset
426 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: 43823
diff changeset
427 # 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: 43823
diff changeset
428 for comp in compengines:
f0027a3dd7cb revlog-compression: update the config to be a list
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 43823
diff changeset
429 if comp in util.compengines:
46851
3aa78f2aea48 revlog-compression: fix computation of engine availability
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46719
diff changeset
430 e = util.compengines[comp]
3aa78f2aea48 revlog-compression: fix computation of engine availability
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46719
diff changeset
431 if e.available() and e.revlogheader():
3aa78f2aea48 revlog-compression: fix computation of engine availability
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46719
diff changeset
432 return comp
44413
f0027a3dd7cb revlog-compression: update the config to be a list
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 43823
diff changeset
433
f0027a3dd7cb revlog-compression: update the config to be a list
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 43823
diff changeset
434 # 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: 43823
diff changeset
435 return b','.join(compengines)
35349
ead01b74be04 upgrade: register compression as a format variants
Boris Feld <boris.feld@octobus.net>
parents: 35344
diff changeset
436
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43031
diff changeset
437
42045
d7e751ec679e compression: display compression level in debugformat
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 41092
diff changeset
438 @registerformatvariant
d7e751ec679e compression: display compression level in debugformat
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 41092
diff changeset
439 class compressionlevel(formatvariant):
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
440 name = b'compression-level'
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
441 default = b'default'
42045
d7e751ec679e compression: display compression level in debugformat
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 41092
diff changeset
442
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
443 description = _(b'compression level')
42045
d7e751ec679e compression: display compression level in debugformat
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 41092
diff changeset
444
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
445 upgrademessage = _(b'revlog content will be recompressed')
42045
d7e751ec679e compression: display compression level in debugformat
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 41092
diff changeset
446
d7e751ec679e compression: display compression level in debugformat
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 41092
diff changeset
447 @classmethod
d7e751ec679e compression: display compression level in debugformat
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 41092
diff changeset
448 def fromrepo(cls, repo):
d7e751ec679e compression: display compression level in debugformat
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 41092
diff changeset
449 comp = compressionengine.fromrepo(repo)
d7e751ec679e compression: display compression level in debugformat
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 41092
diff changeset
450 level = None
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
451 if comp == b'zlib':
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
452 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
453 elif comp == b'zstd':
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
454 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: 41092
diff changeset
455 if level is None:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
456 return b'default'
42045
d7e751ec679e compression: display compression level in debugformat
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 41092
diff changeset
457 return bytes(level)
d7e751ec679e compression: display compression level in debugformat
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 41092
diff changeset
458
d7e751ec679e compression: display compression level in debugformat
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 41092
diff changeset
459 @classmethod
d7e751ec679e compression: display compression level in debugformat
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 41092
diff changeset
460 def fromconfig(cls, repo):
d7e751ec679e compression: display compression level in debugformat
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 41092
diff changeset
461 comp = compressionengine.fromconfig(repo)
d7e751ec679e compression: display compression level in debugformat
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 41092
diff changeset
462 level = None
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
463 if comp == b'zlib':
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
464 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
465 elif comp == b'zstd':
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
466 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: 41092
diff changeset
467 if level is None:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
468 return b'default'
42045
d7e751ec679e compression: display compression level in debugformat
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 41092
diff changeset
469 return bytes(level)
d7e751ec679e compression: display compression level in debugformat
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 41092
diff changeset
470
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43031
diff changeset
471
46205
53d083fa1f83 upgrade: rename finddeficiences() to find_format_upgrades()
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46192
diff changeset
472 def find_format_upgrades(repo):
53d083fa1f83 upgrade: rename finddeficiences() to find_format_upgrades()
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46192
diff changeset
473 """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
474 upgrades = []
30776
3997edc4a86d repair: determine what upgrade will do
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30775
diff changeset
475
3997edc4a86d repair: determine what upgrade will do
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30775
diff changeset
476 # 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
477 # 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
478 # requirements, so let's not bother.
3997edc4a86d repair: determine what upgrade will do
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30775
diff changeset
479
32032
189778a06743 upgrade: register all format variants in a list
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 32031
diff changeset
480 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
481 if not fv.fromrepo(repo):
46205
53d083fa1f83 upgrade: rename finddeficiences() to find_format_upgrades()
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46192
diff changeset
482 upgrades.append(fv)
30776
3997edc4a86d repair: determine what upgrade will do
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30775
diff changeset
483
46205
53d083fa1f83 upgrade: rename finddeficiences() to find_format_upgrades()
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46192
diff changeset
484 return upgrades
30776
3997edc4a86d repair: determine what upgrade will do
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30775
diff changeset
485
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43031
diff changeset
486
46212
c97d8e0406a6 actions: introduce function to calculate downgrades
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46210
diff changeset
487 def find_format_downgrades(repo):
c97d8e0406a6 actions: introduce function to calculate downgrades
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46210
diff changeset
488 """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
489 because of disabled config option for them"""
c97d8e0406a6 actions: introduce function to calculate downgrades
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46210
diff changeset
490
c97d8e0406a6 actions: introduce function to calculate downgrades
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46210
diff changeset
491 downgrades = []
c97d8e0406a6 actions: introduce function to calculate downgrades
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46210
diff changeset
492
c97d8e0406a6 actions: introduce function to calculate downgrades
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46210
diff changeset
493 for fv in allformatvariant:
46230
1fcab88ab85c downgrade: if a compression is removed, consider that too
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46218
diff changeset
494 if fv.name == b'compression':
1fcab88ab85c downgrade: if a compression is removed, consider that too
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46218
diff changeset
495 # 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
496 # 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
497 # 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
498 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
499 downgrades.append(fv)
1fcab88ab85c downgrade: if a compression is removed, consider that too
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46218
diff changeset
500 continue
46212
c97d8e0406a6 actions: introduce function to calculate downgrades
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46210
diff changeset
501 # 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
502 # config
c97d8e0406a6 actions: introduce function to calculate downgrades
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46210
diff changeset
503 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
504 downgrades.append(fv)
c97d8e0406a6 actions: introduce function to calculate downgrades
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46210
diff changeset
505
c97d8e0406a6 actions: introduce function to calculate downgrades
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46210
diff changeset
506 return downgrades
c97d8e0406a6 actions: introduce function to calculate downgrades
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46210
diff changeset
507
c97d8e0406a6 actions: introduce function to calculate downgrades
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46210
diff changeset
508
46010
32dcd783a985 upgrade: move optimisation to something more declarative
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46009
diff changeset
509 ALL_OPTIMISATIONS = []
32dcd783a985 upgrade: move optimisation to something more declarative
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46009
diff changeset
510
32dcd783a985 upgrade: move optimisation to something more declarative
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46009
diff changeset
511
32dcd783a985 upgrade: move optimisation to something more declarative
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46009
diff changeset
512 def register_optimization(obj):
32dcd783a985 upgrade: move optimisation to something more declarative
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46009
diff changeset
513 ALL_OPTIMISATIONS.append(obj)
32dcd783a985 upgrade: move optimisation to something more declarative
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46009
diff changeset
514 return obj
32dcd783a985 upgrade: move optimisation to something more declarative
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46009
diff changeset
515
32dcd783a985 upgrade: move optimisation to something more declarative
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46009
diff changeset
516
47327
e985a36c2aa3 upgrade: Use `improvement` subclasses everywhere, not instances
Simon Sapin <simon.sapin@octobus.net>
parents: 47288
diff changeset
517 class optimization(improvement):
e985a36c2aa3 upgrade: Use `improvement` subclasses everywhere, not instances
Simon Sapin <simon.sapin@octobus.net>
parents: 47288
diff changeset
518 """an improvement subclass dedicated to optimizations"""
e985a36c2aa3 upgrade: Use `improvement` subclasses everywhere, not instances
Simon Sapin <simon.sapin@octobus.net>
parents: 47288
diff changeset
519
e985a36c2aa3 upgrade: Use `improvement` subclasses everywhere, not instances
Simon Sapin <simon.sapin@octobus.net>
parents: 47288
diff changeset
520 type = OPTIMISATION
e985a36c2aa3 upgrade: Use `improvement` subclasses everywhere, not instances
Simon Sapin <simon.sapin@octobus.net>
parents: 47288
diff changeset
521
e985a36c2aa3 upgrade: Use `improvement` subclasses everywhere, not instances
Simon Sapin <simon.sapin@octobus.net>
parents: 47288
diff changeset
522
e985a36c2aa3 upgrade: Use `improvement` subclasses everywhere, not instances
Simon Sapin <simon.sapin@octobus.net>
parents: 47288
diff changeset
523 @register_optimization
e985a36c2aa3 upgrade: Use `improvement` subclasses everywhere, not instances
Simon Sapin <simon.sapin@octobus.net>
parents: 47288
diff changeset
524 class redeltaparents(optimization):
e985a36c2aa3 upgrade: Use `improvement` subclasses everywhere, not instances
Simon Sapin <simon.sapin@octobus.net>
parents: 47288
diff changeset
525 name = b're-delta-parent'
e985a36c2aa3 upgrade: Use `improvement` subclasses everywhere, not instances
Simon Sapin <simon.sapin@octobus.net>
parents: 47288
diff changeset
526
e985a36c2aa3 upgrade: Use `improvement` subclasses everywhere, not instances
Simon Sapin <simon.sapin@octobus.net>
parents: 47288
diff changeset
527 type = OPTIMISATION
e985a36c2aa3 upgrade: Use `improvement` subclasses everywhere, not instances
Simon Sapin <simon.sapin@octobus.net>
parents: 47288
diff changeset
528
e985a36c2aa3 upgrade: Use `improvement` subclasses everywhere, not instances
Simon Sapin <simon.sapin@octobus.net>
parents: 47288
diff changeset
529 description = _(
e985a36c2aa3 upgrade: Use `improvement` subclasses everywhere, not instances
Simon Sapin <simon.sapin@octobus.net>
parents: 47288
diff changeset
530 b'deltas within internal storage will be recalculated to '
e985a36c2aa3 upgrade: Use `improvement` subclasses everywhere, not instances
Simon Sapin <simon.sapin@octobus.net>
parents: 47288
diff changeset
531 b'choose an optimal base revision where this was not '
e985a36c2aa3 upgrade: Use `improvement` subclasses everywhere, not instances
Simon Sapin <simon.sapin@octobus.net>
parents: 47288
diff changeset
532 b'already done; the size of the repository may shrink and '
e985a36c2aa3 upgrade: Use `improvement` subclasses everywhere, not instances
Simon Sapin <simon.sapin@octobus.net>
parents: 47288
diff changeset
533 b'various operations may become faster; the first time '
e985a36c2aa3 upgrade: Use `improvement` subclasses everywhere, not instances
Simon Sapin <simon.sapin@octobus.net>
parents: 47288
diff changeset
534 b'this optimization is performed could slow down upgrade '
e985a36c2aa3 upgrade: Use `improvement` subclasses everywhere, not instances
Simon Sapin <simon.sapin@octobus.net>
parents: 47288
diff changeset
535 b'execution considerably; subsequent invocations should '
e985a36c2aa3 upgrade: Use `improvement` subclasses everywhere, not instances
Simon Sapin <simon.sapin@octobus.net>
parents: 47288
diff changeset
536 b'not run noticeably slower'
46010
32dcd783a985 upgrade: move optimisation to something more declarative
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46009
diff changeset
537 )
47327
e985a36c2aa3 upgrade: Use `improvement` subclasses everywhere, not instances
Simon Sapin <simon.sapin@octobus.net>
parents: 47288
diff changeset
538
e985a36c2aa3 upgrade: Use `improvement` subclasses everywhere, not instances
Simon Sapin <simon.sapin@octobus.net>
parents: 47288
diff changeset
539 upgrademessage = _(
e985a36c2aa3 upgrade: Use `improvement` subclasses everywhere, not instances
Simon Sapin <simon.sapin@octobus.net>
parents: 47288
diff changeset
540 b'deltas within internal storage will choose a new '
e985a36c2aa3 upgrade: Use `improvement` subclasses everywhere, not instances
Simon Sapin <simon.sapin@octobus.net>
parents: 47288
diff changeset
541 b'base revision if needed'
e985a36c2aa3 upgrade: Use `improvement` subclasses everywhere, not instances
Simon Sapin <simon.sapin@octobus.net>
parents: 47288
diff changeset
542 )
e985a36c2aa3 upgrade: Use `improvement` subclasses everywhere, not instances
Simon Sapin <simon.sapin@octobus.net>
parents: 47288
diff changeset
543
e985a36c2aa3 upgrade: Use `improvement` subclasses everywhere, not instances
Simon Sapin <simon.sapin@octobus.net>
parents: 47288
diff changeset
544
e985a36c2aa3 upgrade: Use `improvement` subclasses everywhere, not instances
Simon Sapin <simon.sapin@octobus.net>
parents: 47288
diff changeset
545 @register_optimization
e985a36c2aa3 upgrade: Use `improvement` subclasses everywhere, not instances
Simon Sapin <simon.sapin@octobus.net>
parents: 47288
diff changeset
546 class redeltamultibase(optimization):
e985a36c2aa3 upgrade: Use `improvement` subclasses everywhere, not instances
Simon Sapin <simon.sapin@octobus.net>
parents: 47288
diff changeset
547 name = b're-delta-multibase'
e985a36c2aa3 upgrade: Use `improvement` subclasses everywhere, not instances
Simon Sapin <simon.sapin@octobus.net>
parents: 47288
diff changeset
548
e985a36c2aa3 upgrade: Use `improvement` subclasses everywhere, not instances
Simon Sapin <simon.sapin@octobus.net>
parents: 47288
diff changeset
549 type = OPTIMISATION
e985a36c2aa3 upgrade: Use `improvement` subclasses everywhere, not instances
Simon Sapin <simon.sapin@octobus.net>
parents: 47288
diff changeset
550
e985a36c2aa3 upgrade: Use `improvement` subclasses everywhere, not instances
Simon Sapin <simon.sapin@octobus.net>
parents: 47288
diff changeset
551 description = _(
e985a36c2aa3 upgrade: Use `improvement` subclasses everywhere, not instances
Simon Sapin <simon.sapin@octobus.net>
parents: 47288
diff changeset
552 b'deltas within internal storage will be recalculated '
e985a36c2aa3 upgrade: Use `improvement` subclasses everywhere, not instances
Simon Sapin <simon.sapin@octobus.net>
parents: 47288
diff changeset
553 b'against multiple base revision and the smallest '
e985a36c2aa3 upgrade: Use `improvement` subclasses everywhere, not instances
Simon Sapin <simon.sapin@octobus.net>
parents: 47288
diff changeset
554 b'difference will be used; the size of the repository may '
e985a36c2aa3 upgrade: Use `improvement` subclasses everywhere, not instances
Simon Sapin <simon.sapin@octobus.net>
parents: 47288
diff changeset
555 b'shrink significantly when there are many merges; this '
e985a36c2aa3 upgrade: Use `improvement` subclasses everywhere, not instances
Simon Sapin <simon.sapin@octobus.net>
parents: 47288
diff changeset
556 b'optimization will slow down execution in proportion to '
e985a36c2aa3 upgrade: Use `improvement` subclasses everywhere, not instances
Simon Sapin <simon.sapin@octobus.net>
parents: 47288
diff changeset
557 b'the number of merges in the repository and the amount '
e985a36c2aa3 upgrade: Use `improvement` subclasses everywhere, not instances
Simon Sapin <simon.sapin@octobus.net>
parents: 47288
diff changeset
558 b'of files in the repository; this slow down should not '
e985a36c2aa3 upgrade: Use `improvement` subclasses everywhere, not instances
Simon Sapin <simon.sapin@octobus.net>
parents: 47288
diff changeset
559 b'be significant unless there are tens of thousands of '
e985a36c2aa3 upgrade: Use `improvement` subclasses everywhere, not instances
Simon Sapin <simon.sapin@octobus.net>
parents: 47288
diff changeset
560 b'files and thousands of merges'
e985a36c2aa3 upgrade: Use `improvement` subclasses everywhere, not instances
Simon Sapin <simon.sapin@octobus.net>
parents: 47288
diff changeset
561 )
46010
32dcd783a985 upgrade: move optimisation to something more declarative
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46009
diff changeset
562
47327
e985a36c2aa3 upgrade: Use `improvement` subclasses everywhere, not instances
Simon Sapin <simon.sapin@octobus.net>
parents: 47288
diff changeset
563 upgrademessage = _(
e985a36c2aa3 upgrade: Use `improvement` subclasses everywhere, not instances
Simon Sapin <simon.sapin@octobus.net>
parents: 47288
diff changeset
564 b'deltas within internal storage will choose an '
e985a36c2aa3 upgrade: Use `improvement` subclasses everywhere, not instances
Simon Sapin <simon.sapin@octobus.net>
parents: 47288
diff changeset
565 b'optimal delta by computing deltas against multiple '
e985a36c2aa3 upgrade: Use `improvement` subclasses everywhere, not instances
Simon Sapin <simon.sapin@octobus.net>
parents: 47288
diff changeset
566 b'parents; may slow down execution time '
e985a36c2aa3 upgrade: Use `improvement` subclasses everywhere, not instances
Simon Sapin <simon.sapin@octobus.net>
parents: 47288
diff changeset
567 b'significantly'
46010
32dcd783a985 upgrade: move optimisation to something more declarative
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46009
diff changeset
568 )
47327
e985a36c2aa3 upgrade: Use `improvement` subclasses everywhere, not instances
Simon Sapin <simon.sapin@octobus.net>
parents: 47288
diff changeset
569
e985a36c2aa3 upgrade: Use `improvement` subclasses everywhere, not instances
Simon Sapin <simon.sapin@octobus.net>
parents: 47288
diff changeset
570
e985a36c2aa3 upgrade: Use `improvement` subclasses everywhere, not instances
Simon Sapin <simon.sapin@octobus.net>
parents: 47288
diff changeset
571 @register_optimization
e985a36c2aa3 upgrade: Use `improvement` subclasses everywhere, not instances
Simon Sapin <simon.sapin@octobus.net>
parents: 47288
diff changeset
572 class redeltaall(optimization):
e985a36c2aa3 upgrade: Use `improvement` subclasses everywhere, not instances
Simon Sapin <simon.sapin@octobus.net>
parents: 47288
diff changeset
573 name = b're-delta-all'
e985a36c2aa3 upgrade: Use `improvement` subclasses everywhere, not instances
Simon Sapin <simon.sapin@octobus.net>
parents: 47288
diff changeset
574
e985a36c2aa3 upgrade: Use `improvement` subclasses everywhere, not instances
Simon Sapin <simon.sapin@octobus.net>
parents: 47288
diff changeset
575 type = OPTIMISATION
e985a36c2aa3 upgrade: Use `improvement` subclasses everywhere, not instances
Simon Sapin <simon.sapin@octobus.net>
parents: 47288
diff changeset
576
e985a36c2aa3 upgrade: Use `improvement` subclasses everywhere, not instances
Simon Sapin <simon.sapin@octobus.net>
parents: 47288
diff changeset
577 description = _(
e985a36c2aa3 upgrade: Use `improvement` subclasses everywhere, not instances
Simon Sapin <simon.sapin@octobus.net>
parents: 47288
diff changeset
578 b'deltas within internal storage will always be '
e985a36c2aa3 upgrade: Use `improvement` subclasses everywhere, not instances
Simon Sapin <simon.sapin@octobus.net>
parents: 47288
diff changeset
579 b'recalculated without reusing prior deltas; this will '
e985a36c2aa3 upgrade: Use `improvement` subclasses everywhere, not instances
Simon Sapin <simon.sapin@octobus.net>
parents: 47288
diff changeset
580 b'likely make execution run several times slower; this '
e985a36c2aa3 upgrade: Use `improvement` subclasses everywhere, not instances
Simon Sapin <simon.sapin@octobus.net>
parents: 47288
diff changeset
581 b'optimization is typically not needed'
e985a36c2aa3 upgrade: Use `improvement` subclasses everywhere, not instances
Simon Sapin <simon.sapin@octobus.net>
parents: 47288
diff changeset
582 )
46010
32dcd783a985 upgrade: move optimisation to something more declarative
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46009
diff changeset
583
47327
e985a36c2aa3 upgrade: Use `improvement` subclasses everywhere, not instances
Simon Sapin <simon.sapin@octobus.net>
parents: 47288
diff changeset
584 upgrademessage = _(
e985a36c2aa3 upgrade: Use `improvement` subclasses everywhere, not instances
Simon Sapin <simon.sapin@octobus.net>
parents: 47288
diff changeset
585 b'deltas within internal storage will be fully '
e985a36c2aa3 upgrade: Use `improvement` subclasses everywhere, not instances
Simon Sapin <simon.sapin@octobus.net>
parents: 47288
diff changeset
586 b'recomputed; this will likely drastically slow down '
e985a36c2aa3 upgrade: Use `improvement` subclasses everywhere, not instances
Simon Sapin <simon.sapin@octobus.net>
parents: 47288
diff changeset
587 b'execution time'
46010
32dcd783a985 upgrade: move optimisation to something more declarative
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46009
diff changeset
588 )
47327
e985a36c2aa3 upgrade: Use `improvement` subclasses everywhere, not instances
Simon Sapin <simon.sapin@octobus.net>
parents: 47288
diff changeset
589
e985a36c2aa3 upgrade: Use `improvement` subclasses everywhere, not instances
Simon Sapin <simon.sapin@octobus.net>
parents: 47288
diff changeset
590
e985a36c2aa3 upgrade: Use `improvement` subclasses everywhere, not instances
Simon Sapin <simon.sapin@octobus.net>
parents: 47288
diff changeset
591 @register_optimization
e985a36c2aa3 upgrade: Use `improvement` subclasses everywhere, not instances
Simon Sapin <simon.sapin@octobus.net>
parents: 47288
diff changeset
592 class redeltafulladd(optimization):
e985a36c2aa3 upgrade: Use `improvement` subclasses everywhere, not instances
Simon Sapin <simon.sapin@octobus.net>
parents: 47288
diff changeset
593 name = b're-delta-fulladd'
e985a36c2aa3 upgrade: Use `improvement` subclasses everywhere, not instances
Simon Sapin <simon.sapin@octobus.net>
parents: 47288
diff changeset
594
e985a36c2aa3 upgrade: Use `improvement` subclasses everywhere, not instances
Simon Sapin <simon.sapin@octobus.net>
parents: 47288
diff changeset
595 type = OPTIMISATION
46010
32dcd783a985 upgrade: move optimisation to something more declarative
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46009
diff changeset
596
47327
e985a36c2aa3 upgrade: Use `improvement` subclasses everywhere, not instances
Simon Sapin <simon.sapin@octobus.net>
parents: 47288
diff changeset
597 description = _(
e985a36c2aa3 upgrade: Use `improvement` subclasses everywhere, not instances
Simon Sapin <simon.sapin@octobus.net>
parents: 47288
diff changeset
598 b'every revision will be re-added as if it was new '
e985a36c2aa3 upgrade: Use `improvement` subclasses everywhere, not instances
Simon Sapin <simon.sapin@octobus.net>
parents: 47288
diff changeset
599 b'content. It will go through the full storage '
e985a36c2aa3 upgrade: Use `improvement` subclasses everywhere, not instances
Simon Sapin <simon.sapin@octobus.net>
parents: 47288
diff changeset
600 b'mechanism giving extensions a chance to process it '
e985a36c2aa3 upgrade: Use `improvement` subclasses everywhere, not instances
Simon Sapin <simon.sapin@octobus.net>
parents: 47288
diff changeset
601 b'(eg. lfs). This is similar to "re-delta-all" but even '
e985a36c2aa3 upgrade: Use `improvement` subclasses everywhere, not instances
Simon Sapin <simon.sapin@octobus.net>
parents: 47288
diff changeset
602 b'slower since more logic is involved.'
46010
32dcd783a985 upgrade: move optimisation to something more declarative
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46009
diff changeset
603 )
47327
e985a36c2aa3 upgrade: Use `improvement` subclasses everywhere, not instances
Simon Sapin <simon.sapin@octobus.net>
parents: 47288
diff changeset
604
e985a36c2aa3 upgrade: Use `improvement` subclasses everywhere, not instances
Simon Sapin <simon.sapin@octobus.net>
parents: 47288
diff changeset
605 upgrademessage = _(
e985a36c2aa3 upgrade: Use `improvement` subclasses everywhere, not instances
Simon Sapin <simon.sapin@octobus.net>
parents: 47288
diff changeset
606 b'each revision will be added as new content to the '
e985a36c2aa3 upgrade: Use `improvement` subclasses everywhere, not instances
Simon Sapin <simon.sapin@octobus.net>
parents: 47288
diff changeset
607 b'internal storage; this will likely drastically slow '
e985a36c2aa3 upgrade: Use `improvement` subclasses everywhere, not instances
Simon Sapin <simon.sapin@octobus.net>
parents: 47288
diff changeset
608 b'down execution time, but some extensions might need '
e985a36c2aa3 upgrade: Use `improvement` subclasses everywhere, not instances
Simon Sapin <simon.sapin@octobus.net>
parents: 47288
diff changeset
609 b'it'
e985a36c2aa3 upgrade: Use `improvement` subclasses everywhere, not instances
Simon Sapin <simon.sapin@octobus.net>
parents: 47288
diff changeset
610 )
46010
32dcd783a985 upgrade: move optimisation to something more declarative
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46009
diff changeset
611
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43031
diff changeset
612
31896
127b41e975fd upgrade: split finding deficiencies from finding optimisations
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 31895
diff changeset
613 def findoptimizations(repo):
127b41e975fd upgrade: split finding deficiencies from finding optimisations
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 31895
diff changeset
614 """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
615 # 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
616 # which ones to apply.
46010
32dcd783a985 upgrade: move optimisation to something more declarative
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46009
diff changeset
617 return list(ALL_OPTIMISATIONS)
30776
3997edc4a86d repair: determine what upgrade will do
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30775
diff changeset
618
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43031
diff changeset
619
46210
6b40aac4da8e upgrade: rename actions to upgrade_actions
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46209
diff changeset
620 def determine_upgrade_actions(
46209
a51d345f1404 upgrade: move optimization addition to determineactions()
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46206
diff changeset
621 repo, format_upgrades, optimizations, sourcereqs, destreqs
a51d345f1404 upgrade: move optimization addition to determineactions()
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46206
diff changeset
622 ):
30776
3997edc4a86d repair: determine what upgrade will do
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30775
diff changeset
623 """Determine upgrade actions that will be performed.
3997edc4a86d repair: determine what upgrade will do
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30775
diff changeset
624
46205
53d083fa1f83 upgrade: rename finddeficiences() to find_format_upgrades()
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46192
diff changeset
625 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
626 ``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
627 will be performed.
30776
3997edc4a86d repair: determine what upgrade will do
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30775
diff changeset
628
3997edc4a86d repair: determine what upgrade will do
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30775
diff changeset
629 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
630 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
631 etc.
3997edc4a86d repair: determine what upgrade will do
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30775
diff changeset
632
3997edc4a86d repair: determine what upgrade will do
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30775
diff changeset
633 Returns a list of action names.
3997edc4a86d repair: determine what upgrade will do
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30775
diff changeset
634 """
3997edc4a86d repair: determine what upgrade will do
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30775
diff changeset
635 newactions = []
3997edc4a86d repair: determine what upgrade will do
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30775
diff changeset
636
46205
53d083fa1f83 upgrade: rename finddeficiences() to find_format_upgrades()
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46192
diff changeset
637 for d in format_upgrades:
47646
4259a72fe528 upgrade_utils: fix crash for removecldeltachain action
Mathias De Mare <mathias.de_mare@nokia.com>
parents: 47328
diff changeset
638 if util.safehasattr(d, '_requirement'):
4259a72fe528 upgrade_utils: fix crash for removecldeltachain action
Mathias De Mare <mathias.de_mare@nokia.com>
parents: 47328
diff changeset
639 name = d._requirement
4259a72fe528 upgrade_utils: fix crash for removecldeltachain action
Mathias De Mare <mathias.de_mare@nokia.com>
parents: 47328
diff changeset
640 else:
4259a72fe528 upgrade_utils: fix crash for removecldeltachain action
Mathias De Mare <mathias.de_mare@nokia.com>
parents: 47328
diff changeset
641 name = None
30776
3997edc4a86d repair: determine what upgrade will do
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30775
diff changeset
642
3997edc4a86d repair: determine what upgrade will do
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30775
diff changeset
643 # 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
644 # destination requirements, prune the action.
44741
c36a3fcfc36b upgrade: properly filter action depending on planned work
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 44470
diff changeset
645 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
646 continue
3997edc4a86d repair: determine what upgrade will do
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30775
diff changeset
647
31903
fa1088de2119 upgrade: use 'improvement' object for action too
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 31902
diff changeset
648 newactions.append(d)
30776
3997edc4a86d repair: determine what upgrade will do
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30775
diff changeset
649
46209
a51d345f1404 upgrade: move optimization addition to determineactions()
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46206
diff changeset
650 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
651
30776
3997edc4a86d repair: determine what upgrade will do
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30775
diff changeset
652 # 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
653 # 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
654
3997edc4a86d repair: determine what upgrade will do
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30775
diff changeset
655 return newactions
46052
f4f956342cf1 upgrade: move requirements checking in a dedicated function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46051
diff changeset
656
f4f956342cf1 upgrade: move requirements checking in a dedicated function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46051
diff changeset
657
46060
c407513a44a3 upgrade: start moving the "to be happening" data in a dedicated object
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46056
diff changeset
658 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: 46056
diff changeset
659 """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: 46056
diff changeset
660
46191
aba979b1b90b upgrade: move `printrequirements()` to UpgradeOperation class
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46190
diff changeset
661 def __init__(
aba979b1b90b upgrade: move `printrequirements()` to UpgradeOperation class
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46190
diff changeset
662 self,
aba979b1b90b upgrade: move `printrequirements()` to UpgradeOperation class
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46190
diff changeset
663 ui,
aba979b1b90b upgrade: move `printrequirements()` to UpgradeOperation class
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46190
diff changeset
664 new_requirements,
aba979b1b90b upgrade: move `printrequirements()` to UpgradeOperation class
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46190
diff changeset
665 current_requirements,
46210
6b40aac4da8e upgrade: rename actions to upgrade_actions
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46209
diff changeset
666 upgrade_actions,
46213
30310886d423 upgrade: introduce post upgrade and downgrade message for improvements
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46212
diff changeset
667 removed_actions,
46191
aba979b1b90b upgrade: move `printrequirements()` to UpgradeOperation class
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46190
diff changeset
668 revlogs_to_process,
46447
2e8a844d0ae0 upgrade: don't create store backup if `--no-backup` is passed
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46334
diff changeset
669 backup_store,
46191
aba979b1b90b upgrade: move `printrequirements()` to UpgradeOperation class
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46190
diff changeset
670 ):
46188
945b33a7edfd upgrade: move `print_affected_revlogs()` to UpgradeOperation class
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46060
diff changeset
671 self.ui = ui
46191
aba979b1b90b upgrade: move `printrequirements()` to UpgradeOperation class
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46190
diff changeset
672 self.new_requirements = new_requirements
aba979b1b90b upgrade: move `printrequirements()` to UpgradeOperation class
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46190
diff changeset
673 self.current_requirements = current_requirements
46210
6b40aac4da8e upgrade: rename actions to upgrade_actions
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46209
diff changeset
674 # list of upgrade actions the operation will perform
6b40aac4da8e upgrade: rename actions to upgrade_actions
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46209
diff changeset
675 self.upgrade_actions = upgrade_actions
46213
30310886d423 upgrade: introduce post upgrade and downgrade message for improvements
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46212
diff changeset
676 self.removed_actions = removed_actions
46060
c407513a44a3 upgrade: start moving the "to be happening" data in a dedicated object
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46056
diff changeset
677 self.revlogs_to_process = revlogs_to_process
46191
aba979b1b90b upgrade: move `printrequirements()` to UpgradeOperation class
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46190
diff changeset
678 # requirements which will be added by the operation
aba979b1b90b upgrade: move `printrequirements()` to UpgradeOperation class
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46190
diff changeset
679 self._added_requirements = (
aba979b1b90b upgrade: move `printrequirements()` to UpgradeOperation class
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46190
diff changeset
680 self.new_requirements - self.current_requirements
aba979b1b90b upgrade: move `printrequirements()` to UpgradeOperation class
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46190
diff changeset
681 )
aba979b1b90b upgrade: move `printrequirements()` to UpgradeOperation class
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46190
diff changeset
682 # requirements which will be removed by the operation
aba979b1b90b upgrade: move `printrequirements()` to UpgradeOperation class
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46190
diff changeset
683 self._removed_requirements = (
aba979b1b90b upgrade: move `printrequirements()` to UpgradeOperation class
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46190
diff changeset
684 self.current_requirements - self.new_requirements
aba979b1b90b upgrade: move `printrequirements()` to UpgradeOperation class
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46190
diff changeset
685 )
aba979b1b90b upgrade: move `printrequirements()` to UpgradeOperation class
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46190
diff changeset
686 # requirements which will be preserved by the operation
aba979b1b90b upgrade: move `printrequirements()` to UpgradeOperation class
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46190
diff changeset
687 self._preserved_requirements = (
aba979b1b90b upgrade: move `printrequirements()` to UpgradeOperation class
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46190
diff changeset
688 self.current_requirements & self.new_requirements
aba979b1b90b upgrade: move `printrequirements()` to UpgradeOperation class
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46190
diff changeset
689 )
46192
25d11b24dedf upgrade: move printing of unused optimizations to UpgradeOperation class
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46191
diff changeset
690 # 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
691 # should use them
25d11b24dedf upgrade: move printing of unused optimizations to UpgradeOperation class
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46191
diff changeset
692 all_optimizations = findoptimizations(None)
25d11b24dedf upgrade: move printing of unused optimizations to UpgradeOperation class
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46191
diff changeset
693 self.unused_optimizations = [
46210
6b40aac4da8e upgrade: rename actions to upgrade_actions
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46209
diff changeset
694 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
695 ]
46060
c407513a44a3 upgrade: start moving the "to be happening" data in a dedicated object
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46056
diff changeset
696
46215
82f3ee1a505f actions: store deltareuse mode of whole operation in UpgradeOperation
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46213
diff changeset
697 # delta reuse mode of this upgrade operation
47328
a43d256c041a dirstate-v2: Add `hg debugupgraderepo` command support
Simon Sapin <simon.sapin@octobus.net>
parents: 47327
diff changeset
698 upgrade_actions_names = self.upgrade_actions_names
46215
82f3ee1a505f actions: store deltareuse mode of whole operation in UpgradeOperation
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46213
diff changeset
699 self.delta_reuse_mode = revlog.revlog.DELTAREUSEALWAYS
47328
a43d256c041a dirstate-v2: Add `hg debugupgraderepo` command support
Simon Sapin <simon.sapin@octobus.net>
parents: 47327
diff changeset
700 if b're-delta-all' in upgrade_actions_names:
46215
82f3ee1a505f actions: store deltareuse mode of whole operation in UpgradeOperation
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46213
diff changeset
701 self.delta_reuse_mode = revlog.revlog.DELTAREUSENEVER
47328
a43d256c041a dirstate-v2: Add `hg debugupgraderepo` command support
Simon Sapin <simon.sapin@octobus.net>
parents: 47327
diff changeset
702 elif b're-delta-parent' in upgrade_actions_names:
46215
82f3ee1a505f actions: store deltareuse mode of whole operation in UpgradeOperation
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46213
diff changeset
703 self.delta_reuse_mode = revlog.revlog.DELTAREUSESAMEREVS
47328
a43d256c041a dirstate-v2: Add `hg debugupgraderepo` command support
Simon Sapin <simon.sapin@octobus.net>
parents: 47327
diff changeset
704 elif b're-delta-multibase' in upgrade_actions_names:
46215
82f3ee1a505f actions: store deltareuse mode of whole operation in UpgradeOperation
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46213
diff changeset
705 self.delta_reuse_mode = revlog.revlog.DELTAREUSESAMEREVS
47328
a43d256c041a dirstate-v2: Add `hg debugupgraderepo` command support
Simon Sapin <simon.sapin@octobus.net>
parents: 47327
diff changeset
706 elif b're-delta-fulladd' in upgrade_actions_names:
46215
82f3ee1a505f actions: store deltareuse mode of whole operation in UpgradeOperation
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46213
diff changeset
707 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
708
46218
3f92a9bb80f0 engine: prevent multiple checking of re-delta-multibase
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46215
diff changeset
709 # 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
710 self.force_re_delta_both_parents = (
47328
a43d256c041a dirstate-v2: Add `hg debugupgraderepo` command support
Simon Sapin <simon.sapin@octobus.net>
parents: 47327
diff changeset
711 b're-delta-multibase' in upgrade_actions_names
46218
3f92a9bb80f0 engine: prevent multiple checking of re-delta-multibase
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46215
diff changeset
712 )
3f92a9bb80f0 engine: prevent multiple checking of re-delta-multibase
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46215
diff changeset
713
46447
2e8a844d0ae0 upgrade: don't create store backup if `--no-backup` is passed
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46334
diff changeset
714 # 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
715 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
716
47328
a43d256c041a dirstate-v2: Add `hg debugupgraderepo` command support
Simon Sapin <simon.sapin@octobus.net>
parents: 47327
diff changeset
717 @property
a43d256c041a dirstate-v2: Add `hg debugupgraderepo` command support
Simon Sapin <simon.sapin@octobus.net>
parents: 47327
diff changeset
718 def upgrade_actions_names(self):
a43d256c041a dirstate-v2: Add `hg debugupgraderepo` command support
Simon Sapin <simon.sapin@octobus.net>
parents: 47327
diff changeset
719 return set([a.name for a in self.upgrade_actions])
a43d256c041a dirstate-v2: Add `hg debugupgraderepo` command support
Simon Sapin <simon.sapin@octobus.net>
parents: 47327
diff changeset
720
a43d256c041a dirstate-v2: Add `hg debugupgraderepo` command support
Simon Sapin <simon.sapin@octobus.net>
parents: 47327
diff changeset
721 @property
a43d256c041a dirstate-v2: Add `hg debugupgraderepo` command support
Simon Sapin <simon.sapin@octobus.net>
parents: 47327
diff changeset
722 def requirements_only(self):
46448
a83e1496d943 actions: calculate what all parts does the operation touches
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46447
diff changeset
723 # does the operation only touches repository requirement
47328
a43d256c041a dirstate-v2: Add `hg debugupgraderepo` command support
Simon Sapin <simon.sapin@octobus.net>
parents: 47327
diff changeset
724 return (
a43d256c041a dirstate-v2: Add `hg debugupgraderepo` command support
Simon Sapin <simon.sapin@octobus.net>
parents: 47327
diff changeset
725 self.touches_requirements
a43d256c041a dirstate-v2: Add `hg debugupgraderepo` command support
Simon Sapin <simon.sapin@octobus.net>
parents: 47327
diff changeset
726 and not self.touches_filelogs
a43d256c041a dirstate-v2: Add `hg debugupgraderepo` command support
Simon Sapin <simon.sapin@octobus.net>
parents: 47327
diff changeset
727 and not self.touches_manifests
a43d256c041a dirstate-v2: Add `hg debugupgraderepo` command support
Simon Sapin <simon.sapin@octobus.net>
parents: 47327
diff changeset
728 and not self.touches_changelog
a43d256c041a dirstate-v2: Add `hg debugupgraderepo` command support
Simon Sapin <simon.sapin@octobus.net>
parents: 47327
diff changeset
729 and not self.touches_dirstate
46448
a83e1496d943 actions: calculate what all parts does the operation touches
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46447
diff changeset
730 )
a83e1496d943 actions: calculate what all parts does the operation touches
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46447
diff changeset
731
47328
a43d256c041a dirstate-v2: Add `hg debugupgraderepo` command support
Simon Sapin <simon.sapin@octobus.net>
parents: 47327
diff changeset
732 @property
a43d256c041a dirstate-v2: Add `hg debugupgraderepo` command support
Simon Sapin <simon.sapin@octobus.net>
parents: 47327
diff changeset
733 def touches_filelogs(self):
46448
a83e1496d943 actions: calculate what all parts does the operation touches
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46447
diff changeset
734 for a in self.upgrade_actions:
a83e1496d943 actions: calculate what all parts does the operation touches
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46447
diff changeset
735 # in optimisations, we re-process the revlogs again
a83e1496d943 actions: calculate what all parts does the operation touches
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46447
diff changeset
736 if a.type == OPTIMISATION:
a83e1496d943 actions: calculate what all parts does the operation touches
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46447
diff changeset
737 return True
a83e1496d943 actions: calculate what all parts does the operation touches
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46447
diff changeset
738 elif a.touches_filelogs:
a83e1496d943 actions: calculate what all parts does the operation touches
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46447
diff changeset
739 return True
a83e1496d943 actions: calculate what all parts does the operation touches
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46447
diff changeset
740 for a in self.removed_actions:
a83e1496d943 actions: calculate what all parts does the operation touches
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46447
diff changeset
741 if a.touches_filelogs:
a83e1496d943 actions: calculate what all parts does the operation touches
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46447
diff changeset
742 return True
a83e1496d943 actions: calculate what all parts does the operation touches
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46447
diff changeset
743 return False
a83e1496d943 actions: calculate what all parts does the operation touches
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46447
diff changeset
744
47328
a43d256c041a dirstate-v2: Add `hg debugupgraderepo` command support
Simon Sapin <simon.sapin@octobus.net>
parents: 47327
diff changeset
745 @property
a43d256c041a dirstate-v2: Add `hg debugupgraderepo` command support
Simon Sapin <simon.sapin@octobus.net>
parents: 47327
diff changeset
746 def touches_manifests(self):
46448
a83e1496d943 actions: calculate what all parts does the operation touches
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46447
diff changeset
747 for a in self.upgrade_actions:
a83e1496d943 actions: calculate what all parts does the operation touches
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46447
diff changeset
748 # in optimisations, we re-process the revlogs again
a83e1496d943 actions: calculate what all parts does the operation touches
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46447
diff changeset
749 if a.type == OPTIMISATION:
a83e1496d943 actions: calculate what all parts does the operation touches
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46447
diff changeset
750 return True
a83e1496d943 actions: calculate what all parts does the operation touches
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46447
diff changeset
751 elif a.touches_manifests:
a83e1496d943 actions: calculate what all parts does the operation touches
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46447
diff changeset
752 return True
a83e1496d943 actions: calculate what all parts does the operation touches
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46447
diff changeset
753 for a in self.removed_actions:
a83e1496d943 actions: calculate what all parts does the operation touches
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46447
diff changeset
754 if a.touches_manifests:
a83e1496d943 actions: calculate what all parts does the operation touches
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46447
diff changeset
755 return True
a83e1496d943 actions: calculate what all parts does the operation touches
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46447
diff changeset
756 return False
a83e1496d943 actions: calculate what all parts does the operation touches
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46447
diff changeset
757
47328
a43d256c041a dirstate-v2: Add `hg debugupgraderepo` command support
Simon Sapin <simon.sapin@octobus.net>
parents: 47327
diff changeset
758 @property
a43d256c041a dirstate-v2: Add `hg debugupgraderepo` command support
Simon Sapin <simon.sapin@octobus.net>
parents: 47327
diff changeset
759 def touches_changelog(self):
46448
a83e1496d943 actions: calculate what all parts does the operation touches
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46447
diff changeset
760 for a in self.upgrade_actions:
a83e1496d943 actions: calculate what all parts does the operation touches
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46447
diff changeset
761 # in optimisations, we re-process the revlogs again
a83e1496d943 actions: calculate what all parts does the operation touches
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46447
diff changeset
762 if a.type == OPTIMISATION:
a83e1496d943 actions: calculate what all parts does the operation touches
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46447
diff changeset
763 return True
a83e1496d943 actions: calculate what all parts does the operation touches
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46447
diff changeset
764 elif a.touches_changelog:
a83e1496d943 actions: calculate what all parts does the operation touches
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46447
diff changeset
765 return True
a83e1496d943 actions: calculate what all parts does the operation touches
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46447
diff changeset
766 for a in self.removed_actions:
a83e1496d943 actions: calculate what all parts does the operation touches
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46447
diff changeset
767 if a.touches_changelog:
a83e1496d943 actions: calculate what all parts does the operation touches
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46447
diff changeset
768 return True
a83e1496d943 actions: calculate what all parts does the operation touches
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46447
diff changeset
769 return False
a83e1496d943 actions: calculate what all parts does the operation touches
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46447
diff changeset
770
47328
a43d256c041a dirstate-v2: Add `hg debugupgraderepo` command support
Simon Sapin <simon.sapin@octobus.net>
parents: 47327
diff changeset
771 @property
a43d256c041a dirstate-v2: Add `hg debugupgraderepo` command support
Simon Sapin <simon.sapin@octobus.net>
parents: 47327
diff changeset
772 def touches_requirements(self):
46448
a83e1496d943 actions: calculate what all parts does the operation touches
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46447
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: 46447
diff changeset
774 # 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: 46447
diff changeset
775 # in a requirement being added or removed
a83e1496d943 actions: calculate what all parts does the operation touches
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46447
diff changeset
776 if a.type == OPTIMISATION:
a83e1496d943 actions: calculate what all parts does the operation touches
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46447
diff changeset
777 pass
a83e1496d943 actions: calculate what all parts does the operation touches
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46447
diff changeset
778 elif a.touches_requirements:
a83e1496d943 actions: calculate what all parts does the operation touches
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46447
diff changeset
779 return True
a83e1496d943 actions: calculate what all parts does the operation touches
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46447
diff changeset
780 for a in self.removed_actions:
a83e1496d943 actions: calculate what all parts does the operation touches
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46447
diff changeset
781 if a.touches_requirements:
a83e1496d943 actions: calculate what all parts does the operation touches
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46447
diff changeset
782 return True
a83e1496d943 actions: calculate what all parts does the operation touches
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46447
diff changeset
783
47328
a43d256c041a dirstate-v2: Add `hg debugupgraderepo` command support
Simon Sapin <simon.sapin@octobus.net>
parents: 47327
diff changeset
784 @property
a43d256c041a dirstate-v2: Add `hg debugupgraderepo` command support
Simon Sapin <simon.sapin@octobus.net>
parents: 47327
diff changeset
785 def touches_dirstate(self):
a43d256c041a dirstate-v2: Add `hg debugupgraderepo` command support
Simon Sapin <simon.sapin@octobus.net>
parents: 47327
diff changeset
786 for a in self.upgrade_actions:
a43d256c041a dirstate-v2: Add `hg debugupgraderepo` command support
Simon Sapin <simon.sapin@octobus.net>
parents: 47327
diff changeset
787 # revlog optimisations do not affect the dirstate
a43d256c041a dirstate-v2: Add `hg debugupgraderepo` command support
Simon Sapin <simon.sapin@octobus.net>
parents: 47327
diff changeset
788 if a.type == OPTIMISATION:
a43d256c041a dirstate-v2: Add `hg debugupgraderepo` command support
Simon Sapin <simon.sapin@octobus.net>
parents: 47327
diff changeset
789 pass
a43d256c041a dirstate-v2: Add `hg debugupgraderepo` command support
Simon Sapin <simon.sapin@octobus.net>
parents: 47327
diff changeset
790 elif a.touches_dirstate:
a43d256c041a dirstate-v2: Add `hg debugupgraderepo` command support
Simon Sapin <simon.sapin@octobus.net>
parents: 47327
diff changeset
791 return True
a43d256c041a dirstate-v2: Add `hg debugupgraderepo` command support
Simon Sapin <simon.sapin@octobus.net>
parents: 47327
diff changeset
792 for a in self.removed_actions:
a43d256c041a dirstate-v2: Add `hg debugupgraderepo` command support
Simon Sapin <simon.sapin@octobus.net>
parents: 47327
diff changeset
793 if a.touches_dirstate:
a43d256c041a dirstate-v2: Add `hg debugupgraderepo` command support
Simon Sapin <simon.sapin@octobus.net>
parents: 47327
diff changeset
794 return True
a43d256c041a dirstate-v2: Add `hg debugupgraderepo` command support
Simon Sapin <simon.sapin@octobus.net>
parents: 47327
diff changeset
795
46448
a83e1496d943 actions: calculate what all parts does the operation touches
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46447
diff changeset
796 return False
a83e1496d943 actions: calculate what all parts does the operation touches
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46447
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: 46060
diff changeset
847 def print_affected_revlogs(self):
945b33a7edfd upgrade: move `print_affected_revlogs()` to UpgradeOperation class
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46060
diff changeset
848 if not self.revlogs_to_process:
945b33a7edfd upgrade: move `print_affected_revlogs()` to UpgradeOperation class
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46060
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: 46060
diff changeset
850 else:
945b33a7edfd upgrade: move `print_affected_revlogs()` to UpgradeOperation class
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46060
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: 46060
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: 46060
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: 46060
diff changeset
854 self.ui.write((b'\n'))
945b33a7edfd upgrade: move `print_affected_revlogs()` to UpgradeOperation class
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46060
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):
47031
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):
47031
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
46060
c407513a44a3 upgrade: start moving the "to be happening" data in a dedicated object
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46056
diff changeset
873
46053
a2a59cde9b9f upgrade: gather code about source checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46052
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: 46052
diff changeset
875
a2a59cde9b9f upgrade: gather code about source checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46052
diff changeset
876
a2a59cde9b9f upgrade: gather code about source checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46052
diff changeset
877 def requiredsourcerequirements(repo):
a2a59cde9b9f upgrade: gather code about source checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46052
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: 46052
diff changeset
879
a2a59cde9b9f upgrade: gather code about source checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46052
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: 46052
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: 46052
diff changeset
882 """
a2a59cde9b9f upgrade: gather code about source checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46052
diff changeset
883 return {
a2a59cde9b9f upgrade: gather code about source checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46052
diff changeset
884 # Introduced in Mercurial 0.9.2.
46676
ab58098bebed requirements: also add a store constant
Rapha?l Gom?s <rgomes@octobus.net>
parents: 46675
diff changeset
885 requirements.STORE_REQUIREMENT,
46053
a2a59cde9b9f upgrade: gather code about source checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46052
diff changeset
886 }
a2a59cde9b9f upgrade: gather code about source checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46052
diff changeset
887
a2a59cde9b9f upgrade: gather code about source checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46052
diff changeset
888
a2a59cde9b9f upgrade: gather code about source checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46052
diff changeset
889 def blocksourcerequirements(repo):
a2a59cde9b9f upgrade: gather code about source checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46052
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: 46052
diff changeset
891
a2a59cde9b9f upgrade: gather code about source checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46052
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: 46052
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: 46052
diff changeset
894 """
a2a59cde9b9f upgrade: gather code about source checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46052
diff changeset
895 return {
a2a59cde9b9f upgrade: gather code about source checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46052
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: 46052
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: 46052
diff changeset
898 requirements.TREEMANIFEST_REQUIREMENT,
a2a59cde9b9f upgrade: gather code about source checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46052
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: 46052
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: 46052
diff changeset
901 b'parentdelta',
a2a59cde9b9f upgrade: gather code about source checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46052
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: 46052
diff changeset
903 requirements.SHARED_REQUIREMENT,
a2a59cde9b9f upgrade: gather code about source checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46052
diff changeset
904 }
a2a59cde9b9f upgrade: gather code about source checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46052
diff changeset
905
a2a59cde9b9f upgrade: gather code about source checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46052
diff changeset
906
46718
fd55a9eb1507 revlogv2: allow upgrading to v2
Rapha?l Gom?s <rgomes@octobus.net>
parents: 46677
diff changeset
907 def check_revlog_version(reqs):
fd55a9eb1507 revlogv2: allow upgrading to v2
Rapha?l Gom?s <rgomes@octobus.net>
parents: 46677
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: 46677
diff changeset
909 all_revlogs = {
fd55a9eb1507 revlogv2: allow upgrading to v2
Rapha?l Gom?s <rgomes@octobus.net>
parents: 46677
diff changeset
910 requirements.REVLOGV1_REQUIREMENT,
fd55a9eb1507 revlogv2: allow upgrading to v2
Rapha?l Gom?s <rgomes@octobus.net>
parents: 46677
diff changeset
911 requirements.REVLOGV2_REQUIREMENT,
fd55a9eb1507 revlogv2: allow upgrading to v2
Rapha?l Gom?s <rgomes@octobus.net>
parents: 46677
diff changeset
912 }
fd55a9eb1507 revlogv2: allow upgrading to v2
Rapha?l Gom?s <rgomes@octobus.net>
parents: 46677
diff changeset
913 if not all_revlogs.intersection(reqs):
fd55a9eb1507 revlogv2: allow upgrading to v2
Rapha?l Gom?s <rgomes@octobus.net>
parents: 46677
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: 46677
diff changeset
915 raise error.Abort(msg)
fd55a9eb1507 revlogv2: allow upgrading to v2
Rapha?l Gom?s <rgomes@octobus.net>
parents: 46677
diff changeset
916
fd55a9eb1507 revlogv2: allow upgrading to v2
Rapha?l Gom?s <rgomes@octobus.net>
parents: 46677
diff changeset
917
46052
f4f956342cf1 upgrade: move requirements checking in a dedicated function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46051
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: 46051
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: 46051
diff changeset
920
46718
fd55a9eb1507 revlogv2: allow upgrading to v2
Rapha?l Gom?s <rgomes@octobus.net>
parents: 46677
diff changeset
921 check_revlog_version(repo.requirements)
46052
f4f956342cf1 upgrade: move requirements checking in a dedicated function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46051
diff changeset
922 required = requiredsourcerequirements(repo)
f4f956342cf1 upgrade: move requirements checking in a dedicated function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46051
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: 46051
diff changeset
924 if missingreqs:
f4f956342cf1 upgrade: move requirements checking in a dedicated function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46051
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: 46051
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: 46051
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: 46051
diff changeset
928
f4f956342cf1 upgrade: move requirements checking in a dedicated function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46051
diff changeset
929 blocking = blocksourcerequirements(repo)
f4f956342cf1 upgrade: move requirements checking in a dedicated function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46051
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: 46051
diff changeset
931 if blockingreqs:
f4f956342cf1 upgrade: move requirements checking in a dedicated function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46051
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: 46051
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: 46051
diff changeset
934 raise error.Abort(m % blockingreqs)
46055
72b7b4bf3e65 upgrade: extract the checking of target requirements change
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46053
diff changeset
935
72b7b4bf3e65 upgrade: extract the checking of target requirements change
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46053
diff changeset
936
72b7b4bf3e65 upgrade: extract the checking of target requirements change
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46053
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: 46053
diff changeset
938
72b7b4bf3e65 upgrade: extract the checking of target requirements change
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46053
diff changeset
939
46056
08802795ae90 upgrade: gather code about requirement checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46055
diff changeset
940 def supportremovedrequirements(repo):
08802795ae90 upgrade: gather code about requirement checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46055
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: 46055
diff changeset
942
08802795ae90 upgrade: gather code about requirement checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46055
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: 46055
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: 46055
diff changeset
945 to be allowed.
08802795ae90 upgrade: gather code about requirement checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46055
diff changeset
946 """
08802795ae90 upgrade: gather code about requirement checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46055
diff changeset
947 supported = {
08802795ae90 upgrade: gather code about requirement checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46055
diff changeset
948 requirements.SPARSEREVLOG_REQUIREMENT,
08802795ae90 upgrade: gather code about requirement checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46055
diff changeset
949 requirements.COPIESSDC_REQUIREMENT,
08802795ae90 upgrade: gather code about requirement checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46055
diff changeset
950 requirements.NODEMAP_REQUIREMENT,
08802795ae90 upgrade: gather code about requirement checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46055
diff changeset
951 requirements.SHARESAFE_REQUIREMENT,
46718
fd55a9eb1507 revlogv2: allow upgrading to v2
Rapha?l Gom?s <rgomes@octobus.net>
parents: 46677
diff changeset
952 requirements.REVLOGV2_REQUIREMENT,
47275
60668fce06d0 changelogv2: allow upgrade from and to this format
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47274
diff changeset
953 requirements.CHANGELOGV2_REQUIREMENT,
46718
fd55a9eb1507 revlogv2: allow upgrading to v2
Rapha?l Gom?s <rgomes@octobus.net>
parents: 46677
diff changeset
954 requirements.REVLOGV1_REQUIREMENT,
47328
a43d256c041a dirstate-v2: Add `hg debugupgraderepo` command support
Simon Sapin <simon.sapin@octobus.net>
parents: 47327
diff changeset
955 requirements.DIRSTATE_V2_REQUIREMENT,
46056
08802795ae90 upgrade: gather code about requirement checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46055
diff changeset
956 }
08802795ae90 upgrade: gather code about requirement checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46055
diff changeset
957 for name in compression.compengines:
08802795ae90 upgrade: gather code about requirement checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46055
diff changeset
958 engine = compression.compengines[name]
08802795ae90 upgrade: gather code about requirement checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46055
diff changeset
959 if engine.available() and engine.revlogheader():
08802795ae90 upgrade: gather code about requirement checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46055
diff changeset
960 supported.add(b'exp-compression-%s' % name)
08802795ae90 upgrade: gather code about requirement checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46055
diff changeset
961 if engine.name() == b'zstd':
08802795ae90 upgrade: gather code about requirement checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46055
diff changeset
962 supported.add(b'revlog-compression-zstd')
08802795ae90 upgrade: gather code about requirement checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46055
diff changeset
963 return supported
08802795ae90 upgrade: gather code about requirement checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46055
diff changeset
964
08802795ae90 upgrade: gather code about requirement checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46055
diff changeset
965
08802795ae90 upgrade: gather code about requirement checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46055
diff changeset
966 def supporteddestrequirements(repo):
08802795ae90 upgrade: gather code about requirement checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46055
diff changeset
967 """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: 46055
diff changeset
968
08802795ae90 upgrade: gather code about requirement checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46055
diff changeset
969 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: 46055
diff changeset
970 the upgrade is disallowed.
08802795ae90 upgrade: gather code about requirement checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46055
diff changeset
971
08802795ae90 upgrade: gather code about requirement checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46055
diff changeset
972 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: 46055
diff changeset
973 """
08802795ae90 upgrade: gather code about requirement checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46055
diff changeset
974 supported = {
46675
c3773636ddbb requirements: also add a dotencode constant
Rapha?l Gom?s <rgomes@octobus.net>
parents: 46666
diff changeset
975 requirements.DOTENCODE_REQUIREMENT,
46677
b4c2a2af25e2 requirements: also add a fncache constant
Rapha?l Gom?s <rgomes@octobus.net>
parents: 46676
diff changeset
976 requirements.FNCACHE_REQUIREMENT,
46666
f4c325bf80fc requirements: also add a generaldelta constant
Rapha?l Gom?s <rgomes@octobus.net>
parents: 46665
diff changeset
977 requirements.GENERALDELTA_REQUIREMENT,
46718
fd55a9eb1507 revlogv2: allow upgrading to v2
Rapha?l Gom?s <rgomes@octobus.net>
parents: 46677
diff changeset
978 requirements.REVLOGV1_REQUIREMENT, # allowed in case of downgrade
46676
ab58098bebed requirements: also add a store constant
Rapha?l Gom?s <rgomes@octobus.net>
parents: 46675
diff changeset
979 requirements.STORE_REQUIREMENT,
46056
08802795ae90 upgrade: gather code about requirement checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46055
diff changeset
980 requirements.SPARSEREVLOG_REQUIREMENT,
08802795ae90 upgrade: gather code about requirement checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46055
diff changeset
981 requirements.COPIESSDC_REQUIREMENT,
08802795ae90 upgrade: gather code about requirement checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46055
diff changeset
982 requirements.NODEMAP_REQUIREMENT,
08802795ae90 upgrade: gather code about requirement checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46055
diff changeset
983 requirements.SHARESAFE_REQUIREMENT,
46718
fd55a9eb1507 revlogv2: allow upgrading to v2
Rapha?l Gom?s <rgomes@octobus.net>
parents: 46677
diff changeset
984 requirements.REVLOGV2_REQUIREMENT,
47275
60668fce06d0 changelogv2: allow upgrade from and to this format
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47274
diff changeset
985 requirements.CHANGELOGV2_REQUIREMENT,
47288
ed0d54b20c5b dirstate-v2: Add a new experimental `exp-dirstate-v2` repository requirement
Simon Sapin <simon.sapin@octobus.net>
parents: 47275
diff changeset
986 requirements.DIRSTATE_V2_REQUIREMENT,
46056
08802795ae90 upgrade: gather code about requirement checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46055
diff changeset
987 }
08802795ae90 upgrade: gather code about requirement checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46055
diff changeset
988 for name in compression.compengines:
08802795ae90 upgrade: gather code about requirement checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46055
diff changeset
989 engine = compression.compengines[name]
08802795ae90 upgrade: gather code about requirement checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46055
diff changeset
990 if engine.available() and engine.revlogheader():
08802795ae90 upgrade: gather code about requirement checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46055
diff changeset
991 supported.add(b'exp-compression-%s' % name)
08802795ae90 upgrade: gather code about requirement checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46055
diff changeset
992 if engine.name() == b'zstd':
08802795ae90 upgrade: gather code about requirement checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46055
diff changeset
993 supported.add(b'revlog-compression-zstd')
08802795ae90 upgrade: gather code about requirement checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46055
diff changeset
994 return supported
08802795ae90 upgrade: gather code about requirement checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46055
diff changeset
995
08802795ae90 upgrade: gather code about requirement checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46055
diff changeset
996
08802795ae90 upgrade: gather code about requirement checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46055
diff changeset
997 def allowednewrequirements(repo):
08802795ae90 upgrade: gather code about requirement checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46055
diff changeset
998 """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: 46055
diff changeset
999
08802795ae90 upgrade: gather code about requirement checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46055
diff changeset
1000 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: 46055
diff changeset
1001 they weren't present before.
08802795ae90 upgrade: gather code about requirement checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46055
diff changeset
1002
08802795ae90 upgrade: gather code about requirement checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46055
diff changeset
1003 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: 46055
diff changeset
1004 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: 46055
diff changeset
1005 future, unknown requirements from accidentally being added.
08802795ae90 upgrade: gather code about requirement checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46055
diff changeset
1006 """
08802795ae90 upgrade: gather code about requirement checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46055
diff changeset
1007 supported = {
46675
c3773636ddbb requirements: also add a dotencode constant
Rapha?l Gom?s <rgomes@octobus.net>
parents: 46666
diff changeset
1008 requirements.DOTENCODE_REQUIREMENT,
46677
b4c2a2af25e2 requirements: also add a fncache constant
Rapha?l Gom?s <rgomes@octobus.net>
parents: 46676
diff changeset
1009 requirements.FNCACHE_REQUIREMENT,
46666
f4c325bf80fc requirements: also add a generaldelta constant
Rapha?l Gom?s <rgomes@octobus.net>
parents: 46665
diff changeset
1010 requirements.GENERALDELTA_REQUIREMENT,
46056
08802795ae90 upgrade: gather code about requirement checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46055
diff changeset
1011 requirements.SPARSEREVLOG_REQUIREMENT,
08802795ae90 upgrade: gather code about requirement checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46055
diff changeset
1012 requirements.COPIESSDC_REQUIREMENT,
08802795ae90 upgrade: gather code about requirement checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46055
diff changeset
1013 requirements.NODEMAP_REQUIREMENT,
08802795ae90 upgrade: gather code about requirement checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46055
diff changeset
1014 requirements.SHARESAFE_REQUIREMENT,
46718
fd55a9eb1507 revlogv2: allow upgrading to v2
Rapha?l Gom?s <rgomes@octobus.net>
parents: 46677
diff changeset
1015 requirements.REVLOGV1_REQUIREMENT,
fd55a9eb1507 revlogv2: allow upgrading to v2
Rapha?l Gom?s <rgomes@octobus.net>
parents: 46677
diff changeset
1016 requirements.REVLOGV2_REQUIREMENT,
47275
60668fce06d0 changelogv2: allow upgrade from and to this format
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47274
diff changeset
1017 requirements.CHANGELOGV2_REQUIREMENT,
47328
a43d256c041a dirstate-v2: Add `hg debugupgraderepo` command support
Simon Sapin <simon.sapin@octobus.net>
parents: 47327
diff changeset
1018 requirements.DIRSTATE_V2_REQUIREMENT,
46056
08802795ae90 upgrade: gather code about requirement checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46055
diff changeset
1019 }
08802795ae90 upgrade: gather code about requirement checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46055
diff changeset
1020 for name in compression.compengines:
08802795ae90 upgrade: gather code about requirement checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46055
diff changeset
1021 engine = compression.compengines[name]
08802795ae90 upgrade: gather code about requirement checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46055
diff changeset
1022 if engine.available() and engine.revlogheader():
08802795ae90 upgrade: gather code about requirement checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46055
diff changeset
1023 supported.add(b'exp-compression-%s' % name)
08802795ae90 upgrade: gather code about requirement checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46055
diff changeset
1024 if engine.name() == b'zstd':
08802795ae90 upgrade: gather code about requirement checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46055
diff changeset
1025 supported.add(b'revlog-compression-zstd')
08802795ae90 upgrade: gather code about requirement checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46055
diff changeset
1026 return supported
08802795ae90 upgrade: gather code about requirement checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46055
diff changeset
1027
08802795ae90 upgrade: gather code about requirement checking together
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46055
diff changeset
1028
46055
72b7b4bf3e65 upgrade: extract the checking of target requirements change
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46053
diff changeset
1029 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: 46053
diff changeset
1030 old_reqs = repo.requirements
46718
fd55a9eb1507 revlogv2: allow upgrading to v2
Rapha?l Gom?s <rgomes@octobus.net>
parents: 46677
diff changeset
1031 check_revlog_version(repo.requirements)
46055
72b7b4bf3e65 upgrade: extract the checking of target requirements change
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46053
diff changeset
1032 support_removal = supportremovedrequirements(repo)
72b7b4bf3e65 upgrade: extract the checking of target requirements change
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46053
diff changeset
1033 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: 46053
diff changeset
1034 if no_remove_reqs:
72b7b4bf3e65 upgrade: extract the checking of target requirements change
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46053
diff changeset
1035 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: 46053
diff changeset
1036 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: 46053
diff changeset
1037 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: 46053
diff changeset
1038
72b7b4bf3e65 upgrade: extract the checking of target requirements change
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46053
diff changeset
1039 support_addition = allowednewrequirements(repo)
72b7b4bf3e65 upgrade: extract the checking of target requirements change
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46053
diff changeset
1040 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: 46053
diff changeset
1041 if no_add_reqs:
72b7b4bf3e65 upgrade: extract the checking of target requirements change
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46053
diff changeset
1042 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: 46053
diff changeset
1043 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: 46053
diff changeset
1044 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: 46053
diff changeset
1045
72b7b4bf3e65 upgrade: extract the checking of target requirements change
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46053
diff changeset
1046 supported = supporteddestrequirements(repo)
72b7b4bf3e65 upgrade: extract the checking of target requirements change
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46053
diff changeset
1047 unsupported_reqs = new_reqs - supported
72b7b4bf3e65 upgrade: extract the checking of target requirements change
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46053
diff changeset
1048 if unsupported_reqs:
72b7b4bf3e65 upgrade: extract the checking of target requirements change
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46053
diff changeset
1049 msg = _(
72b7b4bf3e65 upgrade: extract the checking of target requirements change
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46053
diff changeset
1050 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: 46053
diff changeset
1051 b'requirement: %s'
72b7b4bf3e65 upgrade: extract the checking of target requirements change
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46053
diff changeset
1052 )
72b7b4bf3e65 upgrade: extract the checking of target requirements change
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46053
diff changeset
1053 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: 46053
diff changeset
1054 raise error.Abort(msg % unsupported_reqs)