annotate mercurial/upgrade_utils/actions.py @ 49069:a31e9840178e

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