mercurial/upgrade_utils/engine.py
author Matt Harbison <matt_harbison@yahoo.com>
Wed, 09 Oct 2024 13:55:04 -0400
changeset 52001 028bac79cf34
parent 51859 f4733654f144
permissions -rw-r--r--
upgrade: disable using the parallel workers optimization on macOS It crashes `test-copies-chain-merge.t` for some reason[1]. It's only experimental, and already hard-disabled on Windows. [1] https://foss.heptapod.net/mercurial/mercurial-devel/-/jobs/2591045#L108
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
51859
f4733654f144 typing: add `from __future__ import annotations` to most files
Matt Harbison <matt_harbison@yahoo.com>
parents: 50926
diff changeset
     8
from __future__ import annotations
25970
d1419cfbd4f4 repair: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25874
diff changeset
     9
30780
2603d04889e1 repair: copy non-revlog store files during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30779
diff changeset
    10
import stat
4702
18e91c9def0c strip: move strip code to a new repair module
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    11
46046
f105c49e89cd upgrade: split actual upgrade code away from the main module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46035
diff changeset
    12
from ..i18n import _
f105c49e89cd upgrade: split actual upgrade code away from the main module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46035
diff changeset
    13
from .. import (
26587
56b2bcea2529 error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 26425
diff changeset
    14
    error,
44940
4c1d39215034 metadata: move computation related to files touched in a dedicated module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 44841
diff changeset
    15
    metadata,
38165
2ce60954b1b7 py3: wrap tempfile.mkdtemp() to use bytes path
Yuya Nishihara <yuya@tcha.org>
parents: 37444
diff changeset
    16
    pycompat,
45372
77b8588dd84e requirements: introduce new requirements related module
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45371
diff changeset
    17
    requirements,
30777
7de7afd8bdd9 repair: begin implementation of in-place upgrading
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30776
diff changeset
    18
    scmutil,
46896
cf49e54ef965 upgrade: take advantage of the new information returned by `store.walk`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46895
diff changeset
    19
    store,
25970
d1419cfbd4f4 repair: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25874
diff changeset
    20
    util,
31232
254f98326eef vfs: use 'vfs' module directly in 'mercurial.repair'
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30975
diff changeset
    21
    vfs as vfsmod,
25970
d1419cfbd4f4 repair: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25874
diff changeset
    22
)
47084
27f1191b1305 sidedata: replace sidedata upgrade mechanism with the new one
Rapha?l Gom?s <rgomes@octobus.net>
parents: 46897
diff changeset
    23
from ..revlogutils import (
27f1191b1305 sidedata: replace sidedata upgrade mechanism with the new one
Rapha?l Gom?s <rgomes@octobus.net>
parents: 46897
diff changeset
    24
    constants as revlogconst,
27f1191b1305 sidedata: replace sidedata upgrade mechanism with the new one
Rapha?l Gom?s <rgomes@octobus.net>
parents: 46897
diff changeset
    25
    flagutil,
27f1191b1305 sidedata: replace sidedata upgrade mechanism with the new one
Rapha?l Gom?s <rgomes@octobus.net>
parents: 46897
diff changeset
    26
    nodemap,
27f1191b1305 sidedata: replace sidedata upgrade mechanism with the new one
Rapha?l Gom?s <rgomes@octobus.net>
parents: 46897
diff changeset
    27
    sidedata as sidedatamod,
27f1191b1305 sidedata: replace sidedata upgrade mechanism with the new one
Rapha?l Gom?s <rgomes@octobus.net>
parents: 46897
diff changeset
    28
)
47320
a43d256c041a dirstate-v2: Add `hg debugupgraderepo` command support
Simon Sapin <simon.sapin@octobus.net>
parents: 47149
diff changeset
    29
from . import actions as upgrade_actions
47084
27f1191b1305 sidedata: replace sidedata upgrade mechanism with the new one
Rapha?l Gom?s <rgomes@octobus.net>
parents: 46897
diff changeset
    30
27f1191b1305 sidedata: replace sidedata upgrade mechanism with the new one
Rapha?l Gom?s <rgomes@octobus.net>
parents: 46897
diff changeset
    31
27f1191b1305 sidedata: replace sidedata upgrade mechanism with the new one
Rapha?l Gom?s <rgomes@octobus.net>
parents: 46897
diff changeset
    32
def get_sidedata_helpers(srcrepo, dstrepo):
27f1191b1305 sidedata: replace sidedata upgrade mechanism with the new one
Rapha?l Gom?s <rgomes@octobus.net>
parents: 46897
diff changeset
    33
    use_w = srcrepo.ui.configbool(b'experimental', b'worker.repository-upgrade')
52001
028bac79cf34 upgrade: disable using the parallel workers optimization on macOS
Matt Harbison <matt_harbison@yahoo.com>
parents: 51859
diff changeset
    34
028bac79cf34 upgrade: disable using the parallel workers optimization on macOS
Matt Harbison <matt_harbison@yahoo.com>
parents: 51859
diff changeset
    35
    if use_w and pycompat.isdarwin:
028bac79cf34 upgrade: disable using the parallel workers optimization on macOS
Matt Harbison <matt_harbison@yahoo.com>
parents: 51859
diff changeset
    36
        # Avoid a PicklingError on macOS in bundlerepository.
028bac79cf34 upgrade: disable using the parallel workers optimization on macOS
Matt Harbison <matt_harbison@yahoo.com>
parents: 51859
diff changeset
    37
        use_w = False
028bac79cf34 upgrade: disable using the parallel workers optimization on macOS
Matt Harbison <matt_harbison@yahoo.com>
parents: 51859
diff changeset
    38
        srcrepo.ui.debug(
028bac79cf34 upgrade: disable using the parallel workers optimization on macOS
Matt Harbison <matt_harbison@yahoo.com>
parents: 51859
diff changeset
    39
            b'ignoring experimental.worker.repository-upgrade=True on darwin'
028bac79cf34 upgrade: disable using the parallel workers optimization on macOS
Matt Harbison <matt_harbison@yahoo.com>
parents: 51859
diff changeset
    40
        )
028bac79cf34 upgrade: disable using the parallel workers optimization on macOS
Matt Harbison <matt_harbison@yahoo.com>
parents: 51859
diff changeset
    41
47084
27f1191b1305 sidedata: replace sidedata upgrade mechanism with the new one
Rapha?l Gom?s <rgomes@octobus.net>
parents: 46897
diff changeset
    42
    sequential = pycompat.iswindows or not use_w
27f1191b1305 sidedata: replace sidedata upgrade mechanism with the new one
Rapha?l Gom?s <rgomes@octobus.net>
parents: 46897
diff changeset
    43
    if not sequential:
27f1191b1305 sidedata: replace sidedata upgrade mechanism with the new one
Rapha?l Gom?s <rgomes@octobus.net>
parents: 46897
diff changeset
    44
        srcrepo.register_sidedata_computer(
27f1191b1305 sidedata: replace sidedata upgrade mechanism with the new one
Rapha?l Gom?s <rgomes@octobus.net>
parents: 46897
diff changeset
    45
            revlogconst.KIND_CHANGELOG,
27f1191b1305 sidedata: replace sidedata upgrade mechanism with the new one
Rapha?l Gom?s <rgomes@octobus.net>
parents: 46897
diff changeset
    46
            sidedatamod.SD_FILES,
27f1191b1305 sidedata: replace sidedata upgrade mechanism with the new one
Rapha?l Gom?s <rgomes@octobus.net>
parents: 46897
diff changeset
    47
            (sidedatamod.SD_FILES,),
27f1191b1305 sidedata: replace sidedata upgrade mechanism with the new one
Rapha?l Gom?s <rgomes@octobus.net>
parents: 46897
diff changeset
    48
            metadata._get_worker_sidedata_adder(srcrepo, dstrepo),
27f1191b1305 sidedata: replace sidedata upgrade mechanism with the new one
Rapha?l Gom?s <rgomes@octobus.net>
parents: 46897
diff changeset
    49
            flagutil.REVIDX_HASCOPIESINFO,
27f1191b1305 sidedata: replace sidedata upgrade mechanism with the new one
Rapha?l Gom?s <rgomes@octobus.net>
parents: 46897
diff changeset
    50
            replace=True,
27f1191b1305 sidedata: replace sidedata upgrade mechanism with the new one
Rapha?l Gom?s <rgomes@octobus.net>
parents: 46897
diff changeset
    51
        )
47085
3aab2330b7d3 sidedata: move sidedata-related utils to the dedicated module
Rapha?l Gom?s <rgomes@octobus.net>
parents: 47084
diff changeset
    52
    return sidedatamod.get_sidedata_helpers(srcrepo, dstrepo._wanted_sidedata)
25970
d1419cfbd4f4 repair: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25874
diff changeset
    53
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43031
diff changeset
    54
50487
0935b9db21b6 upgrade: use StoreEntry object in upgrade
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50486
diff changeset
    55
def _copyrevlog(tr, destrepo, oldrl, entry):
42691
5535a2201ff1 upgrade: introduce a _copyrevlog method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42690
diff changeset
    56
    """copy all relevant files for `oldrl` into `destrepo` store
5535a2201ff1 upgrade: introduce a _copyrevlog method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42690
diff changeset
    57
5535a2201ff1 upgrade: introduce a _copyrevlog method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42690
diff changeset
    58
    Files are copied "as is" without any transformation. The copy is performed
5535a2201ff1 upgrade: introduce a _copyrevlog method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42690
diff changeset
    59
    without extra checks. Callers are responsible for making sure the copied
5535a2201ff1 upgrade: introduce a _copyrevlog method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42690
diff changeset
    60
    content is compatible with format of the destination repository.
5535a2201ff1 upgrade: introduce a _copyrevlog method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42690
diff changeset
    61
    """
5535a2201ff1 upgrade: introduce a _copyrevlog method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42690
diff changeset
    62
    oldrl = getattr(oldrl, '_revlog', oldrl)
50624
e1ee6910f6bc store: add a `get_revlog_instance` method on revlog entries
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50500
diff changeset
    63
    newrl = entry.get_revlog_instance(destrepo)
42691
5535a2201ff1 upgrade: introduce a _copyrevlog method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42690
diff changeset
    64
    newrl = getattr(newrl, '_revlog', newrl)
5535a2201ff1 upgrade: introduce a _copyrevlog method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42690
diff changeset
    65
5535a2201ff1 upgrade: introduce a _copyrevlog method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42690
diff changeset
    66
    oldvfs = oldrl.opener
5535a2201ff1 upgrade: introduce a _copyrevlog method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42690
diff changeset
    67
    newvfs = newrl.opener
