mercurial/upgrade.py
author Augie Fackler <augie@google.com>
Fri, 25 Mar 2022 11:33:12 -0400
changeset 49062 533820f5b997
parent 48966 6000f5b25c9b
child 49224 2ab79873786e
permissions -rw-r--r--
merge: with stable
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
31894
9379689b6c10 upgrade: update the header comment
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 31893
diff changeset
     1
# upgrade.py - functions for in place upgrade of Mercurial repository
4702
18e91c9def0c strip: move strip code to a new repair module
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
     2
#
31895
783b4c9bd5f5 upgrade: update the copyright statement
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 31894
diff changeset
     3
# Copyright (c) 2016-present, Gregory Szorc
4702
18e91c9def0c strip: move strip code to a new repair module
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
     4
#
8225
46293a0c7e9f updated license to be explicit about GPL version 2
Martin Geisler <mg@lazybytes.net>
parents: 8073
diff changeset
     5
# This software may be used and distributed according to the terms of the
10263
25e572394f5c Update license to GPLv2+
Matt Mackall <mpm@selenic.com>
parents: 9150
diff changeset
     6
# GNU General Public License version 2 or any later version.
4702
18e91c9def0c strip: move strip code to a new repair module
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
     7
25970
d1419cfbd4f4 repair: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25874
diff changeset
     8
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,
35352
06987c6971be upgrade: more standard creation of the temporary repository
Boris Feld <boris.feld@octobus.net>
parents: 35351
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,
38198
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,
46050
f105c49e89cd upgrade: split actual upgrade code away from the main module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46039
diff changeset
    18
)
f105c49e89cd upgrade: split actual upgrade code away from the main module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46039
diff changeset
    19
f105c49e89cd upgrade: split actual upgrade code away from the main module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46039
diff changeset
    20
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
    21
    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
    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
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
    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,
