author | Martin von Zweigbergk <martinvonz@google.com> |
Tue, 05 Apr 2022 08:47:04 -0700 | |
changeset 49064 | 95da3e99cbd8 |
parent 48875 | 6000f5b25c9b |
child 49192 | 2ab79873786e |
permissions | -rw-r--r-- |
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 |
|
d1419cfbd4f4
repair: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25874
diff
changeset
|
9 |
from .i18n import _ |
d1419cfbd4f4
repair: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25874
diff
changeset
|
10 |
from . import ( |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26425
diff
changeset
|
11 |
error, |
35343
06987c6971be
upgrade: more standard creation of the temporary repository
Boris Feld <boris.feld@octobus.net>
parents:
35342
diff
changeset
|
12 |
hg, |
31893
165428b05fca
upgrade: import 'localrepo' globally
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31875
diff
changeset
|
13 |
localrepo, |
46235
0babe12ef35d
sharesafe: introduce functionality to automatically upgrade shares
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46231
diff
changeset
|
14 |
lock as lockmod, |
38165
2ce60954b1b7
py3: wrap tempfile.mkdtemp() to use bytes path
Yuya Nishihara <yuya@tcha.org>
parents:
37444
diff
changeset
|
15 |
pycompat, |
46235
0babe12ef35d
sharesafe: introduce functionality to automatically upgrade shares
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46231
diff
changeset
|
16 |
requirements as requirementsmod, |
0babe12ef35d
sharesafe: introduce functionality to automatically upgrade shares
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46231
diff
changeset
|
17 |
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
|
18 |
) |
f105c49e89cd
upgrade: split actual upgrade code away from the main module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46035
diff
changeset
|
19 |
|
f105c49e89cd
upgrade: split actual upgrade code away from the main module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46035
diff
changeset
|
20 |
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
|
21 |
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
|
22 |
engine as upgrade_engine, |
25970
d1419cfbd4f4
repair: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25874
diff
changeset
|
23 |
) |
d1419cfbd4f4
repair: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25874
diff
changeset
|
24 |
|
46235
0babe12ef35d
sharesafe: introduce functionality to automatically upgrade shares
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46231
diff
changeset
|
25 |
from .utils import ( |
0babe12ef35d
sharesafe: introduce functionality to automatically upgrade shares
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46231
diff
changeset
|
26 |
stringutil, |
0babe12ef35d
sharesafe: introduce functionality to automatically upgrade shares
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46231
diff
changeset
|
27 |
) |
0babe12ef35d
sharesafe: introduce functionality to automatically upgrade shares
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46231
diff
changeset
|
28 |
|
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
|
29 |
allformatvariant = upgrade_actions.allformatvariant |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43031
diff
changeset
|
30 |
|
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 |
def upgraderepo( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43031
diff
changeset
|
33 |
ui, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43031
diff
changeset
|
34 |
repo, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43031
diff
changeset
|
35 |
run=False, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43031
diff
changeset
|
36 |
optimize=None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43031
diff
changeset
|
37 |
backup=True, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43031
diff
changeset
|
38 |
manifest=None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43031
diff
changeset
|
39 |
changelog=None, |
45997
7c539f0febbe
upgrade: add an explicite --filelogs arguments
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45995
diff
changeset
|
40 |
filelogs=None, |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43031
diff
changeset
|
41 |
): |
30775
513d68a90398
repair: implement requirements checking for upgrades
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30707
diff
changeset
|
42 |
"""Upgrade a repository in place.""" |
41088
5608b5a6c323
upgrade: add '-' in optimization name
Boris Feld <boris.feld@octobus.net>
parents:
40997
diff
changeset
|
43 |
if optimize is None: |
48472
a4d8de93023c
pytype: stop excluding upgrade.py
Matt Harbison <matt_harbison@yahoo.com>
parents:
48468
diff
changeset
|
44 |
optimize = set() |
30775
513d68a90398
repair: implement requirements checking for upgrades
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30707
diff
changeset
|
45 |
repo = repo.unfiltered() |
513d68a90398
repair: implement requirements checking for upgrades
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30707
diff
changeset
|
46 |
|
48445
e7420f75d90d
upgrade: make the list of explicitly specified revlog a dict
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48444
diff
changeset
|
47 |
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
|
48 |
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
|
49 |
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
|
50 |
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
|
51 |
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
|
52 |
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
|
53 |
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
|
54 |
|
30775
513d68a90398
repair: implement requirements checking for upgrades
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30707
diff
changeset
|
55 |
# 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
|
56 |
upgrade_actions.check_source_requirements(repo) |
30775
513d68a90398
repair: implement requirements checking for upgrades
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30707
diff
changeset
|
57 |
|
46051
72b7b4bf3e65
upgrade: extract the checking of target requirements change
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46050
diff
changeset
|
58 |
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
|
59 |
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
|
60 |
newreqs.update(upgrade_actions.preservedrequirements(repo)) |
30775
513d68a90398
repair: implement requirements checking for upgrades
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30707
diff
changeset
|
61 |
|
46051
72b7b4bf3e65
upgrade: extract the checking of target requirements change
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46050
diff
changeset
|
62 |
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
|
63 |
|
30776
3997edc4a86d
repair: determine what upgrade will do
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30775
diff
changeset
|
64 |
# 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
|
65 |
alloptimizations = upgrade_actions.findoptimizations(repo) |
30776
3997edc4a86d
repair: determine what upgrade will do
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30775
diff
changeset
|
66 |
|
31899
cccd8e1538b0
upgrade: filter optimizations outside of 'determineactions'
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31898
diff
changeset
|
67 |
# Apply and Validate arguments. |
cccd8e1538b0
upgrade: filter optimizations outside of 'determineactions'
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31898
diff
changeset
|
68 |
optimizations = [] |
cccd8e1538b0
upgrade: filter optimizations outside of 'determineactions'
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31898
diff
changeset
|
69 |
for o in alloptimizations: |
cccd8e1538b0
upgrade: filter optimizations outside of 'determineactions'
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31898
diff
changeset
|
70 |
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
|
71 |
optimizations.append(o) |
cccd8e1538b0
upgrade: filter optimizations outside of 'determineactions'
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31898
diff
changeset
|
72 |
optimize.discard(o.name) |
cccd8e1538b0
upgrade: filter optimizations outside of 'determineactions'
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31898
diff
changeset
|
73 |
|
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43031
diff
changeset
|
74 |
if optimize: # anything left is unknown |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43031
diff
changeset
|
75 |
raise error.Abort( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
76 |
_(b'unknown optimization action requested: %s') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
77 |
% 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
|
78 |
hint=_(b'run without arguments to see valid optimizations'), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43031
diff
changeset
|
79 |
) |
30776
3997edc4a86d
repair: determine what upgrade will do
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30775
diff
changeset
|
80 |
|
46205
53d083fa1f83
upgrade: rename finddeficiences() to find_format_upgrades()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46192
diff
changeset
|
81 |
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
|
82 |
up_actions = upgrade_actions.determine_upgrade_actions( |
46209
a51d345f1404
upgrade: move optimization addition to determineactions()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46208
diff
changeset
|
83 |
repo, format_upgrades, optimizations, repo.requirements, newreqs |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43031
diff
changeset
|
84 |
) |
46213
30310886d423
upgrade: introduce post upgrade and downgrade message for improvements
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46210
diff
changeset
|
85 |
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
|
86 |
|
48444
6e045497b20b
upgrade: move the revlog selection code lower down the chain
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46414
diff
changeset
|
87 |
# 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
|
88 |
|
48446
1d0978cfe968
upgrade: explicitly warn when a `--no-xxx` flag is overwritten
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48445
diff
changeset
|
89 |
touched_revlogs = set() |
1d0978cfe968
upgrade: explicitly warn when a `--no-xxx` flag is overwritten
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48445
diff
changeset
|
90 |
overwrite_msg = _(b'warning: ignoring %14s, as upgrade is changing: %s\n') |
48447
8405c1bffacf
upgrade: issue a message when a revlog type has to be upgraded
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48446
diff
changeset
|
91 |
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:
48446
diff
changeset
|
92 |
msg_issued = 0 |
48446
1d0978cfe968
upgrade: explicitly warn when a `--no-xxx` flag is overwritten
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48445
diff
changeset
|
93 |
|
1d0978cfe968
upgrade: explicitly warn when a `--no-xxx` flag is overwritten
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48445
diff
changeset
|
94 |
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:
48445
diff
changeset
|
95 |
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:
48445
diff
changeset
|
96 |
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:
48445
diff
changeset
|
97 |
|
48448
62e6222cc5b6
upgrade: only process revlogs that needs it by default
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48447
diff
changeset
|
98 |
if optimizations: |
62e6222cc5b6
upgrade: only process revlogs that needs it by default
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48447
diff
changeset
|
99 |
if any(specified_revlogs.values()): |
62e6222cc5b6
upgrade: only process revlogs that needs it by default
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48447
diff
changeset
|
100 |
# we have some limitation on revlogs to be recloned |
62e6222cc5b6
upgrade: only process revlogs that needs it by default
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48447
diff
changeset
|
101 |
for rl, enabled in specified_revlogs.items(): |
62e6222cc5b6
upgrade: only process revlogs that needs it by default
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48447
diff
changeset
|
102 |
if enabled: |
62e6222cc5b6
upgrade: only process revlogs that needs it by default
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48447
diff
changeset
|
103 |
touched_revlogs.add(rl) |
62e6222cc5b6
upgrade: only process revlogs that needs it by default
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48447
diff
changeset
|
104 |
else: |
62e6222cc5b6
upgrade: only process revlogs that needs it by default
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48447
diff
changeset
|
105 |
touched_revlogs = set(upgrade_engine.UPGRADE_ALL_REVLOGS) |
62e6222cc5b6
upgrade: only process revlogs that needs it by default
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48447
diff
changeset
|
106 |
for rl, enabled in specified_revlogs.items(): |
62e6222cc5b6
upgrade: only process revlogs that needs it by default
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48447
diff
changeset
|
107 |
if not enabled: |
62e6222cc5b6
upgrade: only process revlogs that needs it by default
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48447
diff
changeset
|
108 |
touched_revlogs.discard(rl) |
62e6222cc5b6
upgrade: only process revlogs that needs it by default
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48447
diff
changeset
|
109 |
|
48779
17eaeb06562c
upgrade: prepare code (and output) for the idea of upgrading share
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48472
diff
changeset
|
110 |
if repo.shared(): |
17eaeb06562c
upgrade: prepare code (and output) for the idea of upgrading share
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48472
diff
changeset
|
111 |
unsafe_actions = set() |
17eaeb06562c
upgrade: prepare code (and output) for the idea of upgrading share
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48472
diff
changeset
|
112 |
unsafe_actions.update(up_actions) |
17eaeb06562c
upgrade: prepare code (and output) for the idea of upgrading share
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48472
diff
changeset
|
113 |
unsafe_actions.update(removed_actions) |
17eaeb06562c
upgrade: prepare code (and output) for the idea of upgrading share
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48472
diff
changeset
|
114 |
unsafe_actions.update(optimizations) |
17eaeb06562c
upgrade: prepare code (and output) for the idea of upgrading share
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48472
diff
changeset
|
115 |
unsafe_actions = [ |
17eaeb06562c
upgrade: prepare code (and output) for the idea of upgrading share
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48472
diff
changeset
|
116 |
a for a in unsafe_actions if not a.compatible_with_share |
17eaeb06562c
upgrade: prepare code (and output) for the idea of upgrading share
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48472
diff
changeset
|
117 |
] |
17eaeb06562c
upgrade: prepare code (and output) for the idea of upgrading share
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48472
diff
changeset
|
118 |
unsafe_actions.sort(key=lambda a: a.name) |
17eaeb06562c
upgrade: prepare code (and output) for the idea of upgrading share
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48472
diff
changeset
|
119 |
if unsafe_actions: |
17eaeb06562c
upgrade: prepare code (and output) for the idea of upgrading share
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48472
diff
changeset
|
120 |
m = _(b'cannot use these actions on a share repository: %s') |
17eaeb06562c
upgrade: prepare code (and output) for the idea of upgrading share
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48472
diff
changeset
|
121 |
h = _(b'upgrade the main repository directly') |
17eaeb06562c
upgrade: prepare code (and output) for the idea of upgrading share
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48472
diff
changeset
|
122 |
actions = b', '.join(a.name for a in unsafe_actions) |
17eaeb06562c
upgrade: prepare code (and output) for the idea of upgrading share
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48472
diff
changeset
|
123 |
m %= actions |
17eaeb06562c
upgrade: prepare code (and output) for the idea of upgrading share
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48472
diff
changeset
|
124 |
raise error.Abort(m, hint=h) |
17eaeb06562c
upgrade: prepare code (and output) for the idea of upgrading share
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48472
diff
changeset
|
125 |
|
48446
1d0978cfe968
upgrade: explicitly warn when a `--no-xxx` flag is overwritten
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48445
diff
changeset
|
126 |
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:
48445
diff
changeset
|
127 |
# 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:
48445
diff
changeset
|
128 |
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:
48445
diff
changeset
|
129 |
continue |
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
|
130 |
|
48446
1d0978cfe968
upgrade: explicitly warn when a `--no-xxx` flag is overwritten
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48445
diff
changeset
|
131 |
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:
48445
diff
changeset
|
132 |
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:
48445
diff
changeset
|
133 |
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:
48445
diff
changeset
|
134 |
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:
48445
diff
changeset
|
135 |
ui.warn(msg) |
48447
8405c1bffacf
upgrade: issue a message when a revlog type has to be upgraded
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48446
diff
changeset
|
136 |
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:
48446
diff
changeset
|
137 |
else: |
8405c1bffacf
upgrade: issue a message when a revlog type has to be upgraded
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48446
diff
changeset
|
138 |
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:
48446
diff
changeset
|
139 |
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:
48446
diff
changeset
|
140 |
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:
48446
diff
changeset
|
141 |
msg_issued = 1 |
48446
1d0978cfe968
upgrade: explicitly warn when a `--no-xxx` flag is overwritten
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48445
diff
changeset
|
142 |
touched_revlogs.add(FL) |
48447
8405c1bffacf
upgrade: issue a message when a revlog type has to be upgraded
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48446
diff
changeset
|
143 |
|
48446
1d0978cfe968
upgrade: explicitly warn when a `--no-xxx` flag is overwritten
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48445
diff
changeset
|
144 |
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:
48445
diff
changeset
|
145 |
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:
48445
diff
changeset
|
146 |
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:
48445
diff
changeset
|
147 |
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:
48445
diff
changeset
|
148 |
ui.warn(msg) |
48447
8405c1bffacf
upgrade: issue a message when a revlog type has to be upgraded
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48446
diff
changeset
|
149 |
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:
48446
diff
changeset
|
150 |
else: |
8405c1bffacf
upgrade: issue a message when a revlog type has to be upgraded
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48446
diff
changeset
|
151 |
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:
48446
diff
changeset
|
152 |
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:
48446
diff
changeset
|
153 |
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:
48446
diff
changeset
|
154 |
msg_issued = 1 |
48446
1d0978cfe968
upgrade: explicitly warn when a `--no-xxx` flag is overwritten
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48445
diff
changeset
|
155 |
touched_revlogs.add(MN) |
48447
8405c1bffacf
upgrade: issue a message when a revlog type has to be upgraded
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48446
diff
changeset
|
156 |
|
48446
1d0978cfe968
upgrade: explicitly warn when a `--no-xxx` flag is overwritten
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48445
diff
changeset
|
157 |
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:
48445
diff
changeset
|
158 |
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:
48445
diff
changeset
|
159 |
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:
48445
diff
changeset
|
160 |
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:
48445
diff
changeset
|
161 |
ui.warn(msg) |
1d0978cfe968
upgrade: explicitly warn when a `--no-xxx` flag is overwritten
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48445
diff
changeset
|
162 |
msg_issued = True |
48447
8405c1bffacf
upgrade: issue a message when a revlog type has to be upgraded
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48446
diff
changeset
|
163 |
else: |
8405c1bffacf
upgrade: issue a message when a revlog type has to be upgraded
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48446
diff
changeset
|
164 |
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:
48446
diff
changeset
|
165 |
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:
48446
diff
changeset
|
166 |
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:
48446
diff
changeset
|
167 |
msg_issued = 1 |
48446
1d0978cfe968
upgrade: explicitly warn when a `--no-xxx` flag is overwritten
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48445
diff
changeset
|
168 |
touched_revlogs.add(CL) |
48447
8405c1bffacf
upgrade: issue a message when a revlog type has to be upgraded
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48446
diff
changeset
|
169 |
if msg_issued >= 2: |
48446
1d0978cfe968
upgrade: explicitly warn when a `--no-xxx` flag is overwritten
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48445
diff
changeset
|
170 |
ui.warn((b"\n")) |
48447
8405c1bffacf
upgrade: issue a message when a revlog type has to be upgraded
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48446
diff
changeset
|
171 |
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:
48446
diff
changeset
|
172 |
ui.status((b"\n")) |
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
|
173 |
|
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
|
174 |
upgrade_op = upgrade_actions.UpgradeOperation( |
46188
945b33a7edfd
upgrade: move `print_affected_revlogs()` to UpgradeOperation class
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46056
diff
changeset
|
175 |
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
|
176 |
newreqs, |
46191
aba979b1b90b
upgrade: move `printrequirements()` to UpgradeOperation class
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46190
diff
changeset
|
177 |
repo.requirements, |
46210
6b40aac4da8e
upgrade: rename actions to upgrade_actions
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46209
diff
changeset
|
178 |
up_actions, |
46213
30310886d423
upgrade: introduce post upgrade and downgrade message for improvements
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46210
diff
changeset
|
179 |
removed_actions, |
48448
62e6222cc5b6
upgrade: only process revlogs that needs it by default
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48447
diff
changeset
|
180 |
touched_revlogs, |
46375
2e8a844d0ae0
upgrade: don't create store backup if `--no-backup` is passed
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46333
diff
changeset
|
181 |
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
|
182 |
) |
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
|
183 |
|
30775
513d68a90398
repair: implement requirements checking for upgrades
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30707
diff
changeset
|
184 |
if not run: |
30776
3997edc4a86d
repair: determine what upgrade will do
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30775
diff
changeset
|
185 |
fromconfig = [] |
31904
3c77f03f16b3
upgrade: simplify the "origin" dispatch in dry run
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31903
diff
changeset
|
186 |
onlydefault = [] |
30776
3997edc4a86d
repair: determine what upgrade will do
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30775
diff
changeset
|
187 |
|
46205
53d083fa1f83
upgrade: rename finddeficiences() to find_format_upgrades()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46192
diff
changeset
|
188 |
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
|
189 |
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
|
190 |
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
|
191 |
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
|
192 |
onlydefault.append(d) |
30776
3997edc4a86d
repair: determine what upgrade will do
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30775
diff
changeset
|
193 |
|
31904
3c77f03f16b3
upgrade: simplify the "origin" dispatch in dry run
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31903
diff
changeset
|
194 |
if fromconfig or onlydefault: |
30776
3997edc4a86d
repair: determine what upgrade will do
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30775
diff
changeset
|
195 |
|
3997edc4a86d
repair: determine what upgrade will do
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30775
diff
changeset
|
196 |
if fromconfig: |
44798
e295ba238bd8
upgrade: support the --quiet flag
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
44797
diff
changeset
|
197 |
ui.status( |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43031
diff
changeset
|
198 |
_( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
199 |
b'repository lacks features recommended by ' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
200 |
b'current config options:\n\n' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43031
diff
changeset
|
201 |
) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43031
diff
changeset
|
202 |
) |
30776
3997edc4a86d
repair: determine what upgrade will do
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30775
diff
changeset
|
203 |
for i in fromconfig: |
44798
e295ba238bd8
upgrade: support the --quiet flag
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
44797
diff
changeset
|
204 |
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
|
205 |
|
3997edc4a86d
repair: determine what upgrade will do
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30775
diff
changeset
|
206 |
if onlydefault: |
44798
e295ba238bd8
upgrade: support the --quiet flag
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
44797
diff
changeset
|
207 |
ui.status( |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43031
diff
changeset
|
208 |
_( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
209 |
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
|
210 |
b'config options:\n\n' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43031
diff
changeset
|
211 |
) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43031
diff
changeset
|
212 |
) |
30776
3997edc4a86d
repair: determine what upgrade will do
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30775
diff
changeset
|
213 |
for i in onlydefault: |
44798
e295ba238bd8
upgrade: support the --quiet flag
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
44797
diff
changeset
|
214 |
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
|
215 |
|
44798
e295ba238bd8
upgrade: support the --quiet flag
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
44797
diff
changeset
|
216 |
ui.status(b'\n') |
30776
3997edc4a86d
repair: determine what upgrade will do
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30775
diff
changeset
|
217 |
else: |
46205
53d083fa1f83
upgrade: rename finddeficiences() to find_format_upgrades()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46192
diff
changeset
|
218 |
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
|
219 |
|
44798
e295ba238bd8
upgrade: support the --quiet flag
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
44797
diff
changeset
|
220 |
ui.status( |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43031
diff
changeset
|
221 |
_( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
222 |
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
|
223 |
b'changes:\n\n' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43031
diff
changeset
|
224 |
) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43031
diff
changeset
|
225 |
) |
30775
513d68a90398
repair: implement requirements checking for upgrades
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30707
diff
changeset
|
226 |
|
46191
aba979b1b90b
upgrade: move `printrequirements()` to UpgradeOperation class
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46190
diff
changeset
|
227 |
upgrade_op.print_requirements() |
46190
9ab2ab5bf9af
upgrade: move `printoptimisations() to UpgradeOperation class
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46189
diff
changeset
|
228 |
upgrade_op.print_optimisations() |
46189
dfddcbb0c244
upgrade: move `printupgradeactions()` to UpgradeOperation class
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46188
diff
changeset
|
229 |
upgrade_op.print_upgrade_actions() |
46188
945b33a7edfd
upgrade: move `print_affected_revlogs()` to UpgradeOperation class
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46056
diff
changeset
|
230 |
upgrade_op.print_affected_revlogs() |
30776
3997edc4a86d
repair: determine what upgrade will do
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30775
diff
changeset
|
231 |
|
46192
25d11b24dedf
upgrade: move printing of unused optimizations to UpgradeOperation class
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46191
diff
changeset
|
232 |
if upgrade_op.unused_optimizations: |
44798
e295ba238bd8
upgrade: support the --quiet flag
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
44797
diff
changeset
|
233 |
ui.status( |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43031
diff
changeset
|
234 |
_( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
235 |
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
|
236 |
b'"--optimize <name>":\n\n' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43031
diff
changeset
|
237 |
) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43031
diff
changeset
|
238 |
) |
46192
25d11b24dedf
upgrade: move printing of unused optimizations to UpgradeOperation class
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46191
diff
changeset
|
239 |
upgrade_op.print_unused_optimizations() |
30777
7de7afd8bdd9
repair: begin implementation of in-place upgrading
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30776
diff
changeset
|
240 |
return |
7de7afd8bdd9
repair: begin implementation of in-place upgrading
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30776
diff
changeset
|
241 |
|
46231
d3113c4cf52c
upgrade: don't perform anything if nothing to do
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46222
diff
changeset
|
242 |
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
|
243 |
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
|
244 |
return |
30777
7de7afd8bdd9
repair: begin implementation of in-place upgrading
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30776
diff
changeset
|
245 |
# 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
|
246 |
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
|
247 |
upgrade_op.print_requirements() |
46190
9ab2ab5bf9af
upgrade: move `printoptimisations() to UpgradeOperation class
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46189
diff
changeset
|
248 |
upgrade_op.print_optimisations() |
46189
dfddcbb0c244
upgrade: move `printupgradeactions()` to UpgradeOperation class
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46188
diff
changeset
|
249 |
upgrade_op.print_upgrade_actions() |
46188
945b33a7edfd
upgrade: move `print_affected_revlogs()` to UpgradeOperation class
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46056
diff
changeset
|
250 |
upgrade_op.print_affected_revlogs() |
30777
7de7afd8bdd9
repair: begin implementation of in-place upgrading
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30776
diff
changeset
|
251 |
|
44798
e295ba238bd8
upgrade: support the --quiet flag
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
44797
diff
changeset
|
252 |
ui.status(_(b'beginning upgrade...\n')) |
33438 | 253 |
with repo.wlock(), repo.lock(): |
44798
e295ba238bd8
upgrade: support the --quiet flag
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
44797
diff
changeset
|
254 |
ui.status(_(b'repository locked and read-only\n')) |
33438 | 255 |
# Our strategy for upgrading the repository is to create a new, |
256 |
# temporary repository, write data to it, then do a swap of the |
|
257 |
# data. There are less heavyweight ways to do this, but it is easier |
|
258 |
# to create a new repo object than to instantiate all the components |
|
259 |
# (like the store) separately. |
|
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
260 |
tmppath = pycompat.mkdtemp(prefix=b'upgrade.', dir=repo.path) |
33438 | 261 |
backuppath = None |
262 |
try: |
|
44798
e295ba238bd8
upgrade: support the --quiet flag
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
44797
diff
changeset
|
263 |
ui.status( |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43031
diff
changeset
|
264 |
_( |
46222
e22aed089567
upgrade: migrated -> upgraded in ui messages
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46221
diff
changeset
|
265 |
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
|
266 |
b'data: %s\n' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43031
diff
changeset
|
267 |
) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43031
diff
changeset
|
268 |
% tmppath |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43031
diff
changeset
|
269 |
) |
35342
75520786ad2f
upgrade: use the repository 'ui' as the base for the new repository
Boris Feld <boris.feld@octobus.net>
parents:
35340
diff
changeset
|
270 |
|
35379
6c28956ba2d4
upgrade: simplify workaround for repo.ui.copy()
Yuya Nishihara <yuya@tcha.org>
parents:
35345
diff
changeset
|
271 |
# 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
|
272 |
repoui = repo.ui.__class__(repo.ui) |
6c28956ba2d4
upgrade: simplify workaround for repo.ui.copy()
Yuya Nishihara <yuya@tcha.org>
parents:
35345
diff
changeset
|
273 |
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
|
274 |
|
33438 | 275 |
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
|
276 |
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
|
277 |
ui, repo, dstrepo, upgrade_op |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43031
diff
changeset
|
278 |
) |
30777
7de7afd8bdd9
repair: begin implementation of in-place upgrading
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30776
diff
changeset
|
279 |
|
33438 | 280 |
finally: |
44798
e295ba238bd8
upgrade: support the --quiet flag
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
44797
diff
changeset
|
281 |
ui.status(_(b'removing temporary repository %s\n') % tmppath) |
33438 | 282 |
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
|
283 |
|
44798
e295ba238bd8
upgrade: support the --quiet flag
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
44797
diff
changeset
|
284 |
if backuppath and not ui.quiet: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43031
diff
changeset
|
285 |
ui.warn( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
286 |
_(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
|
287 |
) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43031
diff
changeset
|
288 |
ui.warn( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43031
diff
changeset
|
289 |
_( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
290 |
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
|
291 |
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
|
292 |
b'repository is verified\n' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43031
diff
changeset
|
293 |
) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43031
diff
changeset
|
294 |
) |
46002
705c37f22859
upgrade: add support for experimental safe share mode
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45997
diff
changeset
|
295 |
|
46213
30310886d423
upgrade: introduce post upgrade and downgrade message for improvements
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46210
diff
changeset
|
296 |
upgrade_op.print_post_op_messages() |
46235
0babe12ef35d
sharesafe: introduce functionality to automatically upgrade shares
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46231
diff
changeset
|
297 |
|
0babe12ef35d
sharesafe: introduce functionality to automatically upgrade shares
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46231
diff
changeset
|
298 |
|
46332
cc3452d2dfa4
share: rework config options to be much clearer and easier
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46330
diff
changeset
|
299 |
def upgrade_share_to_safe( |
46333
2eb5fe13461b
share: rename share-safe warning config
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46332
diff
changeset
|
300 |
ui, |
2eb5fe13461b
share: rename share-safe warning config
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46332
diff
changeset
|
301 |
hgvfs, |
2eb5fe13461b
share: rename share-safe warning config
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46332
diff
changeset
|
302 |
storevfs, |
2eb5fe13461b
share: rename share-safe warning config
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46332
diff
changeset
|
303 |
current_requirements, |
2eb5fe13461b
share: rename share-safe warning config
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46332
diff
changeset
|
304 |
mismatch_config, |
2eb5fe13461b
share: rename share-safe warning config
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46332
diff
changeset
|
305 |
mismatch_warn, |
46332
cc3452d2dfa4
share: rework config options to be much clearer and easier
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46330
diff
changeset
|
306 |
): |
46235
0babe12ef35d
sharesafe: introduce functionality to automatically upgrade shares
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46231
diff
changeset
|
307 |
"""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
|
308 |
wlock = None |
46329
17176f64a03d
upgrade: take lock only for part where it's required
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46239
diff
changeset
|
309 |
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
|
310 |
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
|
311 |
# 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
|
312 |
# 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
|
313 |
# 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
|
314 |
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
|
315 |
# 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
|
316 |
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
|
317 |
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
|
318 |
# 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
|
319 |
# 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
|
320 |
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
|
321 |
return |
46235
0babe12ef35d
sharesafe: introduce functionality to automatically upgrade shares
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46231
diff
changeset
|
322 |
try: |
0babe12ef35d
sharesafe: introduce functionality to automatically upgrade shares
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46231
diff
changeset
|
323 |
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
|
324 |
# 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
|
325 |
# and update current_requirements |
02f3badf9011
upgrade: re-read current requirements after taking lock
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46329
diff
changeset
|
326 |
locked_requirements = localrepo._readrequires(hgvfs, True) |
02f3badf9011
upgrade: re-read current requirements after taking lock
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46329
diff
changeset
|
327 |
if locked_requirements != original_crequirements: |
02f3badf9011
upgrade: re-read current requirements after taking lock
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46329
diff
changeset
|
328 |
removed = current_requirements - locked_requirements |
02f3badf9011
upgrade: re-read current requirements after taking lock
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46329
diff
changeset
|
329 |
# 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
|
330 |
# as reference |
02f3badf9011
upgrade: re-read current requirements after taking lock
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46329
diff
changeset
|
331 |
current_requirements -= removed |
02f3badf9011
upgrade: re-read current requirements after taking lock
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46329
diff
changeset
|
332 |
current_requirements |= locked_requirements |
02f3badf9011
upgrade: re-read current requirements after taking lock
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46329
diff
changeset
|
333 |
diffrequires = current_requirements - store_requirements |
02f3badf9011
upgrade: re-read current requirements after taking lock
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46329
diff
changeset
|
334 |
# 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
|
335 |
diffrequires.add(requirementsmod.SHARESAFE_REQUIREMENT) |
02f3badf9011
upgrade: re-read current requirements after taking lock
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46329
diff
changeset
|
336 |
current_requirements.add(requirementsmod.SHARESAFE_REQUIREMENT) |
46235
0babe12ef35d
sharesafe: introduce functionality to automatically upgrade shares
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46231
diff
changeset
|
337 |
scmutil.writerequires(hgvfs, diffrequires) |
0babe12ef35d
sharesafe: introduce functionality to automatically upgrade shares
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46231
diff
changeset
|
338 |
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
|
339 |
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
|
340 |
hint = _( |
48440
cb477edeca79
upgrade: byteify a few error messages
Matt Harbison <matt_harbison@yahoo.com>
parents:
46414
diff
changeset
|
341 |
b"see `hg help config.format.use-share-safe` for more information" |
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
|
342 |
) |
46332
cc3452d2dfa4
share: rework config options to be much clearer and easier
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46330
diff
changeset
|
343 |
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
|
344 |
raise error.Abort( |
d159d0fafa78
sharesafe: introduce config to disallow outdated shares if upgrade fails
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46238
diff
changeset
|
345 |
_(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
|
346 |
% 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
|
347 |
hint=hint, |
46239
d159d0fafa78
sharesafe: introduce config to disallow outdated shares if upgrade fails
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46238
diff
changeset
|
348 |
) |
46333
2eb5fe13461b
share: rename share-safe warning config
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46332
diff
changeset
|
349 |
elif mismatch_warn: |
46238
9796cf108e4e
sharesafe: make warning about outdated share configurable
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46236
diff
changeset
|
350 |
ui.warn( |
9796cf108e4e
sharesafe: make warning about outdated share configurable
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46236
diff
changeset
|
351 |
_(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
|
352 |
% 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
|
353 |
hint=hint, |
46238
9796cf108e4e
sharesafe: make warning about outdated share configurable
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46236
diff
changeset
|
354 |
) |
46235
0babe12ef35d
sharesafe: introduce functionality to automatically upgrade shares
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46231
diff
changeset
|
355 |
finally: |
0babe12ef35d
sharesafe: introduce functionality to automatically upgrade shares
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46231
diff
changeset
|
356 |
if wlock: |
0babe12ef35d
sharesafe: introduce functionality to automatically upgrade shares
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46231
diff
changeset
|
357 |
wlock.release() |
46236
eec47efe219d
sharesafe: add functionality to automatically downgrade shares
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46235
diff
changeset
|
358 |
|
eec47efe219d
sharesafe: add functionality to automatically downgrade shares
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46235
diff
changeset
|
359 |
|
eec47efe219d
sharesafe: add functionality to automatically downgrade shares
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46235
diff
changeset
|
360 |
def downgrade_share_to_non_safe( |
eec47efe219d
sharesafe: add functionality to automatically downgrade shares
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46235
diff
changeset
|
361 |
ui, |
eec47efe219d
sharesafe: add functionality to automatically downgrade shares
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46235
diff
changeset
|
362 |
hgvfs, |
eec47efe219d
sharesafe: add functionality to automatically downgrade shares
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46235
diff
changeset
|
363 |
sharedvfs, |
eec47efe219d
sharesafe: add functionality to automatically downgrade shares
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46235
diff
changeset
|
364 |
current_requirements, |
46332
cc3452d2dfa4
share: rework config options to be much clearer and easier
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46330
diff
changeset
|
365 |
mismatch_config, |
46333
2eb5fe13461b
share: rename share-safe warning config
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46332
diff
changeset
|
366 |
mismatch_warn, |
46236
eec47efe219d
sharesafe: add functionality to automatically downgrade shares
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46235
diff
changeset
|
367 |
): |
eec47efe219d
sharesafe: add functionality to automatically downgrade shares
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46235
diff
changeset
|
368 |
"""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
|
369 |
wlock = None |
46329
17176f64a03d
upgrade: take lock only for part where it's required
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46239
diff
changeset
|
370 |
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
|
371 |
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
|
372 |
# 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
|
373 |
# 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
|
374 |
# 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
|
375 |
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
|
376 |
current_requirements |= source_requirements |
17176f64a03d
upgrade: take lock only for part where it's required
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46239
diff
changeset
|
377 |
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
|
378 |
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
|
379 |
return |
46329
17176f64a03d
upgrade: take lock only for part where it's required
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46239
diff
changeset
|
380 |
|
46236
eec47efe219d
sharesafe: add functionality to automatically downgrade shares
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46235
diff
changeset
|
381 |
try: |
eec47efe219d
sharesafe: add functionality to automatically downgrade shares
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46235
diff
changeset
|
382 |
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
|
383 |
# 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
|
384 |
# and update current_requirements |
02f3badf9011
upgrade: re-read current requirements after taking lock
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46329
diff
changeset
|
385 |
locked_requirements = localrepo._readrequires(hgvfs, True) |
02f3badf9011
upgrade: re-read current requirements after taking lock
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46329
diff
changeset
|
386 |
if locked_requirements != original_crequirements: |
02f3badf9011
upgrade: re-read current requirements after taking lock
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46329
diff
changeset
|
387 |
removed = current_requirements - locked_requirements |
02f3badf9011
upgrade: re-read current requirements after taking lock
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46329
diff
changeset
|
388 |
# 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
|
389 |
# as reference |
02f3badf9011
upgrade: re-read current requirements after taking lock
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46329
diff
changeset
|
390 |
current_requirements -= removed |
02f3badf9011
upgrade: re-read current requirements after taking lock
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46329
diff
changeset
|
391 |
current_requirements |= locked_requirements |
02f3badf9011
upgrade: re-read current requirements after taking lock
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46329
diff
changeset
|
392 |
current_requirements |= source_requirements |
02f3badf9011
upgrade: re-read current requirements after taking lock
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46329
diff
changeset
|
393 |
current_requirements -= set(requirementsmod.SHARESAFE_REQUIREMENT) |
46236
eec47efe219d
sharesafe: add functionality to automatically downgrade shares
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46235
diff
changeset
|
394 |
scmutil.writerequires(hgvfs, current_requirements) |
eec47efe219d
sharesafe: add functionality to automatically downgrade shares
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46235
diff
changeset
|
395 |
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
|
396 |
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
|
397 |
hint = _( |
48440
cb477edeca79
upgrade: byteify a few error messages
Matt Harbison <matt_harbison@yahoo.com>
parents:
46414
diff
changeset
|
398 |
b"see `hg help config.format.use-share-safe` for more information" |
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
|
399 |
) |
46332
cc3452d2dfa4
share: rework config options to be much clearer and easier
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46330
diff
changeset
|
400 |
# 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
|
401 |
# 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
|
402 |
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
|
403 |
raise error.Abort( |
cc3452d2dfa4
share: rework config options to be much clearer and easier
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46330
diff
changeset
|
404 |
_(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
|
405 |
% 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
|
406 |
hint=hint, |
46332
cc3452d2dfa4
share: rework config options to be much clearer and easier
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46330
diff
changeset
|
407 |
) |
46333
2eb5fe13461b
share: rename share-safe warning config
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46332
diff
changeset
|
408 |
elif mismatch_warn: |
2eb5fe13461b
share: rename share-safe warning config
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46332
diff
changeset
|
409 |
ui.warn( |
2eb5fe13461b
share: rename share-safe warning config
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46332
diff
changeset
|
410 |
_(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
|
411 |
% 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
|
412 |
hint=hint, |
46333
2eb5fe13461b
share: rename share-safe warning config
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46332
diff
changeset
|
413 |
) |
46236
eec47efe219d
sharesafe: add functionality to automatically downgrade shares
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46235
diff
changeset
|
414 |
finally: |
eec47efe219d
sharesafe: add functionality to automatically downgrade shares
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46235
diff
changeset
|
415 |
if wlock: |
eec47efe219d
sharesafe: add functionality to automatically downgrade shares
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46235
diff
changeset
|
416 |
wlock.release() |