47148
a07d5cb03a85 revlog: rename `indexfile` to `_indexfile`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47128
diff changeset
    68
    oldindex = oldvfs.join(oldrl._indexfile)
a07d5cb03a85 revlog: rename `indexfile` to `_indexfile`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47128
diff changeset
    69
    newindex = newvfs.join(newrl._indexfile)
47149
396442cd7e6a revlog: rename `datafile` to `datafile`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47148
diff changeset
    70
    olddata = oldvfs.join(oldrl._datafile)
396442cd7e6a revlog: rename `datafile` to `datafile`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47148
diff changeset
    71
    newdata = newvfs.join(newrl._datafile)
42691
5535a2201ff1 upgrade: introduce a _copyrevlog method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42690
diff changeset
    72
47148
a07d5cb03a85 revlog: rename `indexfile` to `_indexfile`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47128
diff changeset
    73
    with newvfs(newrl._indexfile, b'w'):
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43031
diff changeset
    74
        pass  # create all the directories
42691
5535a2201ff1 upgrade: introduce a _copyrevlog method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42690
diff changeset
    75
5535a2201ff1 upgrade: introduce a _copyrevlog method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42690
diff changeset
    76
    util.copyfile(oldindex, newindex)
47149
396442cd7e6a revlog: rename `datafile` to `datafile`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47148
diff changeset
    77
    copydata = oldrl.opener.exists(oldrl._datafile)
43002
373749982924 upgrade: also register copied `.d` files to fncache
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 43000
diff changeset
    78
    if copydata:
42691
5535a2201ff1 upgrade: introduce a _copyrevlog method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42690
diff changeset
    79
        util.copyfile(olddata, newdata)
5535a2201ff1 upgrade: introduce a _copyrevlog method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42690
diff changeset
    80
50499
e4186ddab473 store: use the new boolean property in `upgrade`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50493
diff changeset
    81
    if entry.is_filelog:
50489
3473d18c029a store: introduce a main_file_path method for revlog
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50488
diff changeset
    82
        unencodedname = entry.main_file_path()
42691
5535a2201ff1 upgrade: introduce a _copyrevlog method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42690
diff changeset
    83
        destrepo.svfs.fncache.add(unencodedname)
43002
373749982924 upgrade: also register copied `.d` files to fncache
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 43000
diff changeset
    84
        if copydata:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
    85
            destrepo.svfs.fncache.add(unencodedname[:-2] + b'.d')
42691
5535a2201ff1 upgrade: introduce a _copyrevlog method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42690
diff changeset
    86
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43031
diff changeset
    87
46035
6c960b708ac4 upgrade: display the list of processed revlog before proceeding
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46003
diff changeset
    88
UPGRADE_CHANGELOG = b"changelog"
6c960b708ac4 upgrade: display the list of processed revlog before proceeding
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46003
diff changeset
    89
UPGRADE_MANIFEST = b"manifest"
6c960b708ac4 upgrade: display the list of processed revlog before proceeding
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46003
diff changeset
    90
UPGRADE_FILELOGS = b"all-filelogs"
42693
0812d9fb63fe upgrade: introduce the internal code for revlog cloning selection
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42691
diff changeset
    91
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43031
diff changeset
    92
UPGRADE_ALL_REVLOGS = frozenset(
45980
fe7d7917ceb5 upgrade: rename UPGRADE_FILELOG to UPGRADE_FILELOGS
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 45735
diff changeset
    93
    [UPGRADE_CHANGELOG, UPGRADE_MANIFEST, UPGRADE_FILELOGS]
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43031
diff changeset
    94
)
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43031
diff changeset
    95
42693
0812d9fb63fe upgrade: introduce the internal code for revlog cloning selection
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42691
diff changeset
    96
50500
aede57466804 store: use boolean property for upgrade's matchrevlog
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50499
diff changeset
    97
def matchrevlog(revlogfilter, entry):
45694
d1c10d33a85c upgrade: improve documentation of matchrevlog()
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45487
diff changeset
    98
    """check if a revlog is selected for cloning.
d1c10d33a85c upgrade: improve documentation of matchrevlog()
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45487
diff changeset
    99
d1c10d33a85c upgrade: improve documentation of matchrevlog()
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45487
diff changeset
   100
    In other words, are there any updates which need to be done on revlog
d1c10d33a85c upgrade: improve documentation of matchrevlog()
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45487
diff changeset
   101
    or it can be blindly copied.
42693
0812d9fb63fe upgrade: introduce the internal code for revlog cloning selection
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42691
diff changeset
   102
0812d9fb63fe upgrade: introduce the internal code for revlog cloning selection
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42691
diff changeset
   103
    The store entry is checked against the passed filter"""
50500
aede57466804 store: use boolean property for upgrade's matchrevlog
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50499
diff changeset
   104
    if entry.is_changelog:
42693
0812d9fb63fe upgrade: introduce the internal code for revlog cloning selection
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42691
diff changeset
   105
        return UPGRADE_CHANGELOG in revlogfilter
50500
aede57466804 store: use boolean property for upgrade's matchrevlog
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50499
diff changeset
   106
    elif entry.is_manifestlog:
42693
0812d9fb63fe upgrade: introduce the internal code for revlog cloning selection
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42691
diff changeset
   107
        return UPGRADE_MANIFEST in revlogfilter
50500
aede57466804 store: use boolean property for upgrade's matchrevlog
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50499
diff changeset
   108
    assert entry.is_filelog
45980
fe7d7917ceb5 upgrade: rename UPGRADE_FILELOG to UPGRADE_FILELOGS
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 45735
diff changeset
   109
    return UPGRADE_FILELOGS in revlogfilter
42693
0812d9fb63fe upgrade: introduce the internal code for revlog cloning selection
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42691
diff changeset
   110
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43031
diff changeset
   111
46193
85f7cf314b39 engine: refactor actual cloning code into separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46191
diff changeset
   112
def _perform_clone(
85f7cf314b39 engine: refactor actual cloning code into separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46191
diff changeset
   113
    ui,
85f7cf314b39 engine: refactor actual cloning code into separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46191
diff changeset
   114
    dstrepo,
85f7cf314b39 engine: refactor actual cloning code into separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46191
diff changeset
   115
    tr,
85f7cf314b39 engine: refactor actual cloning code into separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46191
diff changeset
   116
    old_revlog,
50487
0935b9db21b6 upgrade: use StoreEntry object in upgrade
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50486
diff changeset
   117
    entry,
46217
02df91e895bd engine: pass upgrade operation inside `_perform_clone()`
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46216
diff changeset
   118
    upgrade_op,
47084
27f1191b1305 sidedata: replace sidedata upgrade mechanism with the new one
Rapha?l Gom?s <rgomes@octobus.net>
parents: 46897
diff changeset
   119
    sidedata_helpers,
46193
85f7cf314b39 engine: refactor actual cloning code into separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46191
diff changeset
   120
    oncopiedrevision,
85f7cf314b39 engine: refactor actual cloning code into separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46191
diff changeset
   121
):
47062
f38bf44e077f black: make codebase compatible with black v21.4b2 and v20.8b1
Kyle Lippincott <spectral@google.com>
parents: 46897
diff changeset
   122
    """returns the new revlog object created"""
46193
85f7cf314b39 engine: refactor actual cloning code into separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46191
diff changeset
   123
    newrl = None
50489
3473d18c029a store: introduce a main_file_path method for revlog
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50488
diff changeset
   124
    revlog_path = entry.main_file_path()
50500
aede57466804 store: use boolean property for upgrade's matchrevlog
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50499
diff changeset
   125
    if matchrevlog(upgrade_op.revlogs_to_process, entry):
46193
85f7cf314b39 engine: refactor actual cloning code into separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46191
diff changeset
   126
        ui.note(
50487
0935b9db21b6 upgrade: use StoreEntry object in upgrade
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50486
diff changeset
   127
            _(b'cloning %d revisions from %s\n')
0935b9db21b6 upgrade: use StoreEntry object in upgrade
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50486
diff changeset
   128
            % (len(old_revlog), revlog_path)
46193
85f7cf314b39 engine: refactor actual cloning code into separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46191
diff changeset
   129
        )
50624
e1ee6910f6bc store: add a `get_revlog_instance` method on revlog entries
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50500
diff changeset
   130
        newrl = entry.get_revlog_instance(dstrepo)
46193
85f7cf314b39 engine: refactor actual cloning code into separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46191
diff changeset
   131
        old_revlog.clone(
85f7cf314b39 engine: refactor actual cloning code into separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46191
diff changeset
   132
            tr,
85f7cf314b39 engine: refactor actual cloning code into separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46191
diff changeset
   133
            newrl,
85f7cf314b39 engine: refactor actual cloning code into separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46191
diff changeset
   134
            addrevisioncb=oncopiedrevision,
46217
02df91e895bd engine: pass upgrade operation inside `_perform_clone()`
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46216
diff changeset
   135
            deltareuse=upgrade_op.delta_reuse_mode,
46218
3f92a9bb80f0 engine: prevent multiple checking of re-delta-multibase
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46217
diff changeset
   136
            forcedeltabothparents=upgrade_op.force_re_delta_both_parents,
47084
27f1191b1305 sidedata: replace sidedata upgrade mechanism with the new one
Rapha?l Gom?s <rgomes@octobus.net>
parents: 46897
diff changeset
   137
            sidedata_helpers=sidedata_helpers,
46193
85f7cf314b39 engine: refactor actual cloning code into separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46191
diff changeset
   138
        )
85f7cf314b39 engine: refactor actual cloning code into separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46191
diff changeset
   139
    else:
85f7cf314b39 engine: refactor actual cloning code into separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46191
diff changeset
   140
        msg = _(b'blindly copying %s containing %i revisions\n')
50487
0935b9db21b6 upgrade: use StoreEntry object in upgrade
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50486
diff changeset
   141
        ui.note(msg % (revlog_path, len(old_revlog)))
0935b9db21b6 upgrade: use StoreEntry object in upgrade
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50486
diff changeset
   142
        _copyrevlog(tr, dstrepo, old_revlog, entry)
46193
85f7cf314b39 engine: refactor actual cloning code into separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46191
diff changeset
   143
50624
e1ee6910f6bc store: add a `get_revlog_instance` method on revlog entries
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50500
diff changeset
   144
        newrl = entry.get_revlog_instance(dstrepo)
46193
85f7cf314b39 engine: refactor actual cloning code into separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46191
diff changeset
   145
    return newrl
