annotate mercurial/upgrade_utils/engine.py @ 46796:e2f7b2695ba1

merge with stable
author Matt Harbison <matt_harbison@yahoo.com>
date Thu, 18 Mar 2021 18:24:59 -0400
parents 6266d19556ad 8da44c36fc74
children 6085b7f1536d
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
25e572394f5c Update license to GPLv2+
Matt Mackall <mpm@selenic.com>
parents: 9150
diff changeset
6 # GNU General Public License version 2 or any later version.
4702
18e91c9def0c strip: move strip code to a new repair module
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
7
25970
d1419cfbd4f4 repair: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25874
diff changeset
8 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
46050
f105c49e89cd upgrade: split actual upgrade code away from the main module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46039
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: 46039
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: 46039
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,
35353
8f3f8b8dbab7 upgrade: use actual filelog to convert filelog
Boris Feld <boris.feld@octobus.net>
parents: 35352
diff changeset
17 filelog,
30779
38aa1ca97b6a repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30777
diff changeset
18 manifest,
44981
4c1d39215034 metadata: move computation related to files touched in a dedicated module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 44900
diff changeset
19 metadata,
38198
2ce60954b1b7 py3: wrap tempfile.mkdtemp() to use bytes path
Yuya Nishihara <yuya@tcha.org>
parents: 37444
diff changeset
20 pycompat,
45392
77b8588dd84e requirements: introduce new requirements related module
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45391
diff changeset
21 requirements,
30779
38aa1ca97b6a repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30777
diff changeset
22 revlog,
30777
7de7afd8bdd9 repair: begin implementation of in-place upgrading
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30776
diff changeset
23 scmutil,
25970
d1419cfbd4f4 repair: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25874
diff changeset
24 util,
31242
254f98326eef vfs: use 'vfs' module directly in 'mercurial.repair'
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30995
diff changeset
25 vfs as vfsmod,
25970
d1419cfbd4f4 repair: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25874
diff changeset
26 )
46533
98e39f04d60e upgrade: implement partial upgrade for upgrading persistent-nodemap
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46528
diff changeset
27 from ..revlogutils import nodemap
25970
d1419cfbd4f4 repair: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25874
diff changeset
28
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43031
diff changeset
29
30779
38aa1ca97b6a repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30777
diff changeset
30 def _revlogfrompath(repo, path):
38aa1ca97b6a repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30777
diff changeset
31 """Obtain a revlog from a repo path.
38aa1ca97b6a repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30777
diff changeset
32
38aa1ca97b6a repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30777
diff changeset
33 An instance of the appropriate class is returned.
38aa1ca97b6a repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30777
diff changeset
34 """
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
35 if path == b'00changelog.i':
30779
38aa1ca97b6a repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30777
diff changeset
36 return changelog.changelog(repo.svfs)
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
37 elif path.endswith(b'00manifest.i'):
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
38 mandir = path[: -len(b'00manifest.i')]
46793
6266d19556ad node: introduce nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents: 46576
diff changeset
39 return manifest.manifestrevlog(
6266d19556ad node: introduce nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents: 46576
diff changeset
40 repo.nodeconstants, repo.svfs, tree=mandir
6266d19556ad node: introduce nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents: 46576
diff changeset
41 )
30779
38aa1ca97b6a repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30777
diff changeset
42 else:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43031
diff changeset
43 # reverse of "/".join(("data", path + ".i"))
35353
8f3f8b8dbab7 upgrade: use actual filelog to convert filelog
Boris Feld <boris.feld@octobus.net>
parents: 35352
diff changeset
44 return filelog.filelog(repo.svfs, path[5:-2])
30779
38aa1ca97b6a repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30777
diff changeset
45
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43031
diff changeset
46
42714
5535a2201ff1 upgrade: introduce a _copyrevlog method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42713
diff changeset
47 def _copyrevlog(tr, destrepo, oldrl, unencodedname):
5535a2201ff1 upgrade: introduce a _copyrevlog method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42713
diff changeset
48 """copy all relevant files for `oldrl` into `destrepo` store
5535a2201ff1 upgrade: introduce a _copyrevlog method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42713
diff changeset
49
5535a2201ff1 upgrade: introduce a _copyrevlog method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42713
diff changeset
50 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: 42713
diff changeset
51 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: 42713
diff changeset
52 content is compatible with format of the destination repository.
5535a2201ff1 upgrade: introduce a _copyrevlog method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42713
diff changeset
53 """
5535a2201ff1 upgrade: introduce a _copyrevlog method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42713
diff changeset
54 oldrl = getattr(oldrl, '_revlog', oldrl)
5535a2201ff1 upgrade: introduce a _copyrevlog method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42713
diff changeset
55 newrl = _revlogfrompath(destrepo, unencodedname)
5535a2201ff1 upgrade: introduce a _copyrevlog method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42713
diff changeset
56 newrl = getattr(newrl, '_revlog', newrl)
5535a2201ff1 upgrade: introduce a _copyrevlog method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42713
diff changeset
57
5535a2201ff1 upgrade: introduce a _copyrevlog method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42713
diff changeset
58 oldvfs = oldrl.opener
5535a2201ff1 upgrade: introduce a _copyrevlog method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42713
diff changeset
59 newvfs = newrl.opener
5535a2201ff1 upgrade: introduce a _copyrevlog method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42713
diff changeset
60 oldindex = oldvfs.join(oldrl.indexfile)
5535a2201ff1 upgrade: introduce a _copyrevlog method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42713
diff changeset
61 newindex = newvfs.join(newrl.indexfile)
5535a2201ff1 upgrade: introduce a _copyrevlog method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42713
diff changeset
62 olddata = oldvfs.join(oldrl.datafile)
5535a2201ff1 upgrade: introduce a _copyrevlog method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42713
diff changeset
63 newdata = newvfs.join(newrl.datafile)
5535a2201ff1 upgrade: introduce a _copyrevlog method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42713
diff changeset
64
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
65 with newvfs(newrl.indexfile, b'w'):
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43031
diff changeset
66 pass # create all the directories
42714
5535a2201ff1 upgrade: introduce a _copyrevlog method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42713
diff changeset
67
5535a2201ff1 upgrade: introduce a _copyrevlog method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42713
diff changeset
68 util.copyfile(oldindex, newindex)
43004
373749982924 upgrade: also register copied `.d` files to fncache
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 43002
diff changeset
69 copydata = oldrl.opener.exists(oldrl.datafile)
373749982924 upgrade: also register copied `.d` files to fncache
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 43002
diff changeset
70 if copydata:
42714
5535a2201ff1 upgrade: introduce a _copyrevlog method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42713
diff changeset
71 util.copyfile(olddata, newdata)
5535a2201ff1 upgrade: introduce a _copyrevlog method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42713
diff changeset
72
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43031
diff changeset
73 if not (
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
74 unencodedname.endswith(b'00changelog.i')
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
75 or unencodedname.endswith(b'00manifest.i')
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43031
diff changeset
76 ):
42714
5535a2201ff1 upgrade: introduce a _copyrevlog method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42713
diff changeset
77 destrepo.svfs.fncache.add(unencodedname)
43004
373749982924 upgrade: also register copied `.d` files to fncache
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 43002
diff changeset
78 if copydata:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
79 destrepo.svfs.fncache.add(unencodedname[:-2] + b'.d')
42714
5535a2201ff1 upgrade: introduce a _copyrevlog method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42713
diff changeset
80
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43031
diff changeset
81
46039
6c960b708ac4 upgrade: display the list of processed revlog before proceeding
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46018
diff changeset
82 UPGRADE_CHANGELOG = b"changelog"
6c960b708ac4 upgrade: display the list of processed revlog before proceeding
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46018
diff changeset
83 UPGRADE_MANIFEST = b"manifest"
6c960b708ac4 upgrade: display the list of processed revlog before proceeding
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46018
diff changeset
84 UPGRADE_FILELOGS = b"all-filelogs"
42715
0812d9fb63fe upgrade: introduce the internal code for revlog cloning selection
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42714
diff changeset
85
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43031
diff changeset
86 UPGRADE_ALL_REVLOGS = frozenset(
45995
fe7d7917ceb5 upgrade: rename UPGRADE_FILELOG to UPGRADE_FILELOGS
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 45735
diff changeset
87 [UPGRADE_CHANGELOG, UPGRADE_MANIFEST, UPGRADE_FILELOGS]
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43031
diff changeset
88 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43031
diff changeset
89
42715
0812d9fb63fe upgrade: introduce the internal code for revlog cloning selection
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42714
diff changeset
90
43135
6e3dc1eff5c7 upgrade: allow for `sidedata` removal
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 43134
diff changeset
91 def getsidedatacompanion(srcrepo, dstrepo):
6e3dc1eff5c7 upgrade: allow for `sidedata` removal
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 43134
diff changeset
92 sidedatacompanion = None
6e3dc1eff5c7 upgrade: allow for `sidedata` removal
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 43134
diff changeset
93 removedreqs = srcrepo.requirements - dstrepo.requirements
43148
843da18386d5 sidedatacopies: deal with upgrading and downgrading to that format
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 43138
diff changeset
94 addedreqs = dstrepo.requirements - srcrepo.requirements
45393
d7dcc75a3eae localrepo: move requirements constant to requirements module
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45392
diff changeset
95 if requirements.SIDEDATA_REQUIREMENT in removedreqs:
43135
6e3dc1eff5c7 upgrade: allow for `sidedata` removal
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 43134
diff changeset
96
6e3dc1eff5c7 upgrade: allow for `sidedata` removal
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 43134
diff changeset
97 def sidedatacompanion(rl, rev):
6e3dc1eff5c7 upgrade: allow for `sidedata` removal
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 43134
diff changeset
98 rl = getattr(rl, '_revlog', rl)
6e3dc1eff5c7 upgrade: allow for `sidedata` removal
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 43134
diff changeset
99 if rl.flags(rev) & revlog.REVIDX_SIDEDATA:
45735
edf4fa06df94 upgrade: allow sidedata upgrade to modify revision flag
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 45694
diff changeset
100 return True, (), {}, 0, 0
edf4fa06df94 upgrade: allow sidedata upgrade to modify revision flag
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 45694
diff changeset
101 return False, (), {}, 0, 0
43135
6e3dc1eff5c7 upgrade: allow for `sidedata` removal
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 43134
diff changeset
102
45393
d7dcc75a3eae localrepo: move requirements constant to requirements module
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45392
diff changeset
103 elif requirements.COPIESSDC_REQUIREMENT in addedreqs:
44981
4c1d39215034 metadata: move computation related to files touched in a dedicated module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 44900
diff changeset
104 sidedatacompanion = metadata.getsidedataadder(srcrepo, dstrepo)
45393
d7dcc75a3eae localrepo: move requirements constant to requirements module
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45392
diff changeset
105 elif requirements.COPIESSDC_REQUIREMENT in removedreqs:
44981
4c1d39215034 metadata: move computation related to files touched in a dedicated module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 44900
diff changeset
106 sidedatacompanion = metadata.getsidedataremover(srcrepo, dstrepo)
43135
6e3dc1eff5c7 upgrade: allow for `sidedata` removal
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 43134
diff changeset
107 return sidedatacompanion
43134
75ad8af9c95e upgrade: allow upgrade to repository using sidedata
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 43117
diff changeset
108
75ad8af9c95e upgrade: allow upgrade to repository using sidedata
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 43117
diff changeset
109
42715
0812d9fb63fe upgrade: introduce the internal code for revlog cloning selection
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42714
diff changeset
110 def matchrevlog(revlogfilter, entry):
45694
d1c10d33a85c upgrade: improve documentation of matchrevlog()
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45498
diff changeset
111 """check if a revlog is selected for cloning.
d1c10d33a85c upgrade: improve documentation of matchrevlog()
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45498
diff changeset
112
d1c10d33a85c upgrade: improve documentation of matchrevlog()
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45498
diff changeset
113 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: 45498
diff changeset
114 or it can be blindly copied.
42715
0812d9fb63fe upgrade: introduce the internal code for revlog cloning selection
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42714
diff changeset
115
0812d9fb63fe upgrade: introduce the internal code for revlog cloning selection
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42714
diff changeset
116 The store entry is checked against the passed filter"""
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
117 if entry.endswith(b'00changelog.i'):
42715
0812d9fb63fe upgrade: introduce the internal code for revlog cloning selection
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42714
diff changeset
118 return UPGRADE_CHANGELOG in revlogfilter
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
119 elif entry.endswith(b'00manifest.i'):
42715
0812d9fb63fe upgrade: introduce the internal code for revlog cloning selection
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42714
diff changeset
120 return UPGRADE_MANIFEST in revlogfilter
45995
fe7d7917ceb5 upgrade: rename UPGRADE_FILELOG to UPGRADE_FILELOGS
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 45735
diff changeset
121 return UPGRADE_FILELOGS in revlogfilter
42715
0812d9fb63fe upgrade: introduce the internal code for revlog cloning selection
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42714
diff changeset
122
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43031
diff changeset
123
46193
85f7cf314b39 engine: refactor actual cloning code into separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46191
diff changeset
124 def _perform_clone(
85f7cf314b39 engine: refactor actual cloning code into separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46191
diff changeset
125 ui,
85f7cf314b39 engine: refactor actual cloning code into separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46191
diff changeset
126 dstrepo,
85f7cf314b39 engine: refactor actual cloning code into separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46191
diff changeset
127 tr,
85f7cf314b39 engine: refactor actual cloning code into separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46191
diff changeset
128 old_revlog,
85f7cf314b39 engine: refactor actual cloning code into separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46191
diff changeset
129 unencoded,
46217
02df91e895bd engine: pass upgrade operation inside `_perform_clone()`
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46216
diff changeset
130 upgrade_op,
46193
85f7cf314b39 engine: refactor actual cloning code into separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46191
diff changeset
131 sidedatacompanion,
85f7cf314b39 engine: refactor actual cloning code into separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46191
diff changeset
132 oncopiedrevision,
85f7cf314b39 engine: refactor actual cloning code into separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46191
diff changeset
133 ):
85f7cf314b39 engine: refactor actual cloning code into separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46191
diff changeset
134 """ returns the new revlog object created"""
85f7cf314b39 engine: refactor actual cloning code into separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46191
diff changeset
135 newrl = None
46217
02df91e895bd engine: pass upgrade operation inside `_perform_clone()`
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46216
diff changeset
136 if matchrevlog(upgrade_op.revlogs_to_process, unencoded):
46193
85f7cf314b39 engine: refactor actual cloning code into separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46191
diff changeset
137 ui.note(
85f7cf314b39 engine: refactor actual cloning code into separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46191
diff changeset
138 _(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
139 )
85f7cf314b39 engine: refactor actual cloning code into separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46191
diff changeset
140 newrl = _revlogfrompath(dstrepo, unencoded)
85f7cf314b39 engine: refactor actual cloning code into separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46191
diff changeset
141 old_revlog.clone(
85f7cf314b39 engine: refactor actual cloning code into separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46191
diff changeset
142 tr,
85f7cf314b39 engine: refactor actual cloning code into separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46191
diff changeset
143 newrl,
85f7cf314b39 engine: refactor actual cloning code into separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46191
diff changeset
144 addrevisioncb=oncopiedrevision,
46217
02df91e895bd engine: pass upgrade operation inside `_perform_clone()`
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46216
diff changeset
145 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
146 forcedeltabothparents=upgrade_op.force_re_delta_both_parents,
46193
85f7cf314b39 engine: refactor actual cloning code into separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46191
diff changeset
147 sidedatacompanion=sidedatacompanion,
85f7cf314b39 engine: refactor actual cloning code into separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46191
diff changeset
148 )
85f7cf314b39 engine: refactor actual cloning code into separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46191
diff changeset
149 else:
85f7cf314b39 engine: refactor actual cloning code into separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46191
diff changeset
150 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
151 ui.note(msg % (unencoded, len(old_revlog)))
85f7cf314b39 engine: refactor actual cloning code into separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46191
diff changeset
152 _copyrevlog(tr, dstrepo, old_revlog, unencoded)
85f7cf314b39 engine: refactor actual cloning code into separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46191
diff changeset
153
85f7cf314b39 engine: refactor actual cloning code into separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46191
diff changeset
154 newrl = _revlogfrompath(dstrepo, unencoded)
85f7cf314b39 engine: refactor actual cloning code into separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46191
diff changeset
155 return newrl
85f7cf314b39 engine: refactor actual cloning code into separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46191
diff changeset
156
85f7cf314b39 engine: refactor actual cloning code into separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46191
diff changeset
157
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43031
diff changeset
158 def _clonerevlogs(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43031
diff changeset
159 ui,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43031
diff changeset
160 srcrepo,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43031
diff changeset
161 dstrepo,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43031
diff changeset
162 tr,
46216
34efa84a43a1 engine: pass upgrade operation inside _clonerevlogs()
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46215
diff changeset
163 upgrade_op,
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43031
diff changeset
164 ):
30779
38aa1ca97b6a repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30777
diff changeset
165 """Copy revlogs between 2 repos."""
38aa1ca97b6a repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30777
diff changeset
166 revcount = 0
38aa1ca97b6a repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30777
diff changeset
167 srcsize = 0
38aa1ca97b6a repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30777
diff changeset
168 srcrawsize = 0
38aa1ca97b6a repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30777
diff changeset
169 dstsize = 0
38aa1ca97b6a repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30777
diff changeset
170 fcount = 0
38aa1ca97b6a repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30777
diff changeset
171 frevcount = 0
38aa1ca97b6a repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30777
diff changeset
172 fsrcsize = 0
38aa1ca97b6a repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30777
diff changeset
173 frawsize = 0
38aa1ca97b6a repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30777
diff changeset
174 fdstsize = 0
38aa1ca97b6a repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30777
diff changeset
175 mcount = 0
38aa1ca97b6a repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30777
diff changeset
176 mrevcount = 0
38aa1ca97b6a repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30777
diff changeset
177 msrcsize = 0
38aa1ca97b6a repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30777
diff changeset
178 mrawsize = 0
38aa1ca97b6a repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30777
diff changeset
179 mdstsize = 0
38aa1ca97b6a repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30777
diff changeset
180 crevcount = 0
38aa1ca97b6a repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30777
diff changeset
181 csrcsize = 0
38aa1ca97b6a repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30777
diff changeset
182 crawsize = 0
38aa1ca97b6a repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30777
diff changeset
183 cdstsize = 0
38aa1ca97b6a repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30777
diff changeset
184
42712
896fb9deeaf8 upgrade: walk the source store file only once
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42137
diff changeset
185 alldatafiles = list(srcrepo.store.walk())
46194
4d1cec4e5e1f engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46193
diff changeset
186 # 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
187 # key is unencoded filename
4d1cec4e5e1f engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46193
diff changeset
188 # value is revlog_object_from_srcrepo
4d1cec4e5e1f engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46193
diff changeset
189 manifests = {}
4d1cec4e5e1f engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46193
diff changeset
190 changelogs = {}
4d1cec4e5e1f engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46193
diff changeset
191 filelogs = {}
42712
896fb9deeaf8 upgrade: walk the source store file only once
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42137
diff changeset
192
30779
38aa1ca97b6a repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30777
diff changeset
193 # 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
194 # source files and allows a unified progress bar to be displayed.
42712
896fb9deeaf8 upgrade: walk the source store file only once
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42137
diff changeset
195 for unencoded, encoded, size in alldatafiles:
46252
8023991dc811 upgrade: explicitly test for revlog index
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46229
diff changeset
196 if not unencoded.endswith(b'.i'):
30779
38aa1ca97b6a repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30777
diff changeset
197 continue
38aa1ca97b6a repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30777
diff changeset
198
38aa1ca97b6a repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30777
diff changeset
199 rl = _revlogfrompath(srcrepo, unencoded)
38aa1ca97b6a repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30777
diff changeset
200
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43031
diff changeset
201 info = rl.storageinfo(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43031
diff changeset
202 exclusivefiles=True,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43031
diff changeset
203 revisionscount=True,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43031
diff changeset
204 trackedsize=True,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43031
diff changeset
205 storedsize=True,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43031
diff changeset
206 )
39862
8dab7c8a93eb upgrade: report size of backing files, not internal storage size
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39563
diff changeset
207
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
208 revcount += info[b'revisionscount'] or 0
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
209 datasize = info[b'storedsize'] or 0
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
210 rawsize = info[b'trackedsize'] or 0
30779
38aa1ca97b6a repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30777
diff changeset
211
38aa1ca97b6a repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30777
diff changeset
212 srcsize += datasize
38aa1ca97b6a repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30777
diff changeset
213 srcrawsize += rawsize
38aa1ca97b6a repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30777
diff changeset
214
38aa1ca97b6a repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30777
diff changeset
215 # This is for the separate progress bars.
38aa1ca97b6a repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30777
diff changeset
216 if isinstance(rl, changelog.changelog):
46194
4d1cec4e5e1f engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46193
diff changeset
217 changelogs[unencoded] = rl
30779
38aa1ca97b6a repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30777
diff changeset
218 crevcount += len(rl)
38aa1ca97b6a repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30777
diff changeset
219 csrcsize += datasize
38aa1ca97b6a repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30777
diff changeset
220 crawsize += rawsize
38aa1ca97b6a repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30777
diff changeset
221 elif isinstance(rl, manifest.manifestrevlog):
46194
4d1cec4e5e1f engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46193
diff changeset
222 manifests[unencoded] = rl
30779
38aa1ca97b6a repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30777
diff changeset
223 mcount += 1
38aa1ca97b6a repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30777
diff changeset
224 mrevcount += len(rl)
38aa1ca97b6a repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30777
diff changeset
225 msrcsize += datasize
38aa1ca97b6a repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30777
diff changeset
226 mrawsize += rawsize
37444
c8666a9e9e11 upgrade: sniff for filelog type
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36404
diff changeset
227 elif isinstance(rl, filelog.filelog):
46194
4d1cec4e5e1f engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46193
diff changeset
228 filelogs[unencoded] = rl
30779
38aa1ca97b6a repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30777
diff changeset
229 fcount += 1
38aa1ca97b6a repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30777
diff changeset
230 frevcount += len(rl)
38aa1ca97b6a repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30777
diff changeset
231 fsrcsize += datasize
38aa1ca97b6a repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30777
diff changeset
232 frawsize += rawsize
37444
c8666a9e9e11 upgrade: sniff for filelog type
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36404
diff changeset
233 else:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
234 error.ProgrammingError(b'unknown revlog type')
30779
38aa1ca97b6a repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30777
diff changeset
235
38aa1ca97b6a repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30777
diff changeset
236 if not revcount:
38aa1ca97b6a repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30777
diff changeset
237 return
38aa1ca97b6a repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30777
diff changeset
238
44875
e295ba238bd8 upgrade: support the --quiet flag
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 44874
diff changeset
239 ui.status(
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43031
diff changeset
240 _(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
241 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
242 b'%d in changelog)\n'
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43031
diff changeset
243 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43031
diff changeset
244 % (revcount, frevcount, mrevcount, crevcount)
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43031
diff changeset
245 )
44875
e295ba238bd8 upgrade: support the --quiet flag
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 44874
diff changeset
246 ui.status(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
247 _(b'migrating %s in store; %s tracked data\n')
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43031
diff changeset
248 % ((util.bytecount(srcsize), util.bytecount(srcrawsize)))
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43031
diff changeset
249 )
30779
38aa1ca97b6a repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30777
diff changeset
250
38aa1ca97b6a repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30777
diff changeset
251 # Used to keep track of progress.
38405
185588cb0c4b upgrade: use progress helper
Martin von Zweigbergk <martinvonz@google.com>
parents: 38404
diff changeset
252 progress = None
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43031
diff changeset
253
30779
38aa1ca97b6a repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30777
diff changeset
254 def oncopiedrevision(rl, rev, node):
38405
185588cb0c4b upgrade: use progress helper
Martin von Zweigbergk <martinvonz@google.com>
parents: 38404
diff changeset
255 progress.increment()
30779
38aa1ca97b6a repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30777
diff changeset
256
43134
75ad8af9c95e upgrade: allow upgrade to repository using sidedata
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 43117
diff changeset
257 sidedatacompanion = getsidedatacompanion(srcrepo, dstrepo)
75ad8af9c95e upgrade: allow upgrade to repository using sidedata
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 43117
diff changeset
258
46194
4d1cec4e5e1f engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46193
diff changeset
259 # Migrating filelogs
4d1cec4e5e1f engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46193
diff changeset
260 ui.status(
4d1cec4e5e1f engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46193
diff changeset
261 _(
4d1cec4e5e1f engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46193
diff changeset
262 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
263 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
264 )
4d1cec4e5e1f engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46193
diff changeset
265 % (
4d1cec4e5e1f engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46193
diff changeset
266 fcount,
4d1cec4e5e1f engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46193
diff changeset
267 frevcount,
4d1cec4e5e1f engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46193
diff changeset
268 util.bytecount(fsrcsize),
4d1cec4e5e1f engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46193
diff changeset
269 util.bytecount(frawsize),
4d1cec4e5e1f engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46193
diff changeset
270 )
4d1cec4e5e1f engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46193
diff changeset
271 )
4d1cec4e5e1f engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46193
diff changeset
272 progress = srcrepo.ui.makeprogress(_(b'file revisions'), total=frevcount)
4d1cec4e5e1f engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46193
diff changeset
273 for unencoded, oldrl in sorted(filelogs.items()):
46193
85f7cf314b39 engine: refactor actual cloning code into separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46191
diff changeset
274 newrl = _perform_clone(
85f7cf314b39 engine: refactor actual cloning code into separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46191
diff changeset
275 ui,
85f7cf314b39 engine: refactor actual cloning code into separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46191
diff changeset
276 dstrepo,
85f7cf314b39 engine: refactor actual cloning code into separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46191
diff changeset
277 tr,
85f7cf314b39 engine: refactor actual cloning code into separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46191
diff changeset
278 oldrl,
85f7cf314b39 engine: refactor actual cloning code into separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46191
diff changeset
279 unencoded,
46217
02df91e895bd engine: pass upgrade operation inside `_perform_clone()`
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46216
diff changeset
280 upgrade_op,
46193
85f7cf314b39 engine: refactor actual cloning code into separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46191
diff changeset
281 sidedatacompanion,
85f7cf314b39 engine: refactor actual cloning code into separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46191
diff changeset
282 oncopiedrevision,
85f7cf314b39 engine: refactor actual cloning code into separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46191
diff changeset
283 )
39875
b399ff55ee6d upgrade: use storageinfo() for obtaining storage metadata
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39864
diff changeset
284 info = newrl.storageinfo(storedsize=True)
46214
5dfa837d933e engine: refactor how total dstsize is calculated
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46210
diff changeset
285 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
286 ui.status(
4d1cec4e5e1f engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46193
diff changeset
287 _(
4d1cec4e5e1f engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46193
diff changeset
288 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
289 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
290 )
4d1cec4e5e1f engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46193
diff changeset
291 % (frevcount, fcount, util.bytecount(fdstsize - fsrcsize))
4d1cec4e5e1f engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46193
diff changeset
292 )
30779
38aa1ca97b6a repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30777
diff changeset
293
46194
4d1cec4e5e1f engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46193
diff changeset
294 # Migrating manifests
4d1cec4e5e1f engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46193
diff changeset
295 ui.status(
4d1cec4e5e1f engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46193
diff changeset
296 _(
4d1cec4e5e1f engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46193
diff changeset
297 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
298 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
299 )
4d1cec4e5e1f engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46193
diff changeset
300 % (
4d1cec4e5e1f engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46193
diff changeset
301 mcount,
4d1cec4e5e1f engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46193
diff changeset
302 mrevcount,
4d1cec4e5e1f engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46193
diff changeset
303 util.bytecount(msrcsize),
4d1cec4e5e1f engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46193
diff changeset
304 util.bytecount(mrawsize),
4d1cec4e5e1f engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46193
diff changeset
305 )
4d1cec4e5e1f engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46193
diff changeset
306 )
4d1cec4e5e1f engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46193
diff changeset
307 if progress:
4d1cec4e5e1f engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46193
diff changeset
308 progress.complete()
4d1cec4e5e1f engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46193
diff changeset
309 progress = srcrepo.ui.makeprogress(
4d1cec4e5e1f engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46193
diff changeset
310 _(b'manifest revisions'), total=mrevcount
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 for unencoded, oldrl in sorted(manifests.items()):
4d1cec4e5e1f engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46193
diff changeset
313 newrl = _perform_clone(
4d1cec4e5e1f engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46193
diff changeset
314 ui,
4d1cec4e5e1f engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46193
diff changeset
315 dstrepo,
4d1cec4e5e1f engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46193
diff changeset
316 tr,
4d1cec4e5e1f engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46193
diff changeset
317 oldrl,
4d1cec4e5e1f engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46193
diff changeset
318 unencoded,
46217
02df91e895bd engine: pass upgrade operation inside `_perform_clone()`
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46216
diff changeset
319 upgrade_op,
46194
4d1cec4e5e1f engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46193
diff changeset
320 sidedatacompanion,
4d1cec4e5e1f engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46193
diff changeset
321 oncopiedrevision,
4d1cec4e5e1f engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46193
diff changeset
322 )
4d1cec4e5e1f engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46193
diff changeset
323 info = newrl.storageinfo(storedsize=True)
46214
5dfa837d933e engine: refactor how total dstsize is calculated
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46210
diff changeset
324 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
325 ui.status(
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 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
328 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
329 )
4d1cec4e5e1f engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46193
diff changeset
330 % (mrevcount, mcount, util.bytecount(mdstsize - msrcsize))
4d1cec4e5e1f engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46193
diff changeset
331 )
30779
38aa1ca97b6a repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30777
diff changeset
332
46194
4d1cec4e5e1f engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46193
diff changeset
333 # Migrating changelog
4d1cec4e5e1f engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46193
diff changeset
334 ui.status(
4d1cec4e5e1f engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46193
diff changeset
335 _(
4d1cec4e5e1f engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46193
diff changeset
336 b'migrating changelog containing %d revisions '
4d1cec4e5e1f engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46193
diff changeset
337 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
338 )
4d1cec4e5e1f engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46193
diff changeset
339 % (
4d1cec4e5e1f engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46193
diff changeset
340 crevcount,
4d1cec4e5e1f engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46193
diff changeset
341 util.bytecount(csrcsize),
4d1cec4e5e1f engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46193
diff changeset
342 util.bytecount(crawsize),
4d1cec4e5e1f engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46193
diff changeset
343 )
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 if progress:
4d1cec4e5e1f engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46193
diff changeset
346 progress.complete()
4d1cec4e5e1f engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46193
diff changeset
347 progress = srcrepo.ui.makeprogress(
4d1cec4e5e1f engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46193
diff changeset
348 _(b'changelog revisions'), total=crevcount
4d1cec4e5e1f engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46193
diff changeset
349 )
4d1cec4e5e1f engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46193
diff changeset
350 for unencoded, oldrl in sorted(changelogs.items()):
4d1cec4e5e1f engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46193
diff changeset
351 newrl = _perform_clone(
4d1cec4e5e1f engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46193
diff changeset
352 ui,
4d1cec4e5e1f engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46193
diff changeset
353 dstrepo,
4d1cec4e5e1f engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46193
diff changeset
354 tr,
4d1cec4e5e1f engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46193
diff changeset
355 oldrl,
4d1cec4e5e1f engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46193
diff changeset
356 unencoded,
46217
02df91e895bd engine: pass upgrade operation inside `_perform_clone()`
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46216
diff changeset
357 upgrade_op,
46194
4d1cec4e5e1f engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46193
diff changeset
358 sidedatacompanion,
4d1cec4e5e1f engine: unwrap a hard to understand for loop
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46193
diff changeset
359 oncopiedrevision,
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 info = newrl.storageinfo(storedsize=True)
46214
5dfa837d933e engine: refactor how total dstsize is calculated
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46210
diff changeset
362 cdstsize += info[b'storedsize'] or 0
38405
185588cb0c4b upgrade: use progress helper
Martin von Zweigbergk <martinvonz@google.com>
parents: 38404
diff changeset
363 progress.complete()
44875
e295ba238bd8 upgrade: support the --quiet flag
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 44874
diff changeset
364 ui.status(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
365 _(
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
366 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
367 b'%s\n'
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
368 )
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43031
diff changeset
369 % (crevcount, util.bytecount(cdstsize - csrcsize))
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43031
diff changeset
370 )
30779
38aa1ca97b6a repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30777
diff changeset
371
46214
5dfa837d933e engine: refactor how total dstsize is calculated
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46210
diff changeset
372 dstsize = fdstsize + mdstsize + cdstsize
44875
e295ba238bd8 upgrade: support the --quiet flag
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 44874
diff changeset
373 ui.status(
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43031
diff changeset
374 _(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
375 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
376 b'size: %s\n'
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43031
diff changeset
377 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43031
diff changeset
378 % (revcount, util.bytecount(dstsize - srcsize))
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43031
diff changeset
379 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43031
diff changeset
380
30779
38aa1ca97b6a repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30777
diff changeset
381
46229
52abb1af2995 engine: prevent a function call for each store file
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46222
diff changeset
382 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
383 """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
384 are cloned"""
52abb1af2995 engine: prevent a function call for each store file
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46222
diff changeset
385 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
386 # don't copy revlogs as they are already cloned
52abb1af2995 engine: prevent a function call for each store file
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46222
diff changeset
387 if path.endswith((b'.i', b'.d', b'.n', b'.nd')):
52abb1af2995 engine: prevent a function call for each store file
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46222
diff changeset
388 continue
52abb1af2995 engine: prevent a function call for each store file
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46222
diff changeset
389 # Skip transaction related files.
52abb1af2995 engine: prevent a function call for each store file
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46222
diff changeset
390 if path.startswith(b'undo'):
52abb1af2995 engine: prevent a function call for each store file
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46222
diff changeset
391 continue
52abb1af2995 engine: prevent a function call for each store file
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46222
diff changeset
392 # Only copy regular files.
52abb1af2995 engine: prevent a function call for each store file
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46222
diff changeset
393 if kind != stat.S_IFREG:
52abb1af2995 engine: prevent a function call for each store file
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46222
diff changeset
394 continue
52abb1af2995 engine: prevent a function call for each store file
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46222
diff changeset
395 # Skip other skipped files.
52abb1af2995 engine: prevent a function call for each store file
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46222
diff changeset
396 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
397 continue
52abb1af2995 engine: prevent a function call for each store file
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46222
diff changeset
398 # 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
399
46229
52abb1af2995 engine: prevent a function call for each store file
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46222
diff changeset
400 yield path
30780
2603d04889e1 repair: copy non-revlog store files during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30779
diff changeset
401
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43031
diff changeset
402
46220
1ca7865c245d engine: refactor code to replace stores in separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46219
diff changeset
403 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
404 """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
405
1ca7865c245d engine: refactor code to replace stores in separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46219
diff changeset
406 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
407 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
408
1ca7865c245d engine: refactor code to replace stores in separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46219
diff changeset
409 Arguments:
1ca7865c245d engine: refactor code to replace stores in separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46219
diff changeset
410 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
411 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
412 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
413 upgrade_op: upgrade operation object
1ca7865c245d engine: refactor code to replace stores in separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46219
diff changeset
414 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
415 """
1ca7865c245d engine: refactor code to replace stores in separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46219
diff changeset
416 # 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
417 # There can be upgrades where store is not touched at all
46447
2e8a844d0ae0 upgrade: don't create store backup if `--no-backup` is passed
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46252
diff changeset
418 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
419 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
420 else:
2e8a844d0ae0 upgrade: don't create store backup if `--no-backup` is passed
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46252
diff changeset
421 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
422 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
423
1ca7865c245d engine: refactor code to replace stores in separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46219
diff changeset
424
46219
481d9aed669c engine: make hook point for extension a public function
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46218
diff changeset
425 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
426 """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
427
2603d04889e1 repair: copy non-revlog store files during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30779
diff changeset
428 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
429 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
430 """
2603d04889e1 repair: copy non-revlog store files during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30779
diff changeset
431
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43031
diff changeset
432
46060
c407513a44a3 upgrade: start moving the "to be happening" data in a dedicated object
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46050
diff changeset
433 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
434 """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
435
7de7afd8bdd9 repair: begin implementation of in-place upgrading
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30776
diff changeset
436 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
437 repository and a temporary destination repository.
7de7afd8bdd9 repair: begin implementation of in-place upgrading
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30776
diff changeset
438
7de7afd8bdd9 repair: begin implementation of in-place upgrading
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30776
diff changeset
439 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
440 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
441 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
442 """
7de7afd8bdd9 repair: begin implementation of in-place upgrading
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30776
diff changeset
443 assert srcrepo.currentwlock()
7de7afd8bdd9 repair: begin implementation of in-place upgrading
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30776
diff changeset
444 assert dstrepo.currentwlock()
46447
2e8a844d0ae0 upgrade: don't create store backup if `--no-backup` is passed
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46252
diff changeset
445 backuppath = None
2e8a844d0ae0 upgrade: don't create store backup if `--no-backup` is passed
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46252
diff changeset
446 backupvfs = None
30777
7de7afd8bdd9 repair: begin implementation of in-place upgrading
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30776
diff changeset
447
44875
e295ba238bd8 upgrade: support the --quiet flag
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 44874
diff changeset
448 ui.status(
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43031
diff changeset
449 _(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
450 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
451 b'data migration completes)\n'
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43031
diff changeset
452 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43031
diff changeset
453 )
30779
38aa1ca97b6a repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30777
diff changeset
454
46528
45c3a263d5d1 engine: 'if not, else' -> 'if, else'
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46452
diff changeset
455 if upgrade_op.requirements_only:
45c3a263d5d1 engine: 'if not, else' -> 'if, else'
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46452
diff changeset
456 ui.status(_(b'upgrading repository requirements\n'))
45c3a263d5d1 engine: 'if not, else' -> 'if, else'
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46452
diff changeset
457 scmutil.writereporequirements(srcrepo, upgrade_op.new_requirements)
46533
98e39f04d60e upgrade: implement partial upgrade for upgrading persistent-nodemap
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46528
diff changeset
458 # 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: 46528
diff changeset
459 # 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: 46528
diff changeset
460 # through the whole cloning process
98e39f04d60e upgrade: implement partial upgrade for upgrading persistent-nodemap
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46528
diff changeset
461 elif (
98e39f04d60e upgrade: implement partial upgrade for upgrading persistent-nodemap
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46528
diff changeset
462 len(upgrade_op.upgrade_actions) == 1
98e39f04d60e upgrade: implement partial upgrade for upgrading persistent-nodemap
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46528
diff changeset
463 and b'persistent-nodemap' in upgrade_op._upgrade_actions_names
98e39f04d60e upgrade: implement partial upgrade for upgrading persistent-nodemap
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46528
diff changeset
464 and not upgrade_op.removed_actions
98e39f04d60e upgrade: implement partial upgrade for upgrading persistent-nodemap
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46528
diff changeset
465 ):
98e39f04d60e upgrade: implement partial upgrade for upgrading persistent-nodemap
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46528
diff changeset
466 ui.status(
98e39f04d60e upgrade: implement partial upgrade for upgrading persistent-nodemap
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46528
diff changeset
467 _(b'upgrading repository to use persistent nodemap feature\n')
98e39f04d60e upgrade: implement partial upgrade for upgrading persistent-nodemap
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46528
diff changeset
468 )
98e39f04d60e upgrade: implement partial upgrade for upgrading persistent-nodemap
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46528
diff changeset
469 with srcrepo.transaction(b'upgrade') as tr:
98e39f04d60e upgrade: implement partial upgrade for upgrading persistent-nodemap
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46528
diff changeset
470 unfi = srcrepo.unfiltered()
98e39f04d60e upgrade: implement partial upgrade for upgrading persistent-nodemap
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46528
diff changeset
471 cl = unfi.changelog
98e39f04d60e upgrade: implement partial upgrade for upgrading persistent-nodemap
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46528
diff changeset
472 nodemap.persist_nodemap(tr, cl, force=True)
46575
636853347e14 upgrade: write nodemap for manifests too
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46533
diff changeset
473 # we want to directly operate on the underlying revlog to force
636853347e14 upgrade: write nodemap for manifests too
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46533
diff changeset
474 # 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: 46533
diff changeset
475 # and it heavily relies on repository being revlog based
636853347e14 upgrade: write nodemap for manifests too
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46533
diff changeset
476 # hence accessing private attributes can be justified
636853347e14 upgrade: write nodemap for manifests too
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46533
diff changeset
477 nodemap.persist_nodemap(
636853347e14 upgrade: write nodemap for manifests too
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46533
diff changeset
478 tr, unfi.manifestlog._rootstore._revlog, force=True
636853347e14 upgrade: write nodemap for manifests too
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46533
diff changeset
479 )
46533
98e39f04d60e upgrade: implement partial upgrade for upgrading persistent-nodemap
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46528
diff changeset
480 scmutil.writereporequirements(srcrepo, upgrade_op.new_requirements)
46576
67b5fafd3a46 upgrade: speed up when we have only nodemap to downgrade
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46575
diff changeset
481 elif (
67b5fafd3a46 upgrade: speed up when we have only nodemap to downgrade
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46575
diff changeset
482 len(upgrade_op.removed_actions) == 1
67b5fafd3a46 upgrade: speed up when we have only nodemap to downgrade
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46575
diff changeset
483 and [
67b5fafd3a46 upgrade: speed up when we have only nodemap to downgrade
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46575
diff changeset
484 x
67b5fafd3a46 upgrade: speed up when we have only nodemap to downgrade
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46575
diff changeset
485 for x in upgrade_op.removed_actions
67b5fafd3a46 upgrade: speed up when we have only nodemap to downgrade
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46575
diff changeset
486 if x.name == b'persistent-nodemap'
67b5fafd3a46 upgrade: speed up when we have only nodemap to downgrade
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46575
diff changeset
487 ]
67b5fafd3a46 upgrade: speed up when we have only nodemap to downgrade
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46575
diff changeset
488 and not upgrade_op.upgrade_actions
67b5fafd3a46 upgrade: speed up when we have only nodemap to downgrade
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46575
diff changeset
489 ):
67b5fafd3a46 upgrade: speed up when we have only nodemap to downgrade
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46575
diff changeset
490 ui.status(
67b5fafd3a46 upgrade: speed up when we have only nodemap to downgrade
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46575
diff changeset
491 _(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: 46575
diff changeset
492 )
67b5fafd3a46 upgrade: speed up when we have only nodemap to downgrade
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46575
diff changeset
493 with srcrepo.transaction(b'upgrade') as tr:
67b5fafd3a46 upgrade: speed up when we have only nodemap to downgrade
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46575
diff changeset
494 unfi = srcrepo.unfiltered()
67b5fafd3a46 upgrade: speed up when we have only nodemap to downgrade
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46575
diff changeset
495 cl = unfi.changelog
67b5fafd3a46 upgrade: speed up when we have only nodemap to downgrade
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46575
diff changeset
496 nodemap.delete_nodemap(tr, srcrepo, cl)
67b5fafd3a46 upgrade: speed up when we have only nodemap to downgrade
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46575
diff changeset
497 # 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: 46575
diff changeset
498 nodemap.delete_nodemap(
67b5fafd3a46 upgrade: speed up when we have only nodemap to downgrade
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46575
diff changeset
499 tr, srcrepo, unfi.manifestlog._rootstore._revlog
67b5fafd3a46 upgrade: speed up when we have only nodemap to downgrade
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46575
diff changeset
500 )
67b5fafd3a46 upgrade: speed up when we have only nodemap to downgrade
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46575
diff changeset
501 scmutil.writereporequirements(srcrepo, upgrade_op.new_requirements)
46528
45c3a263d5d1 engine: 'if not, else' -> 'if, else'
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46452
diff changeset
502 else:
46451
ee9002b99595 engine: add `if True` to prepare for next patch
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46447
diff changeset
503 with dstrepo.transaction(b'upgrade') as tr:
ee9002b99595 engine: add `if True` to prepare for next patch
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46447
diff changeset
504 _clonerevlogs(
ee9002b99595 engine: add `if True` to prepare for next patch
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46447
diff changeset
505 ui,
ee9002b99595 engine: add `if True` to prepare for next patch
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46447
diff changeset
506 srcrepo,
ee9002b99595 engine: add `if True` to prepare for next patch
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46447
diff changeset
507 dstrepo,
ee9002b99595 engine: add `if True` to prepare for next patch
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46447
diff changeset
508 tr,
ee9002b99595 engine: add `if True` to prepare for next patch
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46447
diff changeset
509 upgrade_op,
ee9002b99595 engine: add `if True` to prepare for next patch
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46447
diff changeset
510 )
ee9002b99595 engine: add `if True` to prepare for next patch
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46447
diff changeset
511
ee9002b99595 engine: add `if True` to prepare for next patch
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46447
diff changeset
512 # Now copy other files in the store directory.
ee9002b99595 engine: add `if True` to prepare for next patch
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46447
diff changeset
513 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: 46447
diff changeset
514 srcrepo.ui.status(_(b'copying %s\n') % p)
ee9002b99595 engine: add `if True` to prepare for next patch
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46447
diff changeset
515 src = srcrepo.store.rawvfs.join(p)
ee9002b99595 engine: add `if True` to prepare for next patch
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46447
diff changeset
516 dst = dstrepo.store.rawvfs.join(p)
ee9002b99595 engine: add `if True` to prepare for next patch
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46447
diff changeset
517 util.copyfile(src, dst, copystat=True)
ee9002b99595 engine: add `if True` to prepare for next patch
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46447
diff changeset
518
ee9002b99595 engine: add `if True` to prepare for next patch
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46447
diff changeset
519 finishdatamigration(ui, srcrepo, dstrepo, requirements)
ee9002b99595 engine: add `if True` to prepare for next patch
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46447
diff changeset
520
ee9002b99595 engine: add `if True` to prepare for next patch
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46447
diff changeset
521 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
522
46451
ee9002b99595 engine: add `if True` to prepare for next patch
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46447
diff changeset
523 if upgrade_op.backup_store:
ee9002b99595 engine: add `if True` to prepare for next patch
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46447
diff changeset
524 backuppath = pycompat.mkdtemp(
ee9002b99595 engine: add `if True` to prepare for next patch
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46447
diff changeset
525 prefix=b'upgradebackup.', dir=srcrepo.path
ee9002b99595 engine: add `if True` to prepare for next patch
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46447
diff changeset
526 )
ee9002b99595 engine: add `if True` to prepare for next patch
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46447
diff changeset
527 backupvfs = vfsmod.vfs(backuppath)
30780
2603d04889e1 repair: copy non-revlog store files during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30779
diff changeset
528
46451
ee9002b99595 engine: add `if True` to prepare for next patch
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46447
diff changeset
529 # 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: 46447
diff changeset
530 util.copyfile(
ee9002b99595 engine: add `if True` to prepare for next patch
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46447
diff changeset
531 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: 46447
diff changeset
532 )
30779
38aa1ca97b6a repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30777
diff changeset
533
46451
ee9002b99595 engine: add `if True` to prepare for next patch
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46447
diff changeset
534 # 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: 46447
diff changeset
535 # 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: 46447
diff changeset
536 # 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: 46447
diff changeset
537 # an inconsistent state.
ee9002b99595 engine: add `if True` to prepare for next patch
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46447
diff changeset
538 ui.status(
ee9002b99595 engine: add `if True` to prepare for next patch
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46447
diff changeset
539 _(
ee9002b99595 engine: add `if True` to prepare for next patch
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46447
diff changeset
540 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: 46447
diff changeset
541 b'unable to read from repository\n'
ee9002b99595 engine: add `if True` to prepare for next patch
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46447
diff changeset
542 )
46447
2e8a844d0ae0 upgrade: don't create store backup if `--no-backup` is passed
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46252
diff changeset
543 )
46451
ee9002b99595 engine: add `if True` to prepare for next patch
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46447
diff changeset
544 scmutil.writereporequirements(
ee9002b99595 engine: add `if True` to prepare for next patch
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46447
diff changeset
545 srcrepo, srcrepo.requirements | {b'upgradeinprogress'}
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43031
diff changeset
546 )
30779
38aa1ca97b6a repair: migrate revlogs during upgrade
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30777
diff changeset
547
46451
ee9002b99595 engine: add `if True` to prepare for next patch
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46447
diff changeset
548 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: 46447
diff changeset
549 if upgrade_op.backup_store:
ee9002b99595 engine: add `if True` to prepare for next patch
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46447
diff changeset
550 ui.status(
ee9002b99595 engine: add `if True` to prepare for next patch
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46447
diff changeset
551 _(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: 46447
diff changeset
552 )
30777
7de7afd8bdd9 repair: begin implementation of in-place upgrading
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30776
diff changeset
553
46451
ee9002b99595 engine: add `if True` to prepare for next patch
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46447
diff changeset
554 # 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: 46447
diff changeset
555 # 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: 46447
diff changeset
556 # environments).
ee9002b99595 engine: add `if True` to prepare for next patch
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46447
diff changeset
557 ui.status(_(b'replacing store...\n'))
ee9002b99595 engine: add `if True` to prepare for next patch
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46447
diff changeset
558 tstart = util.timer()
ee9002b99595 engine: add `if True` to prepare for next patch
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46447
diff changeset
559 _replacestores(srcrepo, dstrepo, backupvfs, upgrade_op)
ee9002b99595 engine: add `if True` to prepare for next patch
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46447
diff changeset
560 elapsed = util.timer() - tstart
ee9002b99595 engine: add `if True` to prepare for next patch
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46447
diff changeset
561 ui.status(
ee9002b99595 engine: add `if True` to prepare for next patch
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46447
diff changeset
562 _(
ee9002b99595 engine: add `if True` to prepare for next patch
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46447
diff changeset
563 b'store replacement complete; repository was inconsistent for '
ee9002b99595 engine: add `if True` to prepare for next patch
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46447
diff changeset
564 b'%0.1fs\n'
ee9002b99595 engine: add `if True` to prepare for next patch
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46447
diff changeset
565 )
ee9002b99595 engine: add `if True` to prepare for next patch
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46447
diff changeset
566 % elapsed
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43031
diff changeset
567 )
30777
7de7afd8bdd9 repair: begin implementation of in-place upgrading
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30776
diff changeset
568
46451
ee9002b99595 engine: add `if True` to prepare for next patch
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46447
diff changeset
569 # 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: 46447
diff changeset
570 # out legacy clients.
ee9002b99595 engine: add `if True` to prepare for next patch
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46447
diff changeset
571 ui.status(
ee9002b99595 engine: add `if True` to prepare for next patch
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46447
diff changeset
572 _(
ee9002b99595 engine: add `if True` to prepare for next patch
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46447
diff changeset
573 b'finalizing requirements file and making repository readable '
ee9002b99595 engine: add `if True` to prepare for next patch
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46447
diff changeset
574 b'again\n'
ee9002b99595 engine: add `if True` to prepare for next patch
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46447
diff changeset
575 )
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43031
diff changeset
576 )
46451
ee9002b99595 engine: add `if True` to prepare for next patch
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46447
diff changeset
577 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
578
46451
ee9002b99595 engine: add `if True` to prepare for next patch
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46447
diff changeset
579 if upgrade_op.backup_store:
ee9002b99595 engine: add `if True` to prepare for next patch
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46447
diff changeset
580 # 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: 46447
diff changeset
581 # 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: 46447
diff changeset
582 # 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: 46447
diff changeset
583 # location. This is simpler.
46796
e2f7b2695ba1 merge with stable
Matt Harbison <matt_harbison@yahoo.com>
parents: 46793 46402
diff changeset
584 assert backupvfs is not None # help pytype
46451
ee9002b99595 engine: add `if True` to prepare for next patch
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46447
diff changeset
585 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
586
30777
7de7afd8bdd9 repair: begin implementation of in-place upgrading
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30776
diff changeset
587 return backuppath