Mercurial > public > mercurial-scm > hg-stable
annotate mercurial/upgrade.py @ 48486:8405c1bffacf
upgrade: issue a message when a revlog type has to be upgraded
This is more explicite and prepare for a smoother transition to smarter picking
of the revlog we will process.
Differential Revision: https://phab.mercurial-scm.org/D11870
author | Pierre-Yves David <pierre-yves.david@octobus.net> |
---|---|
date | Mon, 06 Dec 2021 17:13:26 +0100 |
parents | 1d0978cfe968 |
children | 62e6222cc5b6 |
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, |
35352
06987c6971be
upgrade: more standard creation of the temporary repository
Boris Feld <boris.feld@octobus.net>
parents:
35351
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, |
38198
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, |
46050
f105c49e89cd
upgrade: split actual upgrade code away from the main module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46039
diff
changeset
|
19 ) |
f105c49e89cd
upgrade: split actual upgrade code away from the main module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46039
diff
changeset
|
20 |
f105c49e89cd
upgrade: split actual upgrade code away from the main module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46039
diff
changeset
|
21 from .upgrade_utils import ( |
46051
4b89cf08d8dc
upgrade: split definition and management of the actions from the main code
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46050
diff
changeset
|
22 actions as upgrade_actions, |
46050
f105c49e89cd
upgrade: split actual upgrade code away from the main module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46039
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 |
46051
4b89cf08d8dc
upgrade: split definition and management of the actions from the main code
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46050
diff
changeset
|
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, |
46012
7c539f0febbe
upgrade: add an explicite --filelogs arguments
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46010
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.""" |
41091
5608b5a6c323
upgrade: add '-' in optimization name
Boris Feld <boris.feld@octobus.net>
parents:
41007
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 |
48484
e7420f75d90d
upgrade: make the list of explicitly specified revlog a dict
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48483
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:
48483
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:
48483
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:
48483
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:
48483
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:
48483
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:
48483
diff
changeset
|
54 specified_revlogs[upgrade_engine.UPGRADE_FILELOGS] = filelogs |
42840
cf2b765cecd7
upgrade: add an argument to control manifest upgrade
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42715
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. |
46052
f4f956342cf1
upgrade: move requirements checking in a dedicated function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46051
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 |
46055
72b7b4bf3e65
upgrade: extract the checking of target requirements change
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46054
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:
46054
diff
changeset
|
60 newreqs = localrepo.newreporequirements(repo.ui, default_options) |
46051
4b89cf08d8dc
upgrade: split definition and management of the actions from the main code
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46050
diff
changeset
|
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 |
46055
72b7b4bf3e65
upgrade: extract the checking of target requirements change
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46054
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. |
46051
4b89cf08d8dc
upgrade: split definition and management of the actions from the main code
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46050
diff
changeset
|
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 |
42842
a3c2ffcd266f
upgrade: make sure we reclone all revlogs when updating to some format
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42841
diff
changeset
|
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:
42841
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:
42841
diff
changeset
|
90 |
48483
6e045497b20b
upgrade: move the revlog selection code lower down the chain
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46483
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:
46483
diff
changeset
|
92 |
48485
1d0978cfe968
upgrade: explicitly warn when a `--no-xxx` flag is overwritten
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48484
diff
changeset
|
93 touched_revlogs = set() |
1d0978cfe968
upgrade: explicitly warn when a `--no-xxx` flag is overwritten
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48484
diff
changeset
|
94 overwrite_msg = _(b'warning: ignoring %14s, as upgrade is changing: %s\n') |
48486
8405c1bffacf
upgrade: issue a message when a revlog type has to be upgraded
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48485
diff
changeset
|
95 select_msg = _(b'note: selecting %s for processing to change: %s\n') |
8405c1bffacf
upgrade: issue a message when a revlog type has to be upgraded
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48485
diff
changeset
|
96 msg_issued = 0 |
48485
1d0978cfe968
upgrade: explicitly warn when a `--no-xxx` flag is overwritten
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48484
diff
changeset
|
97 |
1d0978cfe968
upgrade: explicitly warn when a `--no-xxx` flag is overwritten
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48484
diff
changeset
|
98 FL = upgrade_engine.UPGRADE_FILELOGS |
1d0978cfe968
upgrade: explicitly warn when a `--no-xxx` flag is overwritten
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48484
diff
changeset
|
99 MN = upgrade_engine.UPGRADE_MANIFEST |
1d0978cfe968
upgrade: explicitly warn when a `--no-xxx` flag is overwritten
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48484
diff
changeset
|
100 CL = upgrade_engine.UPGRADE_CHANGELOG |
1d0978cfe968
upgrade: explicitly warn when a `--no-xxx` flag is overwritten
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48484
diff
changeset
|
101 |
1d0978cfe968
upgrade: explicitly warn when a `--no-xxx` flag is overwritten
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48484
diff
changeset
|
102 for action in sorted(up_actions + removed_actions, key=lambda a: a.name): |
1d0978cfe968
upgrade: explicitly warn when a `--no-xxx` flag is overwritten
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48484
diff
changeset
|
103 # optimisation does not "requires anything, they just needs it. |
1d0978cfe968
upgrade: explicitly warn when a `--no-xxx` flag is overwritten
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48484
diff
changeset
|
104 if action.type != upgrade_actions.FORMAT_VARIANT: |
1d0978cfe968
upgrade: explicitly warn when a `--no-xxx` flag is overwritten
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48484
diff
changeset
|
105 continue |
1d0978cfe968
upgrade: explicitly warn when a `--no-xxx` flag is overwritten
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48484
diff
changeset
|
106 |
1d0978cfe968
upgrade: explicitly warn when a `--no-xxx` flag is overwritten
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48484
diff
changeset
|
107 if action.touches_filelogs and FL not in touched_revlogs: |
1d0978cfe968
upgrade: explicitly warn when a `--no-xxx` flag is overwritten
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48484
diff
changeset
|
108 if FL in specified_revlogs: |
1d0978cfe968
upgrade: explicitly warn when a `--no-xxx` flag is overwritten
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48484
diff
changeset
|
109 if not specified_revlogs[FL]: |
1d0978cfe968
upgrade: explicitly warn when a `--no-xxx` flag is overwritten
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48484
diff
changeset
|
110 msg = overwrite_msg % (b'--no-filelogs', action.name) |
1d0978cfe968
upgrade: explicitly warn when a `--no-xxx` flag is overwritten
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48484
diff
changeset
|
111 ui.warn(msg) |
48486
8405c1bffacf
upgrade: issue a message when a revlog type has to be upgraded
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48485
diff
changeset
|
112 msg_issued = 2 |
8405c1bffacf
upgrade: issue a message when a revlog type has to be upgraded
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48485
diff
changeset
|
113 else: |
8405c1bffacf
upgrade: issue a message when a revlog type has to be upgraded
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48485
diff
changeset
|
114 msg = select_msg % (b'all-filelogs', action.name) |
8405c1bffacf
upgrade: issue a message when a revlog type has to be upgraded
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48485
diff
changeset
|
115 ui.status(msg) |
8405c1bffacf
upgrade: issue a message when a revlog type has to be upgraded
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48485
diff
changeset
|
116 if not ui.quiet: |
8405c1bffacf
upgrade: issue a message when a revlog type has to be upgraded
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48485
diff
changeset
|
117 msg_issued = 1 |
48485
1d0978cfe968
upgrade: explicitly warn when a `--no-xxx` flag is overwritten
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48484
diff
changeset
|
118 touched_revlogs.add(FL) |
48486
8405c1bffacf
upgrade: issue a message when a revlog type has to be upgraded
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48485
diff
changeset
|
119 |
48485
1d0978cfe968
upgrade: explicitly warn when a `--no-xxx` flag is overwritten
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48484
diff
changeset
|
120 if action.touches_manifests and MN not in touched_revlogs: |
1d0978cfe968
upgrade: explicitly warn when a `--no-xxx` flag is overwritten
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48484
diff
changeset
|
121 if MN in specified_revlogs: |
1d0978cfe968
upgrade: explicitly warn when a `--no-xxx` flag is overwritten
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48484
diff
changeset
|
122 if not specified_revlogs[MN]: |
1d0978cfe968
upgrade: explicitly warn when a `--no-xxx` flag is overwritten
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48484
diff
changeset
|
123 msg = overwrite_msg % (b'--no-manifest', action.name) |
1d0978cfe968
upgrade: explicitly warn when a `--no-xxx` flag is overwritten
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48484
diff
changeset
|
124 ui.warn(msg) |
48486
8405c1bffacf
upgrade: issue a message when a revlog type has to be upgraded
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48485
diff
changeset
|
125 msg_issued = 2 |
8405c1bffacf
upgrade: issue a message when a revlog type has to be upgraded
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48485
diff
changeset
|
126 else: |
8405c1bffacf
upgrade: issue a message when a revlog type has to be upgraded
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48485
diff
changeset
|
127 msg = select_msg % (b'all-manifestlogs', action.name) |
8405c1bffacf
upgrade: issue a message when a revlog type has to be upgraded
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48485
diff
changeset
|
128 ui.status(msg) |
8405c1bffacf
upgrade: issue a message when a revlog type has to be upgraded
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48485
diff
changeset
|
129 if not ui.quiet: |
8405c1bffacf
upgrade: issue a message when a revlog type has to be upgraded
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48485
diff
changeset
|
130 msg_issued = 1 |
48485
1d0978cfe968
upgrade: explicitly warn when a `--no-xxx` flag is overwritten
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48484
diff
changeset
|
131 touched_revlogs.add(MN) |
48486
8405c1bffacf
upgrade: issue a message when a revlog type has to be upgraded
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48485
diff
changeset
|
132 |
48485
1d0978cfe968
upgrade: explicitly warn when a `--no-xxx` flag is overwritten
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48484
diff
changeset
|
133 if action.touches_changelog and CL not in touched_revlogs: |
1d0978cfe968
upgrade: explicitly warn when a `--no-xxx` flag is overwritten
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48484
diff
changeset
|
134 if CL in specified_revlogs: |
1d0978cfe968
upgrade: explicitly warn when a `--no-xxx` flag is overwritten
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48484
diff
changeset
|
135 if not specified_revlogs[CL]: |
1d0978cfe968
upgrade: explicitly warn when a `--no-xxx` flag is overwritten
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48484
diff
changeset
|
136 msg = overwrite_msg % (b'--no-changelog', action.name) |
1d0978cfe968
upgrade: explicitly warn when a `--no-xxx` flag is overwritten
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48484
diff
changeset
|
137 ui.warn(msg) |
1d0978cfe968
upgrade: explicitly warn when a `--no-xxx` flag is overwritten
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48484
diff
changeset
|
138 msg_issued = True |
48486
8405c1bffacf
upgrade: issue a message when a revlog type has to be upgraded
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48485
diff
changeset
|
139 else: |
8405c1bffacf
upgrade: issue a message when a revlog type has to be upgraded
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48485
diff
changeset
|
140 msg = select_msg % (b'changelog', action.name) |
8405c1bffacf
upgrade: issue a message when a revlog type has to be upgraded
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48485
diff
changeset
|
141 ui.status(msg) |
8405c1bffacf
upgrade: issue a message when a revlog type has to be upgraded
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48485
diff
changeset
|
142 if not ui.quiet: |
8405c1bffacf
upgrade: issue a message when a revlog type has to be upgraded
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48485
diff
changeset
|
143 msg_issued = 1 |
48485
1d0978cfe968
upgrade: explicitly warn when a `--no-xxx` flag is overwritten
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48484
diff
changeset
|
144 touched_revlogs.add(CL) |
48486
8405c1bffacf
upgrade: issue a message when a revlog type has to be upgraded
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48485
diff
changeset
|
145 if msg_issued >= 2: |
48485
1d0978cfe968
upgrade: explicitly warn when a `--no-xxx` flag is overwritten
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48484
diff
changeset
|
146 ui.warn((b"\n")) |
48486
8405c1bffacf
upgrade: issue a message when a revlog type has to be upgraded
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48485
diff
changeset
|
147 elif msg_issued >= 1: |
8405c1bffacf
upgrade: issue a message when a revlog type has to be upgraded
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48485
diff
changeset
|
148 ui.status((b"\n")) |
48485
1d0978cfe968
upgrade: explicitly warn when a `--no-xxx` flag is overwritten
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48484
diff
changeset
|
149 |
48483
6e045497b20b
upgrade: move the revlog selection code lower down the chain
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46483
diff
changeset
|
150 revlogs = set(upgrade_engine.UPGRADE_ALL_REVLOGS) |
48484
e7420f75d90d
upgrade: make the list of explicitly specified revlog a dict
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48483
diff
changeset
|
151 if specified_revlogs: |
48483
6e045497b20b
upgrade: move the revlog selection code lower down the chain
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46483
diff
changeset
|
152 # we have some limitation on revlogs to be recloned |
48484
e7420f75d90d
upgrade: make the list of explicitly specified revlog a dict
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48483
diff
changeset
|
153 if any(specified_revlogs.values()): |
48483
6e045497b20b
upgrade: move the revlog selection code lower down the chain
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46483
diff
changeset
|
154 revlogs = set() |
48484
e7420f75d90d
upgrade: make the list of explicitly specified revlog a dict
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48483
diff
changeset
|
155 for upgrade, enabled in specified_revlogs.items(): |
48483
6e045497b20b
upgrade: move the revlog selection code lower down the chain
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46483
diff
changeset
|
156 if enabled: |
6e045497b20b
upgrade: move the revlog selection code lower down the chain
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46483
diff
changeset
|
157 revlogs.add(upgrade) |
6e045497b20b
upgrade: move the revlog selection code lower down the chain
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46483
diff
changeset
|
158 else: |
6e045497b20b
upgrade: move the revlog selection code lower down the chain
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46483
diff
changeset
|
159 # none are enabled |
48484
e7420f75d90d
upgrade: make the list of explicitly specified revlog a dict
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48483
diff
changeset
|
160 for upgrade in specified_revlogs.keys(): |
48483
6e045497b20b
upgrade: move the revlog selection code lower down the chain
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46483
diff
changeset
|
161 revlogs.discard(upgrade) |
6e045497b20b
upgrade: move the revlog selection code lower down the chain
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46483
diff
changeset
|
162 |
6e045497b20b
upgrade: move the revlog selection code lower down the chain
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46483
diff
changeset
|
163 # 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:
46483
diff
changeset
|
164 |
46050
f105c49e89cd
upgrade: split actual upgrade code away from the main module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46039
diff
changeset
|
165 if revlogs != upgrade_engine.UPGRADE_ALL_REVLOGS: |
46051
4b89cf08d8dc
upgrade: split definition and management of the actions from the main code
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46050
diff
changeset
|
166 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:
46050
diff
changeset
|
167 removedreqs | addedreqs |
4b89cf08d8dc
upgrade: split definition and management of the actions from the main code
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46050
diff
changeset
|
168 ) |
42842
a3c2ffcd266f
upgrade: make sure we reclone all revlogs when updating to some format
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42841
diff
changeset
|
169 if incompatible: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43031
diff
changeset
|
170 msg = _( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
171 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
|
172 b'change: %s\n' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43031
diff
changeset
|
173 ) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
174 ui.warn(msg % b', '.join(sorted(incompatible))) |
46050
f105c49e89cd
upgrade: split actual upgrade code away from the main module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46039
diff
changeset
|
175 revlogs = upgrade_engine.UPGRADE_ALL_REVLOGS |
42842
a3c2ffcd266f
upgrade: make sure we reclone all revlogs when updating to some format
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42841
diff
changeset
|
176 |
46060
c407513a44a3
upgrade: start moving the "to be happening" data in a dedicated object
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46055
diff
changeset
|
177 upgrade_op = upgrade_actions.UpgradeOperation( |
46188
945b33a7edfd
upgrade: move `print_affected_revlogs()` to UpgradeOperation class
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46060
diff
changeset
|
178 ui, |
46060
c407513a44a3
upgrade: start moving the "to be happening" data in a dedicated object
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46055
diff
changeset
|
179 newreqs, |
46191
aba979b1b90b
upgrade: move `printrequirements()` to UpgradeOperation class
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46190
diff
changeset
|
180 repo.requirements, |
46210
6b40aac4da8e
upgrade: rename actions to upgrade_actions
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46209
diff
changeset
|
181 up_actions, |
46213
30310886d423
upgrade: introduce post upgrade and downgrade message for improvements
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46210
diff
changeset
|
182 removed_actions, |
46060
c407513a44a3
upgrade: start moving the "to be happening" data in a dedicated object
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46055
diff
changeset
|
183 revlogs, |
46447
2e8a844d0ae0
upgrade: don't create store backup if `--no-backup` is passed
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46333
diff
changeset
|
184 backup, |
46060
c407513a44a3
upgrade: start moving the "to be happening" data in a dedicated object
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46055
diff
changeset
|
185 ) |
c407513a44a3
upgrade: start moving the "to be happening" data in a dedicated object
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46055
diff
changeset
|
186 |
30775
513d68a90398
repair: implement requirements checking for upgrades
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30707
diff
changeset
|
187 if not run: |
30776
3997edc4a86d
repair: determine what upgrade will do
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30775
diff
changeset
|
188 fromconfig = [] |
31904
3c77f03f16b3
upgrade: simplify the "origin" dispatch in dry run
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31903
diff
changeset
|
189 onlydefault = [] |
30776
3997edc4a86d
repair: determine what upgrade will do
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30775
diff
changeset
|
190 |
46205
53d083fa1f83
upgrade: rename finddeficiences() to find_format_upgrades()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46192
diff
changeset
|
191 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
|
192 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
|
193 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
|
194 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
|
195 onlydefault.append(d) |
30776
3997edc4a86d
repair: determine what upgrade will do
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30775
diff
changeset
|
196 |
31904
3c77f03f16b3
upgrade: simplify the "origin" dispatch in dry run
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31903
diff
changeset
|
197 if fromconfig or onlydefault: |
30776
3997edc4a86d
repair: determine what upgrade will do
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30775
diff
changeset
|
198 |
3997edc4a86d
repair: determine what upgrade will do
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30775
diff
changeset
|
199 if fromconfig: |
44875
e295ba238bd8
upgrade: support the --quiet flag
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
44874
diff
changeset
|
200 ui.status( |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43031
diff
changeset
|
201 _( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
202 b'repository lacks features recommended by ' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
203 b'current config options:\n\n' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43031
diff
changeset
|
204 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43031
diff
changeset
|
205 ) |
30776
3997edc4a86d
repair: determine what upgrade will do
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30775
diff
changeset
|
206 for i in fromconfig: |
44875
e295ba238bd8
upgrade: support the --quiet flag
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
44874
diff
changeset
|
207 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
|
208 |
3997edc4a86d
repair: determine what upgrade will do
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30775
diff
changeset
|
209 if onlydefault: |
44875
e295ba238bd8
upgrade: support the --quiet flag
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
44874
diff
changeset
|
210 ui.status( |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43031
diff
changeset
|
211 _( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
212 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
|
213 b'config options:\n\n' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43031
diff
changeset
|
214 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43031
diff
changeset
|
215 ) |
30776
3997edc4a86d
repair: determine what upgrade will do
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30775
diff
changeset
|
216 for i in onlydefault: |
44875
e295ba238bd8
upgrade: support the --quiet flag
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
44874
diff
changeset
|
217 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
|
218 |
44875
e295ba238bd8
upgrade: support the --quiet flag
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
44874
diff
changeset
|
219 ui.status(b'\n') |
30776
3997edc4a86d
repair: determine what upgrade will do
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30775
diff
changeset
|
220 else: |
46205
53d083fa1f83
upgrade: rename finddeficiences() to find_format_upgrades()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46192
diff
changeset
|
221 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
|
222 |
44875
e295ba238bd8
upgrade: support the --quiet flag
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
44874
diff
changeset
|
223 ui.status( |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43031
diff
changeset
|
224 _( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
225 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
|
226 b'changes:\n\n' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43031
diff
changeset
|
227 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43031
diff
changeset
|
228 ) |
30775
513d68a90398
repair: implement requirements checking for upgrades
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30707
diff
changeset
|
229 |
46191
aba979b1b90b
upgrade: move `printrequirements()` to UpgradeOperation class
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46190
diff
changeset
|
230 upgrade_op.print_requirements() |
46190
9ab2ab5bf9af
upgrade: move `printoptimisations() to UpgradeOperation class
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46189
diff
changeset
|
231 upgrade_op.print_optimisations() |
46189
dfddcbb0c244
upgrade: move `printupgradeactions()` to UpgradeOperation class
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46188
diff
changeset
|
232 upgrade_op.print_upgrade_actions() |
46188
945b33a7edfd
upgrade: move `print_affected_revlogs()` to UpgradeOperation class
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46060
diff
changeset
|
233 upgrade_op.print_affected_revlogs() |
30776
3997edc4a86d
repair: determine what upgrade will do
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30775
diff
changeset
|
234 |
46192
25d11b24dedf
upgrade: move printing of unused optimizations to UpgradeOperation class
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46191
diff
changeset
|
235 if upgrade_op.unused_optimizations: |
44875
e295ba238bd8
upgrade: support the --quiet flag
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
44874
diff
changeset
|
236 ui.status( |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43031
diff
changeset
|
237 _( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
238 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
|
239 b'"--optimize <name>":\n\n' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43031
diff
changeset
|
240 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43031
diff
changeset
|
241 ) |
46192
25d11b24dedf
upgrade: move printing of unused optimizations to UpgradeOperation class
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46191
diff
changeset
|
242 upgrade_op.print_unused_optimizations() |
30777
7de7afd8bdd9
repair: begin implementation of in-place upgrading
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30776
diff
changeset
|
243 return |
7de7afd8bdd9
repair: begin implementation of in-place upgrading
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30776
diff
changeset
|
244 |
46231
d3113c4cf52c
upgrade: don't perform anything if nothing to do
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46222
diff
changeset
|
245 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
|
246 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
|
247 return |
30777
7de7afd8bdd9
repair: begin implementation of in-place upgrading
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30776
diff
changeset
|
248 # 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
|
249 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
|
250 upgrade_op.print_requirements() |
46190
9ab2ab5bf9af
upgrade: move `printoptimisations() to UpgradeOperation class
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46189
diff
changeset
|
251 upgrade_op.print_optimisations() |
46189
dfddcbb0c244
upgrade: move `printupgradeactions()` to UpgradeOperation class
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46188
diff
changeset
|
252 upgrade_op.print_upgrade_actions() |
46188
945b33a7edfd
upgrade: move `print_affected_revlogs()` to UpgradeOperation class
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46060
diff
changeset
|
253 upgrade_op.print_affected_revlogs() |
30777
7de7afd8bdd9
repair: begin implementation of in-place upgrading
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30776
diff
changeset
|
254 |
44875
e295ba238bd8
upgrade: support the --quiet flag
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
44874
diff
changeset
|
255 ui.status(_(b'beginning upgrade...\n')) |
33438 | 256 with repo.wlock(), repo.lock(): |
44875
e295ba238bd8
upgrade: support the --quiet flag
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
44874
diff
changeset
|
257 ui.status(_(b'repository locked and read-only\n')) |
33438 | 258 # Our strategy for upgrading the repository is to create a new, |
259 # temporary repository, write data to it, then do a swap of the | |
260 # data. There are less heavyweight ways to do this, but it is easier | |
261 # to create a new repo object than to instantiate all the components | |
262 # (like the store) separately. | |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
263 tmppath = pycompat.mkdtemp(prefix=b'upgrade.', dir=repo.path) |
33438 | 264 backuppath = None |
265 try: | |
44875
e295ba238bd8
upgrade: support the --quiet flag
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
44874
diff
changeset
|
266 ui.status( |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43031
diff
changeset
|
267 _( |
46222
e22aed089567
upgrade: migrated -> upgraded in ui messages
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46221
diff
changeset
|
268 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
|
269 b'data: %s\n' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43031
diff
changeset
|
270 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43031
diff
changeset
|
271 % tmppath |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43031
diff
changeset
|
272 ) |
35351
75520786ad2f
upgrade: use the repository 'ui' as the base for the new repository
Boris Feld <boris.feld@octobus.net>
parents:
35349
diff
changeset
|
273 |
35388
6c28956ba2d4
upgrade: simplify workaround for repo.ui.copy()
Yuya Nishihara <yuya@tcha.org>
parents:
35354
diff
changeset
|
274 # 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:
35354
diff
changeset
|
275 repoui = repo.ui.__class__(repo.ui) |
6c28956ba2d4
upgrade: simplify workaround for repo.ui.copy()
Yuya Nishihara <yuya@tcha.org>
parents:
35354
diff
changeset
|
276 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
|
277 |
33438 | 278 with dstrepo.wlock(), dstrepo.lock(): |
46050
f105c49e89cd
upgrade: split actual upgrade code away from the main module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46039
diff
changeset
|
279 backuppath = upgrade_engine.upgrade( |
46060
c407513a44a3
upgrade: start moving the "to be happening" data in a dedicated object
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46055
diff
changeset
|
280 ui, repo, dstrepo, upgrade_op |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43031
diff
changeset
|
281 ) |
30777
7de7afd8bdd9
repair: begin implementation of in-place upgrading
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30776
diff
changeset
|
282 |
33438 | 283 finally: |
44875
e295ba238bd8
upgrade: support the --quiet flag
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
44874
diff
changeset
|
284 ui.status(_(b'removing temporary repository %s\n') % tmppath) |
33438 | 285 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
|
286 |
44875
e295ba238bd8
upgrade: support the --quiet flag
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
44874
diff
changeset
|
287 if backuppath and not ui.quiet: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43031
diff
changeset
|
288 ui.warn( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
289 _(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
|
290 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43031
diff
changeset
|
291 ui.warn( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43031
diff
changeset
|
292 _( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
293 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
|
294 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
|
295 b'repository is verified\n' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43031
diff
changeset
|
296 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43031
diff
changeset
|
297 ) |
46017
705c37f22859
upgrade: add support for experimental safe share mode
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46012
diff
changeset
|
298 |
46213
30310886d423
upgrade: introduce post upgrade and downgrade message for improvements
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46210
diff
changeset
|
299 upgrade_op.print_post_op_messages() |
46235
0babe12ef35d
sharesafe: introduce functionality to automatically upgrade shares
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46231
diff
changeset
|
300 |
0babe12ef35d
sharesafe: introduce functionality to automatically upgrade shares
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46231
diff
changeset
|
301 |
46332
25be21ec6c65
share: rework config options to be much clearer and easier
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46330
diff
changeset
|
302 def upgrade_share_to_safe( |
46333
4f17773fc6b5
share: rename share-safe warning config
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46332
diff
changeset
|
303 ui, |
4f17773fc6b5
share: rename share-safe warning config
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46332
diff
changeset
|
304 hgvfs, |
4f17773fc6b5
share: rename share-safe warning config
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46332
diff
changeset
|
305 storevfs, |
4f17773fc6b5
share: rename share-safe warning config
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46332
diff
changeset
|
306 current_requirements, |
4f17773fc6b5
share: rename share-safe warning config
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46332
diff
changeset
|
307 mismatch_config, |
4f17773fc6b5
share: rename share-safe warning config
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46332
diff
changeset
|
308 mismatch_warn, |
46332
25be21ec6c65
share: rework config options to be much clearer and easier
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46330
diff
changeset
|
309 ): |
46235
0babe12ef35d
sharesafe: introduce functionality to automatically upgrade shares
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46231
diff
changeset
|
310 """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
|
311 wlock = None |
46329
17176f64a03d
upgrade: take lock only for part where it's required
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46239
diff
changeset
|
312 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
|
313 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
|
314 # 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
|
315 # 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
|
316 # 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
|
317 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
|
318 # 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
|
319 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
|
320 current_requirements.add(requirementsmod.SHARESAFE_REQUIREMENT) |
46332
25be21ec6c65
share: rework config options to be much clearer and easier
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46330
diff
changeset
|
321 # in `allow` case, we don't try to upgrade, we just respect the source |
25be21ec6c65
share: rework config options to be much clearer and easier
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46330
diff
changeset
|
322 # state, update requirements and continue |
25be21ec6c65
share: rework config options to be much clearer and easier
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46330
diff
changeset
|
323 if mismatch_config == b'allow': |
25be21ec6c65
share: rework config options to be much clearer and easier
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46330
diff
changeset
|
324 return |
46235
0babe12ef35d
sharesafe: introduce functionality to automatically upgrade shares
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46231
diff
changeset
|
325 try: |
0babe12ef35d
sharesafe: introduce functionality to automatically upgrade shares
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46231
diff
changeset
|
326 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
|
327 # 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
|
328 # and update current_requirements |
02f3badf9011
upgrade: re-read current requirements after taking lock
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46329
diff
changeset
|
329 locked_requirements = localrepo._readrequires(hgvfs, True) |
02f3badf9011
upgrade: re-read current requirements after taking lock
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46329
diff
changeset
|
330 if locked_requirements != original_crequirements: |
02f3badf9011
upgrade: re-read current requirements after taking lock
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46329
diff
changeset
|
331 removed = current_requirements - locked_requirements |
02f3badf9011
upgrade: re-read current requirements after taking lock
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46329
diff
changeset
|
332 # 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
|
333 # as reference |
02f3badf9011
upgrade: re-read current requirements after taking lock
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46329
diff
changeset
|
334 current_requirements -= removed |
02f3badf9011
upgrade: re-read current requirements after taking lock
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46329
diff
changeset
|
335 current_requirements |= locked_requirements |
02f3badf9011
upgrade: re-read current requirements after taking lock
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46329
diff
changeset
|
336 diffrequires = current_requirements - store_requirements |
02f3badf9011
upgrade: re-read current requirements after taking lock
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46329
diff
changeset
|
337 # 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
|
338 diffrequires.add(requirementsmod.SHARESAFE_REQUIREMENT) |
02f3badf9011
upgrade: re-read current requirements after taking lock
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46329
diff
changeset
|
339 current_requirements.add(requirementsmod.SHARESAFE_REQUIREMENT) |
46235
0babe12ef35d
sharesafe: introduce functionality to automatically upgrade shares
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46231
diff
changeset
|
340 scmutil.writerequires(hgvfs, diffrequires) |
0babe12ef35d
sharesafe: introduce functionality to automatically upgrade shares
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46231
diff
changeset
|
341 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
|
342 except error.LockError as e: |
46344
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
25be21ec6c65
share: rework config options to be much clearer and easier
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46330
diff
changeset
|
346 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
|
347 raise error.Abort( |
d159d0fafa78
sharesafe: introduce config to disallow outdated shares if upgrade fails
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46238
diff
changeset
|
348 _(b'failed to upgrade share, got error: %s') |
46344
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
|
349 % 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
|
350 hint=hint, |
46239
d159d0fafa78
sharesafe: introduce config to disallow outdated shares if upgrade fails
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46238
diff
changeset
|
351 ) |
46333
4f17773fc6b5
share: rename share-safe warning config
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46332
diff
changeset
|
352 elif mismatch_warn: |
46238
9796cf108e4e
sharesafe: make warning about outdated share configurable
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46236
diff
changeset
|
353 ui.warn( |
9796cf108e4e
sharesafe: make warning about outdated share configurable
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46236
diff
changeset
|
354 _(b'failed to upgrade share, got error: %s\n') |
46344
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
|
355 % 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
|
356 hint=hint, |
46238
9796cf108e4e
sharesafe: make warning about outdated share configurable
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46236
diff
changeset
|
357 ) |
46235
0babe12ef35d
sharesafe: introduce functionality to automatically upgrade shares
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46231
diff
changeset
|
358 finally: |
0babe12ef35d
sharesafe: introduce functionality to automatically upgrade shares
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46231
diff
changeset
|
359 if wlock: |
0babe12ef35d
sharesafe: introduce functionality to automatically upgrade shares
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46231
diff
changeset
|
360 wlock.release() |
46236
eec47efe219d
sharesafe: add functionality to automatically downgrade shares
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46235
diff
changeset
|
361 |
eec47efe219d
sharesafe: add functionality to automatically downgrade shares
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46235
diff
changeset
|
362 |
eec47efe219d
sharesafe: add functionality to automatically downgrade shares
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46235
diff
changeset
|
363 def downgrade_share_to_non_safe( |
eec47efe219d
sharesafe: add functionality to automatically downgrade shares
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46235
diff
changeset
|
364 ui, |
eec47efe219d
sharesafe: add functionality to automatically downgrade shares
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46235
diff
changeset
|
365 hgvfs, |
eec47efe219d
sharesafe: add functionality to automatically downgrade shares
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46235
diff
changeset
|
366 sharedvfs, |
eec47efe219d
sharesafe: add functionality to automatically downgrade shares
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46235
diff
changeset
|
367 current_requirements, |
46332
25be21ec6c65
share: rework config options to be much clearer and easier
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46330
diff
changeset
|
368 mismatch_config, |
46333
4f17773fc6b5
share: rename share-safe warning config
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46332
diff
changeset
|
369 mismatch_warn, |
46236
eec47efe219d
sharesafe: add functionality to automatically downgrade shares
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46235
diff
changeset
|
370 ): |
eec47efe219d
sharesafe: add functionality to automatically downgrade shares
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46235
diff
changeset
|
371 """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
|
372 wlock = None |
46329
17176f64a03d
upgrade: take lock only for part where it's required
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46239
diff
changeset
|
373 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
|
374 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
|
375 # 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
|
376 # 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
|
377 # 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
|
378 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
|
379 current_requirements |= source_requirements |
17176f64a03d
upgrade: take lock only for part where it's required
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46239
diff
changeset
|
380 current_requirements.remove(requirementsmod.SHARESAFE_REQUIREMENT) |
46332
25be21ec6c65
share: rework config options to be much clearer and easier
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46330
diff
changeset
|
381 if mismatch_config == b'allow': |
25be21ec6c65
share: rework config options to be much clearer and easier
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46330
diff
changeset
|
382 return |
46329
17176f64a03d
upgrade: take lock only for part where it's required
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46239
diff
changeset
|
383 |
46236
eec47efe219d
sharesafe: add functionality to automatically downgrade shares
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46235
diff
changeset
|
384 try: |
eec47efe219d
sharesafe: add functionality to automatically downgrade shares
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46235
diff
changeset
|
385 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
|
386 # 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
|
387 # and update current_requirements |
02f3badf9011
upgrade: re-read current requirements after taking lock
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46329
diff
changeset
|
388 locked_requirements = localrepo._readrequires(hgvfs, True) |
02f3badf9011
upgrade: re-read current requirements after taking lock
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46329
diff
changeset
|
389 if locked_requirements != original_crequirements: |
02f3badf9011
upgrade: re-read current requirements after taking lock
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46329
diff
changeset
|
390 removed = current_requirements - locked_requirements |
02f3badf9011
upgrade: re-read current requirements after taking lock
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46329
diff
changeset
|
391 # 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
|
392 # as reference |
02f3badf9011
upgrade: re-read current requirements after taking lock
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46329
diff
changeset
|
393 current_requirements -= removed |
02f3badf9011
upgrade: re-read current requirements after taking lock
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46329
diff
changeset
|
394 current_requirements |= locked_requirements |
02f3badf9011
upgrade: re-read current requirements after taking lock
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46329
diff
changeset
|
395 current_requirements |= source_requirements |
02f3badf9011
upgrade: re-read current requirements after taking lock
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46329
diff
changeset
|
396 current_requirements -= set(requirementsmod.SHARESAFE_REQUIREMENT) |
46236
eec47efe219d
sharesafe: add functionality to automatically downgrade shares
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46235
diff
changeset
|
397 scmutil.writerequires(hgvfs, current_requirements) |
eec47efe219d
sharesafe: add functionality to automatically downgrade shares
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46235
diff
changeset
|
398 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
|
399 except error.LockError as e: |
46344
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
|
400 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
|
401 "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
|
402 ) |
46332
25be21ec6c65
share: rework config options to be much clearer and easier
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46330
diff
changeset
|
403 # If upgrade-abort is set, abort when upgrade fails, else let the |
25be21ec6c65
share: rework config options to be much clearer and easier
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46330
diff
changeset
|
404 # process continue as `upgrade-allow` is set |
25be21ec6c65
share: rework config options to be much clearer and easier
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46330
diff
changeset
|
405 if mismatch_config == b'downgrade-abort': |
25be21ec6c65
share: rework config options to be much clearer and easier
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46330
diff
changeset
|
406 raise error.Abort( |
25be21ec6c65
share: rework config options to be much clearer and easier
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46330
diff
changeset
|
407 _(b'failed to downgrade share, got error: %s') |
46344
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
|
408 % 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
|
409 hint=hint, |
46332
25be21ec6c65
share: rework config options to be much clearer and easier
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46330
diff
changeset
|
410 ) |
46333
4f17773fc6b5
share: rename share-safe warning config
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46332
diff
changeset
|
411 elif mismatch_warn: |
4f17773fc6b5
share: rename share-safe warning config
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46332
diff
changeset
|
412 ui.warn( |
4f17773fc6b5
share: rename share-safe warning config
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46332
diff
changeset
|
413 _(b'failed to downgrade share, got error: %s\n') |
46344
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
|
414 % 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
|
415 hint=hint, |
46333
4f17773fc6b5
share: rename share-safe warning config
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46332
diff
changeset
|
416 ) |
46236
eec47efe219d
sharesafe: add functionality to automatically downgrade shares
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46235
diff
changeset
|
417 finally: |
eec47efe219d
sharesafe: add functionality to automatically downgrade shares
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46235
diff
changeset
|
418 if wlock: |
eec47efe219d
sharesafe: add functionality to automatically downgrade shares
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46235
diff
changeset
|
419 wlock.release() |