85f7cf314b39 engine: refactor actual cloning code into separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46191
diff changeset
   146
85f7cf314b39 engine: refactor actual cloning code into separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46191
diff changeset
   147
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43031
diff changeset
   148
def _clonerevlogs(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43031
diff changeset
   149
    ui,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43031
diff changeset
   150
    srcrepo,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43031
diff changeset
   151
    dstrepo,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43031
diff changeset
   152
    tr,
46216
34efa84a43a1 engine: pass upgrade operation inside _clonerevlogs()
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46215
diff changeset
   153
    upgrade_op,
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43031
diff changeset
   154
):
30779
38aa1ca97b6a repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30777
diff changeset
   155
    """Copy revlogs between 2 repos."""
38aa1ca97b6a repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30777
diff changeset
   156
    revcount = 0
38aa1ca97b6a repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30777
diff changeset
   157
    srcsize = 0
38aa1ca97b6a repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30777
diff changeset
   158
    srcrawsize = 0
38aa1ca97b6a repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30777
diff changeset
   159
    dstsize = 0
38aa1ca97b6a repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30777
diff changeset
   160
    fcount = 0
38aa1ca97b6a repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30777
diff changeset
   161
    frevcount = 0
38aa1ca97b6a repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30777
diff changeset
   162
    fsrcsize = 0
38aa1ca97b6a repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30777
diff changeset
   163
    frawsize = 0
38aa1ca97b6a repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30777
diff changeset
   164
    fdstsize = 0
38aa1ca97b6a repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30777
diff changeset
   165
    mcount = 0
38aa1ca97b6a repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30777
diff changeset
   166
    mrevcount = 0
38aa1ca97b6a repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30777
diff changeset
   167
    msrcsize = 0
38aa1ca97b6a repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30777
diff changeset
   168
    mrawsize = 0
38aa1ca97b6a repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30777
diff changeset
   169
    mdstsize = 0
38aa1ca97b6a repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30777
diff changeset
   170
    crevcount = 0
38aa1ca97b6a repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30777
diff changeset
   171
    csrcsize = 0
38aa1ca97b6a repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30777
diff changeset
   172
    crawsize = 0
38aa1ca97b6a repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30777
diff changeset
   173
    cdstsize = 0
38aa1ca97b6a repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30777
diff changeset
   174
42689
896fb9deeaf8 upgrade: walk the source store file only once
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42137
diff changeset
   175
    alldatafiles = list(srcrepo.store.walk())
46194
4d1cec4e5e1f engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46193
diff changeset
   176
    # mapping of data files which needs to be cloned
4d1cec4e5e1f engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46193
diff changeset
   177
    # key is unencoded filename
4d1cec4e5e1f engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46193
diff changeset
   178
    # value is revlog_object_from_srcrepo
4d1cec4e5e1f engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46193
diff changeset
   179
    manifests = {}
4d1cec4e5e1f engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46193
diff changeset
   180
    changelogs = {}
4d1cec4e5e1f engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46193
diff changeset
   181
    filelogs = {}
42689
896fb9deeaf8 upgrade: walk the source store file only once
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42137
diff changeset
   182
30779
38aa1ca97b6a repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30777
diff changeset
   183
    # Perform a pass to collect metadata. This validates we can open all
38aa1ca97b6a repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30777
diff changeset
   184
    # source files and allows a unified progress bar to be displayed.
50468
521fec115dad store: use a StoreEntry object instead of tuple for store files
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50363
diff changeset
   185
    for entry in alldatafiles:
50493
e50d1fe7ebb4 store: issue a single entry for each revlog
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50489
diff changeset
   186
        if not entry.is_revlog:
30779
38aa1ca97b6a repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30777
diff changeset
   187
            continue
38aa1ca97b6a repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30777
diff changeset
   188
50624
e1ee6910f6bc store: add a `get_revlog_instance` method on revlog entries
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50500
diff changeset
   189
        rl = entry.get_revlog_instance(srcrepo)
30779
38aa1ca97b6a repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30777
diff changeset
   190
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43031
diff changeset
   191
        info = rl.storageinfo(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43031
diff changeset
   192
            exclusivefiles=True,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43031
diff changeset
   193
            revisionscount=True,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43031
diff changeset
   194
            trackedsize=True,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43031
diff changeset
   195
            storedsize=True,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43031
diff changeset
   196
        )
39857
8dab7c8a93eb upgrade: report size of backing files, not internal storage size
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39546
diff changeset
   197
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   198
        revcount += info[b'revisionscount'] or 0
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   199
        datasize = info[b'storedsize'] or 0
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   200
        rawsize = info[b'trackedsize'] or 0
30779
38aa1ca97b6a repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30777
diff changeset
   201
38aa1ca97b6a repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30777
diff changeset
   202
        srcsize += datasize
38aa1ca97b6a repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30777
diff changeset
   203
        srcrawsize += rawsize
38aa1ca97b6a repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30777
diff changeset
   204
38aa1ca97b6a repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30777
diff changeset
   205
        # This is for the separate progress bars.
50499
e4186ddab473 store: use the new boolean property in `upgrade`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50493
diff changeset
   206
        if entry.is_changelog:
50487
0935b9db21b6 upgrade: use StoreEntry object in upgrade
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50486
diff changeset
   207
            changelogs[entry.target_id] = entry
30779
38aa1ca97b6a repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30777
diff changeset
   208
            crevcount += len(rl)
38aa1ca97b6a repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30777
diff changeset
   209
            csrcsize += datasize
38aa1ca97b6a repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30777
diff changeset
   210
            crawsize += rawsize
50499
e4186ddab473 store: use the new boolean property in `upgrade`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50493
diff changeset
   211
        elif entry.is_manifestlog:
50487
0935b9db21b6 upgrade: use StoreEntry object in upgrade
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50486
diff changeset
   212
            manifests[entry.target_id] = entry
30779
38aa1ca97b6a repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30777
diff changeset
   213
            mcount += 1
38aa1ca97b6a repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30777
diff changeset
   214
            mrevcount += len(rl)
38aa1ca97b6a repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30777
diff changeset
   215
            msrcsize += datasize
38aa1ca97b6a repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30777
diff changeset
   216
            mrawsize += rawsize
50499
e4186ddab473 store: use the new boolean property in `upgrade`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50493
diff changeset
   217
        elif entry.is_filelog:
50487
0935b9db21b6 upgrade: use StoreEntry object in upgrade
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50486
diff changeset
   218
            filelogs[entry.target_id] = entry
30779
38aa1ca97b6a repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30777
diff changeset
   219
            fcount += 1
38aa1ca97b6a repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30777
diff changeset
   220
            frevcount += len(rl)
38aa1ca97b6a repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30777
diff changeset
   221
            fsrcsize += datasize
38aa1ca97b6a repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30777
diff changeset
   222
            frawsize += rawsize
37444
c8666a9e9e11 upgrade: sniff for filelog type
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36373
diff changeset
   223
        else:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   224
            error.ProgrammingError(b'unknown revlog type')
30779
38aa1ca97b6a repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30777
diff changeset
   225
38aa1ca97b6a repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30777
diff changeset
   226
    if not revcount:
38aa1ca97b6a repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30777
diff changeset
   227
        return
38aa1ca97b6a repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30777
diff changeset
   228
44798
e295ba238bd8 upgrade: support the --quiet flag
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 44797
diff changeset
   229
    ui.status(
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43031
diff changeset
   230
        _(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   231
            b'migrating %d total revisions (%d in filelogs, %d in manifests, '
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   232
            b'%d in changelog)\n'
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43031
diff changeset
   233
        )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43031
diff changeset
   234
        % (revcount, frevcount, mrevcount, crevcount)
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43031
diff changeset
   235
    )
44798
e295ba238bd8 upgrade: support the --quiet flag
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 44797
diff changeset
   236
    ui.status(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   237
        _(b'migrating %s in store; %s tracked data\n')
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43031
diff changeset
   238
        % ((util.bytecount(srcsize), util.bytecount(srcrawsize)))
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43031
diff changeset
   239
    )
30779
38aa1ca97b6a repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30777
diff changeset
   240
38aa1ca97b6a repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30777
diff changeset
   241
    # Used to keep track of progress.
38399
185588cb0c4b upgrade: use progress helper
Martin von Zweigbergk <martinvonz@google.com>
parents: 38398
diff changeset
   242
    progress = None
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43031
diff changeset
   243
30779
38aa1ca97b6a repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30777
diff changeset
   244
    def oncopiedrevision(rl, rev, node):
38399
185588cb0c4b upgrade: use progress helper
Martin von Zweigbergk <martinvonz@google.com>
parents: 38398
diff changeset
   245
        progress.increment()
30779
38aa1ca97b6a repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30777
diff changeset
   246
47084
27f1191b1305 sidedata: replace sidedata upgrade mechanism with the new one
Rapha?l Gom?s <rgomes@octobus.net>
parents: 46897
diff changeset
   247
    sidedata_helpers = get_sidedata_helpers(srcrepo, dstrepo)
43134
75ad8af9c95e upgrade: allow upgrade to repository using sidedata
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 43117
diff changeset
   248
46194
4d1cec4e5e1f engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46193
diff changeset
   249
    # Migrating filelogs
4d1cec4e5e1f engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46193
diff changeset
   250
    ui.status(
4d1cec4e5e1f engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46193
diff changeset
   251
        _(
4d1cec4e5e1f engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46193
diff changeset
   252
            b'migrating %d filelogs containing %d revisions '
4d1cec4e5e1f engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46193
diff changeset
   253
            b'(%s in store; %s tracked data)\n'
4d1cec4e5e1f engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46193
diff changeset
   254
        )
4d1cec4e5e1f engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46193
diff changeset
   255
        % (
4d1cec4e5e1f engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46193
diff changeset
   256
            fcount,
4d1cec4e5e1f engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46193
diff changeset
   257
            frevcount,
4d1cec4e5e1f engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46193
diff changeset
   258
            util.bytecount(fsrcsize),
4d1cec4e5e1f engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46193
diff changeset
   259
            util.bytecount(frawsize),
4d1cec4e5e1f engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46193
diff changeset
   260
        )
4d1cec4e5e1f engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46193
diff changeset
   261
    )
4d1cec4e5e1f engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46193
diff changeset
   262
    progress = srcrepo.ui.makeprogress(_(b'file revisions'), total=frevcount)