46012
7c539f0febbe upgrade: add an explicite --filelogs arguments
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46010
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."""
41091
5608b5a6c323 upgrade: add '-' in optimization name
Boris Feld <boris.feld@octobus.net>
parents: 41007
diff changeset
    43
    if optimize is None:
48511
a4d8de93023c pytype: stop excluding upgrade.py
Matt Harbison <matt_harbison@yahoo.com>
parents: 48507
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
48484
e7420f75d90d upgrade: make the list of explicitly specified revlog a dict
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48483
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: 48483
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: 48483
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: 48483
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: 48483
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: 48483
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: 48483
diff changeset
    53
        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
    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.
46052
f4f956342cf1 upgrade: move requirements checking in a dedicated function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46051
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
46055
72b7b4bf3e65 upgrade: extract the checking of target requirements change
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46054
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: 46054
diff changeset
    59
    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
    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
46055
72b7b4bf3e65 upgrade: extract the checking of target requirements change
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46054
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.
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
    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
48483
6e045497b20b upgrade: move the revlog selection code lower down the chain
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46483
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: 46483
diff changeset
    88
48485
1d0978cfe968 upgrade: explicitly warn when a `--no-xxx` flag is overwritten
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48484
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: 48484
diff changeset
    90
    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
    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: 48485
diff changeset
    92
    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
    93
1d0978cfe968 upgrade: explicitly warn when a `--no-xxx` flag is overwritten
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48484
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: 48484
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: 48484
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: 48484
diff changeset
    97
48487
62e6222cc5b6 upgrade: only process revlogs that needs it by default
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48486
diff changeset
    98
    if optimizations:
62e6222cc5b6 upgrade: only process revlogs that needs it by default
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48486
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: 48486
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: 48486
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: 48486
diff changeset
   102
                if enabled:
62e6222cc5b6 upgrade: only process revlogs that needs it by default
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48486
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: 48486
diff changeset
   104
        else:
62e6222cc5b6 upgrade: only process revlogs that needs it by default
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48486
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: 48486
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: 48486
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: 48486
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: 48486
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: 48511
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: 48511
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: 48511
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: 48511
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: 48511
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: 48511
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: 48511
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: 48511
diff changeset
   117
        ]
17eaeb06562c upgrade: prepare code (and output) for the idea of upgrading share
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48511
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: 48511
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: 48511
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: 48511
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: 48511
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: 48511
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: 48511
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: 48511
diff changeset
   125
48485
1d0978cfe968 upgrade: explicitly warn when a `--no-xxx` flag is overwritten
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48484
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: 48484
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: 48484
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: 48484
diff changeset
   129
            continue
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
   130
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
        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
   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: 48484
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: 48484
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: 48484
diff changeset
   135
                    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
   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: 48485
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: 48485
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: 48485
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: 48485
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: 48485
diff changeset
   141
                    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
   142
            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
   143
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
        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
   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: 48484
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: 48484
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: 48484
diff changeset
   148
                    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
   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: 48485
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: 48485
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: 48485
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: 48485
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: 48485
diff changeset
   154
                    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
   155
            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
   156
48485
1d0978cfe968 upgrade: explicitly warn when a `--no-xxx` flag is overwritten
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48484
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: 48484
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: 48484
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: 48484
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: 48484
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: 48484
diff changeset
   162
                    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
   163
            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
   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: 48485
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: 48485
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: 48485
diff changeset
   167
                    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
   168
            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
   169
    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
   170
        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
   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: 48485
diff changeset
   172
        ui.status((b"\n"))
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
   173
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
   174
    upgrade_op = upgrade_actions.UpgradeOperation(
46188
945b33a7edfd upgrade: move `print_affected_revlogs()` to UpgradeOperation class
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46060
diff changeset
   175
        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
   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,
48487
62e6222cc5b6 upgrade: only process revlogs that needs it by default
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48486
diff changeset
   180
        touched_revlogs,
46447
2e8a844d0ae0 upgrade: don't create store backup if `--no-backup` is passed
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46333
diff changeset
   181
        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
   182
    )
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
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:
44875
e295ba238bd8 upgrade: support the --quiet flag
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 44874
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:
44875
e295ba238bd8 upgrade: support the --quiet flag
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 44874
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:
44875
e295ba238bd8 upgrade: support the --quiet flag
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 44874
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:
44875
e295ba238bd8 upgrade: support the --quiet flag
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 44874
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
44875
e295ba238bd8 upgrade: support the --quiet flag
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 44874
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
44875
e295ba238bd8 upgrade: support the --quiet flag
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 44874
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: 46060
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:
44875
e295ba238bd8 upgrade: support the --quiet flag
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 44874
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: 46060
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
44875
e295ba238bd8 upgrade: support the --quiet flag
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 44874
diff changeset
   252
    ui.status(_(b'beginning upgrade...\n'))
33438
8056481caa81 codemod: simplify nested withs
Jun Wu <quark@fb.com>
parents: 32331
diff changeset
   253
    with repo.wlock(), repo.lock():
44875
e295ba238bd8 upgrade: support the --quiet flag
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 44874
diff changeset
   254
        ui.status(_(b'repository locked and read-only\n'))
33438
8056481caa81 codemod: simplify nested withs
Jun Wu <quark@fb.com>
parents: 32331
diff changeset
   255
        # Our strategy for upgrading the repository is to create a new,
8056481caa81 codemod: simplify nested withs
Jun Wu <quark@fb.com>
parents: 32331
diff changeset
   256
        # temporary repository, write data to it, then do a swap of the
8056481caa81 codemod: simplify nested withs
Jun Wu <quark@fb.com>
parents: 32331
diff changeset
   257
        # data. There are less heavyweight ways to do this, but it is easier
8056481caa81 codemod: simplify nested withs
Jun Wu <quark@fb.com>
parents: 32331
diff changeset
   258
        # to create a new repo object than to instantiate all the components
8056481caa81 codemod: simplify nested withs
Jun Wu <quark@fb.com>
parents: 32331
diff changeset
   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
8056481caa81 codemod: simplify nested withs
Jun Wu <quark@fb.com>
parents: 32331
diff changeset
   261
        backuppath = None
8056481caa81 codemod: simplify nested withs
Jun Wu <quark@fb.com>
parents: 32331
diff changeset
   262
        try:
44875
e295ba238bd8 upgrade: support the --quiet flag
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 44874
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
            )
35351
75520786ad2f upgrade: use the repository 'ui' as the base for the new repository
Boris Feld <boris.feld@octobus.net>
parents: 35349
diff changeset
   270
35388
6c28956ba2d4 upgrade: simplify workaround for repo.ui.copy()
Yuya Nishihara <yuya@tcha.org>
parents: 35354
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: 35354
diff changeset
   272
            repoui = repo.ui.__class__(repo.ui)
6c28956ba2d4 upgrade: simplify workaround for repo.ui.copy()
Yuya Nishihara <yuya@tcha.org>
parents: 35354
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
8056481caa81 codemod: simplify nested withs
Jun Wu <quark@fb.com>
parents: 32331
diff changeset
   275
            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
   276
                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
   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
8056481caa81 codemod: simplify nested withs
Jun Wu <quark@fb.com>
parents: 32331
diff changeset
   280
        finally:
44875
e295ba238bd8 upgrade: support the --quiet flag
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 44874
diff changeset
   281
            ui.status(_(b'removing temporary repository %s\n') % tmppath)
33438
8056481caa81 codemod: simplify nested withs
Jun Wu <quark@fb.com>
parents: 32331
diff changeset
   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
44875
e295ba238bd8 upgrade: support the --quiet flag
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 44874
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
                )
46017
705c37f22859 upgrade: add support for experimental safe share mode
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46012
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
25be21ec6c65 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
4f17773fc6b5 share: rename share-safe warning config
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46332
diff changeset
   300
    ui,
4f17773fc6b5 share: rename share-safe warning config
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46332
diff changeset
   301
    hgvfs,
4f17773fc6b5 share: rename share-safe warning config
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46332
diff changeset
   302
    storevfs,
4f17773fc6b5 share: rename share-safe warning config
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46332
diff changeset
   303
    current_requirements,
4f17773fc6b5 share: rename share-safe warning config
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46332
diff changeset
   304
    mismatch_config,
4f17773fc6b5 share: rename share-safe warning config
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46332
diff changeset
   305
    mismatch_warn,
46332
25be21ec6c65 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
25be21ec6c65 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
25be21ec6c65 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
25be21ec6c65 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':
25be21ec6c65 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:
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
   340
        hint = _(
48340
cb477edeca79 upgrade: byteify a few error messages
Matt Harbison <matt_harbison@yahoo.com>
parents: 46483
diff changeset
   341
            b"see `hg help config.format.use-share-safe` for more information"
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
   342
        )
46332
25be21ec6c65 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')
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
   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
4f17773fc6b5 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')
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
   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
25be21ec6c65 share: rework config options to be much clearer and easier
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46330
diff changeset
   365
    mismatch_config,
46333
4f17773fc6b5 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
25be21ec6c65 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':
25be21ec6c65 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:
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
   397
        hint = _(
48340
cb477edeca79 upgrade: byteify a few error messages
Matt Harbison <matt_harbison@yahoo.com>
parents: 46483
diff changeset
   398
            b"see `hg help config.format.use-share-safe` for more information"
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
   399
        )
46332
25be21ec6c65 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
25be21ec6c65 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
25be21ec6c65 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':
25be21ec6c65 share: rework config options to be much clearer and easier
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46330
diff changeset
   403
            raise error.Abort(
25be21ec6c65 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')
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
   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
25be21ec6c65 share: rework config options to be much clearer and easier
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46330
diff changeset
   407
            )
46333
4f17773fc6b5 share: rename share-safe warning config
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46332
diff changeset
   408
        elif mismatch_warn:
4f17773fc6b5 share: rename share-safe warning config
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46332
diff changeset
   409
            ui.warn(
4f17773fc6b5 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')
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
   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
4f17773fc6b5 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()