--- a/mercurial/upgrade.py Sun Oct 06 09:45:02 2019 -0400
+++ b/mercurial/upgrade.py Sun Oct 06 09:48:39 2019 -0400
@@ -28,7 +28,7 @@
# list of requirements that request a clone of all revlog if added/removed
RECLONES_REQUIREMENTS = {
- 'generaldelta',
+ b'generaldelta',
localrepo.SPARSEREVLOG_REQUIREMENT,
}
@@ -41,9 +41,9 @@
"""
return {
# Introduced in Mercurial 0.9.2.
- 'revlogv1',
+ b'revlogv1',
# Introduced in Mercurial 0.9.2.
- 'store',
+ b'store',
}
@@ -56,12 +56,12 @@
return {
# The upgrade code does not yet support these experimental features.
# This is an artificial limitation.
- 'treemanifest',
+ b'treemanifest',
# This was a precursor to generaldelta and was never enabled by default.
# It should (hopefully) not exist in the wild.
- 'parentdelta',
+ b'parentdelta',
# Upgrade should operate on the actual store, not the shared link.
- 'shared',
+ b'shared',
}
@@ -79,7 +79,7 @@
engine = compression.compengines[name]
if engine.available() and engine.revlogheader():
supported.add(b'exp-compression-%s' % name)
- if engine.name() == 'zstd':
+ if engine.name() == b'zstd':
supported.add(b'revlog-compression-zstd')
return supported
@@ -93,18 +93,18 @@
Extensions should monkeypatch this to add their custom requirements.
"""
supported = {
- 'dotencode',
- 'fncache',
- 'generaldelta',
- 'revlogv1',
- 'store',
+ b'dotencode',
+ b'fncache',
+ b'generaldelta',
+ b'revlogv1',
+ b'store',
localrepo.SPARSEREVLOG_REQUIREMENT,
}
for name in compression.compengines:
engine = compression.compengines[name]
if engine.available() and engine.revlogheader():
supported.add(b'exp-compression-%s' % name)
- if engine.name() == 'zstd':
+ if engine.name() == b'zstd':
supported.add(b'revlog-compression-zstd')
return supported
@@ -120,16 +120,16 @@
future, unknown requirements from accidentally being added.
"""
supported = {
- 'dotencode',
- 'fncache',
- 'generaldelta',
+ b'dotencode',
+ b'fncache',
+ b'generaldelta',
localrepo.SPARSEREVLOG_REQUIREMENT,
}
for name in compression.compengines:
engine = compression.compengines[name]
if engine.available() and engine.revlogheader():
supported.add(b'exp-compression-%s' % name)
- if engine.name() == 'zstd':
+ if engine.name() == b'zstd':
supported.add(b'revlog-compression-zstd')
return supported
@@ -138,8 +138,8 @@
return set()
-deficiency = 'deficiency'
-optimisation = 'optimization'
+deficiency = b'deficiency'
+optimisation = b'optimization'
class improvement(object):
@@ -259,129 +259,129 @@
@registerformatvariant
class fncache(requirementformatvariant):
- name = 'fncache'
+ name = b'fncache'
- _requirement = 'fncache'
+ _requirement = b'fncache'
default = True
description = _(
- 'long and reserved filenames may not work correctly; '
- 'repository performance is sub-optimal'
+ b'long and reserved filenames may not work correctly; '
+ b'repository performance is sub-optimal'
)
upgrademessage = _(
- 'repository will be more resilient to storing '
- 'certain paths and performance of certain '
- 'operations should be improved'
+ b'repository will be more resilient to storing '
+ b'certain paths and performance of certain '
+ b'operations should be improved'
)
@registerformatvariant
class dotencode(requirementformatvariant):
- name = 'dotencode'
+ name = b'dotencode'
- _requirement = 'dotencode'
+ _requirement = b'dotencode'
default = True
description = _(
- 'storage of filenames beginning with a period or '
- 'space may not work correctly'
+ b'storage of filenames beginning with a period or '
+ b'space may not work correctly'
)
upgrademessage = _(
- 'repository will be better able to store files '
- 'beginning with a space or period'
+ b'repository will be better able to store files '
+ b'beginning with a space or period'
)
@registerformatvariant
class generaldelta(requirementformatvariant):
- name = 'generaldelta'
+ name = b'generaldelta'
- _requirement = 'generaldelta'
+ _requirement = b'generaldelta'
default = True
description = _(
- 'deltas within internal storage are unable to '
- 'choose optimal revisions; repository is larger and '
- 'slower than it could be; interaction with other '
- 'repositories may require extra network and CPU '
- 'resources, making "hg push" and "hg pull" slower'
+ b'deltas within internal storage are unable to '
+ b'choose optimal revisions; repository is larger and '
+ b'slower than it could be; interaction with other '
+ b'repositories may require extra network and CPU '
+ b'resources, making "hg push" and "hg pull" slower'
)
upgrademessage = _(
- 'repository storage will be able to create '
- 'optimal deltas; new repository data will be '
- 'smaller and read times should decrease; '
- 'interacting with other repositories using this '
- 'storage model should require less network and '
- 'CPU resources, making "hg push" and "hg pull" '
- 'faster'
+ b'repository storage will be able to create '
+ b'optimal deltas; new repository data will be '
+ b'smaller and read times should decrease; '
+ b'interacting with other repositories using this '
+ b'storage model should require less network and '
+ b'CPU resources, making "hg push" and "hg pull" '
+ b'faster'
)
@registerformatvariant
class sparserevlog(requirementformatvariant):
- name = 'sparserevlog'
+ name = b'sparserevlog'
_requirement = localrepo.SPARSEREVLOG_REQUIREMENT
default = True
description = _(
- 'in order to limit disk reading and memory usage on older '
- 'version, the span of a delta chain from its root to its '
- 'end is limited, whatever the relevant data in this span. '
- 'This can severly limit Mercurial ability to build good '
- 'chain of delta resulting is much more storage space being '
- 'taken and limit reusability of on disk delta during '
- 'exchange.'
+ b'in order to limit disk reading and memory usage on older '
+ b'version, the span of a delta chain from its root to its '
+ b'end is limited, whatever the relevant data in this span. '
+ b'This can severly limit Mercurial ability to build good '
+ b'chain of delta resulting is much more storage space being '
+ b'taken and limit reusability of on disk delta during '
+ b'exchange.'
)
upgrademessage = _(
- 'Revlog supports delta chain with more unused data '
- 'between payload. These gaps will be skipped at read '
- 'time. This allows for better delta chains, making a '
- 'better compression and faster exchange with server.'
+ b'Revlog supports delta chain with more unused data '
+ b'between payload. These gaps will be skipped at read '
+ b'time. This allows for better delta chains, making a '
+ b'better compression and faster exchange with server.'
)
@registerformatvariant
class sidedata(requirementformatvariant):
- name = 'sidedata'
+ name = b'sidedata'
_requirement = localrepo.SIDEDATA_REQUIREMENT
default = False
description = _(
- 'Allows storage of extra data alongside a revision, '
- 'unlocking various caching options.'
+ b'Allows storage of extra data alongside a revision, '
+ b'unlocking various caching options.'
)
- upgrademessage = _('Allows storage of extra data alongside a revision.')
+ upgrademessage = _(b'Allows storage of extra data alongside a revision.')
@registerformatvariant
class removecldeltachain(formatvariant):
- name = 'plain-cl-delta'
+ name = b'plain-cl-delta'
default = True
description = _(
- 'changelog storage is using deltas instead of '
- 'raw entries; changelog reading and any '
- 'operation relying on changelog data are slower '
- 'than they could be'
+ b'changelog storage is using deltas instead of '
+ b'raw entries; changelog reading and any '
+ b'operation relying on changelog data are slower '
+ b'than they could be'
)
upgrademessage = _(
- 'changelog storage will be reformated to '
- 'store raw entries; changelog reading will be '
- 'faster; changelog size may be reduced'
+ b'changelog storage will be reformated to '
+ b'store raw entries; changelog reading will be '
+ b'faster; changelog size may be reduced'
)
@staticmethod
@@ -399,16 +399,16 @@
@registerformatvariant
class compressionengine(formatvariant):
- name = 'compression'
- default = 'zlib'
+ name = b'compression'
+ default = b'zlib'
description = _(
- 'Compresion algorithm used to compress data. '
- 'Some engine are faster than other'
+ b'Compresion algorithm used to compress data. '
+ b'Some engine are faster than other'
)
upgrademessage = _(
- 'revlog content will be recompressed with the new ' 'algorithm.'
+ b'revlog content will be recompressed with the new ' b'algorithm.'
)
@classmethod
@@ -417,49 +417,49 @@
# strickly speaking, revlog seems to support mixed compression style.
#
# The compression used for new entries will be "the last one"
- compression = 'zlib'
+ compression = b'zlib'
for req in repo.requirements:
prefix = req.startswith
- if prefix('revlog-compression-') or prefix('exp-compression-'):
- compression = req.split('-', 2)[2]
+ if prefix(b'revlog-compression-') or prefix(b'exp-compression-'):
+ compression = req.split(b'-', 2)[2]
return compression
@classmethod
def fromconfig(cls, repo):
- return repo.ui.config('format', 'revlog-compression')
+ return repo.ui.config(b'format', b'revlog-compression')
@registerformatvariant
class compressionlevel(formatvariant):
- name = 'compression-level'
- default = 'default'
+ name = b'compression-level'
+ default = b'default'
- description = _('compression level')
+ description = _(b'compression level')
- upgrademessage = _('revlog content will be recompressed')
+ upgrademessage = _(b'revlog content will be recompressed')
@classmethod
def fromrepo(cls, repo):
comp = compressionengine.fromrepo(repo)
level = None
- if comp == 'zlib':
- level = repo.ui.configint('storage', 'revlog.zlib.level')
- elif comp == 'zstd':
- level = repo.ui.configint('storage', 'revlog.zstd.level')
+ if comp == b'zlib':
+ level = repo.ui.configint(b'storage', b'revlog.zlib.level')
+ elif comp == b'zstd':
+ level = repo.ui.configint(b'storage', b'revlog.zstd.level')
if level is None:
- return 'default'
+ return b'default'
return bytes(level)
@classmethod
def fromconfig(cls, repo):
comp = compressionengine.fromconfig(repo)
level = None
- if comp == 'zlib':
- level = repo.ui.configint('storage', 'revlog.zlib.level')
- elif comp == 'zstd':
- level = repo.ui.configint('storage', 'revlog.zstd.level')
+ if comp == b'zlib':
+ level = repo.ui.configint(b'storage', b'revlog.zlib.level')
+ elif comp == b'zstd':
+ level = repo.ui.configint(b'storage', b'revlog.zstd.level')
if level is None:
- return 'default'
+ return b'default'
return bytes(level)
@@ -485,10 +485,10 @@
# forms in script when comparing result is anoying enough to add
# backward compatibility for a while.
legacy_opts_map = {
- 'redeltaparent': 're-delta-parent',
- 'redeltamultibase': 're-delta-multibase',
- 'redeltaall': 're-delta-all',
- 'redeltafulladd': 're-delta-fulladd',
+ b'redeltaparent': b're-delta-parent',
+ b'redeltamultibase': b're-delta-multibase',
+ b'redeltaall': b're-delta-all',
+ b'redeltafulladd': b're-delta-fulladd',
}
@@ -500,82 +500,82 @@
optimizations.append(
improvement(
- name='re-delta-parent',
+ name=b're-delta-parent',
type=optimisation,
description=_(
- 'deltas within internal storage will be recalculated to '
- 'choose an optimal base revision where this was not '
- 'already done; the size of the repository may shrink and '
- 'various operations may become faster; the first time '
- 'this optimization is performed could slow down upgrade '
- 'execution considerably; subsequent invocations should '
- 'not run noticeably slower'
+ b'deltas within internal storage will be recalculated to '
+ b'choose an optimal base revision where this was not '
+ b'already done; the size of the repository may shrink and '
+ b'various operations may become faster; the first time '
+ b'this optimization is performed could slow down upgrade '
+ b'execution considerably; subsequent invocations should '
+ b'not run noticeably slower'
),
upgrademessage=_(
- 'deltas within internal storage will choose a new '
- 'base revision if needed'
+ b'deltas within internal storage will choose a new '
+ b'base revision if needed'
),
)
)
optimizations.append(
improvement(
- name='re-delta-multibase',
+ name=b're-delta-multibase',
type=optimisation,
description=_(
- 'deltas within internal storage will be recalculated '
- 'against multiple base revision and the smallest '
- 'difference will be used; the size of the repository may '
- 'shrink significantly when there are many merges; this '
- 'optimization will slow down execution in proportion to '
- 'the number of merges in the repository and the amount '
- 'of files in the repository; this slow down should not '
- 'be significant unless there are tens of thousands of '
- 'files and thousands of merges'
+ b'deltas within internal storage will be recalculated '
+ b'against multiple base revision and the smallest '
+ b'difference will be used; the size of the repository may '
+ b'shrink significantly when there are many merges; this '
+ b'optimization will slow down execution in proportion to '
+ b'the number of merges in the repository and the amount '
+ b'of files in the repository; this slow down should not '
+ b'be significant unless there are tens of thousands of '
+ b'files and thousands of merges'
),
upgrademessage=_(
- 'deltas within internal storage will choose an '
- 'optimal delta by computing deltas against multiple '
- 'parents; may slow down execution time '
- 'significantly'
+ b'deltas within internal storage will choose an '
+ b'optimal delta by computing deltas against multiple '
+ b'parents; may slow down execution time '
+ b'significantly'
),
)
)
optimizations.append(
improvement(
- name='re-delta-all',
+ name=b're-delta-all',
type=optimisation,
description=_(
- 'deltas within internal storage will always be '
- 'recalculated without reusing prior deltas; this will '
- 'likely make execution run several times slower; this '
- 'optimization is typically not needed'
+ b'deltas within internal storage will always be '
+ b'recalculated without reusing prior deltas; this will '
+ b'likely make execution run several times slower; this '
+ b'optimization is typically not needed'
),
upgrademessage=_(
- 'deltas within internal storage will be fully '
- 'recomputed; this will likely drastically slow down '
- 'execution time'
+ b'deltas within internal storage will be fully '
+ b'recomputed; this will likely drastically slow down '
+ b'execution time'
),
)
)
optimizations.append(
improvement(
- name='re-delta-fulladd',
+ name=b're-delta-fulladd',
type=optimisation,
description=_(
- 'every revision will be re-added as if it was new '
- 'content. It will go through the full storage '
- 'mechanism giving extensions a chance to process it '
- '(eg. lfs). This is similar to "re-delta-all" but even '
- 'slower since more logic is involved.'
+ b'every revision will be re-added as if it was new '
+ b'content. It will go through the full storage '
+ b'mechanism giving extensions a chance to process it '
+ b'(eg. lfs). This is similar to "re-delta-all" but even '
+ b'slower since more logic is involved.'
),
upgrademessage=_(
- 'each revision will be added as new content to the '
- 'internal storage; this will likely drastically slow '
- 'down execution time, but some extensions might need '
- 'it'
+ b'each revision will be added as new content to the '
+ b'internal storage; this will likely drastically slow '
+ b'down execution time, but some extensions might need '
+ b'it'
),
)
)
@@ -621,10 +621,10 @@
An instance of the appropriate class is returned.
"""
- if path == '00changelog.i':
+ if path == b'00changelog.i':
return changelog.changelog(repo.svfs)
- elif path.endswith('00manifest.i'):
- mandir = path[: -len('00manifest.i')]
+ elif path.endswith(b'00manifest.i'):
+ mandir = path[: -len(b'00manifest.i')]
return manifest.manifestrevlog(repo.svfs, tree=mandir)
else:
# reverse of "/".join(("data", path + ".i"))
@@ -649,7 +649,7 @@
olddata = oldvfs.join(oldrl.datafile)
newdata = newvfs.join(newrl.datafile)
- with newvfs(newrl.indexfile, 'w'):
+ with newvfs(newrl.indexfile, b'w'):
pass # create all the directories
util.copyfile(oldindex, newindex)
@@ -658,12 +658,12 @@
util.copyfile(olddata, newdata)
if not (
- unencodedname.endswith('00changelog.i')
- or unencodedname.endswith('00manifest.i')
+ unencodedname.endswith(b'00changelog.i')
+ or unencodedname.endswith(b'00manifest.i')
):
destrepo.svfs.fncache.add(unencodedname)
if copydata:
- destrepo.svfs.fncache.add(unencodedname[:-2] + '.d')
+ destrepo.svfs.fncache.add(unencodedname[:-2] + b'.d')
UPGRADE_CHANGELOG = object()
@@ -679,9 +679,9 @@
"""check is a revlog is selected for cloning
The store entry is checked against the passed filter"""
- if entry.endswith('00changelog.i'):
+ if entry.endswith(b'00changelog.i'):
return UPGRADE_CHANGELOG in revlogfilter
- elif entry.endswith('00manifest.i'):
+ elif entry.endswith(b'00manifest.i'):
return UPGRADE_MANIFEST in revlogfilter
return UPGRADE_FILELOG in revlogfilter
@@ -720,7 +720,7 @@
# Perform a pass to collect metadata. This validates we can open all
# source files and allows a unified progress bar to be displayed.
for unencoded, encoded, size in alldatafiles:
- if unencoded.endswith('.d'):
+ if unencoded.endswith(b'.d'):
continue
rl = _revlogfrompath(srcrepo, unencoded)
@@ -732,9 +732,9 @@
storedsize=True,
)
- revcount += info['revisionscount'] or 0
- datasize = info['storedsize'] or 0
- rawsize = info['trackedsize'] or 0
+ revcount += info[b'revisionscount'] or 0
+ datasize = info[b'storedsize'] or 0
+ rawsize = info[b'trackedsize'] or 0
srcsize += datasize
srcrawsize += rawsize
@@ -755,20 +755,20 @@
fsrcsize += datasize
frawsize += rawsize
else:
- error.ProgrammingError('unknown revlog type')
+ error.ProgrammingError(b'unknown revlog type')
if not revcount:
return
ui.write(
_(
- 'migrating %d total revisions (%d in filelogs, %d in manifests, '
- '%d in changelog)\n'
+ b'migrating %d total revisions (%d in filelogs, %d in manifests, '
+ b'%d in changelog)\n'
)
% (revcount, frevcount, mrevcount, crevcount)
)
ui.write(
- _('migrating %s in store; %s tracked data\n')
+ _(b'migrating %s in store; %s tracked data\n')
% ((util.bytecount(srcsize), util.bytecount(srcrawsize)))
)
@@ -782,24 +782,24 @@
# FUTURE this operation can be farmed off to worker processes.
seen = set()
for unencoded, encoded, size in alldatafiles:
- if unencoded.endswith('.d'):
+ if unencoded.endswith(b'.d'):
continue
oldrl = _revlogfrompath(srcrepo, unencoded)
- if isinstance(oldrl, changelog.changelog) and 'c' not in seen:
+ if isinstance(oldrl, changelog.changelog) and b'c' not in seen:
ui.write(
_(
- 'finished migrating %d manifest revisions across %d '
- 'manifests; change in size: %s\n'
+ b'finished migrating %d manifest revisions across %d '
+ b'manifests; change in size: %s\n'
)
% (mrevcount, mcount, util.bytecount(mdstsize - msrcsize))
)
ui.write(
_(
- 'migrating changelog containing %d revisions '
- '(%s in store; %s tracked data)\n'
+ b'migrating changelog containing %d revisions '
+ b'(%s in store; %s tracked data)\n'
)
% (
crevcount,
@@ -807,23 +807,23 @@
util.bytecount(crawsize),
)
)
- seen.add('c')
+ seen.add(b'c')
progress = srcrepo.ui.makeprogress(
- _('changelog revisions'), total=crevcount
+ _(b'changelog revisions'), total=crevcount
)
- elif isinstance(oldrl, manifest.manifestrevlog) and 'm' not in seen:
+ elif isinstance(oldrl, manifest.manifestrevlog) and b'm' not in seen:
ui.write(
_(
- 'finished migrating %d filelog revisions across %d '
- 'filelogs; change in size: %s\n'
+ b'finished migrating %d filelog revisions across %d '
+ b'filelogs; change in size: %s\n'
)
% (frevcount, fcount, util.bytecount(fdstsize - fsrcsize))
)
ui.write(
_(
- 'migrating %d manifests containing %d revisions '
- '(%s in store; %s tracked data)\n'
+ b'migrating %d manifests containing %d revisions '
+ b'(%s in store; %s tracked data)\n'
)
% (
mcount,
@@ -832,17 +832,17 @@
util.bytecount(mrawsize),
)
)
- seen.add('m')
+ seen.add(b'm')
if progress:
progress.complete()
progress = srcrepo.ui.makeprogress(
- _('manifest revisions'), total=mrevcount
+ _(b'manifest revisions'), total=mrevcount
)
- elif 'f' not in seen:
+ elif b'f' not in seen:
ui.write(
_(
- 'migrating %d filelogs containing %d revisions '
- '(%s in store; %s tracked data)\n'
+ b'migrating %d filelogs containing %d revisions '
+ b'(%s in store; %s tracked data)\n'
)
% (
fcount,
@@ -851,16 +851,16 @@
util.bytecount(frawsize),
)
)
- seen.add('f')
+ seen.add(b'f')
if progress:
progress.complete()
progress = srcrepo.ui.makeprogress(
- _('file revisions'), total=frevcount
+ _(b'file revisions'), total=frevcount
)
if matchrevlog(revlogs, unencoded):
ui.note(
- _('cloning %d revisions from %s\n') % (len(oldrl), unencoded)
+ _(b'cloning %d revisions from %s\n') % (len(oldrl), unencoded)
)
newrl = _revlogfrompath(dstrepo, unencoded)
oldrl.clone(
@@ -871,14 +871,14 @@
forcedeltabothparents=forcedeltabothparents,
)
else:
- msg = _('blindly copying %s containing %i revisions\n')
+ msg = _(b'blindly copying %s containing %i revisions\n')
ui.note(msg % (unencoded, len(oldrl)))
_copyrevlog(tr, dstrepo, oldrl, unencoded)
newrl = _revlogfrompath(dstrepo, unencoded)
info = newrl.storageinfo(storedsize=True)
- datasize = info['storedsize'] or 0
+ datasize = info[b'storedsize'] or 0
dstsize += datasize
@@ -892,14 +892,17 @@
progress.complete()
ui.write(
- _('finished migrating %d changelog revisions; change in size: ' '%s\n')
+ _(
+ b'finished migrating %d changelog revisions; change in size: '
+ b'%s\n'
+ )
% (crevcount, util.bytecount(cdstsize - csrcsize))
)
ui.write(
_(
- 'finished migrating %d total revisions; total change in store '
- 'size: %s\n'
+ b'finished migrating %d total revisions; total change in store '
+ b'size: %s\n'
)
% (revcount, util.bytecount(dstsize - srcsize))
)
@@ -922,16 +925,16 @@
Function should return ``True`` if the file is to be copied.
"""
# Skip revlogs.
- if path.endswith(('.i', '.d')):
+ if path.endswith((b'.i', b'.d')):
return False
# Skip transaction related files.
- if path.startswith('undo'):
+ if path.startswith(b'undo'):
return False
# Only copy regular files.
if mode != stat.S_IFREG:
return False
# Skip other skipped files.
- if path in ('lock', 'fncache'):
+ if path in (b'lock', b'fncache'):
return False
return True
@@ -962,53 +965,53 @@
ui.write(
_(
- '(it is safe to interrupt this process any time before '
- 'data migration completes)\n'
+ b'(it is safe to interrupt this process any time before '
+ b'data migration completes)\n'
)
)
- if 're-delta-all' in actions:
+ if b're-delta-all' in actions:
deltareuse = revlog.revlog.DELTAREUSENEVER
- elif 're-delta-parent' in actions:
+ elif b're-delta-parent' in actions:
deltareuse = revlog.revlog.DELTAREUSESAMEREVS
- elif 're-delta-multibase' in actions:
+ elif b're-delta-multibase' in actions:
deltareuse = revlog.revlog.DELTAREUSESAMEREVS
- elif 're-delta-fulladd' in actions:
+ elif b're-delta-fulladd' in actions:
deltareuse = revlog.revlog.DELTAREUSEFULLADD
else:
deltareuse = revlog.revlog.DELTAREUSEALWAYS
- with dstrepo.transaction('upgrade') as tr:
+ with dstrepo.transaction(b'upgrade') as tr:
_clonerevlogs(
ui,
srcrepo,
dstrepo,
tr,
deltareuse,
- 're-delta-multibase' in actions,
+ b're-delta-multibase' in actions,
revlogs=revlogs,
)
# Now copy other files in the store directory.
# The sorted() makes execution deterministic.
- for p, kind, st in sorted(srcrepo.store.vfs.readdir('', stat=True)):
+ for p, kind, st in sorted(srcrepo.store.vfs.readdir(b'', stat=True)):
if not _filterstorefile(srcrepo, dstrepo, requirements, p, kind, st):
continue
- srcrepo.ui.write(_('copying %s\n') % p)
+ srcrepo.ui.write(_(b'copying %s\n') % p)
src = srcrepo.store.rawvfs.join(p)
dst = dstrepo.store.rawvfs.join(p)
util.copyfile(src, dst, copystat=True)
_finishdatamigration(ui, srcrepo, dstrepo, requirements)
- ui.write(_('data fully migrated to temporary repository\n'))
+ ui.write(_(b'data fully migrated to temporary repository\n'))
- backuppath = pycompat.mkdtemp(prefix='upgradebackup.', dir=srcrepo.path)
+ backuppath = pycompat.mkdtemp(prefix=b'upgradebackup.', dir=srcrepo.path)
backupvfs = vfsmod.vfs(backuppath)
# Make a backup of requires file first, as it is the first to be modified.
- util.copyfile(srcrepo.vfs.join('requires'), backupvfs.join('requires'))
+ util.copyfile(srcrepo.vfs.join(b'requires'), backupvfs.join(b'requires'))
# We install an arbitrary requirement that clients must not support
# as a mechanism to lock out new clients during the data swap. This is
@@ -1016,29 +1019,29 @@
# an inconsistent state.
ui.write(
_(
- 'marking source repository as being upgraded; clients will be '
- 'unable to read from repository\n'
+ b'marking source repository as being upgraded; clients will be '
+ b'unable to read from repository\n'
)
)
scmutil.writerequires(
- srcrepo.vfs, srcrepo.requirements | {'upgradeinprogress'}
+ srcrepo.vfs, srcrepo.requirements | {b'upgradeinprogress'}
)
- ui.write(_('starting in-place swap of repository data\n'))
- ui.write(_('replaced files will be backed up at %s\n') % backuppath)
+ ui.write(_(b'starting in-place swap of repository data\n'))
+ ui.write(_(b'replaced files will be backed up at %s\n') % backuppath)
# Now swap in the new store directory. Doing it as a rename should make
# the operation nearly instantaneous and atomic (at least in well-behaved
# environments).
- ui.write(_('replacing store...\n'))
+ ui.write(_(b'replacing store...\n'))
tstart = util.timer()
- util.rename(srcrepo.spath, backupvfs.join('store'))
+ util.rename(srcrepo.spath, backupvfs.join(b'store'))
util.rename(dstrepo.spath, srcrepo.spath)
elapsed = util.timer() - tstart
ui.write(
_(
- 'store replacement complete; repository was inconsistent for '
- '%0.1fs\n'
+ b'store replacement complete; repository was inconsistent for '
+ b'%0.1fs\n'
)
% elapsed
)
@@ -1047,8 +1050,8 @@
# out legacy clients.
ui.write(
_(
- 'finalizing requirements file and making repository readable '
- 'again\n'
+ b'finalizing requirements file and making repository readable '
+ b'again\n'
)
)
scmutil.writerequires(srcrepo.vfs, requirements)
@@ -1057,7 +1060,7 @@
# reference to its new location. So clean it up manually. Alternatively, we
# could update srcrepo.svfs and other variables to point to the new
# location. This is simpler.
- backupvfs.unlink('store/lock')
+ backupvfs.unlink(b'store/lock')
return backuppath
@@ -1078,7 +1081,7 @@
repo = repo.unfiltered()
revlogs = set(UPGRADE_ALL_REVLOGS)
- specentries = (('c', changelog), ('m', manifest))
+ specentries = ((b'c', changelog), (b'm', manifest))
specified = [(y, x) for (y, x) in specentries if x is not None]
if specified:
# we have some limitation on revlogs to be recloned
@@ -1086,34 +1089,34 @@
revlogs = set()
for r, enabled in specified:
if enabled:
- if r == 'c':
+ if r == b'c':
revlogs.add(UPGRADE_CHANGELOG)
- elif r == 'm':
+ elif r == b'm':
revlogs.add(UPGRADE_MANIFEST)
else:
# none are enabled
for r, __ in specified:
- if r == 'c':
+ if r == b'c':
revlogs.discard(UPGRADE_CHANGELOG)
- elif r == 'm':
+ elif r == b'm':
revlogs.discard(UPGRADE_MANIFEST)
# Ensure the repository can be upgraded.
missingreqs = requiredsourcerequirements(repo) - repo.requirements
if missingreqs:
raise error.Abort(
- _('cannot upgrade repository; requirement ' 'missing: %s')
- % _(', ').join(sorted(missingreqs))
+ _(b'cannot upgrade repository; requirement ' b'missing: %s')
+ % _(b', ').join(sorted(missingreqs))
)
blockedreqs = blocksourcerequirements(repo) & repo.requirements
if blockedreqs:
raise error.Abort(
_(
- 'cannot upgrade repository; unsupported source '
- 'requirement: %s'
+ b'cannot upgrade repository; unsupported source '
+ b'requirement: %s'
)
- % _(', ').join(sorted(blockedreqs))
+ % _(b', ').join(sorted(blockedreqs))
)
# FUTURE there is potentially a need to control the wanted requirements via
@@ -1128,28 +1131,31 @@
)
if noremovereqs:
raise error.Abort(
- _('cannot upgrade repository; requirement would be ' 'removed: %s')
- % _(', ').join(sorted(noremovereqs))
+ _(
+ b'cannot upgrade repository; requirement would be '
+ b'removed: %s'
+ )
+ % _(b', ').join(sorted(noremovereqs))
)
noaddreqs = newreqs - repo.requirements - allowednewrequirements(repo)
if noaddreqs:
raise error.Abort(
_(
- 'cannot upgrade repository; do not support adding '
- 'requirement: %s'
+ b'cannot upgrade repository; do not support adding '
+ b'requirement: %s'
)
- % _(', ').join(sorted(noaddreqs))
+ % _(b', ').join(sorted(noaddreqs))
)
unsupportedreqs = newreqs - supporteddestrequirements(repo)
if unsupportedreqs:
raise error.Abort(
_(
- 'cannot upgrade repository; do not support '
- 'destination requirement: %s'
+ b'cannot upgrade repository; do not support '
+ b'destination requirement: %s'
)
- % _(', ').join(sorted(unsupportedreqs))
+ % _(b', ').join(sorted(unsupportedreqs))
)
# Find and validate all improvements that can be made.
@@ -1164,9 +1170,9 @@
if optimize: # anything left is unknown
raise error.Abort(
- _('unknown optimization action requested: %s')
- % ', '.join(sorted(optimize)),
- hint=_('run without arguments to see valid ' 'optimizations'),
+ _(b'unknown optimization action requested: %s')
+ % b', '.join(sorted(optimize)),
+ hint=_(b'run without arguments to see valid ' b'optimizations'),
)
deficiencies = finddeficiencies(repo)
@@ -1185,36 +1191,36 @@
incompatible = RECLONES_REQUIREMENTS & (removedreqs | addedreqs)
if incompatible:
msg = _(
- 'ignoring revlogs selection flags, format requirements '
- 'change: %s\n'
+ b'ignoring revlogs selection flags, format requirements '
+ b'change: %s\n'
)
- ui.warn(msg % ', '.join(sorted(incompatible)))
+ ui.warn(msg % b', '.join(sorted(incompatible)))
revlogs = UPGRADE_ALL_REVLOGS
def printrequirements():
- ui.write(_('requirements\n'))
+ ui.write(_(b'requirements\n'))
ui.write(
- _(' preserved: %s\n')
- % _(', ').join(sorted(newreqs & repo.requirements))
+ _(b' preserved: %s\n')
+ % _(b', ').join(sorted(newreqs & repo.requirements))
)
if repo.requirements - newreqs:
ui.write(
- _(' removed: %s\n')
- % _(', ').join(sorted(repo.requirements - newreqs))
+ _(b' removed: %s\n')
+ % _(b', ').join(sorted(repo.requirements - newreqs))
)
if newreqs - repo.requirements:
ui.write(
- _(' added: %s\n')
- % _(', ').join(sorted(newreqs - repo.requirements))
+ _(b' added: %s\n')
+ % _(b', ').join(sorted(newreqs - repo.requirements))
)
- ui.write('\n')
+ ui.write(b'\n')
def printupgradeactions():
for a in actions:
- ui.write('%s\n %s\n\n' % (a.name, a.upgrademessage))
+ ui.write(b'%s\n %s\n\n' % (a.name, a.upgrademessage))
if not run:
fromconfig = []
@@ -1231,33 +1237,36 @@
if fromconfig:
ui.write(
_(
- 'repository lacks features recommended by '
- 'current config options:\n\n'
+ b'repository lacks features recommended by '
+ b'current config options:\n\n'
)
)
for i in fromconfig:
- ui.write('%s\n %s\n\n' % (i.name, i.description))
+ ui.write(b'%s\n %s\n\n' % (i.name, i.description))
if onlydefault:
ui.write(
_(
- 'repository lacks features used by the default '
- 'config options:\n\n'
+ b'repository lacks features used by the default '
+ b'config options:\n\n'
)
)
for i in onlydefault:
- ui.write('%s\n %s\n\n' % (i.name, i.description))
+ ui.write(b'%s\n %s\n\n' % (i.name, i.description))
- ui.write('\n')
+ ui.write(b'\n')
else:
ui.write(
- _('(no feature deficiencies found in existing ' 'repository)\n')
+ _(
+ b'(no feature deficiencies found in existing '
+ b'repository)\n'
+ )
)
ui.write(
_(
- 'performing an upgrade with "--run" will make the following '
- 'changes:\n\n'
+ b'performing an upgrade with "--run" will make the following '
+ b'changes:\n\n'
)
)
@@ -1269,36 +1278,36 @@
if unusedoptimize:
ui.write(
_(
- 'additional optimizations are available by specifying '
- '"--optimize <name>":\n\n'
+ b'additional optimizations are available by specifying '
+ b'"--optimize <name>":\n\n'
)
)
for i in unusedoptimize:
- ui.write(_('%s\n %s\n\n') % (i.name, i.description))
+ ui.write(_(b'%s\n %s\n\n') % (i.name, i.description))
return
# Else we're in the run=true case.
- ui.write(_('upgrade will perform the following actions:\n\n'))
+ ui.write(_(b'upgrade will perform the following actions:\n\n'))
printrequirements()
printupgradeactions()
upgradeactions = [a.name for a in actions]
- ui.write(_('beginning upgrade...\n'))
+ ui.write(_(b'beginning upgrade...\n'))
with repo.wlock(), repo.lock():
- ui.write(_('repository locked and read-only\n'))
+ ui.write(_(b'repository locked and read-only\n'))
# Our strategy for upgrading the repository is to create a new,
# temporary repository, write data to it, then do a swap of the
# data. There are less heavyweight ways to do this, but it is easier
# to create a new repo object than to instantiate all the components
# (like the store) separately.
- tmppath = pycompat.mkdtemp(prefix='upgrade.', dir=repo.path)
+ tmppath = pycompat.mkdtemp(prefix=b'upgrade.', dir=repo.path)
backuppath = None
try:
ui.write(
_(
- 'creating temporary repository to stage migrated '
- 'data: %s\n'
+ b'creating temporary repository to stage migrated '
+ b'data: %s\n'
)
% tmppath
)
@@ -1312,22 +1321,22 @@
ui, repo, dstrepo, newreqs, upgradeactions, revlogs=revlogs
)
if not (backup or backuppath is None):
- ui.write(_('removing old repository content%s\n') % backuppath)
+ ui.write(_(b'removing old repository content%s\n') % backuppath)
repo.vfs.rmtree(backuppath, forcibly=True)
backuppath = None
finally:
- ui.write(_('removing temporary repository %s\n') % tmppath)
+ ui.write(_(b'removing temporary repository %s\n') % tmppath)
repo.vfs.rmtree(tmppath, forcibly=True)
if backuppath:
ui.warn(
- _('copy of old repository backed up at %s\n') % backuppath
+ _(b'copy of old repository backed up at %s\n') % backuppath
)
ui.warn(
_(
- 'the old repository will not be deleted; remove '
- 'it to free up disk space once the upgraded '
- 'repository is verified\n'
+ b'the old repository will not be deleted; remove '
+ b'it to free up disk space once the upgraded '
+ b'repository is verified\n'
)
)