50487
0935b9db21b6 upgrade: use StoreEntry object in upgrade
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50486
diff changeset
   263
    for target_id, entry in sorted(filelogs.items()):
50624
e1ee6910f6bc store: add a `get_revlog_instance` method on revlog entries
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50500
diff changeset
   264
        oldrl = entry.get_revlog_instance(srcrepo)
49552
1994842955db upgrade: no longer keep all revlogs in memory at any point
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49306
diff changeset
   265
46193
85f7cf314b39 engine: refactor actual cloning code into separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46191
diff changeset
   266
        newrl = _perform_clone(
85f7cf314b39 engine: refactor actual cloning code into separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46191
diff changeset
   267
            ui,
85f7cf314b39 engine: refactor actual cloning code into separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46191
diff changeset
   268
            dstrepo,
85f7cf314b39 engine: refactor actual cloning code into separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46191
diff changeset
   269
            tr,
85f7cf314b39 engine: refactor actual cloning code into separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46191
diff changeset
   270
            oldrl,
50487
0935b9db21b6 upgrade: use StoreEntry object in upgrade
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50486
diff changeset
   271
            entry,
46217
02df91e895bd engine: pass upgrade operation inside `_perform_clone()`
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46216
diff changeset
   272
            upgrade_op,
47084
27f1191b1305 sidedata: replace sidedata upgrade mechanism with the new one
Rapha?l Gom?s <rgomes@octobus.net>
parents: 46897
diff changeset
   273
            sidedata_helpers,
46193
85f7cf314b39 engine: refactor actual cloning code into separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46191
diff changeset
   274
            oncopiedrevision,
85f7cf314b39 engine: refactor actual cloning code into separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46191
diff changeset
   275
        )
39870
b399ff55ee6d upgrade: use storageinfo() for obtaining storage metadata
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39859
diff changeset
   276
        info = newrl.storageinfo(storedsize=True)
46214
5dfa837d933e engine: refactor how total dstsize is calculated
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46210
diff changeset
   277
        fdstsize += info[b'storedsize'] or 0
46194
4d1cec4e5e1f engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46193
diff changeset
   278
    ui.status(
4d1cec4e5e1f engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46193
diff changeset
   279
        _(
4d1cec4e5e1f engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46193
diff changeset
   280
            b'finished migrating %d filelog revisions across %d '
4d1cec4e5e1f engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46193
diff changeset
   281
            b'filelogs; change in size: %s\n'
4d1cec4e5e1f engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46193
diff changeset
   282
        )
4d1cec4e5e1f engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46193
diff changeset
   283
        % (frevcount, fcount, util.bytecount(fdstsize - fsrcsize))
4d1cec4e5e1f engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46193
diff changeset
   284
    )
30779
38aa1ca97b6a repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30777
diff changeset
   285
46194
4d1cec4e5e1f engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46193
diff changeset
   286
    # Migrating manifests
4d1cec4e5e1f engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46193
diff changeset
   287
    ui.status(
4d1cec4e5e1f engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46193
diff changeset
   288
        _(
4d1cec4e5e1f engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46193
diff changeset
   289
            b'migrating %d manifests containing %d revisions '
4d1cec4e5e1f engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46193
diff changeset
   290
            b'(%s in store; %s tracked data)\n'
4d1cec4e5e1f engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46193
diff changeset
   291
        )
4d1cec4e5e1f engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46193
diff changeset
   292
        % (
4d1cec4e5e1f engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46193
diff changeset
   293
            mcount,
4d1cec4e5e1f engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46193
diff changeset
   294
            mrevcount,
4d1cec4e5e1f engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46193
diff changeset
   295
            util.bytecount(msrcsize),
4d1cec4e5e1f engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46193
diff changeset
   296
            util.bytecount(mrawsize),
4d1cec4e5e1f engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46193
diff changeset
   297
        )
4d1cec4e5e1f engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46193
diff changeset
   298
    )
4d1cec4e5e1f engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46193
diff changeset
   299
    if progress:
4d1cec4e5e1f engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46193
diff changeset
   300
        progress.complete()
4d1cec4e5e1f engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46193
diff changeset
   301
    progress = srcrepo.ui.makeprogress(
4d1cec4e5e1f engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46193
diff changeset
   302
        _(b'manifest revisions'), total=mrevcount
4d1cec4e5e1f engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46193
diff changeset
   303
    )
50487
0935b9db21b6 upgrade: use StoreEntry object in upgrade
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50486
diff changeset
   304
    for target_id, entry in sorted(manifests.items()):
50624
e1ee6910f6bc store: add a `get_revlog_instance` method on revlog entries
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50500
diff changeset
   305
        oldrl = entry.get_revlog_instance(srcrepo)
46194
4d1cec4e5e1f engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46193
diff changeset
   306
        newrl = _perform_clone(
4d1cec4e5e1f engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46193
diff changeset
   307
            ui,
4d1cec4e5e1f engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46193
diff changeset
   308
            dstrepo,
4d1cec4e5e1f engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46193
diff changeset
   309
            tr,
4d1cec4e5e1f engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46193
diff changeset
   310
            oldrl,
50487
0935b9db21b6 upgrade: use StoreEntry object in upgrade
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50486
diff changeset
   311
            entry,
46217
02df91e895bd engine: pass upgrade operation inside `_perform_clone()`
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46216
diff changeset
   312
            upgrade_op,
47084
27f1191b1305 sidedata: replace sidedata upgrade mechanism with the new one
Rapha?l Gom?s <rgomes@octobus.net>
parents: 46897
diff changeset
   313
            sidedata_helpers,
46194
4d1cec4e5e1f engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46193
diff changeset
   314
            oncopiedrevision,
4d1cec4e5e1f engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46193
diff changeset
   315
        )
4d1cec4e5e1f engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46193
diff changeset
   316
        info = newrl.storageinfo(storedsize=True)
46214
5dfa837d933e engine: refactor how total dstsize is calculated
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46210
diff changeset
   317
        mdstsize += info[b'storedsize'] or 0
46194
4d1cec4e5e1f engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46193
diff changeset
   318
    ui.status(
4d1cec4e5e1f engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46193
diff changeset
   319
        _(
4d1cec4e5e1f engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46193
diff changeset
   320
            b'finished migrating %d manifest revisions across %d '
4d1cec4e5e1f engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46193
diff changeset
   321
            b'manifests; change in size: %s\n'
4d1cec4e5e1f engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46193
diff changeset
   322
        )
4d1cec4e5e1f engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46193
diff changeset
   323
        % (mrevcount, mcount, util.bytecount(mdstsize - msrcsize))
4d1cec4e5e1f engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46193
diff changeset
   324
    )
30779
38aa1ca97b6a repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30777
diff changeset
   325
46194
4d1cec4e5e1f engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46193
diff changeset
   326
    # Migrating changelog
4d1cec4e5e1f engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46193
diff changeset
   327
    ui.status(
4d1cec4e5e1f engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46193
diff changeset
   328
        _(
4d1cec4e5e1f engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46193
diff changeset
   329
            b'migrating changelog containing %d revisions '
4d1cec4e5e1f engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46193
diff changeset
   330
            b'(%s in store; %s tracked data)\n'
4d1cec4e5e1f engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46193
diff changeset
   331
        )
4d1cec4e5e1f engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46193
diff changeset
   332
        % (
4d1cec4e5e1f engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46193
diff changeset
   333
            crevcount,
4d1cec4e5e1f engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46193
diff changeset
   334
            util.bytecount(csrcsize),
4d1cec4e5e1f engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46193
diff changeset
   335
            util.bytecount(crawsize),
4d1cec4e5e1f engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46193
diff changeset
   336
        )
4d1cec4e5e1f engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46193
diff changeset
   337
    )
4d1cec4e5e1f engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46193
diff changeset
   338
    if progress:
4d1cec4e5e1f engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46193
diff changeset
   339
        progress.complete()
4d1cec4e5e1f engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46193
diff changeset
   340
    progress = srcrepo.ui.makeprogress(
4d1cec4e5e1f engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46193
diff changeset
   341
        _(b'changelog revisions'), total=crevcount
4d1cec4e5e1f engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46193
diff changeset
   342
    )
50487
0935b9db21b6 upgrade: use StoreEntry object in upgrade
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50486
diff changeset
   343
    for target_id, entry in sorted(changelogs.items()):
50624
e1ee6910f6bc store: add a `get_revlog_instance` method on revlog entries
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50500
diff changeset
   344
        oldrl = entry.get_revlog_instance(srcrepo)
46194
4d1cec4e5e1f engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46193
diff changeset
   345
        newrl = _perform_clone(
4d1cec4e5e1f engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46193
diff changeset
   346
            ui,
4d1cec4e5e1f engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46193
diff changeset
   347
            dstrepo,
4d1cec4e5e1f engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46193
diff changeset
   348
            tr,
4d1cec4e5e1f engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46193
diff changeset
   349
            oldrl,
50487
0935b9db21b6 upgrade: use StoreEntry object in upgrade
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50486
diff changeset
   350
            entry,
46217
02df91e895bd engine: pass upgrade operation inside `_perform_clone()`
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46216
diff changeset
   351
            upgrade_op,
47084
27f1191b1305 sidedata: replace sidedata upgrade mechanism with the new one
Rapha?l Gom?s <rgomes@octobus.net>
parents: 46897
diff changeset
   352
            sidedata_helpers,
46194
4d1cec4e5e1f engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46193
diff changeset
   353
            oncopiedrevision,
4d1cec4e5e1f engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46193
diff changeset
   354
        )
4d1cec4e5e1f engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46193
diff changeset
   355
        info = newrl.storageinfo(storedsize=True)
46214
5dfa837d933e engine: refactor how total dstsize is calculated
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46210
diff changeset
   356
        cdstsize += info[b'storedsize'] or 0
38399
185588cb0c4b upgrade: use progress helper
Martin von Zweigbergk <martinvonz@google.com>
parents: 38398
diff changeset
   357
    progress.complete()
44798
e295ba238bd8 upgrade: support the --quiet flag
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 44797
diff changeset
   358
    ui.status(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   359
        _(
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   360
            b'finished migrating %d changelog revisions; change in size: '
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   361
            b'%s\n'
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   362
        )
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43031
diff changeset
   363
        % (crevcount, util.bytecount(cdstsize - csrcsize))
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43031
diff changeset
   364
    )
30779
38aa1ca97b6a repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30777
diff changeset
   365
