Mercurial > public > mercurial-scm > hg
annotate mercurial/upgrade.py @ 48445:e7420f75d90d
upgrade: make the list of explicitly specified revlog a dict
This makes various logic simpler and will help making future patch clearer.
Differential Revision: https://phab.mercurial-scm.org/D11868
author | Pierre-Yves David <pierre-yves.david@octobus.net> |
---|---|
date | Mon, 06 Dec 2021 14:40:13 +0100 |
parents | 6e045497b20b |
children | 1d0978cfe968 |
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 | 6 # GNU General Public License version 2 or any later version. |
4702
18e91c9def0c
strip: move strip code to a new repair module
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
7 |
25970
d1419cfbd4f4
repair: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25874
diff
changeset
|
8 from __future__ import absolute_import |
d1419cfbd4f4
repair: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25874
diff
changeset
|
9 |
d1419cfbd4f4
repair: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25874
diff
changeset
|
10 from .i18n import _ |
d1419cfbd4f4
repair: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25874
diff
changeset
|
11 from . import ( |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26425
diff
changeset
|
12 error, |
35343
06987c6971be
upgrade: more standard creation of the temporary repository
Boris Feld <boris.feld@octobus.net>
parents:
35342
diff
changeset
|
13 hg, |
31893
165428b05fca
upgrade: import 'localrepo' globally
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31875
diff
changeset
|
14 localrepo, |
46235
0babe12ef35d
sharesafe: introduce functionality to automatically upgrade shares
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46231
diff
changeset
|
15 lock as lockmod, |
38165
2ce60954b1b7
py3: wrap tempfile.mkdtemp() to use bytes path
Yuya Nishihara <yuya@tcha.org>
parents:
37444
diff
changeset
|
16 pycompat, |
46235
0babe12ef35d
sharesafe: introduce functionality to automatically upgrade shares
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46231
diff
changeset
|
17 requirements as requirementsmod, |
0babe12ef35d
sharesafe: introduce functionality to automatically upgrade shares
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46231
diff
changeset
|
18 scmutil, |
46046
f105c49e89cd
upgrade: split actual upgrade code away from the main module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46035
diff
changeset
|
19 ) |
f105c49e89cd
upgrade: split actual upgrade code away from the main module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46035
diff
changeset
|
20 |
f105c49e89cd
upgrade: split actual upgrade code away from the main module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46035
diff
changeset
|
21 from .upgrade_utils import ( |
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
|
22 actions as upgrade_actions, |
46046
f105c49e89cd
upgrade: split actual upgrade code away from the main module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46035
diff
changeset
|
23 engine as upgrade_engine, |
25970
d1419cfbd4f4
repair: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25874
diff
changeset
|
24 ) |
d1419cfbd4f4
repair: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25874
diff
changeset
|
25 |
46235
0babe12ef35d
sharesafe: introduce functionality to automatically upgrade shares
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46231
diff
changeset
|
26 from .utils import ( |
0babe12ef35d
sharesafe: introduce functionality to automatically upgrade shares
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46231
diff
changeset
|
27 stringutil, |
0babe12ef35d
sharesafe: introduce functionality to automatically upgrade shares
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46231
diff
changeset
|
28 ) |
0babe12ef35d
sharesafe: introduce functionality to automatically upgrade shares
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46231
diff
changeset
|
29 |
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
|
30 allformatvariant = upgrade_actions.allformatvariant |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43031
diff
changeset
|
31 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43031
diff
changeset
|
32 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43031
diff
changeset
|
33 def upgraderepo( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43031
diff
changeset
|
34 ui, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43031
diff
changeset
|
35 repo, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43031
diff
changeset
|
36 run=False, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43031
diff
changeset
|
37 optimize=None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43031
diff
changeset
|
38 backup=True, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43031
diff
changeset
|
39 manifest=None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43031
diff
changeset
|
40 changelog=None, |
45997
7c539f0febbe
upgrade: add an explicite --filelogs arguments
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45995
diff
changeset
|
41 filelogs=None, |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43031
diff
changeset
|
42 ): |
30775
513d68a90398
repair: implement requirements checking for upgrades
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30707
diff
changeset
|
43 """Upgrade a repository in place.""" |
41088
5608b5a6c323
upgrade: add '-' in optimization name
Boris Feld <boris.feld@octobus.net>
parents:
40997
diff
changeset
|
44 if optimize is None: |
46208
083438d6f403
upgrade: drop support for old style optimization names
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46207
diff
changeset
|
45 optimize = {} |
30775
513d68a90398
repair: implement requirements checking for upgrades
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30707
diff
changeset
|
46 repo = repo.unfiltered() |
513d68a90398
repair: implement requirements checking for upgrades
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30707
diff
changeset
|
47 |
48445
e7420f75d90d
upgrade: make the list of explicitly specified revlog a dict
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48444
diff
changeset
|
48 specified_revlogs = {} |
e7420f75d90d
upgrade: make the list of explicitly specified revlog a dict
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48444
diff
changeset
|
49 if changelog is not None: |
e7420f75d90d
upgrade: make the list of explicitly specified revlog a dict
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48444
diff
changeset
|
50 specified_revlogs[upgrade_engine.UPGRADE_CHANGELOG] = changelog |
e7420f75d90d
upgrade: make the list of explicitly specified revlog a dict
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48444
diff
changeset
|
51 if manifest is not None: |
e7420f75d90d
upgrade: make the list of explicitly specified revlog a dict
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48444
diff
changeset
|
52 specified_revlogs[upgrade_engine.UPGRADE_MANIFEST] = manifest |
e7420f75d90d
upgrade: make the list of explicitly specified revlog a dict
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48444
diff
changeset
|
53 if filelogs is not None: |
e7420f75d90d
upgrade: make the list of explicitly specified revlog a dict
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48444
diff
changeset
|
54 specified_revlogs[upgrade_engine.UPGRADE_FILELOGS] = filelogs |
42830
cf2b765cecd7
upgrade: add an argument to control manifest upgrade
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42693
diff
changeset
|
55 |
30775
513d68a90398
repair: implement requirements checking for upgrades
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30707
diff
changeset
|
56 # Ensure the repository can be upgraded. |
46048
f4f956342cf1
upgrade: move requirements checking in a dedicated function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46047
diff
changeset
|
57 upgrade_actions.check_source_requirements(repo) |
30775
513d68a90398
repair: implement requirements checking for upgrades
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30707
diff
changeset
|
58 |
46051
72b7b4bf3e65
upgrade: extract the checking of target requirements change
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46050
diff
changeset
|
59 default_options = localrepo.defaultcreateopts(repo.ui) |
72b7b4bf3e65
upgrade: extract the checking of target requirements change
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46050
diff
changeset
|
60 newreqs = localrepo.newreporequirements(repo.ui, default_options) |
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
|
61 newreqs.update(upgrade_actions.preservedrequirements(repo)) |
30775
513d68a90398
repair: implement requirements checking for upgrades
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30707
diff
changeset
|
62 |
46051
72b7b4bf3e65
upgrade: extract the checking of target requirements change
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46050
diff
changeset
|
63 upgrade_actions.check_requirements_changes(repo, newreqs) |
30775
513d68a90398
repair: implement requirements checking for upgrades
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30707
diff
changeset
|
64 |
30776
3997edc4a86d
repair: determine what upgrade will do
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30775
diff
changeset
|
65 # Find and validate all improvements that can be made. |
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
|
66 alloptimizations = upgrade_actions.findoptimizations(repo) |
30776
3997edc4a86d
repair: determine what upgrade will do
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30775
diff
changeset
|
67 |
31899
cccd8e1538b0
upgrade: filter optimizations outside of 'determineactions'
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31898
diff
changeset
|
68 # Apply and Validate arguments. |
cccd8e1538b0
upgrade: filter optimizations outside of 'determineactions'
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31898
diff
changeset
|
69 optimizations = [] |
cccd8e1538b0
upgrade: filter optimizations outside of 'determineactions'
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31898
diff
changeset
|
70 for o in alloptimizations: |
cccd8e1538b0
upgrade: filter optimizations outside of 'determineactions'
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31898
diff
changeset
|
71 if o.name in optimize: |
cccd8e1538b0
upgrade: filter optimizations outside of 'determineactions'
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31898
diff
changeset
|
72 optimizations.append(o) |
cccd8e1538b0
upgrade: filter optimizations outside of 'determineactions'
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31898
diff
changeset
|
73 optimize.discard(o.name) |
cccd8e1538b0
upgrade: filter optimizations outside of 'determineactions'
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31898
diff
changeset
|
74 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43031
diff
changeset
|
75 if optimize: # anything left is unknown |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43031
diff
changeset
|
76 raise error.Abort( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
77 _(b'unknown optimization action requested: %s') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
78 % b', '.join(sorted(optimize)), |
43117
8ff1ecfadcd1
cleanup: join string literals that are already on one line
Martin von Zweigbergk <martinvonz@google.com>
parents:
43089
diff
changeset
|
79 hint=_(b'run without arguments to see valid optimizations'), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43031
diff
changeset
|
80 ) |
30776
3997edc4a86d
repair: determine what upgrade will do
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30775
diff
changeset
|
81 |
46205
53d083fa1f83
upgrade: rename finddeficiences() to find_format_upgrades()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46192
diff
changeset
|
82 format_upgrades = upgrade_actions.find_format_upgrades(repo) |
46210
6b40aac4da8e
upgrade: rename actions to upgrade_actions
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46209
diff
changeset
|
83 up_actions = upgrade_actions.determine_upgrade_actions( |
46209
a51d345f1404
upgrade: move optimization addition to determineactions()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46208
diff
changeset
|
84 repo, format_upgrades, optimizations, repo.requirements, newreqs |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43031
diff
changeset
|
85 ) |
46213
30310886d423
upgrade: introduce post upgrade and downgrade message for improvements
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46210
diff
changeset
|
86 removed_actions = upgrade_actions.find_format_downgrades(repo) |
30776
3997edc4a86d
repair: determine what upgrade will do
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30775
diff
changeset
|
87 |
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
|
88 removedreqs = repo.requirements - newreqs |
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
|
89 addedreqs = newreqs - repo.requirements |
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
|
90 |
48444
6e045497b20b
upgrade: move the revlog selection code lower down the chain
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46414
diff
changeset
|
91 # check if we need to touch revlog and if so, which ones |
6e045497b20b
upgrade: move the revlog selection code lower down the chain
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46414
diff
changeset
|
92 |
6e045497b20b
upgrade: move the revlog selection code lower down the chain
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46414
diff
changeset
|
93 revlogs = set(upgrade_engine.UPGRADE_ALL_REVLOGS) |
48445
e7420f75d90d
upgrade: make the list of explicitly specified revlog a dict
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48444
diff
changeset
|
94 if specified_revlogs: |
48444
6e045497b20b
upgrade: move the revlog selection code lower down the chain
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46414
diff
changeset
|
95 # we have some limitation on revlogs to be recloned |
48445
e7420f75d90d
upgrade: make the list of explicitly specified revlog a dict
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48444
diff
changeset
|
96 if any(specified_revlogs.values()): |
48444
6e045497b20b
upgrade: move the revlog selection code lower down the chain
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46414
diff
changeset
|
97 revlogs = set() |
48445
e7420f75d90d
upgrade: make the list of explicitly specified revlog a dict
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48444
diff
changeset
|
98 for upgrade, enabled in specified_revlogs.items(): |
48444
6e045497b20b
upgrade: move the revlog selection code lower down the chain
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46414
diff
changeset
|
99 if enabled: |
6e045497b20b
upgrade: move the revlog selection code lower down the chain
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46414
diff
changeset
|
100 revlogs.add(upgrade) |
6e045497b20b
upgrade: move the revlog selection code lower down the chain
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46414
diff
changeset
|
101 else: |
6e045497b20b
upgrade: move the revlog selection code lower down the chain
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46414
diff
changeset
|
102 # none are enabled |
48445
e7420f75d90d
upgrade: make the list of explicitly specified revlog a dict
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48444
diff
changeset
|
103 for upgrade in specified_revlogs.keys(): |
48444
6e045497b20b
upgrade: move the revlog selection code lower down the chain
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46414
diff
changeset
|
104 revlogs.discard(upgrade) |
6e045497b20b
upgrade: move the revlog selection code lower down the chain
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46414
diff
changeset
|
105 |
6e045497b20b
upgrade: move the revlog selection code lower down the chain
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46414
diff
changeset
|
106 # check the consistency of the revlog selection with the planned action |
6e045497b20b
upgrade: move the revlog selection code lower down the chain
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46414
diff
changeset
|
107 |
46046
f105c49e89cd
upgrade: split actual upgrade code away from the main module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46035
diff
changeset
|
108 if revlogs != upgrade_engine.UPGRADE_ALL_REVLOGS: |
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
|
109 incompatible = upgrade_actions.RECLONES_REQUIREMENTS & ( |
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
|
110 removedreqs | addedreqs |
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
|
111 ) |
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
|
112 if incompatible: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43031
diff
changeset
|
113 msg = _( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
114 b'ignoring revlogs selection flags, format requirements ' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
115 b'change: %s\n' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43031
diff
changeset
|
116 ) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
117 ui.warn(msg % b', '.join(sorted(incompatible))) |
46046
f105c49e89cd
upgrade: split actual upgrade code away from the main module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46035
diff
changeset
|
118 revlogs = upgrade_engine.UPGRADE_ALL_REVLOGS |
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
|
119 |
46056
c407513a44a3
upgrade: start moving the "to be happening" data in a dedicated object
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46051
diff
changeset
|
120 upgrade_op = upgrade_actions.UpgradeOperation( |
46188
945b33a7edfd
upgrade: move `print_affected_revlogs()` to UpgradeOperation class
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46056
diff
changeset
|
121 ui, |
46056
c407513a44a3
upgrade: start moving the "to be happening" data in a dedicated object
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46051
diff
changeset
|
122 newreqs, |
46191
aba979b1b90b
upgrade: move `printrequirements()` to UpgradeOperation class
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46190
diff
changeset
|
123 repo.requirements, |
46210
6b40aac4da8e
upgrade: rename actions to upgrade_actions
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46209
diff
changeset
|
124 up_actions, |
46213
30310886d423
upgrade: introduce post upgrade and downgrade message for improvements
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46210
diff
changeset
|
125 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:
46051
diff
changeset
|
126 revlogs, |
46375
2e8a844d0ae0
upgrade: don't create store backup if `--no-backup` is passed
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46333
diff
changeset
|
127 backup, |
46056
c407513a44a3
upgrade: start moving the "to be happening" data in a dedicated object
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46051
diff
changeset
|
128 ) |
c407513a44a3
upgrade: start moving the "to be happening" data in a dedicated object
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46051
diff
changeset
|
129 |
30775
513d68a90398
repair: implement requirements checking for upgrades
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30707
diff
changeset
|
130 if not run: |
30776
3997edc4a86d
repair: determine what upgrade will do
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30775
diff
changeset
|
131 fromconfig = [] |
31904
3c77f03f16b3
upgrade: simplify the "origin" dispatch in dry run
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31903
diff
changeset
|
132 onlydefault = [] |
30776
3997edc4a86d
repair: determine what upgrade will do
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30775
diff
changeset
|
133 |
46205
53d083fa1f83
upgrade: rename finddeficiences() to find_format_upgrades()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46192
diff
changeset
|
134 for d in format_upgrades: |
32031
11a2461fc9b1
upgrade: move descriptions and selection logic in individual classes
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
32030
diff
changeset
|
135 if d.fromconfig(repo): |
31901
9bdedb050d8d
upgrade: simplify some of the initial dispatch for dry run
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31900
diff
changeset
|
136 fromconfig.append(d) |
32031
11a2461fc9b1
upgrade: move descriptions and selection logic in individual classes
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
32030
diff
changeset
|
137 elif d.default: |
31904
3c77f03f16b3
upgrade: simplify the "origin" dispatch in dry run
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31903
diff
changeset
|
138 onlydefault.append(d) |
30776
3997edc4a86d
repair: determine what upgrade will do
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30775
diff
changeset
|
139 |
31904
3c77f03f16b3
upgrade: simplify the "origin" dispatch in dry run
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31903
diff
changeset
|
140 if fromconfig or onlydefault: |
30776
3997edc4a86d
repair: determine what upgrade will do
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30775
diff
changeset
|
141 |
3997edc4a86d
repair: determine what upgrade will do
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30775
diff
changeset
|
142 if fromconfig: |
44798
e295ba238bd8
upgrade: support the --quiet flag
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
44797
diff
changeset
|
143 ui.status( |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43031
diff
changeset
|
144 _( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
145 b'repository lacks features recommended by ' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
146 b'current config options:\n\n' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43031
diff
changeset
|
147 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43031
diff
changeset
|
148 ) |
30776
3997edc4a86d
repair: determine what upgrade will do
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30775
diff
changeset
|
149 for i in fromconfig: |
44798
e295ba238bd8
upgrade: support the --quiet flag
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
44797
diff
changeset
|
150 ui.status(b'%s\n %s\n\n' % (i.name, i.description)) |
30776
3997edc4a86d
repair: determine what upgrade will do
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30775
diff
changeset
|
151 |
3997edc4a86d
repair: determine what upgrade will do
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30775
diff
changeset
|
152 if onlydefault: |
44798
e295ba238bd8
upgrade: support the --quiet flag
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
44797
diff
changeset
|
153 ui.status( |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43031
diff
changeset
|
154 _( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
155 b'repository lacks features used by the default ' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
156 b'config options:\n\n' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43031
diff
changeset
|
157 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43031
diff
changeset
|
158 ) |
30776
3997edc4a86d
repair: determine what upgrade will do
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30775
diff
changeset
|
159 for i in onlydefault: |
44798
e295ba238bd8
upgrade: support the --quiet flag
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
44797
diff
changeset
|
160 ui.status(b'%s\n %s\n\n' % (i.name, i.description)) |
30776
3997edc4a86d
repair: determine what upgrade will do
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30775
diff
changeset
|
161 |
44798
e295ba238bd8
upgrade: support the --quiet flag
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
44797
diff
changeset
|
162 ui.status(b'\n') |
30776
3997edc4a86d
repair: determine what upgrade will do
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30775
diff
changeset
|
163 else: |
46205
53d083fa1f83
upgrade: rename finddeficiences() to find_format_upgrades()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46192
diff
changeset
|
164 ui.status(_(b'(no format upgrades found in existing repository)\n')) |
30776
3997edc4a86d
repair: determine what upgrade will do
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30775
diff
changeset
|
165 |
44798
e295ba238bd8
upgrade: support the --quiet flag
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
44797
diff
changeset
|
166 ui.status( |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43031
diff
changeset
|
167 _( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
168 b'performing an upgrade with "--run" will make the following ' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
169 b'changes:\n\n' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43031
diff
changeset
|
170 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43031
diff
changeset
|
171 ) |
30775
513d68a90398
repair: implement requirements checking for upgrades
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30707
diff
changeset
|
172 |
46191
aba979b1b90b
upgrade: move `printrequirements()` to UpgradeOperation class
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46190
diff
changeset
|
173 upgrade_op.print_requirements() |
46190
9ab2ab5bf9af
upgrade: move `printoptimisations() to UpgradeOperation class
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46189
diff
changeset
|
174 upgrade_op.print_optimisations() |
46189
dfddcbb0c244
upgrade: move `printupgradeactions()` to UpgradeOperation class
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46188
diff
changeset
|
175 upgrade_op.print_upgrade_actions() |
46188
945b33a7edfd
upgrade: move `print_affected_revlogs()` to UpgradeOperation class
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46056
diff
changeset
|
176 upgrade_op.print_affected_revlogs() |
30776
3997edc4a86d
repair: determine what upgrade will do
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30775
diff
changeset
|
177 |
46192
25d11b24dedf
upgrade: move printing of unused optimizations to UpgradeOperation class
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46191
diff
changeset
|
178 if upgrade_op.unused_optimizations: |
44798
e295ba238bd8
upgrade: support the --quiet flag
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
44797
diff
changeset
|
179 ui.status( |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43031
diff
changeset
|
180 _( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
181 b'additional optimizations are available by specifying ' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
182 b'"--optimize <name>":\n\n' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43031
diff
changeset
|
183 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43031
diff
changeset
|
184 ) |
46192
25d11b24dedf
upgrade: move printing of unused optimizations to UpgradeOperation class
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46191
diff
changeset
|
185 upgrade_op.print_unused_optimizations() |
30777
7de7afd8bdd9
repair: begin implementation of in-place upgrading
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30776
diff
changeset
|
186 return |
7de7afd8bdd9
repair: begin implementation of in-place upgrading
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30776
diff
changeset
|
187 |
46231
d3113c4cf52c
upgrade: don't perform anything if nothing to do
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46222
diff
changeset
|
188 if not (upgrade_op.upgrade_actions or upgrade_op.removed_actions): |
d3113c4cf52c
upgrade: don't perform anything if nothing to do
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46222
diff
changeset
|
189 ui.status(_(b'nothing to do\n')) |
d3113c4cf52c
upgrade: don't perform anything if nothing to do
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46222
diff
changeset
|
190 return |
30777
7de7afd8bdd9
repair: begin implementation of in-place upgrading
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30776
diff
changeset
|
191 # Else we're in the run=true case. |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
192 ui.write(_(b'upgrade will perform the following actions:\n\n')) |
46191
aba979b1b90b
upgrade: move `printrequirements()` to UpgradeOperation class
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46190
diff
changeset
|
193 upgrade_op.print_requirements() |
46190
9ab2ab5bf9af
upgrade: move `printoptimisations() to UpgradeOperation class
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46189
diff
changeset
|
194 upgrade_op.print_optimisations() |
46189
dfddcbb0c244
upgrade: move `printupgradeactions()` to UpgradeOperation class
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46188
diff
changeset
|
195 upgrade_op.print_upgrade_actions() |
46188
945b33a7edfd
upgrade: move `print_affected_revlogs()` to UpgradeOperation class
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46056
diff
changeset
|
196 upgrade_op.print_affected_revlogs() |
30777
7de7afd8bdd9
repair: begin implementation of in-place upgrading
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30776
diff
changeset
|
197 |
44798
e295ba238bd8
upgrade: support the --quiet flag
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
44797
diff
changeset
|
198 ui.status(_(b'beginning upgrade...\n')) |
33438 | 199 with repo.wlock(), repo.lock(): |
44798
e295ba238bd8
upgrade: support the --quiet flag
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
44797
diff
changeset
|
200 ui.status(_(b'repository locked and read-only\n')) |
33438 | 201 # Our strategy for upgrading the repository is to create a new, |
202 # temporary repository, write data to it, then do a swap of the | |
203 # data. There are less heavyweight ways to do this, but it is easier | |
204 # to create a new repo object than to instantiate all the components | |
205 # (like the store) separately. | |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
206 tmppath = pycompat.mkdtemp(prefix=b'upgrade.', dir=repo.path) |
33438 | 207 backuppath = None |
208 try: | |
44798
e295ba238bd8
upgrade: support the --quiet flag
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
44797
diff
changeset
|
209 ui.status( |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43031
diff
changeset
|
210 _( |
46222
e22aed089567
upgrade: migrated -> upgraded in ui messages
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46221
diff
changeset
|
211 b'creating temporary repository to stage upgraded ' |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
212 b'data: %s\n' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43031
diff
changeset
|
213 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43031
diff
changeset
|
214 % tmppath |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43031
diff
changeset
|
215 ) |
35342
75520786ad2f
upgrade: use the repository 'ui' as the base for the new repository
Boris Feld <boris.feld@octobus.net>
parents:
35340
diff
changeset
|
216 |
35379
6c28956ba2d4
upgrade: simplify workaround for repo.ui.copy()
Yuya Nishihara <yuya@tcha.org>
parents:
35345
diff
changeset
|
217 # clone ui without using ui.copy because repo.ui is protected |
6c28956ba2d4
upgrade: simplify workaround for repo.ui.copy()
Yuya Nishihara <yuya@tcha.org>
parents:
35345
diff
changeset
|
218 repoui = repo.ui.__class__(repo.ui) |
6c28956ba2d4
upgrade: simplify workaround for repo.ui.copy()
Yuya Nishihara <yuya@tcha.org>
parents:
35345
diff
changeset
|
219 dstrepo = hg.repository(repoui, path=tmppath, create=True) |
30777
7de7afd8bdd9
repair: begin implementation of in-place upgrading
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30776
diff
changeset
|
220 |
33438 | 221 with dstrepo.wlock(), dstrepo.lock(): |
46046
f105c49e89cd
upgrade: split actual upgrade code away from the main module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46035
diff
changeset
|
222 backuppath = upgrade_engine.upgrade( |
46056
c407513a44a3
upgrade: start moving the "to be happening" data in a dedicated object
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46051
diff
changeset
|
223 ui, repo, dstrepo, upgrade_op |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43031
diff
changeset
|
224 ) |
30777
7de7afd8bdd9
repair: begin implementation of in-place upgrading
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30776
diff
changeset
|
225 |
33438 | 226 finally: |
44798
e295ba238bd8
upgrade: support the --quiet flag
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
44797
diff
changeset
|
227 ui.status(_(b'removing temporary repository %s\n') % tmppath) |
33438 | 228 repo.vfs.rmtree(tmppath, forcibly=True) |
30777
7de7afd8bdd9
repair: begin implementation of in-place upgrading
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30776
diff
changeset
|
229 |
44798
e295ba238bd8
upgrade: support the --quiet flag
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
44797
diff
changeset
|
230 if backuppath and not ui.quiet: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43031
diff
changeset
|
231 ui.warn( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
232 _(b'copy of old repository backed up at %s\n') % backuppath |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43031
diff
changeset
|
233 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43031
diff
changeset
|
234 ui.warn( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43031
diff
changeset
|
235 _( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
236 b'the old repository will not be deleted; remove ' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
237 b'it to free up disk space once the upgraded ' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
238 b'repository is verified\n' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43031
diff
changeset
|
239 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43031
diff
changeset
|
240 ) |
46002
705c37f22859
upgrade: add support for experimental safe share mode
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45997
diff
changeset
|
241 |
46213
30310886d423
upgrade: introduce post upgrade and downgrade message for improvements
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46210
diff
changeset
|
242 upgrade_op.print_post_op_messages() |
46235
0babe12ef35d
sharesafe: introduce functionality to automatically upgrade shares
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46231
diff
changeset
|
243 |
0babe12ef35d
sharesafe: introduce functionality to automatically upgrade shares
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46231
diff
changeset
|
244 |
46332
cc3452d2dfa4
share: rework config options to be much clearer and easier
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46330
diff
changeset
|
245 def upgrade_share_to_safe( |
46333
2eb5fe13461b
share: rename share-safe warning config
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46332
diff
changeset
|
246 ui, |
2eb5fe13461b
share: rename share-safe warning config
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46332
diff
changeset
|
247 hgvfs, |
2eb5fe13461b
share: rename share-safe warning config
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46332
diff
changeset
|
248 storevfs, |
2eb5fe13461b
share: rename share-safe warning config
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46332
diff
changeset
|
249 current_requirements, |
2eb5fe13461b
share: rename share-safe warning config
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46332
diff
changeset
|
250 mismatch_config, |
2eb5fe13461b
share: rename share-safe warning config
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46332
diff
changeset
|
251 mismatch_warn, |
46332
cc3452d2dfa4
share: rework config options to be much clearer and easier
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46330
diff
changeset
|
252 ): |
46235
0babe12ef35d
sharesafe: introduce functionality to automatically upgrade shares
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46231
diff
changeset
|
253 """Upgrades a share to use share-safe mechanism""" |
0babe12ef35d
sharesafe: introduce functionality to automatically upgrade shares
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46231
diff
changeset
|
254 wlock = None |
46329
17176f64a03d
upgrade: take lock only for part where it's required
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46239
diff
changeset
|
255 store_requirements = localrepo._readrequires(storevfs, False) |
46330
02f3badf9011
upgrade: re-read current requirements after taking lock
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46329
diff
changeset
|
256 original_crequirements = current_requirements.copy() |
46329
17176f64a03d
upgrade: take lock only for part where it's required
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46239
diff
changeset
|
257 # after upgrade, store requires will be shared, so lets find |
17176f64a03d
upgrade: take lock only for part where it's required
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46239
diff
changeset
|
258 # the requirements which are not present in store and |
17176f64a03d
upgrade: take lock only for part where it's required
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46239
diff
changeset
|
259 # write them to share's .hg/requires |
17176f64a03d
upgrade: take lock only for part where it's required
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46239
diff
changeset
|
260 diffrequires = current_requirements - store_requirements |
17176f64a03d
upgrade: take lock only for part where it's required
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46239
diff
changeset
|
261 # add share-safe requirement as it will mark the share as share-safe |
17176f64a03d
upgrade: take lock only for part where it's required
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46239
diff
changeset
|
262 diffrequires.add(requirementsmod.SHARESAFE_REQUIREMENT) |
17176f64a03d
upgrade: take lock only for part where it's required
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46239
diff
changeset
|
263 current_requirements.add(requirementsmod.SHARESAFE_REQUIREMENT) |
46332
cc3452d2dfa4
share: rework config options to be much clearer and easier
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46330
diff
changeset
|
264 # in `allow` case, we don't try to upgrade, we just respect the source |
cc3452d2dfa4
share: rework config options to be much clearer and easier
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46330
diff
changeset
|
265 # state, update requirements and continue |
cc3452d2dfa4
share: rework config options to be much clearer and easier
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46330
diff
changeset
|
266 if mismatch_config == b'allow': |
cc3452d2dfa4
share: rework config options to be much clearer and easier
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46330
diff
changeset
|
267 return |
46235
0babe12ef35d
sharesafe: introduce functionality to automatically upgrade shares
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46231
diff
changeset
|
268 try: |
0babe12ef35d
sharesafe: introduce functionality to automatically upgrade shares
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46231
diff
changeset
|
269 wlock = lockmod.trylock(ui, hgvfs, b'wlock', 0, 0) |
46330
02f3badf9011
upgrade: re-read current requirements after taking lock
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46329
diff
changeset
|
270 # some process might change the requirement in between, re-read |
02f3badf9011
upgrade: re-read current requirements after taking lock
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46329
diff
changeset
|
271 # and update current_requirements |
02f3badf9011
upgrade: re-read current requirements after taking lock
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46329
diff
changeset
|
272 locked_requirements = localrepo._readrequires(hgvfs, True) |
02f3badf9011
upgrade: re-read current requirements after taking lock
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46329
diff
changeset
|
273 if locked_requirements != original_crequirements: |
02f3badf9011
upgrade: re-read current requirements after taking lock
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46329
diff
changeset
|
274 removed = current_requirements - locked_requirements |
02f3badf9011
upgrade: re-read current requirements after taking lock
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46329
diff
changeset
|
275 # update current_requirements in place because it's passed |
02f3badf9011
upgrade: re-read current requirements after taking lock
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46329
diff
changeset
|
276 # as reference |
02f3badf9011
upgrade: re-read current requirements after taking lock
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46329
diff
changeset
|
277 current_requirements -= removed |
02f3badf9011
upgrade: re-read current requirements after taking lock
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46329
diff
changeset
|
278 current_requirements |= locked_requirements |
02f3badf9011
upgrade: re-read current requirements after taking lock
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46329
diff
changeset
|
279 diffrequires = current_requirements - store_requirements |
02f3badf9011
upgrade: re-read current requirements after taking lock
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46329
diff
changeset
|
280 # add share-safe requirement as it will mark the share as share-safe |
02f3badf9011
upgrade: re-read current requirements after taking lock
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46329
diff
changeset
|
281 diffrequires.add(requirementsmod.SHARESAFE_REQUIREMENT) |
02f3badf9011
upgrade: re-read current requirements after taking lock
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46329
diff
changeset
|
282 current_requirements.add(requirementsmod.SHARESAFE_REQUIREMENT) |
46235
0babe12ef35d
sharesafe: introduce functionality to automatically upgrade shares
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46231
diff
changeset
|
283 scmutil.writerequires(hgvfs, diffrequires) |
0babe12ef35d
sharesafe: introduce functionality to automatically upgrade shares
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46231
diff
changeset
|
284 ui.warn(_(b'repository upgraded to use share-safe mode\n')) |
0babe12ef35d
sharesafe: introduce functionality to automatically upgrade shares
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46231
diff
changeset
|
285 except error.LockError as e: |
46348
4a58561ace0f
share-share: have the hint issue more consistently and point to the right doc
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46333
diff
changeset
|
286 hint = _( |
4a58561ace0f
share-share: have the hint issue more consistently and point to the right doc
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46333
diff
changeset
|
287 "see `hg help config.format.use-share-safe` for more information" |
4a58561ace0f
share-share: have the hint issue more consistently and point to the right doc
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46333
diff
changeset
|
288 ) |
46332
cc3452d2dfa4
share: rework config options to be much clearer and easier
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46330
diff
changeset
|
289 if mismatch_config == b'upgrade-abort': |
46239
d159d0fafa78
sharesafe: introduce config to disallow outdated shares if upgrade fails
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46238
diff
changeset
|
290 raise error.Abort( |
d159d0fafa78
sharesafe: introduce config to disallow outdated shares if upgrade fails
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46238
diff
changeset
|
291 _(b'failed to upgrade share, got error: %s') |
46348
4a58561ace0f
share-share: have the hint issue more consistently and point to the right doc
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46333
diff
changeset
|
292 % stringutil.forcebytestr(e.strerror), |
4a58561ace0f
share-share: have the hint issue more consistently and point to the right doc
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46333
diff
changeset
|
293 hint=hint, |
46239
d159d0fafa78
sharesafe: introduce config to disallow outdated shares if upgrade fails
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46238
diff
changeset
|
294 ) |
46333
2eb5fe13461b
share: rename share-safe warning config
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46332
diff
changeset
|
295 elif mismatch_warn: |
46238
9796cf108e4e
sharesafe: make warning about outdated share configurable
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46236
diff
changeset
|
296 ui.warn( |
9796cf108e4e
sharesafe: make warning about outdated share configurable
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46236
diff
changeset
|
297 _(b'failed to upgrade share, got error: %s\n') |
46348
4a58561ace0f
share-share: have the hint issue more consistently and point to the right doc
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46333
diff
changeset
|
298 % stringutil.forcebytestr(e.strerror), |
4a58561ace0f
share-share: have the hint issue more consistently and point to the right doc
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46333
diff
changeset
|
299 hint=hint, |
46238
9796cf108e4e
sharesafe: make warning about outdated share configurable
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46236
diff
changeset
|
300 ) |
46235
0babe12ef35d
sharesafe: introduce functionality to automatically upgrade shares
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46231
diff
changeset
|
301 finally: |
0babe12ef35d
sharesafe: introduce functionality to automatically upgrade shares
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46231
diff
changeset
|
302 if wlock: |
0babe12ef35d
sharesafe: introduce functionality to automatically upgrade shares
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46231
diff
changeset
|
303 wlock.release() |
46236
eec47efe219d
sharesafe: add functionality to automatically downgrade shares
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46235
diff
changeset
|
304 |
eec47efe219d
sharesafe: add functionality to automatically downgrade shares
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46235
diff
changeset
|
305 |
eec47efe219d
sharesafe: add functionality to automatically downgrade shares
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46235
diff
changeset
|
306 def downgrade_share_to_non_safe( |
eec47efe219d
sharesafe: add functionality to automatically downgrade shares
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46235
diff
changeset
|
307 ui, |
eec47efe219d
sharesafe: add functionality to automatically downgrade shares
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46235
diff
changeset
|
308 hgvfs, |
eec47efe219d
sharesafe: add functionality to automatically downgrade shares
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46235
diff
changeset
|
309 sharedvfs, |
eec47efe219d
sharesafe: add functionality to automatically downgrade shares
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46235
diff
changeset
|
310 current_requirements, |
46332
cc3452d2dfa4
share: rework config options to be much clearer and easier
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46330
diff
changeset
|
311 mismatch_config, |
46333
2eb5fe13461b
share: rename share-safe warning config
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46332
diff
changeset
|
312 mismatch_warn, |
46236
eec47efe219d
sharesafe: add functionality to automatically downgrade shares
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46235
diff
changeset
|
313 ): |
eec47efe219d
sharesafe: add functionality to automatically downgrade shares
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46235
diff
changeset
|
314 """Downgrades a share which use share-safe to not use it""" |
eec47efe219d
sharesafe: add functionality to automatically downgrade shares
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46235
diff
changeset
|
315 wlock = None |
46329
17176f64a03d
upgrade: take lock only for part where it's required
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46239
diff
changeset
|
316 source_requirements = localrepo._readrequires(sharedvfs, True) |
46330
02f3badf9011
upgrade: re-read current requirements after taking lock
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46329
diff
changeset
|
317 original_crequirements = current_requirements.copy() |
46329
17176f64a03d
upgrade: take lock only for part where it's required
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46239
diff
changeset
|
318 # we cannot be 100% sure on which requirements were present in store when |
17176f64a03d
upgrade: take lock only for part where it's required
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46239
diff
changeset
|
319 # the source supported share-safe. However, we do know that working |
17176f64a03d
upgrade: take lock only for part where it's required
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46239
diff
changeset
|
320 # directory requirements were not there. Hence we remove them |
17176f64a03d
upgrade: take lock only for part where it's required
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46239
diff
changeset
|
321 source_requirements -= requirementsmod.WORKING_DIR_REQUIREMENTS |
17176f64a03d
upgrade: take lock only for part where it's required
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46239
diff
changeset
|
322 current_requirements |= source_requirements |
17176f64a03d
upgrade: take lock only for part where it's required
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46239
diff
changeset
|
323 current_requirements.remove(requirementsmod.SHARESAFE_REQUIREMENT) |
46332
cc3452d2dfa4
share: rework config options to be much clearer and easier
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46330
diff
changeset
|
324 if mismatch_config == b'allow': |
cc3452d2dfa4
share: rework config options to be much clearer and easier
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46330
diff
changeset
|
325 return |
46329
17176f64a03d
upgrade: take lock only for part where it's required
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46239
diff
changeset
|
326 |
46236
eec47efe219d
sharesafe: add functionality to automatically downgrade shares
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46235
diff
changeset
|
327 try: |
eec47efe219d
sharesafe: add functionality to automatically downgrade shares
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46235
diff
changeset
|
328 wlock = lockmod.trylock(ui, hgvfs, b'wlock', 0, 0) |
46330
02f3badf9011
upgrade: re-read current requirements after taking lock
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46329
diff
changeset
|
329 # some process might change the requirement in between, re-read |
02f3badf9011
upgrade: re-read current requirements after taking lock
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46329
diff
changeset
|
330 # and update current_requirements |
02f3badf9011
upgrade: re-read current requirements after taking lock
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46329
diff
changeset
|
331 locked_requirements = localrepo._readrequires(hgvfs, True) |
02f3badf9011
upgrade: re-read current requirements after taking lock
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46329
diff
changeset
|
332 if locked_requirements != original_crequirements: |
02f3badf9011
upgrade: re-read current requirements after taking lock
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46329
diff
changeset
|
333 removed = current_requirements - locked_requirements |
02f3badf9011
upgrade: re-read current requirements after taking lock
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46329
diff
changeset
|
334 # update current_requirements in place because it's passed |
02f3badf9011
upgrade: re-read current requirements after taking lock
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46329
diff
changeset
|
335 # as reference |
02f3badf9011
upgrade: re-read current requirements after taking lock
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46329
diff
changeset
|
336 current_requirements -= removed |
02f3badf9011
upgrade: re-read current requirements after taking lock
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46329
diff
changeset
|
337 current_requirements |= locked_requirements |
02f3badf9011
upgrade: re-read current requirements after taking lock
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46329
diff
changeset
|
338 current_requirements |= source_requirements |
02f3badf9011
upgrade: re-read current requirements after taking lock
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46329
diff
changeset
|
339 current_requirements -= set(requirementsmod.SHARESAFE_REQUIREMENT) |
46236
eec47efe219d
sharesafe: add functionality to automatically downgrade shares
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46235
diff
changeset
|
340 scmutil.writerequires(hgvfs, current_requirements) |
eec47efe219d
sharesafe: add functionality to automatically downgrade shares
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46235
diff
changeset
|
341 ui.warn(_(b'repository downgraded to not use share-safe mode\n')) |
eec47efe219d
sharesafe: add functionality to automatically downgrade shares
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46235
diff
changeset
|
342 except error.LockError as e: |
46348
4a58561ace0f
share-share: have the hint issue more consistently and point to the right doc
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46333
diff
changeset
|
343 hint = _( |
4a58561ace0f
share-share: have the hint issue more consistently and point to the right doc
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46333
diff
changeset
|
344 "see `hg help config.format.use-share-safe` for more information" |
4a58561ace0f
share-share: have the hint issue more consistently and point to the right doc
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46333
diff
changeset
|
345 ) |
46332
cc3452d2dfa4
share: rework config options to be much clearer and easier
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46330
diff
changeset
|
346 # If upgrade-abort is set, abort when upgrade fails, else let the |
cc3452d2dfa4
share: rework config options to be much clearer and easier
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46330
diff
changeset
|
347 # process continue as `upgrade-allow` is set |
cc3452d2dfa4
share: rework config options to be much clearer and easier
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46330
diff
changeset
|
348 if mismatch_config == b'downgrade-abort': |
cc3452d2dfa4
share: rework config options to be much clearer and easier
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46330
diff
changeset
|
349 raise error.Abort( |
cc3452d2dfa4
share: rework config options to be much clearer and easier
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46330
diff
changeset
|
350 _(b'failed to downgrade share, got error: %s') |
46348
4a58561ace0f
share-share: have the hint issue more consistently and point to the right doc
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46333
diff
changeset
|
351 % stringutil.forcebytestr(e.strerror), |
4a58561ace0f
share-share: have the hint issue more consistently and point to the right doc
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46333
diff
changeset
|
352 hint=hint, |
46332
cc3452d2dfa4
share: rework config options to be much clearer and easier
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46330
diff
changeset
|
353 ) |
46333
2eb5fe13461b
share: rename share-safe warning config
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46332
diff
changeset
|
354 elif mismatch_warn: |
2eb5fe13461b
share: rename share-safe warning config
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46332
diff
changeset
|
355 ui.warn( |
2eb5fe13461b
share: rename share-safe warning config
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46332
diff
changeset
|
356 _(b'failed to downgrade share, got error: %s\n') |
46348
4a58561ace0f
share-share: have the hint issue more consistently and point to the right doc
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46333
diff
changeset
|
357 % stringutil.forcebytestr(e.strerror), |
4a58561ace0f
share-share: have the hint issue more consistently and point to the right doc
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46333
diff
changeset
|
358 hint=hint, |
46333
2eb5fe13461b
share: rename share-safe warning config
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46332
diff
changeset
|
359 ) |
46236
eec47efe219d
sharesafe: add functionality to automatically downgrade shares
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46235
diff
changeset
|
360 finally: |
eec47efe219d
sharesafe: add functionality to automatically downgrade shares
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46235
diff
changeset
|
361 if wlock: |
eec47efe219d
sharesafe: add functionality to automatically downgrade shares
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46235
diff
changeset
|
362 wlock.release() |