Mercurial > public > mercurial-scm > hg
annotate mercurial/upgrade_utils/engine.py @ 48068:bf8837e3d7ce
dirstate: Remove the flat Rust DirstateMap implementation
Before this changeset we had two Rust implementations of `DirstateMap`.
This removes the "flat" DirstateMap so that the "tree" DirstateMap is always
used when Rust enabled. This simplifies the code a lot, and will enable
(in the next changeset) further removal of a trait abstraction.
This is a performance regression when:
* Rust is enabled, and
* The repository uses the legacy dirstate-v1?file format, and
* For `hg status`, unknown files are not listed (such as with `-mard`)
The regression is about 100 milliseconds for `hg status -mard` on a
semi-large repository (mozilla-central), from ~320ms to ~420ms.
We deem this to be small enough to be worth it.
The new dirstate-v2 is still experimental at this point, but we aim to
stabilize it (though not yet enable it by default for new repositories)
in Mercurial 6.0. Eventually, upgrating repositories to dirsate-v2 will
eliminate this regression (and enable other performance improvements).
# Background
The flat DirstateMap was introduced with the first Rust implementation of the
status algorithm. It works similarly to the previous Python + C one, with a
single `HashMap` that associates file paths to a `DirstateEntry` (where Python
has a dict).
We later added the tree DirstateMap where the root of the tree contains nodes
for files and directories that are directly at the root of the repository,
and nodes for directories can contain child nodes representing the files and
directly that *they* contain directly. The shape of this tree mirrors that of
the working directory in the filesystem. This enables the status algorithm to
traverse this tree in tandem with traversing the filesystem tree, which in
turns enables a more efficient algorithm.
Furthermore, the new dirstate-v2 file format is also based on a tree of the
same shape. The tree DirstateMap can access a dirstate-v2 file without parsing
it: binary data in a single large (possibly memory-mapped) bytes buffer is
traversed on demand. This allows `DirstateMap` creation to take `O(1)` time.
(Mutation works by creating new in-memory nodes with copy-on-write semantics,
and serialization is append-mostly.)
The tradeoff is that for "legacy" repositories that use the dirstate-v1 file
format, parsing that file into a tree DirstateMap takes more time. Profiling
shows that this time is dominated by `HashMap`. For a dirstate containing `F`
files with an average `D` directory depth, the flat DirstateMap does parsing
in `O(F)` number of HashMap operations but the tree DirstateMap in `O(F ? D)`
operations, since each node has its own HashMap containing its child nodes.
This slower costs ~140ms on an old snapshot of mozilla-central, and ~80ms
on an old snapshot of the Netbeans repository.
The status algorithm is faster, but with `-mard` (when not listing unknown
files) it is typically not faster *enough* to compensate the slower parsing.
Both Rust implementations are always faster than the Python + C implementation
# Benchmark results
All benchmarks are run on changeset 98c0408324e6, with repositories that use
the dirstate-v1 file format, on a server with 4 CPU cores and 4 CPU threads
(no HyperThreading).
`hg status` benchmarks show wall clock times of the entire command as the
average and standard deviation of serveral runs, collected by
https://github.com/sharkdp/hyperfine and reformated.
Parsing benchmarks are wall clock time of the Rust function that converts a
bytes buffer of the dirstate file into the `DirstateMap` data structure as
used by the status algorithm. A single run each, collected by running
`hg status` this environment variable:
RUST_LOG=hg::dirstate::dirstate_map=trace,hg::dirstate_tree::dirstate_map=trace
Benchmark 1: Rust flat DirstateMap ? Rust tree DirstateMap
hg status
mozilla-clean 562.3 ms ? 2.0 ms ? 462.5 ms ? 0.6 ms 1.22 ? 0.00 times faster
mozilla-dirty 859.6 ms ? 2.2 ms ? 719.5 ms ? 3.2 ms 1.19 ? 0.01 times faster
mozilla-ignored 558.2 ms ? 3.0 ms ? 457.9 ms ? 2.9 ms 1.22 ? 0.01 times faster
mozilla-unknowns 859.4 ms ? 5.7 ms ? 716.0 ms ? 4.7 ms 1.20 ? 0.01 times faster
netbeans-clean 336.5 ms ? 0.9 ms ? 339.5 ms ? 0.4 ms 0.99 ? 0.00 times faster
netbeans-dirty 491.4 ms ? 1.6 ms ? 475.1 ms ? 1.2 ms 1.03 ? 0.00 times faster
netbeans-ignored 343.7 ms ? 1.0 ms ? 347.8 ms ? 0.4 ms 0.99 ? 0.00 times faster
netbeans-unknowns 484.3 ms ? 1.0 ms ? 466.0 ms ? 1.2 ms 1.04 ? 0.00 times faster
hg status -mard
mozilla-clean 317.3 ms ? 0.6 ms ? 422.5 ms ? 1.2 ms 0.75 ? 0.00 times faster
mozilla-dirty 315.4 ms ? 0.6 ms ? 417.7 ms ? 1.1 ms 0.76 ? 0.00 times faster
mozilla-ignored 314.6 ms ? 0.6 ms ? 417.4 ms ? 1.0 ms 0.75 ? 0.00 times faster
mozilla-unknowns 312.9 ms ? 0.9 ms ? 417.3 ms ? 1.6 ms 0.75 ? 0.00 times faster
netbeans-clean 212.0 ms ? 0.6 ms ? 283.6 ms ? 0.8 ms 0.75 ? 0.00 times faster
netbeans-dirty 211.4 ms ? 1.0 ms ? 283.4 ms ? 1.6 ms 0.75 ? 0.01 times faster
netbeans-ignored 211.4 ms ? 0.9 ms ? 283.9 ms ? 0.8 ms 0.74 ? 0.01 times faster
netbeans-unknowns 211.1 ms ? 0.6 ms ? 283.4 ms ? 1.0 ms 0.74 ? 0.00 times faster
Parsing
mozilla-clean 38.4ms ? 177.6ms
mozilla-dirty 38.8ms ? 177.0ms
mozilla-ignored 38.8ms ? 178.0ms
mozilla-unknowns 38.7ms ? 176.9ms
netbeans-clean 16.5ms ? 97.3ms
netbeans-dirty 16.5ms ? 98.4ms
netbeans-ignored 16.9ms ? 97.4ms
netbeans-unknowns 16.9ms ? 96.3ms
Benchmark 2: Python + C dirstatemap ? Rust tree DirstateMap
hg status
mozilla-clean 1261.0 ms ? 3.6 ms ? 461.1 ms ? 0.5 ms 2.73 ? 0.00 times faster
mozilla-dirty 2293.4 ms ? 9.1 ms ? 719.6 ms ? 3.6 ms 3.19 ? 0.01 times faster
mozilla-ignored 1240.4 ms ? 2.3 ms ? 457.7 ms ? 1.9 ms 2.71 ? 0.00 times faster
mozilla-unknowns 2283.3 ms ? 9.0 ms ? 719.7 ms ? 3.8 ms 3.17 ? 0.01 times faster
netbeans-clean 879.7 ms ? 3.5 ms ? 339.9 ms ? 0.5 ms 2.59 ? 0.00 times faster
netbeans-dirty 1257.3 ms ? 4.7 ms ? 474.6 ms ? 1.6 ms 2.65 ? 0.01 times faster
netbeans-ignored 943.9 ms ? 1.9 ms ? 347.3 ms ? 1.1 ms 2.72 ? 0.00 times faster
netbeans-unknowns 1188.1 ms ? 5.0 ms ? 465.2 ms ? 2.3 ms 2.55 ? 0.01 times faster
hg status -mard
mozilla-clean 903.2 ms ? 3.6 ms ? 423.4 ms ? 2.2 ms 2.13 ? 0.01 times faster
mozilla-dirty 884.6 ms ? 4.5 ms ? 417.3 ms ? 1.4 ms 2.12 ? 0.01 times faster
mozilla-ignored 881.9 ms ? 1.3 ms ? 417.3 ms ? 0.8 ms 2.11 ? 0.00 times faster
mozilla-unknowns 878.5 ms ? 1.9 ms ? 416.4 ms ? 0.9 ms 2.11 ? 0.00 times faster
netbeans-clean 434.9 ms ? 1.8 ms ? 284.0 ms ? 0.8 ms 1.53 ? 0.01 times faster
netbeans-dirty 434.1 ms ? 0.8 ms ? 283.1 ms ? 0.8 ms 1.53 ? 0.00 times faster
netbeans-ignored 431.7 ms ? 1.1 ms ? 283.6 ms ? 1.8 ms 1.52 ? 0.01 times faster
netbeans-unknowns 433.0 ms ? 1.3 ms ? 283.5 ms ? 0.7 ms 1.53 ? 0.00 times faster
Differential Revision: https://phab.mercurial-scm.org/D11516
author | Simon Sapin <simon.sapin@octobus.net> |
---|---|
date | Mon, 27 Sep 2021 12:09:15 +0200 |
parents | 2174f54aab18 |
children | 6e4999cb085e |
rev | line source |
---|---|
31894
9379689b6c10
upgrade: update the header comment
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31893
diff
changeset
|
1 # upgrade.py - functions for in place upgrade of Mercurial repository |
4702
18e91c9def0c
strip: move strip code to a new repair module
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
2 # |
31895
783b4c9bd5f5
upgrade: update the copyright statement
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31894
diff
changeset
|
3 # Copyright (c) 2016-present, Gregory Szorc |
4702
18e91c9def0c
strip: move strip code to a new repair module
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
4 # |
8225
46293a0c7e9f
updated license to be explicit about GPL version 2
Martin Geisler <mg@lazybytes.net>
parents:
8073
diff
changeset
|
5 # This software may be used and distributed according to the terms of the |
10263 | 6 # GNU General Public License version 2 or any later version. |
4702
18e91c9def0c
strip: move strip code to a new repair module
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
7 |
25970
d1419cfbd4f4
repair: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25874
diff
changeset
|
8 from __future__ import absolute_import |
d1419cfbd4f4
repair: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25874
diff
changeset
|
9 |
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 ..pycompat import getattr |
f105c49e89cd
upgrade: split actual upgrade code away from the main module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46035
diff
changeset
|
14 from .. import ( |
30779
38aa1ca97b6a
repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30777
diff
changeset
|
15 changelog, |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26425
diff
changeset
|
16 error, |
35344
8f3f8b8dbab7
upgrade: use actual filelog to convert filelog
Boris Feld <boris.feld@octobus.net>
parents:
35343
diff
changeset
|
17 filelog, |
30779
38aa1ca97b6a
repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30777
diff
changeset
|
18 manifest, |
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
|
19 metadata, |
38165
2ce60954b1b7
py3: wrap tempfile.mkdtemp() to use bytes path
Yuya Nishihara <yuya@tcha.org>
parents:
37444
diff
changeset
|
20 pycompat, |
45372
77b8588dd84e
requirements: introduce new requirements related module
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45371
diff
changeset
|
21 requirements, |
30777
7de7afd8bdd9
repair: begin implementation of in-place upgrading
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30776
diff
changeset
|
22 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
|
23 store, |
25970
d1419cfbd4f4
repair: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25874
diff
changeset
|
24 util, |
31232
254f98326eef
vfs: use 'vfs' module directly in 'mercurial.repair'
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30975
diff
changeset
|
25 vfs as vfsmod, |
25970
d1419cfbd4f4
repair: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25874
diff
changeset
|
26 ) |
47084
27f1191b1305
sidedata: replace sidedata upgrade mechanism with the new one
Rapha?l Gom?s <rgomes@octobus.net>
parents:
46897
diff
changeset
|
27 from ..revlogutils import ( |
27f1191b1305
sidedata: replace sidedata upgrade mechanism with the new one
Rapha?l Gom?s <rgomes@octobus.net>
parents:
46897
diff
changeset
|
28 constants as revlogconst, |
27f1191b1305
sidedata: replace sidedata upgrade mechanism with the new one
Rapha?l Gom?s <rgomes@octobus.net>
parents:
46897
diff
changeset
|
29 flagutil, |
27f1191b1305
sidedata: replace sidedata upgrade mechanism with the new one
Rapha?l Gom?s <rgomes@octobus.net>
parents:
46897
diff
changeset
|
30 nodemap, |
27f1191b1305
sidedata: replace sidedata upgrade mechanism with the new one
Rapha?l Gom?s <rgomes@octobus.net>
parents:
46897
diff
changeset
|
31 sidedata as sidedatamod, |
27f1191b1305
sidedata: replace sidedata upgrade mechanism with the new one
Rapha?l Gom?s <rgomes@octobus.net>
parents:
46897
diff
changeset
|
32 ) |
47320
a43d256c041a
dirstate-v2: Add `hg debugupgraderepo` command support
Simon Sapin <simon.sapin@octobus.net>
parents:
47149
diff
changeset
|
33 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
|
34 |
27f1191b1305
sidedata: replace sidedata upgrade mechanism with the new one
Rapha?l Gom?s <rgomes@octobus.net>
parents:
46897
diff
changeset
|
35 |
27f1191b1305
sidedata: replace sidedata upgrade mechanism with the new one
Rapha?l Gom?s <rgomes@octobus.net>
parents:
46897
diff
changeset
|
36 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
|
37 use_w = srcrepo.ui.configbool(b'experimental', b'worker.repository-upgrade') |
27f1191b1305
sidedata: replace sidedata upgrade mechanism with the new one
Rapha?l Gom?s <rgomes@octobus.net>
parents:
46897
diff
changeset
|
38 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
|
39 if not sequential: |
27f1191b1305
sidedata: replace sidedata upgrade mechanism with the new one
Rapha?l Gom?s <rgomes@octobus.net>
parents:
46897
diff
changeset
|
40 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
|
41 revlogconst.KIND_CHANGELOG, |
27f1191b1305
sidedata: replace sidedata upgrade mechanism with the new one
Rapha?l Gom?s <rgomes@octobus.net>
parents:
46897
diff
changeset
|
42 sidedatamod.SD_FILES, |
27f1191b1305
sidedata: replace sidedata upgrade mechanism with the new one
Rapha?l Gom?s <rgomes@octobus.net>
parents:
46897
diff
changeset
|
43 (sidedatamod.SD_FILES,), |
27f1191b1305
sidedata: replace sidedata upgrade mechanism with the new one
Rapha?l Gom?s <rgomes@octobus.net>
parents:
46897
diff
changeset
|
44 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
|
45 flagutil.REVIDX_HASCOPIESINFO, |
27f1191b1305
sidedata: replace sidedata upgrade mechanism with the new one
Rapha?l Gom?s <rgomes@octobus.net>
parents:
46897
diff
changeset
|
46 replace=True, |
27f1191b1305
sidedata: replace sidedata upgrade mechanism with the new one
Rapha?l Gom?s <rgomes@octobus.net>
parents:
46897
diff
changeset
|
47 ) |
47085
3aab2330b7d3
sidedata: move sidedata-related utils to the dedicated module
Rapha?l Gom?s <rgomes@octobus.net>
parents:
47084
diff
changeset
|
48 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
|
49 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43031
diff
changeset
|
50 |
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
|
51 def _revlogfrompath(repo, rl_type, path): |
30779
38aa1ca97b6a
repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30777
diff
changeset
|
52 """Obtain a revlog from a repo path. |
38aa1ca97b6a
repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30777
diff
changeset
|
53 |
38aa1ca97b6a
repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30777
diff
changeset
|
54 An instance of the appropriate class is returned. |
38aa1ca97b6a
repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30777
diff
changeset
|
55 """ |
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
|
56 if rl_type & store.FILEFLAGS_CHANGELOG: |
30779
38aa1ca97b6a
repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30777
diff
changeset
|
57 return changelog.changelog(repo.svfs) |
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
|
58 elif rl_type & store.FILEFLAGS_MANIFESTLOG: |
cf49e54ef965
upgrade: take advantage of the new information returned by `store.walk`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46895
diff
changeset
|
59 mandir = b'' |
cf49e54ef965
upgrade: take advantage of the new information returned by `store.walk`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46895
diff
changeset
|
60 if b'/' in path: |
cf49e54ef965
upgrade: take advantage of the new information returned by `store.walk`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46895
diff
changeset
|
61 mandir = path.rsplit(b'/', 1)[0] |
46780
6266d19556ad
node: introduce nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46526
diff
changeset
|
62 return manifest.manifestrevlog( |
6266d19556ad
node: introduce nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46526
diff
changeset
|
63 repo.nodeconstants, repo.svfs, tree=mandir |
6266d19556ad
node: introduce nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46526
diff
changeset
|
64 ) |
30779
38aa1ca97b6a
repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30777
diff
changeset
|
65 else: |
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
|
66 # drop the extension and the `data/` prefix |
47660
aa2296893168
upgrade: avoid a traceback in case of unrecognized revlog
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47659
diff
changeset
|
67 path_part = path.rsplit(b'.', 1)[0].split(b'/', 1) |
aa2296893168
upgrade: avoid a traceback in case of unrecognized revlog
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47659
diff
changeset
|
68 if len(path_part) < 2: |
47764
6b9ad3a0c348
upgrade: byteify an i18n message
Matt Harbison <matt_harbison@yahoo.com>
parents:
47674
diff
changeset
|
69 msg = _(b'cannot recognize revlog from filename: %s') |
47660
aa2296893168
upgrade: avoid a traceback in case of unrecognized revlog
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47659
diff
changeset
|
70 msg %= path |
aa2296893168
upgrade: avoid a traceback in case of unrecognized revlog
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47659
diff
changeset
|
71 raise error.Abort(msg) |
aa2296893168
upgrade: avoid a traceback in case of unrecognized revlog
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47659
diff
changeset
|
72 path = path_part[1] |
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
|
73 return filelog.filelog(repo.svfs, path) |
30779
38aa1ca97b6a
repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30777
diff
changeset
|
74 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43031
diff
changeset
|
75 |
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
|
76 def _copyrevlog(tr, destrepo, oldrl, rl_type, unencodedname): |
42691
5535a2201ff1
upgrade: introduce a _copyrevlog method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42690
diff
changeset
|
77 """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
|
78 |
5535a2201ff1
upgrade: introduce a _copyrevlog method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42690
diff
changeset
|
79 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
|
80 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
|
81 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
|
82 """ |
5535a2201ff1
upgrade: introduce a _copyrevlog method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42690
diff
changeset
|
83 oldrl = getattr(oldrl, '_revlog', oldrl) |
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
|
84 newrl = _revlogfrompath(destrepo, rl_type, unencodedname) |
42691
5535a2201ff1
upgrade: introduce a _copyrevlog method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42690
diff
changeset
|
85 newrl = getattr(newrl, '_revlog', newrl) |
5535a2201ff1
upgrade: introduce a _copyrevlog method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42690
diff
changeset
|
86 |
5535a2201ff1
upgrade: introduce a _copyrevlog method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42690
diff
changeset
|
87 oldvfs = oldrl.opener |
5535a2201ff1
upgrade: introduce a _copyrevlog method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42690
diff
changeset
|
88 newvfs = newrl.opener |
47148
a07d5cb03a85
revlog: rename `indexfile` to `_indexfile`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47128
diff
changeset
|
89 oldindex = oldvfs.join(oldrl._indexfile) |
a07d5cb03a85
revlog: rename `indexfile` to `_indexfile`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47128
diff
changeset
|
90 newindex = newvfs.join(newrl._indexfile) |
47149
396442cd7e6a
revlog: rename `datafile` to `datafile`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47148
diff
changeset
|
91 olddata = oldvfs.join(oldrl._datafile) |
396442cd7e6a
revlog: rename `datafile` to `datafile`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47148
diff
changeset
|
92 newdata = newvfs.join(newrl._datafile) |
42691
5535a2201ff1
upgrade: introduce a _copyrevlog method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42690
diff
changeset
|
93 |
47148
a07d5cb03a85
revlog: rename `indexfile` to `_indexfile`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47128
diff
changeset
|
94 with newvfs(newrl._indexfile, b'w'): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43031
diff
changeset
|
95 pass # create all the directories |
42691
5535a2201ff1
upgrade: introduce a _copyrevlog method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42690
diff
changeset
|
96 |
5535a2201ff1
upgrade: introduce a _copyrevlog method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42690
diff
changeset
|
97 util.copyfile(oldindex, newindex) |
47149
396442cd7e6a
revlog: rename `datafile` to `datafile`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47148
diff
changeset
|
98 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
|
99 if copydata: |
42691
5535a2201ff1
upgrade: introduce a _copyrevlog method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42690
diff
changeset
|
100 util.copyfile(olddata, newdata) |
5535a2201ff1
upgrade: introduce a _copyrevlog method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42690
diff
changeset
|
101 |
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
|
102 if rl_type & store.FILEFLAGS_FILELOG: |
42691
5535a2201ff1
upgrade: introduce a _copyrevlog method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42690
diff
changeset
|
103 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
|
104 if copydata: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
105 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
|
106 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43031
diff
changeset
|
107 |
46035
6c960b708ac4
upgrade: display the list of processed revlog before proceeding
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46003
diff
changeset
|
108 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
|
109 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
|
110 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
|
111 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43031
diff
changeset
|
112 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
|
113 [UPGRADE_CHANGELOG, UPGRADE_MANIFEST, UPGRADE_FILELOGS] |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43031
diff
changeset
|
114 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43031
diff
changeset
|
115 |
42693
0812d9fb63fe
upgrade: introduce the internal code for revlog cloning selection
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42691
diff
changeset
|
116 |
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
|
117 def matchrevlog(revlogfilter, rl_type): |
45694
d1c10d33a85c
upgrade: improve documentation of matchrevlog()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45487
diff
changeset
|
118 """check if a revlog is selected for cloning. |
d1c10d33a85c
upgrade: improve documentation of matchrevlog()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45487
diff
changeset
|
119 |
d1c10d33a85c
upgrade: improve documentation of matchrevlog()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45487
diff
changeset
|
120 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
|
121 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
|
122 |
0812d9fb63fe
upgrade: introduce the internal code for revlog cloning selection
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42691
diff
changeset
|
123 The store entry is checked against the passed filter""" |
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
|
124 if rl_type & store.FILEFLAGS_CHANGELOG: |
42693
0812d9fb63fe
upgrade: introduce the internal code for revlog cloning selection
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42691
diff
changeset
|
125 return UPGRADE_CHANGELOG in revlogfilter |
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
|
126 elif rl_type & store.FILEFLAGS_MANIFESTLOG: |
42693
0812d9fb63fe
upgrade: introduce the internal code for revlog cloning selection
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42691
diff
changeset
|
127 return UPGRADE_MANIFEST in revlogfilter |
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
|
128 assert rl_type & store.FILEFLAGS_FILELOG |
45980
fe7d7917ceb5
upgrade: rename UPGRADE_FILELOG to UPGRADE_FILELOGS
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45735
diff
changeset
|
129 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
|
130 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43031
diff
changeset
|
131 |
46193
85f7cf314b39
engine: refactor actual cloning code into separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46191
diff
changeset
|
132 def _perform_clone( |
85f7cf314b39
engine: refactor actual cloning code into separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46191
diff
changeset
|
133 ui, |
85f7cf314b39
engine: refactor actual cloning code into separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46191
diff
changeset
|
134 dstrepo, |
85f7cf314b39
engine: refactor actual cloning code into separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46191
diff
changeset
|
135 tr, |
85f7cf314b39
engine: refactor actual cloning code into separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46191
diff
changeset
|
136 old_revlog, |
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
|
137 rl_type, |
46193
85f7cf314b39
engine: refactor actual cloning code into separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46191
diff
changeset
|
138 unencoded, |
46217
02df91e895bd
engine: pass upgrade operation inside `_perform_clone()`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46216
diff
changeset
|
139 upgrade_op, |
47084
27f1191b1305
sidedata: replace sidedata upgrade mechanism with the new one
Rapha?l Gom?s <rgomes@octobus.net>
parents:
46897
diff
changeset
|
140 sidedata_helpers, |
46193
85f7cf314b39
engine: refactor actual cloning code into separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46191
diff
changeset
|
141 oncopiedrevision, |
85f7cf314b39
engine: refactor actual cloning code into separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46191
diff
changeset
|
142 ): |
47062
f38bf44e077f
black: make codebase compatible with black v21.4b2 and v20.8b1
Kyle Lippincott <spectral@google.com>
parents:
46897
diff
changeset
|
143 """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
|
144 newrl = None |
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
|
145 if matchrevlog(upgrade_op.revlogs_to_process, rl_type): |
46193
85f7cf314b39
engine: refactor actual cloning code into separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46191
diff
changeset
|
146 ui.note( |
85f7cf314b39
engine: refactor actual cloning code into separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46191
diff
changeset
|
147 _(b'cloning %d revisions from %s\n') % (len(old_revlog), unencoded) |
85f7cf314b39
engine: refactor actual cloning code into separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46191
diff
changeset
|
148 ) |
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
|
149 newrl = _revlogfrompath(dstrepo, rl_type, unencoded) |
46193
85f7cf314b39
engine: refactor actual cloning code into separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46191
diff
changeset
|
150 old_revlog.clone( |
85f7cf314b39
engine: refactor actual cloning code into separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46191
diff
changeset
|
151 tr, |
85f7cf314b39
engine: refactor actual cloning code into separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46191
diff
changeset
|
152 newrl, |
85f7cf314b39
engine: refactor actual cloning code into separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46191
diff
changeset
|
153 addrevisioncb=oncopiedrevision, |
46217
02df91e895bd
engine: pass upgrade operation inside `_perform_clone()`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46216
diff
changeset
|
154 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
|
155 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
|
156 sidedata_helpers=sidedata_helpers, |
46193
85f7cf314b39
engine: refactor actual cloning code into separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46191
diff
changeset
|
157 ) |
85f7cf314b39
engine: refactor actual cloning code into separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46191
diff
changeset
|
158 else: |
85f7cf314b39
engine: refactor actual cloning code into separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46191
diff
changeset
|
159 msg = _(b'blindly copying %s containing %i revisions\n') |
85f7cf314b39
engine: refactor actual cloning code into separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46191
diff
changeset
|
160 ui.note(msg % (unencoded, len(old_revlog))) |
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
|
161 _copyrevlog(tr, dstrepo, old_revlog, rl_type, unencoded) |
46193
85f7cf314b39
engine: refactor actual cloning code into separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46191
diff
changeset
|
162 |
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
|
163 newrl = _revlogfrompath(dstrepo, rl_type, unencoded) |
46193
85f7cf314b39
engine: refactor actual cloning code into separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46191
diff
changeset
|
164 return newrl |
85f7cf314b39
engine: refactor actual cloning code into separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46191
diff
changeset
|
165 |
85f7cf314b39
engine: refactor actual cloning code into separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46191
diff
changeset
|
166 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43031
diff
changeset
|
167 def _clonerevlogs( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43031
diff
changeset
|
168 ui, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43031
diff
changeset
|
169 srcrepo, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43031
diff
changeset
|
170 dstrepo, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43031
diff
changeset
|
171 tr, |
46216
34efa84a43a1
engine: pass upgrade operation inside _clonerevlogs()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46215
diff
changeset
|
172 upgrade_op, |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43031
diff
changeset
|
173 ): |
30779
38aa1ca97b6a
repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30777
diff
changeset
|
174 """Copy revlogs between 2 repos.""" |
38aa1ca97b6a
repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30777
diff
changeset
|
175 revcount = 0 |
38aa1ca97b6a
repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30777
diff
changeset
|
176 srcsize = 0 |
38aa1ca97b6a
repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30777
diff
changeset
|
177 srcrawsize = 0 |
38aa1ca97b6a
repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30777
diff
changeset
|
178 dstsize = 0 |
38aa1ca97b6a
repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30777
diff
changeset
|
179 fcount = 0 |
38aa1ca97b6a
repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30777
diff
changeset
|
180 frevcount = 0 |
38aa1ca97b6a
repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30777
diff
changeset
|
181 fsrcsize = 0 |
38aa1ca97b6a
repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30777
diff
changeset
|
182 frawsize = 0 |
38aa1ca97b6a
repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30777
diff
changeset
|
183 fdstsize = 0 |
38aa1ca97b6a
repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30777
diff
changeset
|
184 mcount = 0 |
38aa1ca97b6a
repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30777
diff
changeset
|
185 mrevcount = 0 |
38aa1ca97b6a
repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30777
diff
changeset
|
186 msrcsize = 0 |
38aa1ca97b6a
repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30777
diff
changeset
|
187 mrawsize = 0 |
38aa1ca97b6a
repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30777
diff
changeset
|
188 mdstsize = 0 |
38aa1ca97b6a
repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30777
diff
changeset
|
189 crevcount = 0 |
38aa1ca97b6a
repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30777
diff
changeset
|
190 csrcsize = 0 |
38aa1ca97b6a
repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30777
diff
changeset
|
191 crawsize = 0 |
38aa1ca97b6a
repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30777
diff
changeset
|
192 cdstsize = 0 |
38aa1ca97b6a
repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30777
diff
changeset
|
193 |
42689
896fb9deeaf8
upgrade: walk the source store file only once
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42137
diff
changeset
|
194 alldatafiles = list(srcrepo.store.walk()) |
46194
4d1cec4e5e1f
engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46193
diff
changeset
|
195 # 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
|
196 # key is unencoded filename |
4d1cec4e5e1f
engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46193
diff
changeset
|
197 # value is revlog_object_from_srcrepo |
4d1cec4e5e1f
engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46193
diff
changeset
|
198 manifests = {} |
4d1cec4e5e1f
engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46193
diff
changeset
|
199 changelogs = {} |
4d1cec4e5e1f
engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46193
diff
changeset
|
200 filelogs = {} |
42689
896fb9deeaf8
upgrade: walk the source store file only once
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42137
diff
changeset
|
201 |
30779
38aa1ca97b6a
repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30777
diff
changeset
|
202 # 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
|
203 # source files and allows a unified progress bar to be displayed. |
47877
2174f54aab18
store: return just one filename in walk functions
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
47764
diff
changeset
|
204 for rl_type, unencoded, size in alldatafiles: |
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
|
205 if not rl_type & store.FILEFLAGS_REVLOG_MAIN: |
30779
38aa1ca97b6a
repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30777
diff
changeset
|
206 continue |
38aa1ca97b6a
repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30777
diff
changeset
|
207 |
47659
f030c7d22032
walk: no longer ignore revlogs of files starting with `undo.` (issue6542)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47320
diff
changeset
|
208 # the store.walk function will wrongly pickup transaction backup and |
f030c7d22032
walk: no longer ignore revlogs of files starting with `undo.` (issue6542)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47320
diff
changeset
|
209 # get confused. As a quick fix for 5.9 release, we ignore those. |
f030c7d22032
walk: no longer ignore revlogs of files starting with `undo.` (issue6542)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47320
diff
changeset
|
210 # (this is not a module constants because it seems better to keep the |
f030c7d22032
walk: no longer ignore revlogs of files starting with `undo.` (issue6542)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47320
diff
changeset
|
211 # hack together) |
f030c7d22032
walk: no longer ignore revlogs of files starting with `undo.` (issue6542)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47320
diff
changeset
|
212 skip_undo = ( |
f030c7d22032
walk: no longer ignore revlogs of files starting with `undo.` (issue6542)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47320
diff
changeset
|
213 b'undo.backup.00changelog.i', |
f030c7d22032
walk: no longer ignore revlogs of files starting with `undo.` (issue6542)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47320
diff
changeset
|
214 b'undo.backup.00manifest.i', |
f030c7d22032
walk: no longer ignore revlogs of files starting with `undo.` (issue6542)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47320
diff
changeset
|
215 ) |
f030c7d22032
walk: no longer ignore revlogs of files starting with `undo.` (issue6542)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47320
diff
changeset
|
216 if unencoded in skip_undo: |
f030c7d22032
walk: no longer ignore revlogs of files starting with `undo.` (issue6542)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47320
diff
changeset
|
217 continue |
f030c7d22032
walk: no longer ignore revlogs of files starting with `undo.` (issue6542)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47320
diff
changeset
|
218 |
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
|
219 rl = _revlogfrompath(srcrepo, rl_type, unencoded) |
30779
38aa1ca97b6a
repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30777
diff
changeset
|
220 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43031
diff
changeset
|
221 info = rl.storageinfo( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43031
diff
changeset
|
222 exclusivefiles=True, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43031
diff
changeset
|
223 revisionscount=True, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43031
diff
changeset
|
224 trackedsize=True, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43031
diff
changeset
|
225 storedsize=True, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43031
diff
changeset
|
226 ) |
39857
8dab7c8a93eb
upgrade: report size of backing files, not internal storage size
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39546
diff
changeset
|
227 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
228 revcount += info[b'revisionscount'] or 0 |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
229 datasize = info[b'storedsize'] or 0 |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
230 rawsize = info[b'trackedsize'] or 0 |
30779
38aa1ca97b6a
repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30777
diff
changeset
|
231 |
38aa1ca97b6a
repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30777
diff
changeset
|
232 srcsize += datasize |
38aa1ca97b6a
repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30777
diff
changeset
|
233 srcrawsize += rawsize |
38aa1ca97b6a
repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30777
diff
changeset
|
234 |
38aa1ca97b6a
repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30777
diff
changeset
|
235 # This is for the separate progress bars. |
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
|
236 if rl_type & store.FILEFLAGS_CHANGELOG: |
cf49e54ef965
upgrade: take advantage of the new information returned by `store.walk`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46895
diff
changeset
|
237 changelogs[unencoded] = (rl_type, rl) |
30779
38aa1ca97b6a
repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30777
diff
changeset
|
238 crevcount += len(rl) |
38aa1ca97b6a
repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30777
diff
changeset
|
239 csrcsize += datasize |
38aa1ca97b6a
repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30777
diff
changeset
|
240 crawsize += rawsize |
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
|
241 elif rl_type & store.FILEFLAGS_MANIFESTLOG: |
cf49e54ef965
upgrade: take advantage of the new information returned by `store.walk`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46895
diff
changeset
|
242 manifests[unencoded] = (rl_type, rl) |
30779
38aa1ca97b6a
repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30777
diff
changeset
|
243 mcount += 1 |
38aa1ca97b6a
repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30777
diff
changeset
|
244 mrevcount += len(rl) |
38aa1ca97b6a
repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30777
diff
changeset
|
245 msrcsize += datasize |
38aa1ca97b6a
repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30777
diff
changeset
|
246 mrawsize += rawsize |
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
|
247 elif rl_type & store.FILEFLAGS_FILELOG: |
cf49e54ef965
upgrade: take advantage of the new information returned by `store.walk`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46895
diff
changeset
|
248 filelogs[unencoded] = (rl_type, rl) |
30779
38aa1ca97b6a
repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30777
diff
changeset
|
249 fcount += 1 |
38aa1ca97b6a
repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30777
diff
changeset
|
250 frevcount += len(rl) |
38aa1ca97b6a
repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30777
diff
changeset
|
251 fsrcsize += datasize |
38aa1ca97b6a
repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30777
diff
changeset
|
252 frawsize += rawsize |
37444
c8666a9e9e11
upgrade: sniff for filelog type
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36373
diff
changeset
|
253 else: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
254 error.ProgrammingError(b'unknown revlog type') |
30779
38aa1ca97b6a
repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30777
diff
changeset
|
255 |
38aa1ca97b6a
repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30777
diff
changeset
|
256 if not revcount: |
38aa1ca97b6a
repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30777
diff
changeset
|
257 return |
38aa1ca97b6a
repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30777
diff
changeset
|
258 |
44798
e295ba238bd8
upgrade: support the --quiet flag
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
44797
diff
changeset
|
259 ui.status( |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43031
diff
changeset
|
260 _( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
261 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
|
262 b'%d in changelog)\n' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43031
diff
changeset
|
263 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43031
diff
changeset
|
264 % (revcount, frevcount, mrevcount, crevcount) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43031
diff
changeset
|
265 ) |
44798
e295ba238bd8
upgrade: support the --quiet flag
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
44797
diff
changeset
|
266 ui.status( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
267 _(b'migrating %s in store; %s tracked data\n') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43031
diff
changeset
|
268 % ((util.bytecount(srcsize), util.bytecount(srcrawsize))) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43031
diff
changeset
|
269 ) |
30779
38aa1ca97b6a
repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30777
diff
changeset
|
270 |
38aa1ca97b6a
repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30777
diff
changeset
|
271 # Used to keep track of progress. |
38399
185588cb0c4b
upgrade: use progress helper
Martin von Zweigbergk <martinvonz@google.com>
parents:
38398
diff
changeset
|
272 progress = None |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43031
diff
changeset
|
273 |
30779
38aa1ca97b6a
repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30777
diff
changeset
|
274 def oncopiedrevision(rl, rev, node): |
38399
185588cb0c4b
upgrade: use progress helper
Martin von Zweigbergk <martinvonz@google.com>
parents:
38398
diff
changeset
|
275 progress.increment() |
30779
38aa1ca97b6a
repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30777
diff
changeset
|
276 |
47084
27f1191b1305
sidedata: replace sidedata upgrade mechanism with the new one
Rapha?l Gom?s <rgomes@octobus.net>
parents:
46897
diff
changeset
|
277 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
|
278 |
46194
4d1cec4e5e1f
engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46193
diff
changeset
|
279 # Migrating filelogs |
4d1cec4e5e1f
engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46193
diff
changeset
|
280 ui.status( |
4d1cec4e5e1f
engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46193
diff
changeset
|
281 _( |
4d1cec4e5e1f
engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46193
diff
changeset
|
282 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
|
283 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
|
284 ) |
4d1cec4e5e1f
engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46193
diff
changeset
|
285 % ( |
4d1cec4e5e1f
engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46193
diff
changeset
|
286 fcount, |
4d1cec4e5e1f
engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46193
diff
changeset
|
287 frevcount, |
4d1cec4e5e1f
engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46193
diff
changeset
|
288 util.bytecount(fsrcsize), |
4d1cec4e5e1f
engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46193
diff
changeset
|
289 util.bytecount(frawsize), |
4d1cec4e5e1f
engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46193
diff
changeset
|
290 ) |
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 progress = srcrepo.ui.makeprogress(_(b'file revisions'), total=frevcount) |
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
|
293 for unencoded, (rl_type, oldrl) in sorted(filelogs.items()): |
46193
85f7cf314b39
engine: refactor actual cloning code into separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46191
diff
changeset
|
294 newrl = _perform_clone( |
85f7cf314b39
engine: refactor actual cloning code into separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46191
diff
changeset
|
295 ui, |
85f7cf314b39
engine: refactor actual cloning code into separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46191
diff
changeset
|
296 dstrepo, |
85f7cf314b39
engine: refactor actual cloning code into separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46191
diff
changeset
|
297 tr, |
85f7cf314b39
engine: refactor actual cloning code into separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46191
diff
changeset
|
298 oldrl, |
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
|
299 rl_type, |
46193
85f7cf314b39
engine: refactor actual cloning code into separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46191
diff
changeset
|
300 unencoded, |
46217
02df91e895bd
engine: pass upgrade operation inside `_perform_clone()`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46216
diff
changeset
|
301 upgrade_op, |
47084
27f1191b1305
sidedata: replace sidedata upgrade mechanism with the new one
Rapha?l Gom?s <rgomes@octobus.net>
parents:
46897
diff
changeset
|
302 sidedata_helpers, |
46193
85f7cf314b39
engine: refactor actual cloning code into separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46191
diff
changeset
|
303 oncopiedrevision, |
85f7cf314b39
engine: refactor actual cloning code into separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46191
diff
changeset
|
304 ) |
39870
b399ff55ee6d
upgrade: use storageinfo() for obtaining storage metadata
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39859
diff
changeset
|
305 info = newrl.storageinfo(storedsize=True) |
46214
5dfa837d933e
engine: refactor how total dstsize is calculated
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46210
diff
changeset
|
306 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
|
307 ui.status( |
4d1cec4e5e1f
engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46193
diff
changeset
|
308 _( |
4d1cec4e5e1f
engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46193
diff
changeset
|
309 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
|
310 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
|
311 ) |
4d1cec4e5e1f
engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46193
diff
changeset
|
312 % (frevcount, fcount, util.bytecount(fdstsize - fsrcsize)) |
4d1cec4e5e1f
engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46193
diff
changeset
|
313 ) |
30779
38aa1ca97b6a
repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30777
diff
changeset
|
314 |
46194
4d1cec4e5e1f
engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46193
diff
changeset
|
315 # Migrating manifests |
4d1cec4e5e1f
engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46193
diff
changeset
|
316 ui.status( |
4d1cec4e5e1f
engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46193
diff
changeset
|
317 _( |
4d1cec4e5e1f
engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46193
diff
changeset
|
318 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
|
319 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
|
320 ) |
4d1cec4e5e1f
engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46193
diff
changeset
|
321 % ( |
4d1cec4e5e1f
engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46193
diff
changeset
|
322 mcount, |
4d1cec4e5e1f
engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46193
diff
changeset
|
323 mrevcount, |
4d1cec4e5e1f
engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46193
diff
changeset
|
324 util.bytecount(msrcsize), |
4d1cec4e5e1f
engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46193
diff
changeset
|
325 util.bytecount(mrawsize), |
4d1cec4e5e1f
engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46193
diff
changeset
|
326 ) |
4d1cec4e5e1f
engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46193
diff
changeset
|
327 ) |
4d1cec4e5e1f
engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46193
diff
changeset
|
328 if progress: |
4d1cec4e5e1f
engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46193
diff
changeset
|
329 progress.complete() |
4d1cec4e5e1f
engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46193
diff
changeset
|
330 progress = srcrepo.ui.makeprogress( |
4d1cec4e5e1f
engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46193
diff
changeset
|
331 _(b'manifest revisions'), total=mrevcount |
4d1cec4e5e1f
engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46193
diff
changeset
|
332 ) |
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
|
333 for unencoded, (rl_type, oldrl) in sorted(manifests.items()): |
46194
4d1cec4e5e1f
engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46193
diff
changeset
|
334 newrl = _perform_clone( |
4d1cec4e5e1f
engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46193
diff
changeset
|
335 ui, |
4d1cec4e5e1f
engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46193
diff
changeset
|
336 dstrepo, |
4d1cec4e5e1f
engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46193
diff
changeset
|
337 tr, |
4d1cec4e5e1f
engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46193
diff
changeset
|
338 oldrl, |
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
|
339 rl_type, |
46194
4d1cec4e5e1f
engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46193
diff
changeset
|
340 unencoded, |
46217
02df91e895bd
engine: pass upgrade operation inside `_perform_clone()`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46216
diff
changeset
|
341 upgrade_op, |
47084
27f1191b1305
sidedata: replace sidedata upgrade mechanism with the new one
Rapha?l Gom?s <rgomes@octobus.net>
parents:
46897
diff
changeset
|
342 sidedata_helpers, |
46194
4d1cec4e5e1f
engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46193
diff
changeset
|
343 oncopiedrevision, |
4d1cec4e5e1f
engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46193
diff
changeset
|
344 ) |
4d1cec4e5e1f
engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46193
diff
changeset
|
345 info = newrl.storageinfo(storedsize=True) |
46214
5dfa837d933e
engine: refactor how total dstsize is calculated
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46210
diff
changeset
|
346 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
|
347 ui.status( |
4d1cec4e5e1f
engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46193
diff
changeset
|
348 _( |
4d1cec4e5e1f
engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46193
diff
changeset
|
349 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
|
350 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
|
351 ) |
4d1cec4e5e1f
engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46193
diff
changeset
|
352 % (mrevcount, mcount, util.bytecount(mdstsize - msrcsize)) |
4d1cec4e5e1f
engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46193
diff
changeset
|
353 ) |
30779
38aa1ca97b6a
repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30777
diff
changeset
|
354 |
46194
4d1cec4e5e1f
engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46193
diff
changeset
|
355 # Migrating changelog |
4d1cec4e5e1f
engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46193
diff
changeset
|
356 ui.status( |
4d1cec4e5e1f
engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46193
diff
changeset
|
357 _( |
4d1cec4e5e1f
engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46193
diff
changeset
|
358 b'migrating changelog containing %d revisions ' |
4d1cec4e5e1f
engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46193
diff
changeset
|
359 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
|
360 ) |
4d1cec4e5e1f
engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46193
diff
changeset
|
361 % ( |
4d1cec4e5e1f
engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46193
diff
changeset
|
362 crevcount, |
4d1cec4e5e1f
engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46193
diff
changeset
|
363 util.bytecount(csrcsize), |
4d1cec4e5e1f
engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46193
diff
changeset
|
364 util.bytecount(crawsize), |
4d1cec4e5e1f
engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46193
diff
changeset
|
365 ) |
4d1cec4e5e1f
engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46193
diff
changeset
|
366 ) |
4d1cec4e5e1f
engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46193
diff
changeset
|
367 if progress: |
4d1cec4e5e1f
engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46193
diff
changeset
|
368 progress.complete() |
4d1cec4e5e1f
engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46193
diff
changeset
|
369 progress = srcrepo.ui.makeprogress( |
4d1cec4e5e1f
engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46193
diff
changeset
|
370 _(b'changelog revisions'), total=crevcount |
4d1cec4e5e1f
engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46193
diff
changeset
|
371 ) |
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
|
372 for unencoded, (rl_type, oldrl) in sorted(changelogs.items()): |
46194
4d1cec4e5e1f
engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46193
diff
changeset
|
373 newrl = _perform_clone( |
4d1cec4e5e1f
engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46193
diff
changeset
|
374 ui, |
4d1cec4e5e1f
engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46193
diff
changeset
|
375 dstrepo, |
4d1cec4e5e1f
engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46193
diff
changeset
|
376 tr, |
4d1cec4e5e1f
engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46193
diff
changeset
|
377 oldrl, |
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
|
378 rl_type, |
46194
4d1cec4e5e1f
engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46193
diff
changeset
|
379 unencoded, |
46217
02df91e895bd
engine: pass upgrade operation inside `_perform_clone()`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46216
diff
changeset
|
380 upgrade_op, |
47084
27f1191b1305
sidedata: replace sidedata upgrade mechanism with the new one
Rapha?l Gom?s <rgomes@octobus.net>
parents:
46897
diff
changeset
|
381 sidedata_helpers, |
46194
4d1cec4e5e1f
engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46193
diff
changeset
|
382 oncopiedrevision, |
4d1cec4e5e1f
engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46193
diff
changeset
|
383 ) |
4d1cec4e5e1f
engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46193
diff
changeset
|
384 info = newrl.storageinfo(storedsize=True) |
46214
5dfa837d933e
engine: refactor how total dstsize is calculated
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46210
diff
changeset
|
385 cdstsize += info[b'storedsize'] or 0 |
38399
185588cb0c4b
upgrade: use progress helper
Martin von Zweigbergk <martinvonz@google.com>
parents:
38398
diff
changeset
|
386 progress.complete() |
44798
e295ba238bd8
upgrade: support the --quiet flag
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
44797
diff
changeset
|
387 ui.status( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
388 _( |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
389 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
|
390 b'%s\n' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
391 ) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43031
diff
changeset
|
392 % (crevcount, util.bytecount(cdstsize - csrcsize)) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43031
diff
changeset
|
393 ) |
30779
38aa1ca97b6a
repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30777
diff
changeset
|
394 |
46214
5dfa837d933e
engine: refactor how total dstsize is calculated
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46210
diff
changeset
|
395 dstsize = fdstsize + mdstsize + cdstsize |
44798
e295ba238bd8
upgrade: support the --quiet flag
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
44797
diff
changeset
|
396 ui.status( |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43031
diff
changeset
|
397 _( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
398 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
|
399 b'size: %s\n' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43031
diff
changeset
|
400 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43031
diff
changeset
|
401 % (revcount, util.bytecount(dstsize - srcsize)) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43031
diff
changeset
|
402 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43031
diff
changeset
|
403 |
30779
38aa1ca97b6a
repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30777
diff
changeset
|
404 |
46229
52abb1af2995
engine: prevent a function call for each store file
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46222
diff
changeset
|
405 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
|
406 """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
|
407 are cloned""" |
52abb1af2995
engine: prevent a function call for each store file
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46222
diff
changeset
|
408 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
|
409 # don't copy revlogs as they are already cloned |
46897
1c52d77d7861
upgrade: do not hardcore file extension of revlogs
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46896
diff
changeset
|
410 if store.revlog_type(path) is not None: |
46229
52abb1af2995
engine: prevent a function call for each store file
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46222
diff
changeset
|
411 continue |
52abb1af2995
engine: prevent a function call for each store file
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46222
diff
changeset
|
412 # Skip transaction related files. |
52abb1af2995
engine: prevent a function call for each store file
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46222
diff
changeset
|
413 if path.startswith(b'undo'): |
52abb1af2995
engine: prevent a function call for each store file
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46222
diff
changeset
|
414 continue |
52abb1af2995
engine: prevent a function call for each store file
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46222
diff
changeset
|
415 # Only copy regular files. |
52abb1af2995
engine: prevent a function call for each store file
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46222
diff
changeset
|
416 if kind != stat.S_IFREG: |
52abb1af2995
engine: prevent a function call for each store file
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46222
diff
changeset
|
417 continue |
52abb1af2995
engine: prevent a function call for each store file
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46222
diff
changeset
|
418 # Skip other skipped files. |
52abb1af2995
engine: prevent a function call for each store file
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46222
diff
changeset
|
419 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
|
420 continue |
52abb1af2995
engine: prevent a function call for each store file
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46222
diff
changeset
|
421 # 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
|
422 |
46229
52abb1af2995
engine: prevent a function call for each store file
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46222
diff
changeset
|
423 yield path |
30780
2603d04889e1
repair: copy non-revlog store files during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30779
diff
changeset
|
424 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43031
diff
changeset
|
425 |
46220
1ca7865c245d
engine: refactor code to replace stores in separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46219
diff
changeset
|
426 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
|
427 """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
|
428 |
1ca7865c245d
engine: refactor code to replace stores in separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46219
diff
changeset
|
429 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
|
430 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
|
431 |
1ca7865c245d
engine: refactor code to replace stores in separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46219
diff
changeset
|
432 Arguments: |
1ca7865c245d
engine: refactor code to replace stores in separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46219
diff
changeset
|
433 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
|
434 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
|
435 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
|
436 upgrade_op: upgrade operation object |
1ca7865c245d
engine: refactor code to replace stores in separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46219
diff
changeset
|
437 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
|
438 """ |
1ca7865c245d
engine: refactor code to replace stores in separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46219
diff
changeset
|
439 # 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
|
440 # 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
|
441 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
|
442 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
|
443 else: |
2e8a844d0ae0
upgrade: don't create store backup if `--no-backup` is passed
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46252
diff
changeset
|
444 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
|
445 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
|
446 |
1ca7865c245d
engine: refactor code to replace stores in separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46219
diff
changeset
|
447 |
46219
481d9aed669c
engine: make hook point for extension a public function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46218
diff
changeset
|
448 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
|
449 """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
|
450 |
2603d04889e1
repair: copy non-revlog store files during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30779
diff
changeset
|
451 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
|
452 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
|
453 """ |
2603d04889e1
repair: copy non-revlog store files during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30779
diff
changeset
|
454 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43031
diff
changeset
|
455 |
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
|
456 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
|
457 """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
|
458 |
7de7afd8bdd9
repair: begin implementation of in-place upgrading
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30776
diff
changeset
|
459 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
|
460 repository and a temporary destination repository. |
7de7afd8bdd9
repair: begin implementation of in-place upgrading
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30776
diff
changeset
|
461 |
7de7afd8bdd9
repair: begin implementation of in-place upgrading
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30776
diff
changeset
|
462 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
|
463 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
|
464 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
|
465 """ |
7de7afd8bdd9
repair: begin implementation of in-place upgrading
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30776
diff
changeset
|
466 assert srcrepo.currentwlock() |
7de7afd8bdd9
repair: begin implementation of in-place upgrading
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30776
diff
changeset
|
467 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
|
468 backuppath = None |
2e8a844d0ae0
upgrade: don't create store backup if `--no-backup` is passed
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46252
diff
changeset
|
469 backupvfs = None |
30777
7de7afd8bdd9
repair: begin implementation of in-place upgrading
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30776
diff
changeset
|
470 |
44798
e295ba238bd8
upgrade: support the --quiet flag
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
44797
diff
changeset
|
471 ui.status( |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43031
diff
changeset
|
472 _( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
473 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
|
474 b'data migration completes)\n' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43031
diff
changeset
|
475 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43031
diff
changeset
|
476 ) |
30779
38aa1ca97b6a
repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30777
diff
changeset
|
477 |
47320
a43d256c041a
dirstate-v2: Add `hg debugupgraderepo` command support
Simon Sapin <simon.sapin@octobus.net>
parents:
47149
diff
changeset
|
478 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
|
479 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
|
480 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
|
481 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
|
482 |
a43d256c041a
dirstate-v2: Add `hg debugupgraderepo` command support
Simon Sapin <simon.sapin@octobus.net>
parents:
47149
diff
changeset
|
483 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
|
484 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
|
485 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
|
486 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
|
487 |
a43d256c041a
dirstate-v2: Add `hg debugupgraderepo` command support
Simon Sapin <simon.sapin@octobus.net>
parents:
47149
diff
changeset
|
488 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
|
489 return |
a43d256c041a
dirstate-v2: Add `hg debugupgraderepo` command support
Simon Sapin <simon.sapin@octobus.net>
parents:
47149
diff
changeset
|
490 |
46467
45c3a263d5d1
engine: 'if not, else' -> 'if, else'
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46380
diff
changeset
|
491 if upgrade_op.requirements_only: |
45c3a263d5d1
engine: 'if not, else' -> 'if, else'
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46380
diff
changeset
|
492 ui.status(_(b'upgrading repository requirements\n')) |
45c3a263d5d1
engine: 'if not, else' -> 'if, else'
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46380
diff
changeset
|
493 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
|
494 # 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
|
495 # 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
|
496 # through the whole cloning process |
98e39f04d60e
upgrade: implement partial upgrade for upgrading persistent-nodemap
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46467
diff
changeset
|
497 elif ( |
98e39f04d60e
upgrade: implement partial upgrade for upgrading persistent-nodemap
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46467
diff
changeset
|
498 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
|
499 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
|
500 and not upgrade_op.removed_actions |
98e39f04d60e
upgrade: implement partial upgrade for upgrading persistent-nodemap
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46467
diff
changeset
|
501 ): |
98e39f04d60e
upgrade: implement partial upgrade for upgrading persistent-nodemap
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46467
diff
changeset
|
502 ui.status( |
98e39f04d60e
upgrade: implement partial upgrade for upgrading persistent-nodemap
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46467
diff
changeset
|
503 _(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
|
504 ) |
98e39f04d60e
upgrade: implement partial upgrade for upgrading persistent-nodemap
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46467
diff
changeset
|
505 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
|
506 unfi = srcrepo.unfiltered() |
98e39f04d60e
upgrade: implement partial upgrade for upgrading persistent-nodemap
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46467
diff
changeset
|
507 cl = unfi.changelog |
98e39f04d60e
upgrade: implement partial upgrade for upgrading persistent-nodemap
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46467
diff
changeset
|
508 nodemap.persist_nodemap(tr, cl, force=True) |
46525
636853347e14
upgrade: write nodemap for manifests too
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46472
diff
changeset
|
509 # 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
|
510 # 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
|
511 # 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
|
512 # hence accessing private attributes can be justified |
636853347e14
upgrade: write nodemap for manifests too
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46472
diff
changeset
|
513 nodemap.persist_nodemap( |
636853347e14
upgrade: write nodemap for manifests too
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46472
diff
changeset
|
514 tr, unfi.manifestlog._rootstore._revlog, force=True |
636853347e14
upgrade: write nodemap for manifests too
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46472
diff
changeset
|
515 ) |
46472
98e39f04d60e
upgrade: implement partial upgrade for upgrading persistent-nodemap
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46467
diff
changeset
|
516 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
|
517 elif ( |
67b5fafd3a46
upgrade: speed up when we have only nodemap to downgrade
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46525
diff
changeset
|
518 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
|
519 and [ |
67b5fafd3a46
upgrade: speed up when we have only nodemap to downgrade
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46525
diff
changeset
|
520 x |
67b5fafd3a46
upgrade: speed up when we have only nodemap to downgrade
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46525
diff
changeset
|
521 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
|
522 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
|
523 ] |
67b5fafd3a46
upgrade: speed up when we have only nodemap to downgrade
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46525
diff
changeset
|
524 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
|
525 ): |
67b5fafd3a46
upgrade: speed up when we have only nodemap to downgrade
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46525
diff
changeset
|
526 ui.status( |
67b5fafd3a46
upgrade: speed up when we have only nodemap to downgrade
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46525
diff
changeset
|
527 _(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
|
528 ) |
67b5fafd3a46
upgrade: speed up when we have only nodemap to downgrade
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46525
diff
changeset
|
529 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
|
530 unfi = srcrepo.unfiltered() |
67b5fafd3a46
upgrade: speed up when we have only nodemap to downgrade
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46525
diff
changeset
|
531 cl = unfi.changelog |
67b5fafd3a46
upgrade: speed up when we have only nodemap to downgrade
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46525
diff
changeset
|
532 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
|
533 # 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
|
534 nodemap.delete_nodemap( |
67b5fafd3a46
upgrade: speed up when we have only nodemap to downgrade
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46525
diff
changeset
|
535 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
|
536 ) |
67b5fafd3a46
upgrade: speed up when we have only nodemap to downgrade
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46525
diff
changeset
|
537 scmutil.writereporequirements(srcrepo, upgrade_op.new_requirements) |
46467
45c3a263d5d1
engine: 'if not, else' -> 'if, else'
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46380
diff
changeset
|
538 else: |
46379
ee9002b99595
engine: add `if True` to prepare for next patch
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46375
diff
changeset
|
539 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
|
540 _clonerevlogs( |
ee9002b99595
engine: add `if True` to prepare for next patch
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46375
diff
changeset
|
541 ui, |
ee9002b99595
engine: add `if True` to prepare for next patch
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46375
diff
changeset
|
542 srcrepo, |
ee9002b99595
engine: add `if True` to prepare for next patch
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46375
diff
changeset
|
543 dstrepo, |
ee9002b99595
engine: add `if True` to prepare for next patch
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46375
diff
changeset
|
544 tr, |
ee9002b99595
engine: add `if True` to prepare for next patch
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46375
diff
changeset
|
545 upgrade_op, |
ee9002b99595
engine: add `if True` to prepare for next patch
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46375
diff
changeset
|
546 ) |
ee9002b99595
engine: add `if True` to prepare for next patch
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46375
diff
changeset
|
547 |
ee9002b99595
engine: add `if True` to prepare for next patch
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46375
diff
changeset
|
548 # 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
|
549 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
|
550 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
|
551 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
|
552 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
|
553 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
|
554 |
ee9002b99595
engine: add `if True` to prepare for next patch
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46375
diff
changeset
|
555 finishdatamigration(ui, srcrepo, dstrepo, requirements) |
ee9002b99595
engine: add `if True` to prepare for next patch
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46375
diff
changeset
|
556 |
ee9002b99595
engine: add `if True` to prepare for next patch
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46375
diff
changeset
|
557 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
|
558 |
46379
ee9002b99595
engine: add `if True` to prepare for next patch
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46375
diff
changeset
|
559 if upgrade_op.backup_store: |
ee9002b99595
engine: add `if True` to prepare for next patch
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46375
diff
changeset
|
560 backuppath = pycompat.mkdtemp( |
ee9002b99595
engine: add `if True` to prepare for next patch
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46375
diff
changeset
|
561 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
|
562 ) |
ee9002b99595
engine: add `if True` to prepare for next patch
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46375
diff
changeset
|
563 backupvfs = vfsmod.vfs(backuppath) |
30780
2603d04889e1
repair: copy non-revlog store files during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30779
diff
changeset
|
564 |
46379
ee9002b99595
engine: add `if True` to prepare for next patch
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46375
diff
changeset
|
565 # 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
|
566 util.copyfile( |
ee9002b99595
engine: add `if True` to prepare for next patch
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46375
diff
changeset
|
567 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
|
568 ) |
30779
38aa1ca97b6a
repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30777
diff
changeset
|
569 |
46379
ee9002b99595
engine: add `if True` to prepare for next patch
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46375
diff
changeset
|
570 # 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
|
571 # 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
|
572 # 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
|
573 # an inconsistent state. |
ee9002b99595
engine: add `if True` to prepare for next patch
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46375
diff
changeset
|
574 ui.status( |
ee9002b99595
engine: add `if True` to prepare for next patch
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46375
diff
changeset
|
575 _( |
ee9002b99595
engine: add `if True` to prepare for next patch
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46375
diff
changeset
|
576 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
|
577 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
|
578 ) |
46375
2e8a844d0ae0
upgrade: don't create store backup if `--no-backup` is passed
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46252
diff
changeset
|
579 ) |
46379
ee9002b99595
engine: add `if True` to prepare for next patch
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46375
diff
changeset
|
580 scmutil.writereporequirements( |
ee9002b99595
engine: add `if True` to prepare for next patch
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46375
diff
changeset
|
581 srcrepo, srcrepo.requirements | {b'upgradeinprogress'} |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43031
diff
changeset
|
582 ) |
30779
38aa1ca97b6a
repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30777
diff
changeset
|
583 |
46379
ee9002b99595
engine: add `if True` to prepare for next patch
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46375
diff
changeset
|
584 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
|
585 if upgrade_op.backup_store: |
ee9002b99595
engine: add `if True` to prepare for next patch
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46375
diff
changeset
|
586 ui.status( |
ee9002b99595
engine: add `if True` to prepare for next patch
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46375
diff
changeset
|
587 _(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
|
588 ) |
30777
7de7afd8bdd9
repair: begin implementation of in-place upgrading
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30776
diff
changeset
|
589 |
46379
ee9002b99595
engine: add `if True` to prepare for next patch
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46375
diff
changeset
|
590 # 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
|
591 # 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
|
592 # environments). |
ee9002b99595
engine: add `if True` to prepare for next patch
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46375
diff
changeset
|
593 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
|
594 tstart = util.timer() |
ee9002b99595
engine: add `if True` to prepare for next patch
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46375
diff
changeset
|
595 _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
|
596 elapsed = util.timer() - tstart |
ee9002b99595
engine: add `if True` to prepare for next patch
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46375
diff
changeset
|
597 ui.status( |
ee9002b99595
engine: add `if True` to prepare for next patch
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46375
diff
changeset
|
598 _( |
ee9002b99595
engine: add `if True` to prepare for next patch
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46375
diff
changeset
|
599 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
|
600 b'%0.1fs\n' |
ee9002b99595
engine: add `if True` to prepare for next patch
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46375
diff
changeset
|
601 ) |
ee9002b99595
engine: add `if True` to prepare for next patch
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46375
diff
changeset
|
602 % elapsed |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43031
diff
changeset
|
603 ) |
30777
7de7afd8bdd9
repair: begin implementation of in-place upgrading
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30776
diff
changeset
|
604 |
46379
ee9002b99595
engine: add `if True` to prepare for next patch
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46375
diff
changeset
|
605 # 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
|
606 # out legacy clients. |
ee9002b99595
engine: add `if True` to prepare for next patch
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46375
diff
changeset
|
607 ui.status( |
ee9002b99595
engine: add `if True` to prepare for next patch
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46375
diff
changeset
|
608 _( |
ee9002b99595
engine: add `if True` to prepare for next patch
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46375
diff
changeset
|
609 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
|
610 b'again\n' |
ee9002b99595
engine: add `if True` to prepare for next patch
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46375
diff
changeset
|
611 ) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43031
diff
changeset
|
612 ) |
46379
ee9002b99595
engine: add `if True` to prepare for next patch
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46375
diff
changeset
|
613 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
|
614 |
46379
ee9002b99595
engine: add `if True` to prepare for next patch
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46375
diff
changeset
|
615 if upgrade_op.backup_store: |
ee9002b99595
engine: add `if True` to prepare for next patch
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46375
diff
changeset
|
616 # 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
|
617 # 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
|
618 # 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
|
619 # location. This is simpler. |
46794 | 620 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
|
621 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
|
622 |
30777
7de7afd8bdd9
repair: begin implementation of in-place upgrading
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30776
diff
changeset
|
623 return backuppath |
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 |
a43d256c041a
dirstate-v2: Add `hg debugupgraderepo` command support
Simon Sapin <simon.sapin@octobus.net>
parents:
47149
diff
changeset
|
626 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
|
627 if upgrade_op.backup_store: |
a43d256c041a
dirstate-v2: Add `hg debugupgraderepo` command support
Simon Sapin <simon.sapin@octobus.net>
parents:
47149
diff
changeset
|
628 backuppath = pycompat.mkdtemp( |
a43d256c041a
dirstate-v2: Add `hg debugupgraderepo` command support
Simon Sapin <simon.sapin@octobus.net>
parents:
47149
diff
changeset
|
629 prefix=b'upgradebackup.', dir=srcrepo.path |
a43d256c041a
dirstate-v2: Add `hg debugupgraderepo` command support
Simon Sapin <simon.sapin@octobus.net>
parents:
47149
diff
changeset
|
630 ) |
a43d256c041a
dirstate-v2: Add `hg debugupgraderepo` command support
Simon Sapin <simon.sapin@octobus.net>
parents:
47149
diff
changeset
|
631 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
|
632 backupvfs = vfsmod.vfs(backuppath) |
a43d256c041a
dirstate-v2: Add `hg debugupgraderepo` command support
Simon Sapin <simon.sapin@octobus.net>
parents:
47149
diff
changeset
|
633 util.copyfile( |
a43d256c041a
dirstate-v2: Add `hg debugupgraderepo` command support
Simon Sapin <simon.sapin@octobus.net>
parents:
47149
diff
changeset
|
634 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
|
635 ) |
a43d256c041a
dirstate-v2: Add `hg debugupgraderepo` command support
Simon Sapin <simon.sapin@octobus.net>
parents:
47149
diff
changeset
|
636 util.copyfile( |
a43d256c041a
dirstate-v2: Add `hg debugupgraderepo` command support
Simon Sapin <simon.sapin@octobus.net>
parents:
47149
diff
changeset
|
637 srcrepo.vfs.join(b'dirstate'), backupvfs.join(b'dirstate') |
a43d256c041a
dirstate-v2: Add `hg debugupgraderepo` command support
Simon Sapin <simon.sapin@octobus.net>
parents:
47149
diff
changeset
|
638 ) |
a43d256c041a
dirstate-v2: Add `hg debugupgraderepo` command support
Simon Sapin <simon.sapin@octobus.net>
parents:
47149
diff
changeset
|
639 |
a43d256c041a
dirstate-v2: Add `hg debugupgraderepo` command support
Simon Sapin <simon.sapin@octobus.net>
parents:
47149
diff
changeset
|
640 assert srcrepo.dirstate._use_dirstate_v2 == (old == b'v2') |
a43d256c041a
dirstate-v2: Add `hg debugupgraderepo` command support
Simon Sapin <simon.sapin@octobus.net>
parents:
47149
diff
changeset
|
641 srcrepo.dirstate._map.preload() |
a43d256c041a
dirstate-v2: Add `hg debugupgraderepo` command support
Simon Sapin <simon.sapin@octobus.net>
parents:
47149
diff
changeset
|
642 srcrepo.dirstate._use_dirstate_v2 = new == b'v2' |
a43d256c041a
dirstate-v2: Add `hg debugupgraderepo` command support
Simon Sapin <simon.sapin@octobus.net>
parents:
47149
diff
changeset
|
643 srcrepo.dirstate._map._use_dirstate_v2 = srcrepo.dirstate._use_dirstate_v2 |
a43d256c041a
dirstate-v2: Add `hg debugupgraderepo` command support
Simon Sapin <simon.sapin@octobus.net>
parents:
47149
diff
changeset
|
644 srcrepo.dirstate._dirty = True |
47674
ff97e793ed36
dirstate-v2: Introduce a docket file
Simon Sapin <simon.sapin@octobus.net>
parents:
47660
diff
changeset
|
645 srcrepo.vfs.unlink(b'dirstate') |
47320
a43d256c041a
dirstate-v2: Add `hg debugupgraderepo` command support
Simon Sapin <simon.sapin@octobus.net>
parents:
47149
diff
changeset
|
646 srcrepo.dirstate.write(None) |
a43d256c041a
dirstate-v2: Add `hg debugupgraderepo` command support
Simon Sapin <simon.sapin@octobus.net>
parents:
47149
diff
changeset
|
647 |
a43d256c041a
dirstate-v2: Add `hg debugupgraderepo` command support
Simon Sapin <simon.sapin@octobus.net>
parents:
47149
diff
changeset
|
648 scmutil.writereporequirements(srcrepo, upgrade_op.new_requirements) |