46214
5dfa837d933e engine: refactor how total dstsize is calculated
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46210
diff changeset
   366
    dstsize = fdstsize + mdstsize + cdstsize
44798
e295ba238bd8 upgrade: support the --quiet flag
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 44797
diff changeset
   367
    ui.status(
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43031
diff changeset
   368
        _(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   369
            b'finished migrating %d total revisions; total change in store '
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   370
            b'size: %s\n'
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43031
diff changeset
   371
        )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43031
diff changeset
   372
        % (revcount, util.bytecount(dstsize - srcsize))
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43031
diff changeset
   373
    )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43031
diff changeset
   374
30779
38aa1ca97b6a repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30777
diff changeset
   375
46229
52abb1af2995 engine: prevent a function call for each store file
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46222
diff changeset
   376
def _files_to_copy_post_revlog_clone(srcrepo):
52abb1af2995 engine: prevent a function call for each store file
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46222
diff changeset
   377
    """yields files which should be copied to destination after revlogs
52abb1af2995 engine: prevent a function call for each store file
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46222
diff changeset
   378
    are cloned"""
52abb1af2995 engine: prevent a function call for each store file
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46222
diff changeset
   379
    for path, kind, st in sorted(srcrepo.store.vfs.readdir(b'', stat=True)):
52abb1af2995 engine: prevent a function call for each store file
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46222
diff changeset
   380
        # don't copy revlogs as they are already cloned
50668
e06d1a779eb6 store: stop relying on a `revlog_type` property
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50624
diff changeset
   381
        if store.is_revlog_file(path):
46229
52abb1af2995 engine: prevent a function call for each store file
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46222
diff changeset
   382
            continue
52abb1af2995 engine: prevent a function call for each store file
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46222
diff changeset
   383
        # Skip transaction related files.
52abb1af2995 engine: prevent a function call for each store file
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46222
diff changeset
   384
        if path.startswith(b'undo'):
52abb1af2995 engine: prevent a function call for each store file
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46222
diff changeset
   385
            continue
52abb1af2995 engine: prevent a function call for each store file
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46222
diff changeset
   386
        # Only copy regular files.
52abb1af2995 engine: prevent a function call for each store file
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46222
diff changeset
   387
        if kind != stat.S_IFREG:
52abb1af2995 engine: prevent a function call for each store file
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46222
diff changeset
   388
            continue
52abb1af2995 engine: prevent a function call for each store file
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46222
diff changeset
   389
        # Skip other skipped files.
52abb1af2995 engine: prevent a function call for each store file
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46222
diff changeset
   390
        if path in (b'lock', b'fncache'):
52abb1af2995 engine: prevent a function call for each store file
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46222
diff changeset
   391
            continue
52abb1af2995 engine: prevent a function call for each store file
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46222
diff changeset
   392
        # TODO: should we skip cache too?
30780
2603d04889e1 repair: copy non-revlog store files during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30779
diff changeset
   393
46229
52abb1af2995 engine: prevent a function call for each store file
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46222
diff changeset
   394
        yield path
30780
2603d04889e1 repair: copy non-revlog store files during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30779
diff changeset
   395
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43031
diff changeset
   396
46220
1ca7865c245d engine: refactor code to replace stores in separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46219
diff changeset
   397
def _replacestores(currentrepo, upgradedrepo, backupvfs, upgrade_op):
1ca7865c245d engine: refactor code to replace stores in separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46219
diff changeset
   398
    """Replace the stores after current repository is upgraded
1ca7865c245d engine: refactor code to replace stores in separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46219
diff changeset
   399
1ca7865c245d engine: refactor code to replace stores in separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46219
diff changeset
   400
    Creates a backup of current repository store at backup path
1ca7865c245d engine: refactor code to replace stores in separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46219
diff changeset
   401
    Replaces upgraded store files in current repo from upgraded one
1ca7865c245d engine: refactor code to replace stores in separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46219
diff changeset
   402
1ca7865c245d engine: refactor code to replace stores in separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46219
diff changeset
   403
    Arguments:
1ca7865c245d engine: refactor code to replace stores in separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46219
diff changeset
   404
      currentrepo: repo object of current repository
1ca7865c245d engine: refactor code to replace stores in separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46219
diff changeset
   405
      upgradedrepo: repo object of the upgraded data
1ca7865c245d engine: refactor code to replace stores in separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46219
diff changeset
   406
      backupvfs: vfs object for the backup path
1ca7865c245d engine: refactor code to replace stores in separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46219
diff changeset
   407
      upgrade_op: upgrade operation object
1ca7865c245d engine: refactor code to replace stores in separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46219
diff changeset
   408
                  to be used to decide what all is upgraded
1ca7865c245d engine: refactor code to replace stores in separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46219
diff changeset
   409
    """
1ca7865c245d engine: refactor code to replace stores in separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46219
diff changeset
   410
    # TODO: don't blindly rename everything in store
1ca7865c245d engine: refactor code to replace stores in separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46219
diff changeset
   411
    # There can be upgrades where store is not touched at all
46375
2e8a844d0ae0 upgrade: don't create store backup if `--no-backup` is passed
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46252
diff changeset
   412
    if upgrade_op.backup_store:
2e8a844d0ae0 upgrade: don't create store backup if `--no-backup` is passed
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46252
diff changeset
   413
        util.rename(currentrepo.spath, backupvfs.join(b'store'))
2e8a844d0ae0 upgrade: don't create store backup if `--no-backup` is passed
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46252
diff changeset
   414
    else:
2e8a844d0ae0 upgrade: don't create store backup if `--no-backup` is passed
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46252
diff changeset
   415
        currentrepo.vfs.rmtree(b'store', forcibly=True)
46220
1ca7865c245d engine: refactor code to replace stores in separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46219
diff changeset
   416
    util.rename(upgradedrepo.spath, currentrepo.spath)
1ca7865c245d engine: refactor code to replace stores in separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46219
diff changeset
   417
1ca7865c245d engine: refactor code to replace stores in separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46219
diff changeset
   418
46219
481d9aed669c engine: make hook point for extension a public function
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46218
diff changeset
   419
def finishdatamigration(ui, srcrepo, dstrepo, requirements):
30780
2603d04889e1 repair: copy non-revlog store files during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30779
diff changeset
   420
    """Hook point for extensions to perform additional actions during upgrade.
2603d04889e1 repair: copy non-revlog store files during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30779
diff changeset
   421
2603d04889e1 repair: copy non-revlog store files during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30779
diff changeset
   422
    This function is called after revlogs and store files have been copied but
2603d04889e1 repair: copy non-revlog store files during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30779
diff changeset
   423
    before the new store is swapped into the original location.
2603d04889e1 repair: copy non-revlog store files during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30779
diff changeset
   424
    """
2603d04889e1 repair: copy non-revlog store files during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30779
diff changeset
   425
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43031
diff changeset
   426
46056
c407513a44a3 upgrade: start moving the "to be happening" data in a dedicated object
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46046
diff changeset
   427
def upgrade(ui, srcrepo, dstrepo, upgrade_op):
30777
7de7afd8bdd9 repair: begin implementation of in-place upgrading
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30776
diff changeset
   428
    """Do the low-level work of upgrading a repository.
7de7afd8bdd9 repair: begin implementation of in-place upgrading
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30776
diff changeset
   429
7de7afd8bdd9 repair: begin implementation of in-place upgrading
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30776
diff changeset
   430
    The upgrade is effectively performed as a copy between a source
7de7afd8bdd9 repair: begin implementation of in-place upgrading
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30776
diff changeset
   431
    repository and a temporary destination repository.
7de7afd8bdd9 repair: begin implementation of in-place upgrading
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30776
diff changeset
   432
7de7afd8bdd9 repair: begin implementation of in-place upgrading
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30776
diff changeset
   433
    The source repository is unmodified for as long as possible so the
7de7afd8bdd9 repair: begin implementation of in-place upgrading
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30776
diff changeset
   434
    upgrade can abort at any time without causing loss of service for
7de7afd8bdd9 repair: begin implementation of in-place upgrading
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30776
diff changeset
   435
    readers and without corrupting the source repository.
7de7afd8bdd9 repair: begin implementation of in-place upgrading
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30776
diff changeset
   436
    """
7de7afd8bdd9 repair: begin implementation of in-place upgrading
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30776
diff changeset
   437
    assert srcrepo.currentwlock()
7de7afd8bdd9 repair: begin implementation of in-place upgrading
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30776
diff changeset
   438
    assert dstrepo.currentwlock()
46375
2e8a844d0ae0 upgrade: don't create store backup if `--no-backup` is passed
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46252
diff changeset
   439
    backuppath = None
2e8a844d0ae0 upgrade: don't create store backup if `--no-backup` is passed
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46252
diff changeset
   440
    backupvfs = None
30777
7de7afd8bdd9 repair: begin implementation of in-place upgrading
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30776
diff changeset
   441
44798
e295ba238bd8 upgrade: support the --quiet flag
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 44797
diff changeset
   442
    ui.status(
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43031
diff changeset
   443
        _(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   444
            b'(it is safe to interrupt this process any time before '
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
   445
            b'data migration completes)\n'
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43031
diff changeset
   446
        )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43031
diff changeset
   447
    )
30779
38aa1ca97b6a repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30777
diff changeset
   448
47320
a43d256c041a dirstate-v2: Add `hg debugupgraderepo` command support
Simon Sapin <simon.sapin@octobus.net>
parents: 47149
diff changeset
   449
    if upgrade_actions.dirstatev2 in upgrade_op.upgrade_actions:
a43d256c041a dirstate-v2: Add `hg debugupgraderepo` command support
Simon Sapin <simon.sapin@octobus.net>
parents: 47149
diff changeset
   450
        ui.status(_(b'upgrading to dirstate-v2 from v1\n'))
a43d256c041a dirstate-v2: Add `hg debugupgraderepo` command support
Simon Sapin <simon.sapin@octobus.net>
parents: 47149
diff changeset
   451
        upgrade_dirstate(ui, srcrepo, upgrade_op, b'v1', b'v2')
a43d256c041a dirstate-v2: Add `hg debugupgraderepo` command support
Simon Sapin <simon.sapin@octobus.net>
parents: 47149
diff changeset
   452
        upgrade_op.upgrade_actions.remove(upgrade_actions.dirstatev2)
a43d256c041a dirstate-v2: Add `hg debugupgraderepo` command support
Simon Sapin <simon.sapin@octobus.net>
parents: 47149
diff changeset
   453
a43d256c041a dirstate-v2: Add `hg debugupgraderepo` command support
Simon Sapin <simon.sapin@octobus.net>
parents: 47149
diff changeset
   454
    if upgrade_actions.dirstatev2 in upgrade_op.removed_actions:
a43d256c041a dirstate-v2: Add `hg debugupgraderepo` command support
Simon Sapin <simon.sapin@octobus.net>
parents: 47149
diff changeset
   455
        ui.status(_(b'downgrading from dirstate-v2 to v1\n'))
a43d256c041a dirstate-v2: Add `hg debugupgraderepo` command support
Simon Sapin <simon.sapin@octobus.net>
parents: 47149
diff changeset
   456
        upgrade_dirstate(ui, srcrepo, upgrade_op, b'v2', b'v1')
a43d256c041a dirstate-v2: Add `hg debugupgraderepo` command support
Simon Sapin <simon.sapin@octobus.net>
parents: 47149
diff changeset
   457
        upgrade_op.removed_actions.remove(upgrade_actions.dirstatev2)
a43d256c041a dirstate-v2: Add `hg debugupgraderepo` command support
Simon Sapin <simon.sapin@octobus.net>
parents: 47149
diff changeset
   458
48790
5ba24e886cec tracked-key: make it possible to upgrade to and downgrade from the feature
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48437
diff changeset
   459
    if upgrade_actions.dirstatetrackedkey in upgrade_op.upgrade_actions:
48793
6e559391f96e tracked-key: remove the dual write and rename to tracked-hint
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48790
diff changeset
   460
        ui.status(_(b'create dirstate-tracked-hint file\n'))
6e559391f96e tracked-key: remove the dual write and rename to tracked-hint
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48790
diff changeset
   461
        upgrade_tracked_hint(ui, srcrepo, upgrade_op, add=True)
48790
5ba24e886cec tracked-key: make it possible to upgrade to and downgrade from the feature
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48437
diff changeset
   462
        upgrade_op.upgrade_actions.remove(upgrade_actions.dirstatetrackedkey)
5ba24e886cec tracked-key: make it possible to upgrade to and downgrade from the feature
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48437
diff changeset
   463
    elif upgrade_actions.dirstatetrackedkey in upgrade_op.removed_actions:
48793
6e559391f96e tracked-key: remove the dual write and rename to tracked-hint
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48790
diff changeset
   464
        ui.status(_(b'remove dirstate-tracked-hint file\n'))
6e559391f96e tracked-key: remove the dual write and rename to tracked-hint
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48790
diff changeset
   465
        upgrade_tracked_hint(ui, srcrepo, upgrade_op, add=False)
48790
5ba24e886cec tracked-key: make it possible to upgrade to and downgrade from the feature
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48437
diff changeset
   466
        upgrade_op.removed_actions.remove(upgrade_actions.dirstatetrackedkey)
5ba24e886cec tracked-key: make it possible to upgrade to and downgrade from the feature
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48437
diff changeset
   467
47320
a43d256c041a dirstate-v2: Add `hg debugupgraderepo` command support
Simon Sapin <simon.sapin@octobus.net>
parents: 47149
diff changeset
   468
    if not (upgrade_op.upgrade_actions or upgrade_op.removed_actions):
a43d256c041a dirstate-v2: Add `hg debugupgraderepo` command support
Simon Sapin <simon.sapin@octobus.net>
parents: 47149
diff changeset
   469
        return
a43d256c041a dirstate-v2: Add `hg debugupgraderepo` command support
Simon Sapin <simon.sapin@octobus.net>
parents: 47149
diff changeset
   470
46467
45c3a263d5d1 engine: 'if not, else' -> 'if, else'
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46380
diff changeset
   471
    if upgrade_op.requirements_only:
45c3a263d5d1 engine: 'if not, else' -> 'if, else'
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46380
diff changeset
   472
        ui.status(_(b'upgrading repository requirements\n'))
45c3a263d5d1 engine: 'if not, else' -> 'if, else'
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46380
diff changeset
   473
        scmutil.writereporequirements(srcrepo, upgrade_op.new_requirements)
46472
98e39f04d60e upgrade: implement partial upgrade for upgrading persistent-nodemap
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46467
diff changeset
   474
    # if there is only one action and that is persistent nodemap upgrade
98e39f04d60e upgrade: implement partial upgrade for upgrading persistent-nodemap
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46467
diff changeset
   475
    # directly write the nodemap file and update requirements instead of going
98e39f04d60e upgrade: implement partial upgrade for upgrading persistent-nodemap
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46467
diff changeset
   476
    # through the whole cloning process
98e39f04d60e upgrade: implement partial upgrade for upgrading persistent-nodemap
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46467
diff changeset
   477
    elif (
98e39f04d60e upgrade: implement partial upgrade for upgrading persistent-nodemap
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46467
diff changeset
   478
        len(upgrade_op.upgrade_actions) == 1
47320
a43d256c041a dirstate-v2: Add `hg debugupgraderepo` command support
Simon Sapin <simon.sapin@octobus.net>
parents: 47149
diff changeset
   479
        and b'persistent-nodemap' in upgrade_op.upgrade_actions_names
46472
98e39f04d60e upgrade: implement partial upgrade for upgrading persistent-nodemap
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46467
diff changeset
   480
        and not upgrade_op.removed_actions
98e39f04d60e upgrade: implement partial upgrade for upgrading persistent-nodemap
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46467
diff changeset
   481
    ):
98e39f04d60e upgrade: implement partial upgrade for upgrading persistent-nodemap
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46467
diff changeset
   482
        ui.status(
98e39f04d60e upgrade: implement partial upgrade for upgrading persistent-nodemap
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46467
diff changeset
   483
            _(b'upgrading repository to use persistent nodemap feature\n')
98e39f04d60e upgrade: implement partial upgrade for upgrading persistent-nodemap
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46467
diff changeset
   484
        )
98e39f04d60e upgrade: implement partial upgrade for upgrading persistent-nodemap
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46467
diff changeset
   485
        with srcrepo.transaction(b'upgrade') as tr:
98e39f04d60e upgrade: implement partial upgrade for upgrading persistent-nodemap
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46467
diff changeset
   486
            unfi = srcrepo.unfiltered()
98e39f04d60e upgrade: implement partial upgrade for upgrading persistent-nodemap
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46467
diff changeset
   487
            cl = unfi.changelog
98e39f04d60e upgrade: implement partial upgrade for upgrading persistent-nodemap
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46467
diff changeset
   488
            nodemap.persist_nodemap(tr, cl, force=True)
46525
636853347e14 upgrade: write nodemap for manifests too
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46472
diff changeset
   489
            # we want to directly operate on the underlying revlog to force
636853347e14 upgrade: write nodemap for manifests too
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46472
diff changeset
   490
            # create a nodemap file. This is fine since this is upgrade code
636853347e14 upgrade: write nodemap for manifests too
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46472
diff changeset
   491
            # and it heavily relies on repository being revlog based
636853347e14 upgrade: write nodemap for manifests too
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46472
diff changeset
   492
            # hence accessing private attributes can be justified
636853347e14 upgrade: write nodemap for manifests too
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46472
diff changeset
   493
            nodemap.persist_nodemap(
636853347e14 upgrade: write nodemap for manifests too
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46472
diff changeset
   494
                tr, unfi.manifestlog._rootstore._revlog, force=True
636853347e14 upgrade: write nodemap for manifests too
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46472
diff changeset
   495
            )
46472
98e39f04d60e upgrade: implement partial upgrade for upgrading persistent-nodemap
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46467
diff changeset
   496
        scmutil.writereporequirements(srcrepo, upgrade_op.new_requirements)
46526
67b5fafd3a46 upgrade: speed up when we have only nodemap to downgrade
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46525
diff changeset
   497
    elif (
67b5fafd3a46 upgrade: speed up when we have only nodemap to downgrade
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46525
diff changeset
   498
        len(upgrade_op.removed_actions) == 1
67b5fafd3a46 upgrade: speed up when we have only nodemap to downgrade
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46525
diff changeset
   499
        and [
67b5fafd3a46 upgrade: speed up when we have only nodemap to downgrade
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46525
diff changeset
   500
            x
67b5fafd3a46 upgrade: speed up when we have only nodemap to downgrade
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46525
diff changeset
   501
            for x in upgrade_op.removed_actions
67b5fafd3a46 upgrade: speed up when we have only nodemap to downgrade
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46525
diff changeset
   502
            if x.name == b'persistent-nodemap'
67b5fafd3a46 upgrade: speed up when we have only nodemap to downgrade
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46525
diff changeset
   503
        ]
67b5fafd3a46 upgrade: speed up when we have only nodemap to downgrade
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46525
diff changeset
   504
        and not upgrade_op.upgrade_actions
67b5fafd3a46 upgrade: speed up when we have only nodemap to downgrade
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46525
diff changeset
   505
    ):
67b5fafd3a46 upgrade: speed up when we have only nodemap to downgrade
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46525
diff changeset
   506
        ui.status(
67b5fafd3a46 upgrade: speed up when we have only nodemap to downgrade
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46525
diff changeset
   507
            _(b'downgrading repository to not use persistent nodemap feature\n')
67b5fafd3a46 upgrade: speed up when we have only nodemap to downgrade
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46525
diff changeset
   508
        )
67b5fafd3a46 upgrade: speed up when we have only nodemap to downgrade
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46525
diff changeset
   509
        with srcrepo.transaction(b'upgrade') as tr:
67b5fafd3a46 upgrade: speed up when we have only nodemap to downgrade
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46525
diff changeset
   510
            unfi = srcrepo.unfiltered()
67b5fafd3a46 upgrade: speed up when we have only nodemap to downgrade
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46525
diff changeset
   511
            cl = unfi.changelog
67b5fafd3a46 upgrade: speed up when we have only nodemap to downgrade
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46525
diff changeset
   512
            nodemap.delete_nodemap(tr, srcrepo, cl)
67b5fafd3a46 upgrade: speed up when we have only nodemap to downgrade
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46525
diff changeset
   513
            # check comment 20 lines above for accessing private attributes
67b5fafd3a46 upgrade: speed up when we have only nodemap to downgrade
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46525
diff changeset
   514
            nodemap.delete_nodemap(
67b5fafd3a46 upgrade: speed up when we have only nodemap to downgrade
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46525
diff changeset
   515
                tr, srcrepo, unfi.manifestlog._rootstore._revlog
67b5fafd3a46 upgrade: speed up when we have only nodemap to downgrade
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46525
diff changeset
   516
            )
67b5fafd3a46 upgrade: speed up when we have only nodemap to downgrade
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46525
diff changeset
   517
        scmutil.writereporequirements(srcrepo, upgrade_op.new_requirements)
46467
45c3a263d5d1 engine: 'if not, else' -> 'if, else'
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46380
diff changeset
   518
    else:
46379
ee9002b99595 engine: add `if True` to prepare for next patch
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46375
diff changeset
   519
        with dstrepo.transaction(b'upgrade') as tr:
ee9002b99595 engine: add `if True` to prepare for next patch
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46375
diff changeset
   520
            _clonerevlogs(
ee9002b99595 engine: add `if True` to prepare for next patch
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46375
diff changeset
   521
                ui,
ee9002b99595 engine: add `if True` to prepare for next patch
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46375
diff changeset
   522
                srcrepo,
ee9002b99595 engine: add `if True` to prepare for next patch
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46375
diff changeset
   523
                dstrepo,
ee9002b99595 engine: add `if True` to prepare for next patch
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46375
diff changeset
   524
                tr,
ee9002b99595 engine: add `if True` to prepare for next patch
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46375
diff changeset
   525
                upgrade_op,
ee9002b99595 engine: add `if True` to prepare for next patch
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46375
diff changeset
   526
            )
ee9002b99595 engine: add `if True` to prepare for next patch
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46375
diff changeset
   527
ee9002b99595 engine: add `if True` to prepare for next patch
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46375
diff changeset
   528
        # Now copy other files in the store directory.
ee9002b99595 engine: add `if True` to prepare for next patch
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46375
diff changeset
   529
        for p in _files_to_copy_post_revlog_clone(srcrepo):
ee9002b99595 engine: add `if True` to prepare for next patch
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46375
diff changeset
   530
            srcrepo.ui.status(_(b'copying %s\n') % p)
ee9002b99595 engine: add `if True` to prepare for next patch
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46375
diff changeset
   531
            src = srcrepo.store.rawvfs.join(p)
ee9002b99595 engine: add `if True` to prepare for next patch
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46375
diff changeset
   532
            dst = dstrepo.store.rawvfs.join(p)
ee9002b99595 engine: add `if True` to prepare for next patch
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46375
diff changeset
   533
            util.copyfile(src, dst, copystat=True)
ee9002b99595 engine: add `if True` to prepare for next patch
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46375
diff changeset
   534
ee9002b99595 engine: add `if True` to prepare for next patch
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46375
diff changeset
   535
        finishdatamigration(ui, srcrepo, dstrepo, requirements)
ee9002b99595 engine: add `if True` to prepare for next patch
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46375
diff changeset
   536
ee9002b99595 engine: add `if True` to prepare for next patch
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46375
diff changeset
   537
        ui.status(_(b'data fully upgraded in a temporary repository\n'))
30779
38aa1ca97b6a repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30777
diff changeset
   538
46379
ee9002b99595 engine: add `if True` to prepare for next patch
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46375
diff changeset
   539
        if upgrade_op.backup_store:
ee9002b99595 engine: add `if True` to prepare for next patch
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46375
diff changeset
   540
            backuppath = pycompat.mkdtemp(
ee9002b99595 engine: add `if True` to prepare for next patch
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46375
diff changeset
   541
                prefix=b'upgradebackup.', dir=srcrepo.path
ee9002b99595 engine: add `if True` to prepare for next patch
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46375
diff changeset
   542
            )
ee9002b99595 engine: add `if True` to prepare for next patch
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46375
diff changeset
   543
            backupvfs = vfsmod.vfs(backuppath)
30780
2603d04889e1 repair: copy non-revlog store files during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30779
diff changeset
   544
46379
ee9002b99595 engine: add `if True` to prepare for next patch
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46375
diff changeset
   545
            # Make a backup of requires file first, as it is the first to be modified.
ee9002b99595 engine: add `if True` to prepare for next patch
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46375
diff changeset
   546
            util.copyfile(
ee9002b99595 engine: add `if True` to prepare for next patch
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46375
diff changeset
   547
                srcrepo.vfs.join(b'requires'), backupvfs.join(b'requires')
ee9002b99595 engine: add `if True` to prepare for next patch
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46375
diff changeset
   548
            )
30779
38aa1ca97b6a repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30777
diff changeset
   549
46379
ee9002b99595 engine: add `if True` to prepare for next patch
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46375
diff changeset
   550
        # We install an arbitrary requirement that clients must not support
ee9002b99595 engine: add `if True` to prepare for next patch
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46375
diff changeset
   551
        # as a mechanism to lock out new clients during the data swap. This is
ee9002b99595 engine: add `if True` to prepare for next patch
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46375
diff changeset
   552
        # better than allowing a client to continue while the repository is in
ee9002b99595 engine: add `if True` to prepare for next patch
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46375
diff changeset
   553
        # an inconsistent state.
ee9002b99595 engine: add `if True` to prepare for next patch
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46375
diff changeset
   554
        ui.status(
ee9002b99595 engine: add `if True` to prepare for next patch
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46375
diff changeset
   555
            _(
ee9002b99595 engine: add `if True` to prepare for next patch
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46375
diff changeset
   556
                b'marking source repository as being upgraded; clients will be '
ee9002b99595 engine: add `if True` to prepare for next patch
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46375
diff changeset
   557
                b'unable to read from repository\n'
ee9002b99595 engine: add `if True` to prepare for next patch
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46375
diff changeset
   558
            )
46375
2e8a844d0ae0 upgrade: don't create store backup if `--no-backup` is passed
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46252
diff changeset
   559
        )
46379
ee9002b99595 engine: add `if True` to prepare for next patch
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46375
diff changeset
   560
        scmutil.writereporequirements(
ee9002b99595 engine: add `if True` to prepare for next patch
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46375
diff changeset
   561
            srcrepo, srcrepo.requirements | {b'upgradeinprogress'}
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43031
diff changeset
   562
        )
30779
38aa1ca97b6a repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30777
diff changeset
   563
46379
ee9002b99595 engine: add `if True` to prepare for next patch
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46375
diff changeset
   564
        ui.status(_(b'starting in-place swap of repository data\n'))
ee9002b99595 engine: add `if True` to prepare for next patch
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46375
diff changeset
   565
        if upgrade_op.backup_store:
ee9002b99595 engine: add `if True` to prepare for next patch
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46375
diff changeset
   566
            ui.status(
ee9002b99595 engine: add `if True` to prepare for next patch
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46375
diff changeset
   567
                _(b'replaced files will be backed up at %s\n') % backuppath
ee9002b99595 engine: add `if True` to prepare for next patch
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46375
diff changeset
   568
            )
30777
7de7afd8bdd9 repair: begin implementation of in-place upgrading
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30776
diff changeset
   569
46379
ee9002b99595 engine: add `if True` to prepare for next patch
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46375
diff changeset
   570
        # Now swap in the new store directory. Doing it as a rename should make
ee9002b99595 engine: add `if True` to prepare for next patch
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46375
diff changeset
   571
        # the operation nearly instantaneous and atomic (at least in well-behaved
ee9002b99595 engine: add `if True` to prepare for next patch
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46375
diff changeset
   572
        # environments).
ee9002b99595 engine: add `if True` to prepare for next patch
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46375
diff changeset
   573
        ui.status(_(b'replacing store...\n'))
ee9002b99595 engine: add `if True` to prepare for next patch
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46375
diff changeset
   574
        tstart = util.timer()
ee9002b99595 engine: add `if True` to prepare for next patch
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46375
diff changeset
   575
        _replacestores(srcrepo, dstrepo, backupvfs, upgrade_op)
ee9002b99595 engine: add `if True` to prepare for next patch
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46375
diff changeset
   576
        elapsed = util.timer() - tstart
ee9002b99595 engine: add `if True` to prepare for next patch
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46375
diff changeset
   577
        ui.status(
ee9002b99595 engine: add `if True` to prepare for next patch
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46375
diff changeset
   578
            _(
ee9002b99595 engine: add `if True` to prepare for next patch
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46375
diff changeset
   579
                b'store replacement complete; repository was inconsistent for '
ee9002b99595 engine: add `if True` to prepare for next patch
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46375
diff changeset
   580
                b'%0.1fs\n'
ee9002b99595 engine: add `if True` to prepare for next patch
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46375
diff changeset
   581
            )
ee9002b99595 engine: add `if True` to prepare for next patch
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46375
diff changeset
   582
            % elapsed
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43031
diff changeset
   583
        )
30777
7de7afd8bdd9 repair: begin implementation of in-place upgrading
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30776
diff changeset
   584
46379
ee9002b99595 engine: add `if True` to prepare for next patch
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46375
diff changeset
   585
        # We first write the requirements file. Any new requirements will lock
ee9002b99595 engine: add `if True` to prepare for next patch
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46375
diff changeset
   586
        # out legacy clients.
ee9002b99595 engine: add `if True` to prepare for next patch
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46375
diff changeset
   587
        ui.status(
ee9002b99595 engine: add `if True` to prepare for next patch
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46375
diff changeset
   588
            _(
ee9002b99595 engine: add `if True` to prepare for next patch
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46375
diff changeset
   589
                b'finalizing requirements file and making repository readable '
ee9002b99595 engine: add `if True` to prepare for next patch
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46375
diff changeset
   590
                b'again\n'
ee9002b99595 engine: add `if True` to prepare for next patch
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46375
diff changeset
   591
            )
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43031
diff changeset
   592
        )
46379
ee9002b99595 engine: add `if True` to prepare for next patch
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46375
diff changeset
   593
        scmutil.writereporequirements(srcrepo, upgrade_op.new_requirements)
30777
7de7afd8bdd9 repair: begin implementation of in-place upgrading
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30776
diff changeset
   594
46379
ee9002b99595 engine: add `if True` to prepare for next patch
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46375
diff changeset
   595
        if upgrade_op.backup_store:
ee9002b99595 engine: add `if True` to prepare for next patch
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46375
diff changeset
   596
            # The lock file from the old store won't be removed because nothing has a
ee9002b99595 engine: add `if True` to prepare for next patch
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46375
diff changeset
   597
            # reference to its new location. So clean it up manually. Alternatively, we
ee9002b99595 engine: add `if True` to prepare for next patch
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46375
diff changeset
   598
            # could update srcrepo.svfs and other variables to point to the new
ee9002b99595 engine: add `if True` to prepare for next patch
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46375
diff changeset
   599
            # location. This is simpler.
46794
e2f7b2695ba1 merge with stable
Matt Harbison <matt_harbison@yahoo.com>
parents: 46780 46695
diff changeset
   600
            assert backupvfs is not None  # help pytype
46379
ee9002b99595 engine: add `if True` to prepare for next patch
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46375
diff changeset
   601
            backupvfs.unlink(b'store/lock')
30781
f2c069bf78ee repair: clean up stale lock file from store backup
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30780
diff changeset
   602
30777
7de7afd8bdd9 repair: begin implementation of in-place upgrading
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30776
diff changeset
   603
    return backuppath
47320
a43d256c041a dirstate-v2: Add `hg debugupgraderepo` command support
Simon Sapin <simon.sapin@octobus.net>
parents: 47149
diff changeset
   604
a43d256c041a dirstate-v2: Add `hg debugupgraderepo` command support
Simon Sapin <simon.sapin@octobus.net>
parents: 47149
diff changeset
   605
a43d256c041a dirstate-v2: Add `hg debugupgraderepo` command support
Simon Sapin <simon.sapin@octobus.net>
parents: 47149
diff changeset
   606
def upgrade_dirstate(ui, srcrepo, upgrade_op, old, new):
a43d256c041a dirstate-v2: Add `hg debugupgraderepo` command support
Simon Sapin <simon.sapin@octobus.net>
parents: 47149
diff changeset
   607
    if upgrade_op.backup_store:
a43d256c041a dirstate-v2: Add `hg debugupgraderepo` command support
Simon Sapin <simon.sapin@octobus.net>
parents: 47149
diff changeset
   608
        backuppath = pycompat.mkdtemp(
a43d256c041a dirstate-v2: Add `hg debugupgraderepo` command support
Simon Sapin <simon.sapin@octobus.net>
parents: 47149
diff changeset
   609
            prefix=b'upgradebackup.', dir=srcrepo.path
a43d256c041a dirstate-v2: Add `hg debugupgraderepo` command support
Simon Sapin <simon.sapin@octobus.net>
parents: 47149
diff changeset
   610
        )
a43d256c041a dirstate-v2: Add `hg debugupgraderepo` command support
Simon Sapin <simon.sapin@octobus.net>
parents: 47149
diff changeset
   611
        ui.status(_(b'replaced files will be backed up at %s\n') % backuppath)
a43d256c041a dirstate-v2: Add `hg debugupgraderepo` command support
Simon Sapin <simon.sapin@octobus.net>
parents: 47149
diff changeset
   612
        backupvfs = vfsmod.vfs(backuppath)
a43d256c041a dirstate-v2: Add `hg debugupgraderepo` command support
Simon Sapin <simon.sapin@octobus.net>
parents: 47149
diff changeset
   613
        util.copyfile(
a43d256c041a dirstate-v2: Add `hg debugupgraderepo` command support
Simon Sapin <simon.sapin@octobus.net>
parents: 47149
diff changeset
   614
            srcrepo.vfs.join(b'requires'), backupvfs.join(b'requires')
a43d256c041a dirstate-v2: Add `hg debugupgraderepo` command support
Simon Sapin <simon.sapin@octobus.net>
parents: 47149
diff changeset
   615
        )
48437
6e4999cb085e dirstate-v2: fix upgrade on an empty repository
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48068
diff changeset
   616
        try:
6e4999cb085e dirstate-v2: fix upgrade on an empty repository
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48068
diff changeset
   617
            util.copyfile(
6e4999cb085e dirstate-v2: fix upgrade on an empty repository
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48068
diff changeset
   618
                srcrepo.vfs.join(b'dirstate'), backupvfs.join(b'dirstate')
6e4999cb085e dirstate-v2: fix upgrade on an empty repository
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48068
diff changeset
   619
            )
49306
2e726c934fcd py3: catch FileNotFoundError instead of checking errno == ENOENT
Manuel Jacob <me@manueljacob.de>
parents: 48875
diff changeset
   620
        except FileNotFoundError:
48437
6e4999cb085e dirstate-v2: fix upgrade on an empty repository
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48068
diff changeset
   621
            # The dirstate does not exist on an empty repo or a repo with no
6e4999cb085e dirstate-v2: fix upgrade on an empty repository
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48068
diff changeset
   622
            # revision checked out
49306
2e726c934fcd py3: catch FileNotFoundError instead of checking errno == ENOENT
Manuel Jacob <me@manueljacob.de>
parents: 48875
diff changeset
   623
            pass
47320
a43d256c041a dirstate-v2: Add `hg debugupgraderepo` command support
Simon Sapin <simon.sapin@octobus.net>
parents: 47149
diff changeset
   624
a43d256c041a dirstate-v2: Add `hg debugupgraderepo` command support
Simon Sapin <simon.sapin@octobus.net>
parents: 47149
diff changeset
   625
    assert srcrepo.dirstate._use_dirstate_v2 == (old == b'v2')
50363
b4b1791f36e4 repo-upgrade: write new requirement before upgrading the dirstate
Rapha?l Gom?s <rgomes@octobus.net>
parents: 49552
diff changeset
   626
    use_v2 = new == b'v2'
b4b1791f36e4 repo-upgrade: write new requirement before upgrading the dirstate
Rapha?l Gom?s <rgomes@octobus.net>
parents: 49552
diff changeset
   627
    if use_v2:
b4b1791f36e4 repo-upgrade: write new requirement before upgrading the dirstate
Rapha?l Gom?s <rgomes@octobus.net>
parents: 49552
diff changeset
   628
        # Write the requirements *before* upgrading
b4b1791f36e4 repo-upgrade: write new requirement before upgrading the dirstate
Rapha?l Gom?s <rgomes@octobus.net>
parents: 49552
diff changeset
   629
        scmutil.writereporequirements(srcrepo, upgrade_op.new_requirements)
b4b1791f36e4 repo-upgrade: write new requirement before upgrading the dirstate
Rapha?l Gom?s <rgomes@octobus.net>
parents: 49552
diff changeset
   630
47320
a43d256c041a dirstate-v2: Add `hg debugupgraderepo` command support
Simon Sapin <simon.sapin@octobus.net>
parents: 47149
diff changeset
   631
    srcrepo.dirstate._map.preload()
50363
b4b1791f36e4 repo-upgrade: write new requirement before upgrading the dirstate
Rapha?l Gom?s <rgomes@octobus.net>
parents: 49552
diff changeset
   632
    srcrepo.dirstate._use_dirstate_v2 = use_v2
b4b1791f36e4 repo-upgrade: write new requirement before upgrading the dirstate
Rapha?l Gom?s <rgomes@octobus.net>
parents: 49552
diff changeset
   633
    srcrepo.dirstate._map._use_dirstate_v2 = use_v2
47320
a43d256c041a dirstate-v2: Add `hg debugupgraderepo` command support
Simon Sapin <simon.sapin@octobus.net>
parents: 47149
diff changeset
   634
    srcrepo.dirstate._dirty = True
48437
6e4999cb085e dirstate-v2: fix upgrade on an empty repository
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48068
diff changeset
   635
    try:
6e4999cb085e dirstate-v2: fix upgrade on an empty repository
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48068
diff changeset
   636
        srcrepo.vfs.unlink(b'dirstate')
49306
2e726c934fcd py3: catch FileNotFoundError instead of checking errno == ENOENT
Manuel Jacob <me@manueljacob.de>
parents: 48875
diff changeset
   637
    except FileNotFoundError:
48437
6e4999cb085e dirstate-v2: fix upgrade on an empty repository
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48068
diff changeset
   638
        # The dirstate does not exist on an empty repo or a repo with no
6e4999cb085e dirstate-v2: fix upgrade on an empty repository
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48068
diff changeset
   639
        # revision checked out
49306
2e726c934fcd py3: catch FileNotFoundError instead of checking errno == ENOENT
Manuel Jacob <me@manueljacob.de>
parents: 48875
diff changeset
   640
        pass
48437
6e4999cb085e dirstate-v2: fix upgrade on an empty repository
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48068
diff changeset
   641
47320
a43d256c041a dirstate-v2: Add `hg debugupgraderepo` command support
Simon Sapin <simon.sapin@octobus.net>
parents: 47149
diff changeset
   642
    srcrepo.dirstate.write(None)
50363
b4b1791f36e4 repo-upgrade: write new requirement before upgrading the dirstate
Rapha?l Gom?s <rgomes@octobus.net>
parents: 49552
diff changeset
   643
    if not use_v2:
b4b1791f36e4 repo-upgrade: write new requirement before upgrading the dirstate
Rapha?l Gom?s <rgomes@octobus.net>
parents: 49552
diff changeset
   644
        # Remove the v2 requirement *after* downgrading
b4b1791f36e4 repo-upgrade: write new requirement before upgrading the dirstate
Rapha?l Gom?s <rgomes@octobus.net>
parents: 49552
diff changeset
   645
        scmutil.writereporequirements(srcrepo, upgrade_op.new_requirements)
48790
5ba24e886cec tracked-key: make it possible to upgrade to and downgrade from the feature
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48437
diff changeset
   646
5ba24e886cec tracked-key: make it possible to upgrade to and downgrade from the feature
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48437
diff changeset
   647
48793
6e559391f96e tracked-key: remove the dual write and rename to tracked-hint
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48790
diff changeset
   648
def upgrade_tracked_hint(ui, srcrepo, upgrade_op, add):
48790
5ba24e886cec tracked-key: make it possible to upgrade to and downgrade from the feature
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48437
diff changeset
   649
    if add:
48793
6e559391f96e tracked-key: remove the dual write and rename to tracked-hint
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48790
diff changeset
   650
        srcrepo.dirstate._use_tracked_hint = True
48790
5ba24e886cec tracked-key: make it possible to upgrade to and downgrade from the feature
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48437
diff changeset
   651
        srcrepo.dirstate._dirty = True
5ba24e886cec tracked-key: make it possible to upgrade to and downgrade from the feature
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48437
diff changeset
   652
        srcrepo.dirstate._dirty_tracked_set = True
5ba24e886cec tracked-key: make it possible to upgrade to and downgrade from the feature
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48437
diff changeset
   653
        srcrepo.dirstate.write(None)
5ba24e886cec tracked-key: make it possible to upgrade to and downgrade from the feature
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48437
diff changeset
   654
    if not add:
48793
6e559391f96e tracked-key: remove the dual write and rename to tracked-hint
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48790
diff changeset
   655
        srcrepo.dirstate.delete_tracked_hint()
48790
5ba24e886cec tracked-key: make it possible to upgrade to and downgrade from the feature
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48437
diff changeset
   656
5ba24e886cec tracked-key: make it possible to upgrade to and downgrade from the feature
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48437
diff changeset
   657
    scmutil.writereporequirements(srcrepo, upgrade_op.new_requirements)