--- a/hgext/mq.py Sun Oct 06 09:45:02 2019 -0400
+++ b/hgext/mq.py Sun Oct 06 09:48:39 2019 -0400
@@ -104,7 +104,7 @@
)
release = lockmod.release
-seriesopts = [('s', 'summary', None, _('print first line of patch header'))]
+seriesopts = [(b's', b'summary', None, _(b'print first line of patch header'))]
cmdtable = {}
command = registrar.command(cmdtable)
@@ -112,27 +112,27 @@
# extensions which SHIP WITH MERCURIAL. Non-mainline extensions should
# be specifying the version(s) of Mercurial they are tested with, or
# leave the attribute unspecified.
-testedwith = 'ships-with-hg-core'
+testedwith = b'ships-with-hg-core'
configtable = {}
configitem = registrar.configitem(configtable)
configitem(
- 'mq', 'git', default='auto',
+ b'mq', b'git', default=b'auto',
)
configitem(
- 'mq', 'keepchanges', default=False,
+ b'mq', b'keepchanges', default=False,
)
configitem(
- 'mq', 'plain', default=False,
+ b'mq', b'plain', default=False,
)
configitem(
- 'mq', 'secret', default=False,
+ b'mq', b'secret', default=False,
)
# force load strip extension formerly included in mq and import some utility
try:
- stripext = extensions.find('strip')
+ stripext = extensions.find(b'strip')
except KeyError:
# note: load is lazy so we could avoid the try-except,
# but I (marmoute) prefer this explicit code.
@@ -143,7 +143,7 @@
def log(self, event, msgfmt, *msgargs, **opts):
pass
- stripext = extensions.load(dummyui(), 'strip', '')
+ stripext = extensions.load(dummyui(), b'strip', b'')
strip = stripext.strip
@@ -174,7 +174,7 @@
self.node, self.name = node, name
def __bytes__(self):
- return hex(self.node) + ':' + self.name
+ return hex(self.node) + b':' + self.name
__str__ = encoding.strmethod(__bytes__)
__repr__ = encoding.strmethod(__bytes__)
@@ -183,18 +183,18 @@
# The order of the headers in 'hg export' HG patches:
HGHEADERS = [
# '# HG changeset patch',
- '# User ',
- '# Date ',
- '# ',
- '# Branch ',
- '# Node ID ',
- '# Parent ', # can occur twice for merges - but that is not relevant for mq
+ b'# User ',
+ b'# Date ',
+ b'# ',
+ b'# Branch ',
+ b'# Node ID ',
+ b'# Parent ', # can occur twice for merges - but that is not relevant for mq
]
# The order of headers in plain 'mail style' patches:
PLAINHEADERS = {
- 'from': 0,
- 'date': 1,
- 'subject': 2,
+ b'from': 0,
+ b'date': 1,
+ b'subject': 2,
}
@@ -221,12 +221,12 @@
... b'# Date ', b'z')
['# HG changeset patch', '# Date z', '# Parent y']
"""
- start = lines.index('# HG changeset patch') + 1
+ start = lines.index(b'# HG changeset patch') + 1
newindex = HGHEADERS.index(header)
bestpos = len(lines)
for i in range(start, len(lines)):
line = lines[i]
- if not line.startswith('# '):
+ if not line.startswith(b'# '):
bestpos = min(bestpos, i)
break
for lineindex, h in enumerate(HGHEADERS):
@@ -261,21 +261,21 @@
newprio = PLAINHEADERS[header.lower()]
bestpos = len(lines)
for i, line in enumerate(lines):
- if ':' in line:
- lheader = line.split(':', 1)[0].strip().lower()
+ if b':' in line:
+ lheader = line.split(b':', 1)[0].strip().lower()
lprio = PLAINHEADERS.get(lheader, newprio + 1)
if lprio == newprio:
- lines[i] = '%s: %s' % (header, value)
+ lines[i] = b'%s: %s' % (header, value)
return lines
if lprio > newprio and i < bestpos:
bestpos = i
else:
if line:
- lines.insert(i, '')
+ lines.insert(i, b'')
if i < bestpos:
bestpos = i
break
- lines.insert(bestpos, '%s: %s' % (header, value))
+ lines.insert(bestpos, b'%s: %s' % (header, value))
return lines
@@ -285,9 +285,9 @@
while lines:
l = lines[-1]
if (
- l.startswith("diff -")
- or l.startswith("Index:")
- or l.startswith("===========")
+ l.startswith(b"diff -")
+ or l.startswith(b"Index:")
+ or l.startswith(b"===========")
):
del lines[-1]
else:
@@ -311,54 +311,54 @@
nodeid = None
diffstart = 0
- for line in open(pf, 'rb'):
+ for line in open(pf, b'rb'):
line = line.rstrip()
- if line.startswith('diff --git') or (
- diffstart and line.startswith('+++ ')
+ if line.startswith(b'diff --git') or (
+ diffstart and line.startswith(b'+++ ')
):
diffstart = 2
break
diffstart = 0 # reset
- if line.startswith("--- "):
+ if line.startswith(b"--- "):
diffstart = 1
continue
- elif format == "hgpatch":
+ elif format == b"hgpatch":
# parse values when importing the result of an hg export
- if line.startswith("# User "):
+ if line.startswith(b"# User "):
user = line[7:]
- elif line.startswith("# Date "):
+ elif line.startswith(b"# Date "):
date = line[7:]
- elif line.startswith("# Parent "):
+ elif line.startswith(b"# Parent "):
parent = line[9:].lstrip() # handle double trailing space
- elif line.startswith("# Branch "):
+ elif line.startswith(b"# Branch "):
branch = line[9:]
- elif line.startswith("# Node ID "):
+ elif line.startswith(b"# Node ID "):
nodeid = line[10:]
- elif not line.startswith("# ") and line:
+ elif not line.startswith(b"# ") and line:
message.append(line)
format = None
- elif line == '# HG changeset patch':
+ elif line == b'# HG changeset patch':
message = []
- format = "hgpatch"
- elif format != "tagdone" and (
- line.startswith("Subject: ") or line.startswith("subject: ")
+ format = b"hgpatch"
+ elif format != b"tagdone" and (
+ line.startswith(b"Subject: ") or line.startswith(b"subject: ")
):
subject = line[9:]
- format = "tag"
- elif format != "tagdone" and (
- line.startswith("From: ") or line.startswith("from: ")
+ format = b"tag"
+ elif format != b"tagdone" and (
+ line.startswith(b"From: ") or line.startswith(b"from: ")
):
user = line[6:]
- format = "tag"
- elif format != "tagdone" and (
- line.startswith("Date: ") or line.startswith("date: ")
+ format = b"tag"
+ elif format != b"tagdone" and (
+ line.startswith(b"Date: ") or line.startswith(b"date: ")
):
date = line[6:]
- format = "tag"
- elif format == "tag" and line == "":
+ format = b"tag"
+ elif format == b"tag" and line == b"":
# when looking for tags (subject: from: etc) they
# end once you find a blank line in the source
- format = "tagdone"
+ format = b"tagdone"
elif message or line:
message.append(line)
comments.append(line)
@@ -372,7 +372,7 @@
eatempty(comments)
# make sure message isn't empty
- if format and format.startswith("tag") and subject:
+ if format and format.startswith(b"tag") and subject:
message.insert(0, subject)
self.message = message
@@ -386,41 +386,41 @@
self.haspatch = diffstart > 1
self.plainmode = (
plainmode
- or '# HG changeset patch' not in self.comments
+ or b'# HG changeset patch' not in self.comments
and any(
- c.startswith('Date: ') or c.startswith('From: ')
+ c.startswith(b'Date: ') or c.startswith(b'From: ')
for c in self.comments
)
)
def setuser(self, user):
try:
- inserthgheader(self.comments, '# User ', user)
+ inserthgheader(self.comments, b'# User ', user)
except ValueError:
if self.plainmode:
- insertplainheader(self.comments, 'From', user)
+ insertplainheader(self.comments, b'From', user)
else:
- tmp = ['# HG changeset patch', '# User ' + user]
+ tmp = [b'# HG changeset patch', b'# User ' + user]
self.comments = tmp + self.comments
self.user = user
def setdate(self, date):
try:
- inserthgheader(self.comments, '# Date ', date)
+ inserthgheader(self.comments, b'# Date ', date)
except ValueError:
if self.plainmode:
- insertplainheader(self.comments, 'Date', date)
+ insertplainheader(self.comments, b'Date', date)
else:
- tmp = ['# HG changeset patch', '# Date ' + date]
+ tmp = [b'# HG changeset patch', b'# Date ' + date]
self.comments = tmp + self.comments
self.date = date
def setparent(self, parent):
try:
- inserthgheader(self.comments, '# Parent ', parent)
+ inserthgheader(self.comments, b'# Parent ', parent)
except ValueError:
if not self.plainmode:
- tmp = ['# HG changeset patch', '# Parent ' + parent]
+ tmp = [b'# HG changeset patch', b'# Parent ' + parent]
self.comments = tmp + self.comments
self.parent = parent
@@ -430,14 +430,14 @@
self.message = [message]
if message:
if self.plainmode and self.comments and self.comments[-1]:
- self.comments.append('')
+ self.comments.append(b'')
self.comments.append(message)
def __bytes__(self):
- s = '\n'.join(self.comments).rstrip()
+ s = b'\n'.join(self.comments).rstrip()
if not s:
- return ''
- return s + '\n\n'
+ return b''
+ return s + b'\n\n'
__str__ = encoding.strmethod(__bytes__)
@@ -446,7 +446,7 @@
If comments contains 'subject: ', message will prepend
the field and a blank line.'''
if self.message:
- subj = 'subject: ' + self.message[0].lower()
+ subj = b'subject: ' + self.message[0].lower()
for i in pycompat.xrange(len(self.comments)):
if subj == self.comments[i].lower():
del self.comments[i]
@@ -467,13 +467,13 @@
"""
repo = repo.unfiltered()
if phase is None:
- if repo.ui.configbool('mq', 'secret'):
+ if repo.ui.configbool(b'mq', b'secret'):
phase = phases.secret
- overrides = {('ui', 'allowemptycommit'): True}
+ overrides = {(b'ui', b'allowemptycommit'): True}
if phase is not None:
- overrides[('phases', 'new-commit')] = phase
- with repo.ui.configoverride(overrides, 'mq'):
- repo.ui.setconfig('ui', 'allowemptycommit', True)
+ overrides[(b'phases', b'new-commit')] = phase
+ with repo.ui.configoverride(overrides, b'mq'):
+ repo.ui.setconfig(b'ui', b'allowemptycommit', True)
return repo.commit(*args, **kwargs)
@@ -485,15 +485,15 @@
def __init__(self, ui, baseui, path, patchdir=None):
self.basepath = path
try:
- with open(os.path.join(path, 'patches.queue'), r'rb') as fh:
+ with open(os.path.join(path, b'patches.queue'), r'rb') as fh:
cur = fh.read().rstrip()
if not cur:
- curpath = os.path.join(path, 'patches')
+ curpath = os.path.join(path, b'patches')
else:
- curpath = os.path.join(path, 'patches-' + cur)
+ curpath = os.path.join(path, b'patches-' + cur)
except IOError:
- curpath = os.path.join(path, 'patches')
+ curpath = os.path.join(path, b'patches')
self.path = patchdir or curpath
self.opener = vfsmod.vfs(self.path)
self.ui = ui
@@ -501,35 +501,35 @@
self.applieddirty = False
self.seriesdirty = False
self.added = []
- self.seriespath = "series"
- self.statuspath = "status"
- self.guardspath = "guards"
+ self.seriespath = b"series"
+ self.statuspath = b"status"
+ self.guardspath = b"guards"
self.activeguards = None
self.guardsdirty = False
# Handle mq.git as a bool with extended values
- gitmode = ui.config('mq', 'git').lower()
+ gitmode = ui.config(b'mq', b'git').lower()
boolmode = stringutil.parsebool(gitmode)
if boolmode is not None:
if boolmode:
- gitmode = 'yes'
+ gitmode = b'yes'
else:
- gitmode = 'no'
+ gitmode = b'no'
self.gitmode = gitmode
# deprecated config: mq.plain
- self.plainmode = ui.configbool('mq', 'plain')
+ self.plainmode = ui.configbool(b'mq', b'plain')
self.checkapplied = True
@util.propertycache
def applied(self):
def parselines(lines):
for l in lines:
- entry = l.split(':', 1)
+ entry = l.split(b':', 1)
if len(entry) > 1:
n, name = entry
yield statusentry(bin(n), name)
elif l.strip():
self.ui.warn(
- _('malformated mq status line: %s\n')
+ _(b'malformated mq status line: %s\n')
% stringutil.pprint(entry)
)
# else we ignore empty lines
@@ -562,7 +562,7 @@
return self.seriesguards
def invalidate(self):
- for a in 'applied fullseries series seriesguards'.split():
+ for a in b'applied fullseries series seriesguards'.split():
if a in self.__dict__:
delattr(self, a)
self.applieddirty = False
@@ -580,15 +580,15 @@
whitespace=not plain,
formatchanging=not plain,
)
- if self.gitmode == 'auto':
+ if self.gitmode == b'auto':
diffopts.upgrade = True
- elif self.gitmode == 'keep':
+ elif self.gitmode == b'keep':
pass
- elif self.gitmode in ('yes', 'no'):
- diffopts.git = self.gitmode == 'yes'
+ elif self.gitmode in (b'yes', b'no'):
+ diffopts.git = self.gitmode == b'yes'
else:
raise error.Abort(
- _('mq.git option can be auto/keep/yes/no' ' got %s')
+ _(b'mq.git option can be auto/keep/yes/no' b' got %s')
% self.gitmode
)
if patchfn:
@@ -600,12 +600,12 @@
referenced patch is a git patch and should be preserved as such.
"""
diffopts = diffopts.copy()
- if not diffopts.git and self.gitmode == 'keep':
+ if not diffopts.git and self.gitmode == b'keep':
for patchfn in patches:
- patchf = self.opener(patchfn, 'r')
+ patchf = self.opener(patchfn, b'r')
# if the patch was a git patch, refresh it as a git patch
diffopts.git = any(
- line.startswith('diff --git') for line in patchf
+ line.startswith(b'diff --git') for line in patchf
)
patchf.close()
return diffopts
@@ -615,7 +615,7 @@
def findseries(self, patch):
def matchpatch(l):
- l = l.split('#', 1)[0]
+ l = l.split(b'#', 1)[0]
return l.strip() == patch
for index, l in enumerate(self.fullseries):
@@ -629,10 +629,10 @@
self.series = []
self.seriesguards = []
for l in self.fullseries:
- h = l.find('#')
+ h = l.find(b'#')
if h == -1:
patch = l
- comment = ''
+ comment = b''
elif h == 0:
continue
else:
@@ -642,7 +642,7 @@
if patch:
if patch in self.series:
raise error.Abort(
- _('%s appears more than once in %s')
+ _(b'%s appears more than once in %s')
% (patch, self.join(self.seriespath))
)
self.series.append(patch)
@@ -650,17 +650,17 @@
def checkguard(self, guard):
if not guard:
- return _('guard cannot be an empty string')
- bad_chars = '# \t\r\n\f'
+ return _(b'guard cannot be an empty string')
+ bad_chars = b'# \t\r\n\f'
first = guard[0]
- if first in '-+':
- return _('guard %r starts with invalid character: %r') % (
+ if first in b'-+':
+ return _(b'guard %r starts with invalid character: %r') % (
guard,
first,
)
for c in bad_chars:
if c in guard:
- return _('invalid character in guard %r: %r') % (guard, c)
+ return _(b'invalid character in guard %r: %r') % (guard, c)
def setactive(self, guards):
for guard in guards:
@@ -668,7 +668,7 @@
if bad:
raise error.Abort(bad)
guards = sorted(set(guards))
- self.ui.debug('active guards: %s\n' % ' '.join(guards))
+ self.ui.debug(b'active guards: %s\n' % b' '.join(guards))
self.activeguards = guards
self.guardsdirty = True
@@ -685,7 +685,8 @@
bad = self.checkguard(guard)
if bad:
self.ui.warn(
- '%s:%d: %s\n' % (self.join(self.guardspath), i + 1, bad)
+ b'%s:%d: %s\n'
+ % (self.join(self.guardspath), i + 1, bad)
)
else:
self.activeguards.append(guard)
@@ -694,14 +695,14 @@
def setguards(self, idx, guards):
for g in guards:
if len(g) < 2:
- raise error.Abort(_('guard %r too short') % g)
- if g[0] not in '-+':
- raise error.Abort(_('guard %r starts with invalid char') % g)
+ raise error.Abort(_(b'guard %r too short') % g)
+ if g[0] not in b'-+':
+ raise error.Abort(_(b'guard %r starts with invalid char') % g)
bad = self.checkguard(g[1:])
if bad:
raise error.Abort(bad)
- drop = self.guard_re.sub('', self.fullseries[idx])
- self.fullseries[idx] = drop + ''.join([' #' + g for g in guards])
+ drop = self.guard_re.sub(b'', self.fullseries[idx])
+ self.fullseries[idx] = drop + b''.join([b' #' + g for g in guards])
self.parseseries()
self.seriesdirty = True
@@ -713,17 +714,17 @@
return True, None
guards = self.active()
exactneg = [
- g for g in patchguards if g.startswith('-') and g[1:] in guards
+ g for g in patchguards if g.startswith(b'-') and g[1:] in guards
]
if exactneg:
return False, stringutil.pprint(exactneg[0])
- pos = [g for g in patchguards if g.startswith('+')]
+ pos = [g for g in patchguards if g.startswith(b'+')]
exactpos = [g for g in pos if g[1:] in guards]
if pos:
if exactpos:
return True, stringutil.pprint(exactpos[0])
- return False, ' '.join([stringutil.pprint(p) for p in pos])
- return True, ''
+ return False, b' '.join([stringutil.pprint(p) for p in pos])
+ return True, b''
def explainpushable(self, idx, all_patches=False):
if all_patches:
@@ -738,37 +739,37 @@
if all_patches and pushable:
if why is None:
write(
- _('allowing %s - no guards in effect\n')
+ _(b'allowing %s - no guards in effect\n')
% self.series[idx]
)
else:
if not why:
write(
- _('allowing %s - no matching negative guards\n')
+ _(b'allowing %s - no matching negative guards\n')
% self.series[idx]
)
else:
write(
- _('allowing %s - guarded by %s\n')
+ _(b'allowing %s - guarded by %s\n')
% (self.series[idx], why)
)
if not pushable:
if why:
write(
- _('skipping %s - guarded by %s\n')
+ _(b'skipping %s - guarded by %s\n')
% (self.series[idx], why)
)
else:
write(
- _('skipping %s - no matching guards\n')
+ _(b'skipping %s - no matching guards\n')
% self.series[idx]
)
def savedirty(self):
def writelist(items, path):
- fp = self.opener(path, 'wb')
+ fp = self.opener(path, b'wb')
for i in items:
- fp.write("%s\n" % i)
+ fp.write(b"%s\n" % i)
fp.close()
if self.applieddirty:
@@ -787,14 +788,14 @@
self.added = []
def removeundo(self, repo):
- undo = repo.sjoin('undo')
+ undo = repo.sjoin(b'undo')
if not os.path.exists(undo):
return
try:
os.unlink(undo)
except OSError as inst:
self.ui.warn(
- _('error removing undo: %s\n') % stringutil.forcebytestr(inst)
+ _(b'error removing undo: %s\n') % stringutil.forcebytestr(inst)
)
def backup(self, repo, files, copy=False):
@@ -804,7 +805,7 @@
if os.path.lexists(absf):
absorig = scmutil.backuppath(self.ui, repo, f)
self.ui.note(
- _('saving current version of %s as %s\n')
+ _(b'saving current version of %s as %s\n')
% (f, os.path.relpath(absorig))
)
@@ -826,7 +827,7 @@
):
if opts is None:
opts = {}
- stat = opts.get('stat')
+ stat = opts.get(b'stat')
m = scmutil.match(repo[node1], files, opts)
logcmdutil.diffordiffstat(
self.ui, repo, diffopts, node1, node2, m, changes, stat, fp
@@ -842,9 +843,9 @@
return (err, n)
if n is None:
- raise error.Abort(_("apply failed for patch %s") % patch)
-
- self.ui.warn(_("patch didn't work out, merging %s\n") % patch)
+ raise error.Abort(_(b"apply failed for patch %s") % patch)
+
+ self.ui.warn(_(b"patch didn't work out, merging %s\n") % patch)
# apply failed, strip away that rev and merge.
hg.clean(repo, head)
@@ -853,17 +854,17 @@
ctx = repo[rev]
ret = hg.merge(repo, rev)
if ret:
- raise error.Abort(_("update returned %d") % ret)
+ raise error.Abort(_(b"update returned %d") % ret)
n = newcommit(repo, None, ctx.description(), ctx.user(), force=True)
if n is None:
- raise error.Abort(_("repo commit failed"))
+ raise error.Abort(_(b"repo commit failed"))
try:
ph = patchheader(mergeq.join(patch), self.plainmode)
except Exception:
- raise error.Abort(_("unable to read %s") % patch)
+ raise error.Abort(_(b"unable to read %s") % patch)
diffopts = self.patchopts(diffopts, patch)
- patchf = self.opener(patch, "w")
+ patchf = self.opener(patch, b"w")
comments = bytes(ph)
if comments:
patchf.write(comments)
@@ -901,8 +902,8 @@
# so, we insert a merge marker with only one parent. This way
# the first patch in the queue is never a merge patch
#
- pname = ".hg.patches.merge.marker"
- n = newcommit(repo, None, '[mq]: merge marker', force=True)
+ pname = b".hg.patches.merge.marker"
+ n = newcommit(repo, None, b'[mq]: merge marker', force=True)
self.removeundo(repo)
self.applied.append(statusentry(n, pname))
self.applieddirty = True
@@ -912,7 +913,7 @@
for patch in series:
patch = mergeq.lookup(patch, strict=True)
if not patch:
- self.ui.warn(_("patch %s does not exist\n") % patch)
+ self.ui.warn(_(b"patch %s does not exist\n") % patch)
return (1, None)
pushable, reason = self.pushable(patch)
if not pushable:
@@ -920,7 +921,7 @@
continue
info = mergeq.isapplied(patch)
if not info:
- self.ui.warn(_("patch %s is not applied\n") % patch)
+ self.ui.warn(_(b"patch %s is not applied\n") % patch)
return (1, None)
rev = info[1]
err, head = self.mergeone(repo, mergeq, head, patch, rev, diffopts)
@@ -942,9 +943,9 @@
)
return (True, list(files), fuzz)
except Exception as inst:
- self.ui.note(stringutil.forcebytestr(inst) + '\n')
+ self.ui.note(stringutil.forcebytestr(inst) + b'\n')
if not self.ui.verbose:
- self.ui.warn(_("patch failed, unable to continue (try -v)\n"))
+ self.ui.warn(_(b"patch failed, unable to continue (try -v)\n"))
self.ui.traceback()
return (False, list(files), False)
@@ -965,7 +966,7 @@
try:
wlock = repo.wlock()
lock = repo.lock()
- tr = repo.transaction("qpush")
+ tr = repo.transaction(b"qpush")
try:
ret = self._apply(
repo,
@@ -1025,25 +1026,25 @@
if not pushable:
self.explainpushable(patchname, all_patches=True)
continue
- self.ui.status(_("applying %s\n") % patchname)
+ self.ui.status(_(b"applying %s\n") % patchname)
pf = os.path.join(patchdir, patchname)
try:
ph = patchheader(self.join(patchname), self.plainmode)
except IOError:
- self.ui.warn(_("unable to read %s\n") % patchname)
+ self.ui.warn(_(b"unable to read %s\n") % patchname)
err = 1
break
message = ph.message
if not message:
# The commit message should not be translated
- message = "imported patch %s\n" % patchname
+ message = b"imported patch %s\n" % patchname
else:
if list:
# The commit message should not be translated
- message.append("\nimported patch %s" % patchname)
- message = '\n'.join(message)
+ message.append(b"\nimported patch %s" % patchname)
+ message = b'\n'.join(message)
if ph.haspatch:
if tobackup:
@@ -1051,8 +1052,8 @@
touched = set(touched) & tobackup
if touched and keepchanges:
raise AbortNoCleanup(
- _("conflicting local changes found"),
- hint=_("did you forget to qrefresh?"),
+ _(b"conflicting local changes found"),
+ hint=_(b"did you forget to qrefresh?"),
)
self.backup(repo, touched, copy=True)
tobackup = tobackup - touched
@@ -1061,7 +1062,7 @@
all_files.update(files)
patcherr = not patcherr
else:
- self.ui.warn(_("patch %s is empty\n") % patchname)
+ self.ui.warn(_(b"patch %s is empty\n") % patchname)
patcherr, files, fuzz = 0, [], 0
if merge and files:
@@ -1081,9 +1082,9 @@
p1 = repo.dirstate.p1()
repo.setparents(p1, merge)
- if all_files and '.hgsubstate' in all_files:
+ if all_files and b'.hgsubstate' in all_files:
wctx = repo[None]
- pctx = repo['.']
+ pctx = repo[b'.']
overwrite = False
mergedsubstate = subrepoutil.submerge(
repo, pctx, wctx, wctx, overwrite
@@ -1096,22 +1097,24 @@
repo, None, message, ph.user, ph.date, match=match, force=True
)
if repo.changelog.tip() == oldtip:
- raise error.Abort(_("qpush exactly duplicates child changeset"))
+ raise error.Abort(
+ _(b"qpush exactly duplicates child changeset")
+ )
if n is None:
- raise error.Abort(_("repository commit failed"))
+ raise error.Abort(_(b"repository commit failed"))
if update_status:
self.applied.append(statusentry(n, patchname))
if patcherr:
self.ui.warn(
- _("patch failed, rejects left in working " "directory\n")
+ _(b"patch failed, rejects left in working " b"directory\n")
)
err = 2
break
if fuzz and strict:
- self.ui.warn(_("fuzz found when applying patch, stopping\n"))
+ self.ui.warn(_(b"fuzz found when applying patch, stopping\n"))
err = 3
break
return (err, n)
@@ -1155,11 +1158,11 @@
if numrevs:
rev = dict((entry.name, entry.node) for entry in qfinished)
for p in unknown:
- msg = _('revision %s refers to unknown patches: %s\n')
+ msg = _(b'revision %s refers to unknown patches: %s\n')
self.ui.warn(msg % (short(rev[p]), p))
else:
- msg = _('unknown patches: %s\n')
- raise error.Abort(''.join(msg % p for p in unknown))
+ msg = _(b'unknown patches: %s\n')
+ raise error.Abort(b''.join(msg % p for p in unknown))
self.parseseries()
self.seriesdirty = True
@@ -1171,18 +1174,18 @@
for i, rev in enumerate(revs):
if rev < firstrev:
- raise error.Abort(_('revision %d is not managed') % rev)
+ raise error.Abort(_(b'revision %d is not managed') % rev)
ctx = repo[rev]
base = self.applied[i].node
if ctx.node() != base:
- msg = _('cannot delete revision %d above applied patches')
+ msg = _(b'cannot delete revision %d above applied patches')
raise error.Abort(msg % rev)
patch = self.applied[i].name
- for fmt in ('[mq]: %s', 'imported patch %s'):
+ for fmt in (b'[mq]: %s', b'imported patch %s'):
if ctx.description() == fmt % patch:
- msg = _('patch %s finalized without changeset message\n')
+ msg = _(b'patch %s finalized without changeset message\n')
repo.ui.status(msg % patch)
break
@@ -1195,18 +1198,18 @@
repo._phasecache
patches = self._revpatches(repo, sorted(revs))
qfinished = self._cleanup(patches, len(patches))
- if qfinished and repo.ui.configbool('mq', 'secret'):
+ if qfinished and repo.ui.configbool(b'mq', b'secret'):
# only use this logic when the secret option is added
oldqbase = repo[qfinished[0]]
tphase = phases.newcommitphase(repo.ui)
if oldqbase.phase() > tphase and oldqbase.p1().phase() <= tphase:
- with repo.transaction('qfinish') as tr:
+ with repo.transaction(b'qfinish') as tr:
phases.advanceboundary(repo, tr, tphase, qfinished)
def delete(self, repo, patches, opts):
- if not patches and not opts.get('rev'):
+ if not patches and not opts.get(b'rev'):
raise error.Abort(
- _('qdelete requires at least one revision or ' 'patch name')
+ _(b'qdelete requires at least one revision or ' b'patch name')
)
realpatches = []
@@ -1214,23 +1217,23 @@
patch = self.lookup(patch, strict=True)
info = self.isapplied(patch)
if info:
- raise error.Abort(_("cannot delete applied patch %s") % patch)
+ raise error.Abort(_(b"cannot delete applied patch %s") % patch)
if patch not in self.series:
- raise error.Abort(_("patch %s not in series file") % patch)
+ raise error.Abort(_(b"patch %s not in series file") % patch)
if patch not in realpatches:
realpatches.append(patch)
numrevs = 0
- if opts.get('rev'):
+ if opts.get(b'rev'):
if not self.applied:
- raise error.Abort(_('no patches applied'))
- revs = scmutil.revrange(repo, opts.get('rev'))
+ raise error.Abort(_(b'no patches applied'))
+ revs = scmutil.revrange(repo, opts.get(b'rev'))
revs.sort()
revpatches = self._revpatches(repo, revs)
realpatches += revpatches
numrevs = len(revpatches)
- self._cleanup(realpatches, numrevs, opts.get('keep'))
+ self._cleanup(realpatches, numrevs, opts.get(b'keep'))
def checktoppatch(self, repo):
'''check that working directory is at qtip'''
@@ -1238,64 +1241,66 @@
top = self.applied[-1].node
patch = self.applied[-1].name
if repo.dirstate.p1() != top:
- raise error.Abort(_("working directory revision is not qtip"))
+ raise error.Abort(_(b"working directory revision is not qtip"))
return top, patch
return None, None
def putsubstate2changes(self, substatestate, changes):
for files in changes[:3]:
- if '.hgsubstate' in files:
+ if b'.hgsubstate' in files:
return # already listed up
# not yet listed up
- if substatestate in 'a?':
- changes[1].append('.hgsubstate')
- elif substatestate in 'r':
- changes[2].append('.hgsubstate')
+ if substatestate in b'a?':
+ changes[1].append(b'.hgsubstate')
+ elif substatestate in b'r':
+ changes[2].append(b'.hgsubstate')
else: # modified
- changes[0].append('.hgsubstate')
+ changes[0].append(b'.hgsubstate')
def checklocalchanges(self, repo, force=False, refresh=True):
- excsuffix = ''
+ excsuffix = b''
if refresh:
- excsuffix = ', qrefresh first'
+ excsuffix = b', qrefresh first'
# plain versions for i18n tool to detect them
- _("local changes found, qrefresh first")
- _("local changed subrepos found, qrefresh first")
+ _(b"local changes found, qrefresh first")
+ _(b"local changed subrepos found, qrefresh first")
s = repo.status()
if not force:
cmdutil.checkunfinished(repo)
if s.modified or s.added or s.removed or s.deleted:
- _("local changes found") # i18n tool detection
- raise error.Abort(_("local changes found" + excsuffix))
+ _(b"local changes found") # i18n tool detection
+ raise error.Abort(_(b"local changes found" + excsuffix))
if checksubstate(repo):
- _("local changed subrepos found") # i18n tool detection
- raise error.Abort(_("local changed subrepos found" + excsuffix))
+ _(b"local changed subrepos found") # i18n tool detection
+ raise error.Abort(
+ _(b"local changed subrepos found" + excsuffix)
+ )
else:
cmdutil.checkunfinished(repo, skipmerge=True)
return s
- _reserved = ('series', 'status', 'guards', '.', '..')
+ _reserved = (b'series', b'status', b'guards', b'.', b'..')
def checkreservedname(self, name):
if name in self._reserved:
raise error.Abort(
- _('"%s" cannot be used as the name of a patch') % name
+ _(b'"%s" cannot be used as the name of a patch') % name
)
if name != name.strip():
# whitespace is stripped by parseseries()
raise error.Abort(
- _('patch name cannot begin or end with ' 'whitespace')
+ _(b'patch name cannot begin or end with ' b'whitespace')
)
- for prefix in ('.hg', '.mq'):
+ for prefix in (b'.hg', b'.mq'):
if name.startswith(prefix):
raise error.Abort(
- _('patch name cannot begin with "%s"') % prefix
+ _(b'patch name cannot begin with "%s"') % prefix
)
- for c in ('#', ':', '\r', '\n'):
+ for c in (b'#', b':', b'\r', b'\n'):
if c in name:
raise error.Abort(
- _('%r cannot be used in the name of a patch')
+ _(b'%r cannot be used in the name of a patch')
% pycompat.bytestr(c)
)
@@ -1304,10 +1309,10 @@
if not force and os.path.exists(self.join(name)):
if os.path.isdir(self.join(name)):
raise error.Abort(
- _('"%s" already exists as a directory') % name
+ _(b'"%s" already exists as a directory') % name
)
else:
- raise error.Abort(_('patch "%s" already exists') % name)
+ raise error.Abort(_(b'patch "%s" already exists') % name)
def makepatchname(self, title, fallbackname):
"""Return a suitable filename for title, adding a suffix to make
@@ -1331,36 +1336,36 @@
except error.Abort:
pass
i += 1
- name = '%s__%d' % (namebase, i)
+ name = b'%s__%d' % (namebase, i)
return name
def checkkeepchanges(self, keepchanges, force):
if force and keepchanges:
- raise error.Abort(_('cannot use both --force and --keep-changes'))
+ raise error.Abort(_(b'cannot use both --force and --keep-changes'))
def new(self, repo, patchfn, *pats, **opts):
"""options:
msg: a string or a no-argument function returning a string
"""
opts = pycompat.byteskwargs(opts)
- msg = opts.get('msg')
- edit = opts.get('edit')
- editform = opts.get('editform', 'mq.qnew')
- user = opts.get('user')
- date = opts.get('date')
+ msg = opts.get(b'msg')
+ edit = opts.get(b'edit')
+ editform = opts.get(b'editform', b'mq.qnew')
+ user = opts.get(b'user')
+ date = opts.get(b'date')
if date:
date = dateutil.parsedate(date)
- diffopts = self.diffopts({'git': opts.get('git')}, plain=True)
- if opts.get('checkname', True):
+ diffopts = self.diffopts({b'git': opts.get(b'git')}, plain=True)
+ if opts.get(b'checkname', True):
self.checkpatchname(patchfn)
inclsubs = checksubstate(repo)
if inclsubs:
- substatestate = repo.dirstate['.hgsubstate']
- if opts.get('include') or opts.get('exclude') or pats:
+ substatestate = repo.dirstate[b'.hgsubstate']
+ if opts.get(b'include') or opts.get(b'exclude') or pats:
# detect missing files in pats
def badfn(f, msg):
- if f != '.hgsubstate': # .hgsubstate is auto-created
- raise error.Abort('%s: %s' % (f, msg))
+ if f != b'.hgsubstate': # .hgsubstate is auto-created
+ raise error.Abort(b'%s: %s' % (f, msg))
match = scmutil.match(repo[None], pats, opts, badfn=badfn)
changes = repo.status(match=match)
@@ -1371,20 +1376,20 @@
commitfiles.extend(files)
match = scmutil.matchfiles(repo, commitfiles)
if len(repo[None].parents()) > 1:
- raise error.Abort(_('cannot manage merge changesets'))
+ raise error.Abort(_(b'cannot manage merge changesets'))
self.checktoppatch(repo)
insert = self.fullseriesend()
with repo.wlock():
try:
# if patch file write fails, abort early
- p = self.opener(patchfn, "w")
+ p = self.opener(patchfn, b"w")
except IOError as e:
raise error.Abort(
- _('cannot write patch "%s": %s')
+ _(b'cannot write patch "%s": %s')
% (patchfn, encoding.strtolocal(e.strerror))
)
try:
- defaultmsg = "[mq]: %s" % patchfn
+ defaultmsg = b"[mq]: %s" % patchfn
editor = cmdutil.getcommiteditor(editform=editform)
if edit:
@@ -1395,7 +1400,7 @@
return defaultmsg
# i18n: this message is shown in editor with "HG: " prefix
- extramsg = _('Leave message empty to use default message.')
+ extramsg = _(b'Leave message empty to use default message.')
editor = cmdutil.getcommiteditor(
finishdesc=finishdesc,
extramsg=extramsg,
@@ -1416,7 +1421,7 @@
editor=editor,
)
if n is None:
- raise error.Abort(_("repo commit failed"))
+ raise error.Abort(_(b"repo commit failed"))
try:
self.fullseries[insert:insert] = [patchfn]
self.applied.append(statusentry(n, patchfn))
@@ -1428,11 +1433,11 @@
if user:
ph.setuser(user)
if date:
- ph.setdate('%d %d' % date)
+ ph.setdate(b'%d %d' % date)
ph.setparent(hex(nctx.p1().node()))
msg = nctx.description().strip()
if msg == defaultmsg.strip():
- msg = ''
+ msg = b''
ph.setmessage(msg)
p.write(bytes(ph))
if commitfiles:
@@ -1460,7 +1465,7 @@
try:
os.unlink(patchpath)
except OSError:
- self.ui.warn(_('error unlinking %s\n') % patchpath)
+ self.ui.warn(_(b'error unlinking %s\n') % patchpath)
raise
self.removeundo(repo)
@@ -1483,16 +1488,16 @@
return s
matches = [x for x in self.series if s in x]
if len(matches) > 1:
- self.ui.warn(_('patch name "%s" is ambiguous:\n') % s)
+ self.ui.warn(_(b'patch name "%s" is ambiguous:\n') % s)
for m in matches:
- self.ui.warn(' %s\n' % m)
+ self.ui.warn(b' %s\n' % m)
return None
if matches:
return matches[0]
if self.series and self.applied:
- if s == 'qtip':
+ if s == b'qtip':
return self.series[self.seriesend(True) - 1]
- if s == 'qbase':
+ if s == b'qbase':
return self.series[0]
return None
@@ -1512,7 +1517,7 @@
res = partialname(patch)
if res:
return res
- minus = patch.rfind('-')
+ minus = patch.rfind(b'-')
if minus >= 0:
res = partialname(patch[:minus])
if res:
@@ -1524,7 +1529,7 @@
else:
if i - off >= 0:
return self.series[i - off]
- plus = patch.rfind('+')
+ plus = patch.rfind(b'+')
if plus >= 0:
res = partialname(patch[:plus])
if res:
@@ -1536,7 +1541,7 @@
else:
if i + off < len(self.series):
return self.series[i + off]
- raise error.Abort(_("patch %s not in series") % patch)
+ raise error.Abort(_(b"patch %s not in series") % patch)
def push(
self,
@@ -1560,10 +1565,10 @@
if not heads:
heads = [nullid]
if repo.dirstate.p1() not in heads and not exact:
- self.ui.status(_("(working directory not at a head)\n"))
+ self.ui.status(_(b"(working directory not at a head)\n"))
if not self.series:
- self.ui.warn(_('no patches in series\n'))
+ self.ui.warn(_(b'no patches in series\n'))
return 0
# Suppose our series file is: A B C and the current 'top'
@@ -1574,26 +1579,30 @@
patch = self.lookup(patch)
info = self.isapplied(patch)
if info and info[0] >= len(self.applied) - 1:
- self.ui.warn(_('qpush: %s is already at the top\n') % patch)
+ self.ui.warn(
+ _(b'qpush: %s is already at the top\n') % patch
+ )
return 0
pushable, reason = self.pushable(patch)
if pushable:
if self.series.index(patch) < self.seriesend():
raise error.Abort(
- _("cannot push to a previous patch: %s") % patch
+ _(b"cannot push to a previous patch: %s") % patch
)
else:
if reason:
- reason = _('guarded by %s') % reason
+ reason = _(b'guarded by %s') % reason
else:
- reason = _('no matching guards')
- self.ui.warn(_("cannot push '%s' - %s\n") % (patch, reason))
+ reason = _(b'no matching guards')
+ self.ui.warn(
+ _(b"cannot push '%s' - %s\n") % (patch, reason)
+ )
return 1
elif all:
patch = self.series[-1]
if self.isapplied(patch):
- self.ui.warn(_('all patches are currently applied\n'))
+ self.ui.warn(_(b'all patches are currently applied\n'))
return 0
# Following the above example, starting at 'top' of B:
@@ -1603,7 +1612,7 @@
# work as it detects an error when done
start = self.seriesend()
if start == len(self.series):
- self.ui.warn(_('patch series already fully applied\n'))
+ self.ui.warn(_(b'patch series already fully applied\n'))
return 1
if not force and not keepchanges:
self.checklocalchanges(repo, refresh=self.applied)
@@ -1611,28 +1620,28 @@
if exact:
if keepchanges:
raise error.Abort(
- _("cannot use --exact and --keep-changes together")
+ _(b"cannot use --exact and --keep-changes together")
)
if move:
raise error.Abort(
- _('cannot use --exact and --move ' 'together')
+ _(b'cannot use --exact and --move ' b'together')
)
if self.applied:
raise error.Abort(
- _('cannot push --exact with applied ' 'patches')
+ _(b'cannot push --exact with applied ' b'patches')
)
root = self.series[start]
target = patchheader(self.join(root), self.plainmode).parent
if not target:
raise error.Abort(
- _("%s does not have a parent recorded") % root
+ _(b"%s does not have a parent recorded") % root
)
- if not repo[target] == repo['.']:
+ if not repo[target] == repo[b'.']:
hg.update(repo, target)
if move:
if not patch:
- raise error.Abort(_("please specify the patch to move"))
+ raise error.Abort(_(b"please specify the patch to move"))
for fullstart, rpn in enumerate(self.fullseries):
# strip markers for patch guards
if self.guard_re.split(rpn, 1)[0] == self.series[start]:
@@ -1688,11 +1697,11 @@
except AbortNoCleanup:
raise
except: # re-raises
- self.ui.warn(_('cleaning up working directory...\n'))
+ self.ui.warn(_(b'cleaning up working directory...\n'))
cmdutil.revert(
self.ui,
repo,
- repo['.'],
+ repo[b'.'],
repo.dirstate.parents(),
no_backup=True,
)
@@ -1701,17 +1710,17 @@
for f in all_files:
if f not in repo.dirstate:
repo.wvfs.unlinkpath(f, ignoremissing=True)
- self.ui.warn(_('done\n'))
+ self.ui.warn(_(b'done\n'))
raise
if not self.applied:
return ret[0]
top = self.applied[-1].name
if ret[0] and ret[0] > 1:
- msg = _("errors during apply, please fix and qrefresh %s\n")
+ msg = _(b"errors during apply, please fix and qrefresh %s\n")
self.ui.write(msg % top)
else:
- self.ui.write(_("now at: %s\n") % top)
+ self.ui.write(_(b"now at: %s\n") % top)
return ret[0]
def pop(
@@ -1733,12 +1742,12 @@
patch = self.lookup(patch)
info = self.isapplied(patch)
if not info:
- raise error.Abort(_("patch %s is not applied") % patch)
+ raise error.Abort(_(b"patch %s is not applied") % patch)
if not self.applied:
# Allow qpop -a to work repeatedly,
# but not qpop without an argument
- self.ui.warn(_("no patches applied\n"))
+ self.ui.warn(_(b"no patches applied\n"))
return not all
if all:
@@ -1749,7 +1758,7 @@
start = len(self.applied) - 1
if start >= len(self.applied):
- self.ui.warn(_("qpop: %s is already at the top\n") % patch)
+ self.ui.warn(_(b"qpop: %s is already at the top\n") % patch)
return
if not update:
@@ -1757,7 +1766,7 @@
rr = [x.node for x in self.applied]
for p in parents:
if p in rr:
- self.ui.warn(_("qpop: forcing dirstate update\n"))
+ self.ui.warn(_(b"qpop: forcing dirstate update\n"))
update = True
else:
parents = [p.node() for p in repo[None].parents()]
@@ -1784,19 +1793,19 @@
heads = repo.changelog.heads(rev)
except error.LookupError:
node = short(rev)
- raise error.Abort(_('trying to pop unknown node %s') % node)
+ raise error.Abort(_(b'trying to pop unknown node %s') % node)
if heads != [self.applied[-1].node]:
raise error.Abort(
_(
- "popping would remove a revision not "
- "managed by this patch queue"
+ b"popping would remove a revision not "
+ b"managed by this patch queue"
)
)
if not repo[self.applied[-1].node].mutable():
raise error.Abort(
- _("popping would remove a public revision"),
- hint=_("see 'hg help phases' for details"),
+ _(b"popping would remove a public revision"),
+ hint=_(b"see 'hg help phases' for details"),
)
# we know there are no local changes, so we can make a simplified
@@ -1804,13 +1813,13 @@
if update:
qp = self.qparents(repo, rev)
ctx = repo[qp]
- m, a, r, d = repo.status(qp, '.')[:4]
+ m, a, r, d = repo.status(qp, b'.')[:4]
if d:
- raise error.Abort(_("deletions found between repo revs"))
+ raise error.Abort(_(b"deletions found between repo revs"))
tobackup = set(a + m + r) & tobackup
if keepchanges and tobackup:
- raise error.Abort(_("local changes found, qrefresh first"))
+ raise error.Abort(_(b"local changes found, qrefresh first"))
self.backup(repo, tobackup)
with repo.dirstate.parentchange():
for f in a:
@@ -1822,23 +1831,23 @@
repo.dirstate.normal(f)
repo.setparents(qp, nullid)
for patch in reversed(self.applied[start:end]):
- self.ui.status(_("popping %s\n") % patch.name)
+ self.ui.status(_(b"popping %s\n") % patch.name)
del self.applied[start:end]
strip(self.ui, repo, [rev], update=False, backup=False)
- for s, state in repo['.'].substate.items():
- repo['.'].sub(s).get(state)
+ for s, state in repo[b'.'].substate.items():
+ repo[b'.'].sub(s).get(state)
if self.applied:
- self.ui.write(_("now at: %s\n") % self.applied[-1].name)
+ self.ui.write(_(b"now at: %s\n") % self.applied[-1].name)
else:
- self.ui.write(_("patch queue now empty\n"))
+ self.ui.write(_(b"patch queue now empty\n"))
def diff(self, repo, pats, opts):
top, patch = self.checktoppatch(repo)
if not top:
- self.ui.write(_("no patches applied\n"))
+ self.ui.write(_(b"no patches applied\n"))
return
qp = self.qparents(repo, top)
- if opts.get('reverse'):
+ if opts.get(b'reverse'):
node1, node2 = None, qp
else:
node1, node2 = qp, None
@@ -1848,26 +1857,28 @@
def refresh(self, repo, pats=None, **opts):
opts = pycompat.byteskwargs(opts)
if not self.applied:
- self.ui.write(_("no patches applied\n"))
+ self.ui.write(_(b"no patches applied\n"))
return 1
- msg = opts.get('msg', '').rstrip()
- edit = opts.get('edit')
- editform = opts.get('editform', 'mq.qrefresh')
- newuser = opts.get('user')
- newdate = opts.get('date')
+ msg = opts.get(b'msg', b'').rstrip()
+ edit = opts.get(b'edit')
+ editform = opts.get(b'editform', b'mq.qrefresh')
+ newuser = opts.get(b'user')
+ newdate = opts.get(b'date')
if newdate:
- newdate = '%d %d' % dateutil.parsedate(newdate)
+ newdate = b'%d %d' % dateutil.parsedate(newdate)
wlock = repo.wlock()
try:
self.checktoppatch(repo)
(top, patchfn) = (self.applied[-1].node, self.applied[-1].name)
if repo.changelog.heads(top) != [top]:
- raise error.Abort(_("cannot qrefresh a revision with children"))
+ raise error.Abort(
+ _(b"cannot qrefresh a revision with children")
+ )
if not repo[top].mutable():
raise error.Abort(
- _("cannot qrefresh public revision"),
- hint=_("see 'hg help phases' for details"),
+ _(b"cannot qrefresh public revision"),
+ hint=_(b"see 'hg help phases' for details"),
)
cparents = repo.changelog.parents(top)
@@ -1875,11 +1886,11 @@
inclsubs = checksubstate(repo, patchparent)
if inclsubs:
- substatestate = repo.dirstate['.hgsubstate']
+ substatestate = repo.dirstate[b'.hgsubstate']
ph = patchheader(self.join(patchfn), self.plainmode)
diffopts = self.diffopts(
- {'git': opts.get('git')}, patchfn, plain=True
+ {b'git': opts.get(b'git')}, patchfn, plain=True
)
if newuser:
ph.setuser(newuser)
@@ -1888,7 +1899,7 @@
ph.setparent(hex(patchparent))
# only commit new patch when write is complete
- patchf = self.opener(patchfn, 'w', atomictemp=True)
+ patchf = self.opener(patchfn, b'w', atomictemp=True)
# update the dirstate in place, strip off the qtip commit
# and then commit.
@@ -1903,7 +1914,7 @@
match1 = scmutil.match(repo[None], pats, opts)
# in short mode, we only diff the files included in the
# patch already plus specified files
- if opts.get('short'):
+ if opts.get(b'short'):
# if amending a patch, we start with existing
# files plus specified files - unfiltered
match = scmutil.matchfiles(repo, mm + aa + dd + match1.files())
@@ -1963,7 +1974,7 @@
dsguard = None
try:
- dsguard = dirstateguard.dirstateguard(repo, 'mq.refresh')
+ dsguard = dirstateguard.dirstateguard(repo, b'mq.refresh')
if diffopts.git or diffopts.upgrade:
copies = {}
for dst in a:
@@ -2026,7 +2037,7 @@
try:
# might be nice to attempt to roll back strip after this
- defaultmsg = "[mq]: %s" % patchfn
+ defaultmsg = b"[mq]: %s" % patchfn
editor = cmdutil.getcommiteditor(editform=editform)
if edit:
@@ -2037,18 +2048,18 @@
return defaultmsg
# i18n: this message is shown in editor with "HG: " prefix
- extramsg = _('Leave message empty to use default message.')
+ extramsg = _(b'Leave message empty to use default message.')
editor = cmdutil.getcommiteditor(
finishdesc=finishdesc,
extramsg=extramsg,
editform=editform,
)
- message = msg or "\n".join(ph.message)
+ message = msg or b"\n".join(ph.message)
elif not msg:
if not ph.message:
message = defaultmsg
else:
- message = "\n".join(ph.message)
+ message = b"\n".join(ph.message)
else:
message = msg
ph.setmessage(msg)
@@ -2058,7 +2069,7 @@
lock = tr = None
try:
lock = repo.lock()
- tr = repo.transaction('mq')
+ tr = repo.transaction(b'mq')
n = newcommit(
repo,
oldphase,
@@ -2096,8 +2107,8 @@
self.savedirty()
self.ui.warn(
_(
- 'qrefresh interrupted while patch was popped! '
- '(revert --all, qpush to recover)\n'
+ b'qrefresh interrupted while patch was popped! '
+ b'(revert --all, qpush to recover)\n'
)
)
raise
@@ -2107,7 +2118,7 @@
def init(self, repo, create=False):
if not create and os.path.isdir(self.path):
- raise error.Abort(_("patch queue directory already exists"))
+ raise error.Abort(_(b"patch queue directory already exists"))
try:
os.mkdir(self.path)
except OSError as inst:
@@ -2118,7 +2129,7 @@
def unapplied(self, repo, patch=None):
if patch and patch not in self.series:
- raise error.Abort(_("patch %s is not in series file") % patch)
+ raise error.Abort(_(b"patch %s is not in series file") % patch)
if not patch:
start = self.seriesend()
else:
@@ -2148,38 +2159,38 @@
if ph.message:
msg = ph.message[0]
else:
- msg = ''
+ msg = b''
if self.ui.formatted():
width = self.ui.termwidth() - len(pfx) - len(patchname) - 2
if width > 0:
msg = stringutil.ellipsis(msg, width)
else:
- msg = ''
- self.ui.write(patchname, label='qseries.' + state)
- self.ui.write(': ')
- self.ui.write(msg, label='qseries.message.' + state)
+ msg = b''
+ self.ui.write(patchname, label=b'qseries.' + state)
+ self.ui.write(b': ')
+ self.ui.write(msg, label=b'qseries.message.' + state)
else:
- self.ui.write(patchname, label='qseries.' + state)
- self.ui.write('\n')
+ self.ui.write(patchname, label=b'qseries.' + state)
+ self.ui.write(b'\n')
applied = {p.name for p in self.applied}
if length is None:
length = len(self.series) - start
if not missing:
if self.ui.verbose:
- idxwidth = len("%d" % (start + length - 1))
+ idxwidth = len(b"%d" % (start + length - 1))
for i in pycompat.xrange(start, start + length):
patch = self.series[i]
if patch in applied:
- char, state = 'A', 'applied'
+ char, state = b'A', b'applied'
elif self.pushable(i)[0]:
- char, state = 'U', 'unapplied'
+ char, state = b'U', b'unapplied'
else:
- char, state = 'G', 'guarded'
- pfx = ''
+ char, state = b'G', b'guarded'
+ pfx = b''
if self.ui.verbose:
- pfx = '%*d %s ' % (idxwidth, i, char)
+ pfx = b'%*d %s ' % (idxwidth, i, char)
elif status and status != char:
continue
displayname(pfx, patch, state)
@@ -2197,15 +2208,15 @@
self.seriespath,
self.guardspath,
)
- and not fl.startswith('.')
+ and not fl.startswith(b'.')
):
msng_list.append(fl)
for x in sorted(msng_list):
- pfx = self.ui.verbose and 'D ' or ''
- displayname(pfx, x, 'missing')
+ pfx = self.ui.verbose and b'D ' or b''
+ displayname(pfx, x, b'missing')
def issaveline(self, l):
- if l.name == '.hg.patches.save.line':
+ if l.name == b'.hg.patches.save.line':
return True
def qrepo(self, create=False):
@@ -2215,15 +2226,18 @@
ui.pageractive = self.ui.pageractive
# internal config: ui.formatted
ui.setconfig(
- 'ui', 'formatted', self.ui.config('ui', 'formatted'), 'mqpager'
+ b'ui',
+ b'formatted',
+ self.ui.config(b'ui', b'formatted'),
+ b'mqpager',
)
ui.setconfig(
- 'ui',
- 'interactive',
- self.ui.config('ui', 'interactive'),
- 'mqpager',
+ b'ui',
+ b'interactive',
+ self.ui.config(b'ui', b'interactive'),
+ b'mqpager',
)
- if create or os.path.isdir(self.join(".hg")):
+ if create or os.path.isdir(self.join(b".hg")):
return hg.repository(ui, path=self.path, create=create)
def restore(self, repo, rev, delete=None, qupdate=None):
@@ -2235,23 +2249,23 @@
applied = []
qpp = None
for i, line in enumerate(lines):
- if line == 'Patch Data:':
+ if line == b'Patch Data:':
datastart = i + 1
- elif line.startswith('Dirstate:'):
+ elif line.startswith(b'Dirstate:'):
l = line.rstrip()
- l = l[10:].split(' ')
+ l = l[10:].split(b' ')
qpp = [bin(x) for x in l]
elif datastart is not None:
l = line.rstrip()
- n, name = l.split(':', 1)
+ n, name = l.split(b':', 1)
if n:
applied.append(statusentry(bin(n), name))
else:
series.append(l)
if datastart is None:
- self.ui.warn(_("no saved patch data found\n"))
+ self.ui.warn(_(b"no saved patch data found\n"))
return 1
- self.ui.warn(_("restoring status: %s\n") % lines[0])
+ self.ui.warn(_(b"restoring status: %s\n") % lines[0])
self.fullseries = series
self.applied = applied
self.parseseries()
@@ -2260,9 +2274,9 @@
heads = repo.changelog.heads()
if delete:
if rev not in heads:
- self.ui.warn(_("save entry has children, leaving it alone\n"))
+ self.ui.warn(_(b"save entry has children, leaving it alone\n"))
else:
- self.ui.warn(_("removing save entry %s\n") % short(rev))
+ self.ui.warn(_(b"removing save entry %s\n") % short(rev))
pp = repo.dirstate.parents()
if rev in pp:
update = True
@@ -2271,41 +2285,41 @@
strip(self.ui, repo, [rev], update=update, backup=False)
if qpp:
self.ui.warn(
- _("saved queue repository parents: %s %s\n")
+ _(b"saved queue repository parents: %s %s\n")
% (short(qpp[0]), short(qpp[1]))
)
if qupdate:
- self.ui.status(_("updating queue directory\n"))
+ self.ui.status(_(b"updating queue directory\n"))
r = self.qrepo()
if not r:
- self.ui.warn(_("unable to load queue repository\n"))
+ self.ui.warn(_(b"unable to load queue repository\n"))
return 1
hg.clean(r, qpp[0])
def save(self, repo, msg=None):
if not self.applied:
- self.ui.warn(_("save: no patches applied, exiting\n"))
+ self.ui.warn(_(b"save: no patches applied, exiting\n"))
return 1
if self.issaveline(self.applied[-1]):
- self.ui.warn(_("status is already saved\n"))
+ self.ui.warn(_(b"status is already saved\n"))
return 1
if not msg:
- msg = _("hg patches saved state")
+ msg = _(b"hg patches saved state")
else:
- msg = "hg patches: " + msg.rstrip('\r\n')
+ msg = b"hg patches: " + msg.rstrip(b'\r\n')
r = self.qrepo()
if r:
pp = r.dirstate.parents()
- msg += "\nDirstate: %s %s" % (hex(pp[0]), hex(pp[1]))
- msg += "\n\nPatch Data:\n"
- msg += ''.join('%s\n' % x for x in self.applied)
- msg += ''.join(':%s\n' % x for x in self.fullseries)
+ msg += b"\nDirstate: %s %s" % (hex(pp[0]), hex(pp[1]))
+ msg += b"\n\nPatch Data:\n"
+ msg += b''.join(b'%s\n' % x for x in self.applied)
+ msg += b''.join(b':%s\n' % x for x in self.fullseries)
n = repo.commit(msg, force=True)
if not n:
- self.ui.warn(_("repo commit failed\n"))
+ self.ui.warn(_(b"repo commit failed\n"))
return 1
- self.applied.append(statusentry(n, '.hg.patches.save.line'))
+ self.applied.append(statusentry(n, b'.hg.patches.save.line'))
self.applieddirty = True
self.removeundo(repo)
@@ -2349,7 +2363,7 @@
if not self.ui.verbose:
p = pname
else:
- p = ("%d" % self.series.index(pname)) + " " + pname
+ p = (b"%d" % self.series.index(pname)) + b" " + pname
return p
def qimport(
@@ -2365,21 +2379,21 @@
def checkseries(patchname):
if patchname in self.series:
raise error.Abort(
- _('patch %s is already in the series file') % patchname
+ _(b'patch %s is already in the series file') % patchname
)
if rev:
if files:
raise error.Abort(
- _('option "-r" not valid when importing ' 'files')
+ _(b'option "-r" not valid when importing ' b'files')
)
rev = scmutil.revrange(repo, rev)
rev.sort(reverse=True)
elif not files:
- raise error.Abort(_('no files or revisions specified'))
+ raise error.Abort(_(b'no files or revisions specified'))
if (len(files) > 1 or len(rev) > 1) and patchname:
raise error.Abort(
- _('option "-n" not valid when importing multiple ' 'patches')
+ _(b'option "-n" not valid when importing multiple ' b'patches')
)
imported = []
if rev:
@@ -2389,18 +2403,18 @@
heads = repo.changelog.heads(repo.changelog.node(rev.first()))
if len(heads) > 1:
raise error.Abort(
- _('revision %d is the root of more than one ' 'branch')
+ _(b'revision %d is the root of more than one ' b'branch')
% rev.last()
)
if self.applied:
base = repo.changelog.node(rev.first())
if base in [n.node for n in self.applied]:
raise error.Abort(
- _('revision %d is already managed') % rev.first()
+ _(b'revision %d is already managed') % rev.first()
)
if heads != [self.applied[-1].node]:
raise error.Abort(
- _('revision %d is not the parent of ' 'the queue')
+ _(b'revision %d is not the parent of ' b'the queue')
% rev.first()
)
base = repo.changelog.rev(self.applied[0].node)
@@ -2408,41 +2422,41 @@
else:
if heads != [repo.changelog.node(rev.first())]:
raise error.Abort(
- _('revision %d has unmanaged children') % rev.first()
+ _(b'revision %d has unmanaged children') % rev.first()
)
lastparent = None
- diffopts = self.diffopts({'git': git})
- with repo.transaction('qimport') as tr:
+ diffopts = self.diffopts({b'git': git})
+ with repo.transaction(b'qimport') as tr:
for r in rev:
if not repo[r].mutable():
raise error.Abort(
- _('revision %d is not mutable') % r,
- hint=_("see 'hg help phases' " 'for details'),
+ _(b'revision %d is not mutable') % r,
+ hint=_(b"see 'hg help phases' " b'for details'),
)
p1, p2 = repo.changelog.parentrevs(r)
n = repo.changelog.node(r)
if p2 != nullrev:
raise error.Abort(
- _('cannot import merge revision %d') % r
+ _(b'cannot import merge revision %d') % r
)
if lastparent and lastparent != r:
raise error.Abort(
- _('revision %d is not the parent of ' '%d')
+ _(b'revision %d is not the parent of ' b'%d')
% (r, lastparent)
)
lastparent = p1
if not patchname:
patchname = self.makepatchname(
- repo[r].description().split('\n', 1)[0],
- '%d.diff' % r,
+ repo[r].description().split(b'\n', 1)[0],
+ b'%d.diff' % r,
)
checkseries(patchname)
self.checkpatchname(patchname, force)
self.fullseries.insert(0, patchname)
- with self.opener(patchname, "w") as fp:
+ with self.opener(patchname, b"w") as fp:
cmdutil.exportfile(repo, [n], fp, opts=diffopts)
se = statusentry(n, patchname)
@@ -2451,7 +2465,7 @@
self.added.append(patchname)
imported.append(patchname)
patchname = None
- if rev and repo.ui.configbool('mq', 'secret'):
+ if rev and repo.ui.configbool(b'mq', b'secret'):
# if we added anything with --rev, move the secret root
phases.retractboundary(repo, tr, phases.secret, [n])
self.parseseries()
@@ -2460,9 +2474,9 @@
for i, filename in enumerate(files):
if existing:
- if filename == '-':
+ if filename == b'-':
raise error.Abort(
- _('-e is incompatible with import from -')
+ _(b'-e is incompatible with import from -')
)
filename = normname(filename)
self.checkreservedname(filename)
@@ -2470,35 +2484,39 @@
originpath = self.join(filename)
if not os.path.isfile(originpath):
raise error.Abort(
- _("patch %s does not exist") % filename
+ _(b"patch %s does not exist") % filename
)
if patchname:
self.checkpatchname(patchname, force)
self.ui.write(
- _('renaming %s to %s\n') % (filename, patchname)
+ _(b'renaming %s to %s\n') % (filename, patchname)
)
util.rename(originpath, self.join(patchname))
else:
patchname = filename
else:
- if filename == '-' and not patchname:
- raise error.Abort(_('need --name to import a patch from -'))
+ if filename == b'-' and not patchname:
+ raise error.Abort(
+ _(b'need --name to import a patch from -')
+ )
elif not patchname:
- patchname = normname(os.path.basename(filename.rstrip('/')))
+ patchname = normname(
+ os.path.basename(filename.rstrip(b'/'))
+ )
self.checkpatchname(patchname, force)
try:
- if filename == '-':
+ if filename == b'-':
text = self.ui.fin.read()
else:
fp = hg.openpath(self.ui, filename)
text = fp.read()
fp.close()
except (OSError, IOError):
- raise error.Abort(_("unable to read file %s") % filename)
- patchf = self.opener(patchname, "w")
+ raise error.Abort(_(b"unable to read file %s") % filename)
+ patchf = self.opener(patchname, b"w")
patchf.write(text)
patchf.close()
if not force:
@@ -2508,7 +2526,7 @@
self.fullseries[index:index] = [patchname]
self.parseseries()
self.seriesdirty = True
- self.ui.warn(_("adding %s to series file\n") % patchname)
+ self.ui.warn(_(b"adding %s to series file\n") % patchname)
self.added.append(patchname)
imported.append(patchname)
patchname = None
@@ -2519,23 +2537,29 @@
def fixkeepchangesopts(ui, opts):
if (
- not ui.configbool('mq', 'keepchanges')
- or opts.get('force')
- or opts.get('exact')
+ not ui.configbool(b'mq', b'keepchanges')
+ or opts.get(b'force')
+ or opts.get(b'exact')
):
return opts
opts = dict(opts)
- opts['keep_changes'] = True
+ opts[b'keep_changes'] = True
return opts
@command(
- "qdelete|qremove|qrm",
+ b"qdelete|qremove|qrm",
[
- ('k', 'keep', None, _('keep patch file')),
- ('r', 'rev', [], _('stop managing a revision (DEPRECATED)'), _('REV')),
+ (b'k', b'keep', None, _(b'keep patch file')),
+ (
+ b'r',
+ b'rev',
+ [],
+ _(b'stop managing a revision (DEPRECATED)'),
+ _(b'REV'),
+ ),
],
- _('hg qdelete [-k] [PATCH]...'),
+ _(b'hg qdelete [-k] [PATCH]...'),
helpcategory=command.CATEGORY_CHANGE_ORGANIZATION,
)
def delete(ui, repo, *patches, **opts):
@@ -2554,10 +2578,10 @@
@command(
- "qapplied",
- [('1', 'last', None, _('show only the preceding applied patch'))]
+ b"qapplied",
+ [(b'1', b'last', None, _(b'show only the preceding applied patch'))]
+ seriesopts,
- _('hg qapplied [-1] [-s] [PATCH]'),
+ _(b'hg qapplied [-1] [-s] [PATCH]'),
helpcategory=command.CATEGORY_CHANGE_ORGANIZATION,
)
def applied(ui, repo, patch=None, **opts):
@@ -2570,32 +2594,32 @@
if patch:
if patch not in q.series:
- raise error.Abort(_("patch %s is not in series file") % patch)
+ raise error.Abort(_(b"patch %s is not in series file") % patch)
end = q.series.index(patch) + 1
else:
end = q.seriesend(True)
- if opts.get('last') and not end:
- ui.write(_("no patches applied\n"))
+ if opts.get(b'last') and not end:
+ ui.write(_(b"no patches applied\n"))
return 1
- elif opts.get('last') and end == 1:
- ui.write(_("only one patch applied\n"))
+ elif opts.get(b'last') and end == 1:
+ ui.write(_(b"only one patch applied\n"))
return 1
- elif opts.get('last'):
+ elif opts.get(b'last'):
start = end - 2
end = 1
else:
start = 0
q.qseries(
- repo, length=end, start=start, status='A', summary=opts.get('summary')
+ repo, length=end, start=start, status=b'A', summary=opts.get(b'summary')
)
@command(
- "qunapplied",
- [('1', 'first', None, _('show only the first patch'))] + seriesopts,
- _('hg qunapplied [-1] [-s] [PATCH]'),
+ b"qunapplied",
+ [(b'1', b'first', None, _(b'show only the first patch'))] + seriesopts,
+ _(b'hg qunapplied [-1] [-s] [PATCH]'),
helpcategory=command.CATEGORY_CHANGE_ORGANIZATION,
)
def unapplied(ui, repo, patch=None, **opts):
@@ -2607,16 +2631,16 @@
opts = pycompat.byteskwargs(opts)
if patch:
if patch not in q.series:
- raise error.Abort(_("patch %s is not in series file") % patch)
+ raise error.Abort(_(b"patch %s is not in series file") % patch)
start = q.series.index(patch) + 1
else:
start = q.seriesend(True)
- if start == len(q.series) and opts.get('first'):
- ui.write(_("all patches applied\n"))
+ if start == len(q.series) and opts.get(b'first'):
+ ui.write(_(b"all patches applied\n"))
return 1
- if opts.get('first'):
+ if opts.get(b'first'):
length = 1
else:
length = None
@@ -2624,28 +2648,28 @@
repo,
start=start,
length=length,
- status='U',
- summary=opts.get('summary'),
+ status=b'U',
+ summary=opts.get(b'summary'),
)
@command(
- "qimport",
+ b"qimport",
[
- ('e', 'existing', None, _('import file in patch directory')),
- ('n', 'name', '', _('name of patch file'), _('NAME')),
- ('f', 'force', None, _('overwrite existing files')),
+ (b'e', b'existing', None, _(b'import file in patch directory')),
+ (b'n', b'name', b'', _(b'name of patch file'), _(b'NAME')),
+ (b'f', b'force', None, _(b'overwrite existing files')),
(
- 'r',
- 'rev',
+ b'r',
+ b'rev',
[],
- _('place existing revisions under mq control'),
- _('REV'),
+ _(b'place existing revisions under mq control'),
+ _(b'REV'),
),
- ('g', 'git', None, _('use git extended diff format')),
- ('P', 'push', None, _('qpush after importing')),
+ (b'g', b'git', None, _(b'use git extended diff format')),
+ (b'P', b'push', None, _(b'qpush after importing')),
],
- _('hg qimport [-e] [-n NAME] [-f] [-g] [-P] [-r REV]... [FILE]...'),
+ _(b'hg qimport [-e] [-n NAME] [-f] [-g] [-P] [-r REV]... [FILE]...'),
helpcategory=command.CATEGORY_IMPORT_EXPORT,
)
def qimport(ui, repo, *filename, **opts):
@@ -2689,16 +2713,16 @@
imported = q.qimport(
repo,
filename,
- patchname=opts.get('name'),
- existing=opts.get('existing'),
- force=opts.get('force'),
- rev=opts.get('rev'),
- git=opts.get('git'),
+ patchname=opts.get(b'name'),
+ existing=opts.get(b'existing'),
+ force=opts.get(b'force'),
+ rev=opts.get(b'rev'),
+ git=opts.get(b'git'),
)
finally:
q.savedirty()
- if imported and opts.get('push') and not opts.get('rev'):
+ if imported and opts.get(b'push') and not opts.get(b'rev'):
return q.push(repo, imported[-1])
return 0
@@ -2715,25 +2739,25 @@
r = q.init(repo, create)
q.savedirty()
if r:
- if not os.path.exists(r.wjoin('.hgignore')):
- fp = r.wvfs('.hgignore', 'w')
- fp.write('^\\.hg\n')
- fp.write('^\\.mq\n')
- fp.write('syntax: glob\n')
- fp.write('status\n')
- fp.write('guards\n')
+ if not os.path.exists(r.wjoin(b'.hgignore')):
+ fp = r.wvfs(b'.hgignore', b'w')
+ fp.write(b'^\\.hg\n')
+ fp.write(b'^\\.mq\n')
+ fp.write(b'syntax: glob\n')
+ fp.write(b'status\n')
+ fp.write(b'guards\n')
fp.close()
- if not os.path.exists(r.wjoin('series')):
- r.wvfs('series', 'w').close()
- r[None].add(['.hgignore', 'series'])
+ if not os.path.exists(r.wjoin(b'series')):
+ r.wvfs(b'series', b'w').close()
+ r[None].add([b'.hgignore', b'series'])
commands.add(ui, r)
return 0
@command(
- "qinit",
- [('c', 'create-repo', None, _('create queue repository'))],
- _('hg qinit [-c]'),
+ b"qinit",
+ [(b'c', b'create-repo', None, _(b'create queue repository'))],
+ _(b'hg qinit [-c]'),
helpcategory=command.CATEGORY_REPO_CREATION,
helpbasic=True,
)
@@ -2752,26 +2776,31 @@
@command(
- "qclone",
+ b"qclone",
[
- ('', 'pull', None, _('use pull protocol to copy metadata')),
- ('U', 'noupdate', None, _('do not update the new working directories')),
+ (b'', b'pull', None, _(b'use pull protocol to copy metadata')),
(
- '',
- 'uncompressed',
+ b'U',
+ b'noupdate',
None,
- _('use uncompressed transfer (fast over LAN)'),
+ _(b'do not update the new working directories'),
),
(
- 'p',
- 'patches',
- '',
- _('location of source patch repository'),
- _('REPO'),
+ b'',
+ b'uncompressed',
+ None,
+ _(b'use uncompressed transfer (fast over LAN)'),
+ ),
+ (
+ b'p',
+ b'patches',
+ b'',
+ _(b'location of source patch repository'),
+ _(b'REPO'),
),
]
+ cmdutil.remoteopts,
- _('hg qclone [OPTION]... SOURCE [DEST]'),
+ _(b'hg qclone [OPTION]... SOURCE [DEST]'),
helpcategory=command.CATEGORY_REPO_CREATION,
norepo=True,
)
@@ -2797,9 +2826,9 @@
def patchdir(repo):
"""compute a patch repo url from a repo object"""
url = repo.url()
- if url.endswith('/'):
+ if url.endswith(b'/'):
url = url[:-1]
- return url + '/.hg/patches'
+ return url + b'/.hg/patches'
# main repo (destination and sources)
if dest is None:
@@ -2807,15 +2836,15 @@
sr = hg.peer(ui, opts, ui.expandpath(source))
# patches repo (source only)
- if opts.get('patches'):
- patchespath = ui.expandpath(opts.get('patches'))
+ if opts.get(b'patches'):
+ patchespath = ui.expandpath(opts.get(b'patches'))
else:
patchespath = patchdir(sr)
try:
hg.peer(ui, opts, patchespath)
except error.RepoError:
raise error.Abort(
- _('versioned patch repository not found' ' (see init --mq)')
+ _(b'versioned patch repository not found' b' (see init --mq)')
)
qbase, destrev = None, None
if sr.local():
@@ -2826,51 +2855,54 @@
heads = set(repo.heads())
destrev = list(heads.difference(repo.heads(qbase)))
destrev.append(repo.changelog.parents(qbase)[0])
- elif sr.capable('lookup'):
+ elif sr.capable(b'lookup'):
try:
- qbase = sr.lookup('qbase')
+ qbase = sr.lookup(b'qbase')
except error.RepoError:
pass
- ui.note(_('cloning main repository\n'))
+ ui.note(_(b'cloning main repository\n'))
sr, dr = hg.clone(
ui,
opts,
sr.url(),
dest,
- pull=opts.get('pull'),
+ pull=opts.get(b'pull'),
revs=destrev,
update=False,
- stream=opts.get('uncompressed'),
+ stream=opts.get(b'uncompressed'),
)
- ui.note(_('cloning patch repository\n'))
+ ui.note(_(b'cloning patch repository\n'))
hg.clone(
ui,
opts,
- opts.get('patches') or patchdir(sr),
+ opts.get(b'patches') or patchdir(sr),
patchdir(dr),
- pull=opts.get('pull'),
- update=not opts.get('noupdate'),
- stream=opts.get('uncompressed'),
+ pull=opts.get(b'pull'),
+ update=not opts.get(b'noupdate'),
+ stream=opts.get(b'uncompressed'),
)
if dr.local():
repo = dr.local()
if qbase:
ui.note(
- _('stripping applied patches from destination ' 'repository\n')
+ _(
+ b'stripping applied patches from destination '
+ b'repository\n'
+ )
)
strip(ui, repo, [qbase], update=False, backup=None)
- if not opts.get('noupdate'):
- ui.note(_('updating destination repository\n'))
+ if not opts.get(b'noupdate'):
+ ui.note(_(b'updating destination repository\n'))
hg.update(repo, repo.changelog.tip())
@command(
- "qcommit|qci",
- commands.table["commit|ci"][1],
- _('hg qcommit [OPTION]... [FILE]...'),
+ b"qcommit|qci",
+ commands.table[b"commit|ci"][1],
+ _(b'hg qcommit [OPTION]... [FILE]...'),
helpcategory=command.CATEGORY_COMMITTING,
inferrepo=True,
)
@@ -2881,14 +2913,14 @@
q = repo.mq
r = q.qrepo()
if not r:
- raise error.Abort('no queue repository')
+ raise error.Abort(b'no queue repository')
commands.commit(r.ui, r, *pats, **opts)
@command(
- "qseries",
- [('m', 'missing', None, _('print patches not in series')),] + seriesopts,
- _('hg qseries [-ms]'),
+ b"qseries",
+ [(b'm', b'missing', None, _(b'print patches not in series')),] + seriesopts,
+ _(b'hg qseries [-ms]'),
helpcategory=command.CATEGORY_CHANGE_ORGANIZATION,
)
def series(ui, repo, **opts):
@@ -2902,9 +2934,9 @@
@command(
- "qtop",
+ b"qtop",
seriesopts,
- _('hg qtop [-s]'),
+ _(b'hg qtop [-s]'),
helpcategory=command.CATEGORY_CHANGE_ORGANIZATION,
)
def top(ui, repo, **opts):
@@ -2922,18 +2954,18 @@
repo,
start=t - 1,
length=1,
- status='A',
+ status=b'A',
summary=opts.get(r'summary'),
)
else:
- ui.write(_("no patches applied\n"))
+ ui.write(_(b"no patches applied\n"))
return 1
@command(
- "qnext",
+ b"qnext",
seriesopts,
- _('hg qnext [-s]'),
+ _(b'hg qnext [-s]'),
helpcategory=command.CATEGORY_CHANGE_ORGANIZATION,
)
def next(ui, repo, **opts):
@@ -2943,15 +2975,15 @@
q = repo.mq
end = q.seriesend()
if end == len(q.series):
- ui.write(_("all patches applied\n"))
+ ui.write(_(b"all patches applied\n"))
return 1
q.qseries(repo, start=end, length=1, summary=opts.get(r'summary'))
@command(
- "qprev",
+ b"qprev",
seriesopts,
- _('hg qprev [-s]'),
+ _(b'hg qprev [-s]'),
helpcategory=command.CATEGORY_CHANGE_ORGANIZATION,
)
def prev(ui, repo, **opts):
@@ -2961,38 +2993,38 @@
q = repo.mq
l = len(q.applied)
if l == 1:
- ui.write(_("only one patch applied\n"))
+ ui.write(_(b"only one patch applied\n"))
return 1
if not l:
- ui.write(_("no patches applied\n"))
+ ui.write(_(b"no patches applied\n"))
return 1
idx = q.series.index(q.applied[-2].name)
q.qseries(
- repo, start=idx, length=1, status='A', summary=opts.get(r'summary')
+ repo, start=idx, length=1, status=b'A', summary=opts.get(r'summary')
)
def setupheaderopts(ui, opts):
- if not opts.get('user') and opts.get('currentuser'):
- opts['user'] = ui.username()
- if not opts.get('date') and opts.get('currentdate'):
- opts['date'] = "%d %d" % dateutil.makedate()
+ if not opts.get(b'user') and opts.get(b'currentuser'):
+ opts[b'user'] = ui.username()
+ if not opts.get(b'date') and opts.get(b'currentdate'):
+ opts[b'date'] = b"%d %d" % dateutil.makedate()
@command(
- "qnew",
+ b"qnew",
[
- ('e', 'edit', None, _('invoke editor on commit messages')),
- ('f', 'force', None, _('import uncommitted changes (DEPRECATED)')),
- ('g', 'git', None, _('use git extended diff format')),
- ('U', 'currentuser', None, _('add "From: <current user>" to patch')),
- ('u', 'user', '', _('add "From: <USER>" to patch'), _('USER')),
- ('D', 'currentdate', None, _('add "Date: <current date>" to patch')),
- ('d', 'date', '', _('add "Date: <DATE>" to patch'), _('DATE')),
+ (b'e', b'edit', None, _(b'invoke editor on commit messages')),
+ (b'f', b'force', None, _(b'import uncommitted changes (DEPRECATED)')),
+ (b'g', b'git', None, _(b'use git extended diff format')),
+ (b'U', b'currentuser', None, _(b'add "From: <current user>" to patch')),
+ (b'u', b'user', b'', _(b'add "From: <USER>" to patch'), _(b'USER')),
+ (b'D', b'currentdate', None, _(b'add "Date: <current date>" to patch')),
+ (b'd', b'date', b'', _(b'add "Date: <DATE>" to patch'), _(b'DATE')),
]
+ cmdutil.walkopts
+ cmdutil.commitopts,
- _('hg qnew [-e] [-m TEXT] [-l FILE] PATCH [FILE]...'),
+ _(b'hg qnew [-e] [-m TEXT] [-l FILE] PATCH [FILE]...'),
helpcategory=command.CATEGORY_COMMITTING,
helpbasic=True,
inferrepo=True,
@@ -3025,7 +3057,7 @@
opts = pycompat.byteskwargs(opts)
msg = cmdutil.logmessage(ui, opts)
q = repo.mq
- opts['msg'] = msg
+ opts[b'msg'] = msg
setupheaderopts(ui, opts)
q.new(repo, patch, *args, **pycompat.strkwargs(opts))
q.savedirty()
@@ -3033,46 +3065,46 @@
@command(
- "qrefresh",
+ b"qrefresh",
[
- ('e', 'edit', None, _('invoke editor on commit messages')),
- ('g', 'git', None, _('use git extended diff format')),
+ (b'e', b'edit', None, _(b'invoke editor on commit messages')),
+ (b'g', b'git', None, _(b'use git extended diff format')),
(
- 's',
- 'short',
+ b's',
+ b'short',
None,
- _('refresh only files already in the patch and specified files'),
+ _(b'refresh only files already in the patch and specified files'),
),
(
- 'U',
- 'currentuser',
+ b'U',
+ b'currentuser',
None,
- _('add/update author field in patch with current user'),
+ _(b'add/update author field in patch with current user'),
),
(
- 'u',
- 'user',
- '',
- _('add/update author field in patch with given user'),
- _('USER'),
+ b'u',
+ b'user',
+ b'',
+ _(b'add/update author field in patch with given user'),
+ _(b'USER'),
),
(
- 'D',
- 'currentdate',
+ b'D',
+ b'currentdate',
None,
- _('add/update date field in patch with current date'),
+ _(b'add/update date field in patch with current date'),
),
(
- 'd',
- 'date',
- '',
- _('add/update date field in patch with given date'),
- _('DATE'),
+ b'd',
+ b'date',
+ b'',
+ _(b'add/update date field in patch with given date'),
+ _(b'DATE'),
),
]
+ cmdutil.walkopts
+ cmdutil.commitopts,
- _('hg qrefresh [-I] [-X] [-e] [-m TEXT] [-l FILE] [-s] [FILE]...'),
+ _(b'hg qrefresh [-I] [-X] [-e] [-m TEXT] [-l FILE] [-s] [FILE]...'),
helpcategory=command.CATEGORY_COMMITTING,
helpbasic=True,
inferrepo=True,
@@ -3109,9 +3141,9 @@
@command(
- "qdiff",
+ b"qdiff",
cmdutil.diffopts + cmdutil.diffopts2 + cmdutil.walkopts,
- _('hg qdiff [OPTION]... [FILE]...'),
+ _(b'hg qdiff [OPTION]... [FILE]...'),
helpcategory=command.CATEGORY_FILE_CONTENTS,
helpbasic=True,
inferrepo=True,
@@ -3131,19 +3163,19 @@
Returns 0 on success.
"""
- ui.pager('qdiff')
+ ui.pager(b'qdiff')
repo.mq.diff(repo, pats, pycompat.byteskwargs(opts))
return 0
@command(
- 'qfold',
+ b'qfold',
[
- ('e', 'edit', None, _('invoke editor on commit messages')),
- ('k', 'keep', None, _('keep folded patch files')),
+ (b'e', b'edit', None, _(b'invoke editor on commit messages')),
+ (b'k', b'keep', None, _(b'keep folded patch files')),
]
+ cmdutil.commitopts,
- _('hg qfold [-e] [-k] [-m TEXT] [-l FILE] PATCH...'),
+ _(b'hg qfold [-e] [-k] [-m TEXT] [-l FILE] PATCH...'),
helpcategory=command.CATEGORY_CHANGE_MANAGEMENT,
)
def fold(ui, repo, *files, **opts):
@@ -3163,23 +3195,23 @@
opts = pycompat.byteskwargs(opts)
q = repo.mq
if not files:
- raise error.Abort(_('qfold requires at least one patch name'))
+ raise error.Abort(_(b'qfold requires at least one patch name'))
if not q.checktoppatch(repo)[0]:
- raise error.Abort(_('no patches applied'))
+ raise error.Abort(_(b'no patches applied'))
q.checklocalchanges(repo)
message = cmdutil.logmessage(ui, opts)
- parent = q.lookup('qtip')
+ parent = q.lookup(b'qtip')
patches = []
messages = []
for f in files:
p = q.lookup(f)
if p in patches or p == parent:
- ui.warn(_('skipping already folded patch %s\n') % p)
+ ui.warn(_(b'skipping already folded patch %s\n') % p)
if q.isapplied(p):
raise error.Abort(
- _('qfold cannot fold already applied patch %s') % p
+ _(b'qfold cannot fold already applied patch %s') % p
)
patches.append(p)
@@ -3191,7 +3223,7 @@
pf = q.join(p)
(patchsuccess, files, fuzz) = q.patch(repo, pf)
if not patchsuccess:
- raise error.Abort(_('error folding patch %s') % p)
+ raise error.Abort(_(b'error folding patch %s') % p)
if not message:
ph = patchheader(q.join(parent), q.plainmode)
@@ -3199,9 +3231,9 @@
for msg in messages:
if msg:
if message:
- message.append('* * *')
+ message.append(b'* * *')
message.extend(msg)
- message = '\n'.join(message)
+ message = b'\n'.join(message)
diffopts = q.patchopts(q.diffopts(), *patches)
with repo.wlock():
@@ -3209,21 +3241,26 @@
repo,
msg=message,
git=diffopts.git,
- edit=opts.get('edit'),
- editform='mq.qfold',
+ edit=opts.get(b'edit'),
+ editform=b'mq.qfold',
)
q.delete(repo, patches, opts)
q.savedirty()
@command(
- "qgoto",
+ b"qgoto",
[
- ('', 'keep-changes', None, _('tolerate non-conflicting local changes')),
- ('f', 'force', None, _('overwrite any local changes')),
- ('', 'no-backup', None, _('do not save backup copies of files')),
+ (
+ b'',
+ b'keep-changes',
+ None,
+ _(b'tolerate non-conflicting local changes'),
+ ),
+ (b'f', b'force', None, _(b'overwrite any local changes')),
+ (b'', b'no-backup', None, _(b'do not save backup copies of files')),
],
- _('hg qgoto [OPTION]... PATCH'),
+ _(b'hg qgoto [OPTION]... PATCH'),
helpcategory=command.CATEGORY_CHANGE_ORGANIZATION,
)
def goto(ui, repo, patch, **opts):
@@ -3234,13 +3271,13 @@
opts = fixkeepchangesopts(ui, opts)
q = repo.mq
patch = q.lookup(patch)
- nobackup = opts.get('no_backup')
- keepchanges = opts.get('keep_changes')
+ nobackup = opts.get(b'no_backup')
+ keepchanges = opts.get(b'keep_changes')
if q.isapplied(patch):
ret = q.pop(
repo,
patch,
- force=opts.get('force'),
+ force=opts.get(b'force'),
nobackup=nobackup,
keepchanges=keepchanges,
)
@@ -3248,7 +3285,7 @@
ret = q.push(
repo,
patch,
- force=opts.get('force'),
+ force=opts.get(b'force'),
nobackup=nobackup,
keepchanges=keepchanges,
)
@@ -3257,12 +3294,12 @@
@command(
- "qguard",
+ b"qguard",
[
- ('l', 'list', None, _('list all patches and guards')),
- ('n', 'none', None, _('drop all guards')),
+ (b'l', b'list', None, _(b'list all patches and guards')),
+ (b'n', b'none', None, _(b'drop all guards')),
],
- _('hg qguard [-l] [-n] [PATCH] [-- [+GUARD]... [-GUARD]...]'),
+ _(b'hg qguard [-l] [-n] [PATCH] [-- [+GUARD]... [-GUARD]...]'),
helpcategory=command.CATEGORY_CHANGE_ORGANIZATION,
)
def guard(ui, repo, *args, **opts):
@@ -3289,26 +3326,26 @@
'''
def status(idx):
- guards = q.seriesguards[idx] or ['unguarded']
+ guards = q.seriesguards[idx] or [b'unguarded']
if q.series[idx] in applied:
- state = 'applied'
+ state = b'applied'
elif q.pushable(idx)[0]:
- state = 'unapplied'
+ state = b'unapplied'
else:
- state = 'guarded'
- label = 'qguard.patch qguard.%s qseries.%s' % (state, state)
- ui.write('%s: ' % ui.label(q.series[idx], label))
+ state = b'guarded'
+ label = b'qguard.patch qguard.%s qseries.%s' % (state, state)
+ ui.write(b'%s: ' % ui.label(q.series[idx], label))
for i, guard in enumerate(guards):
- if guard.startswith('+'):
- ui.write(guard, label='qguard.positive')
- elif guard.startswith('-'):
- ui.write(guard, label='qguard.negative')
+ if guard.startswith(b'+'):
+ ui.write(guard, label=b'qguard.positive')
+ elif guard.startswith(b'-'):
+ ui.write(guard, label=b'qguard.negative')
else:
- ui.write(guard, label='qguard.unguarded')
+ ui.write(guard, label=b'qguard.unguarded')
if i != len(guards) - 1:
- ui.write(' ')
- ui.write('\n')
+ ui.write(b' ')
+ ui.write(b'\n')
q = repo.mq
applied = set(p.name for p in q.applied)
@@ -3317,23 +3354,23 @@
if opts.get(r'list'):
if args or opts.get(r'none'):
raise error.Abort(
- _('cannot mix -l/--list with options or ' 'arguments')
+ _(b'cannot mix -l/--list with options or ' b'arguments')
)
for i in pycompat.xrange(len(q.series)):
status(i)
return
- if not args or args[0][0:1] in '-+':
+ if not args or args[0][0:1] in b'-+':
if not q.applied:
- raise error.Abort(_('no patches applied'))
+ raise error.Abort(_(b'no patches applied'))
patch = q.applied[-1].name
- if patch is None and args[0][0:1] not in '-+':
+ if patch is None and args[0][0:1] not in b'-+':
patch = args.pop(0)
if patch is None:
- raise error.Abort(_('no patch to work with'))
+ raise error.Abort(_(b'no patch to work with'))
if args or opts.get(r'none'):
idx = q.findseries(patch)
if idx is None:
- raise error.Abort(_('no patch named %s') % patch)
+ raise error.Abort(_(b'no patch named %s') % patch)
q.setguards(idx, args)
q.savedirty()
else:
@@ -3341,9 +3378,9 @@
@command(
- "qheader",
+ b"qheader",
[],
- _('hg qheader [PATCH]'),
+ _(b'hg qheader [PATCH]'),
helpcategory=command.CATEGORY_CHANGE_ORGANIZATION,
)
def header(ui, repo, patch=None):
@@ -3356,18 +3393,18 @@
patch = q.lookup(patch)
else:
if not q.applied:
- ui.write(_('no patches applied\n'))
+ ui.write(_(b'no patches applied\n'))
return 1
- patch = q.lookup('qtip')
+ patch = q.lookup(b'qtip')
ph = patchheader(q.join(patch), q.plainmode)
- ui.write('\n'.join(ph.message) + '\n')
+ ui.write(b'\n'.join(ph.message) + b'\n')
def lastsavename(path):
(directory, base) = os.path.split(path)
names = os.listdir(directory)
- namere = re.compile("%s.([0-9]+)" % base)
+ namere = re.compile(b"%s.([0-9]+)" % base)
maxindex = None
maxname = None
for f in names:
@@ -3386,29 +3423,39 @@
(last, index) = lastsavename(path)
if last is None:
index = 0
- newpath = path + ".%d" % (index + 1)
+ newpath = path + b".%d" % (index + 1)
return newpath
@command(
- "qpush",
+ b"qpush",
[
- ('', 'keep-changes', None, _('tolerate non-conflicting local changes')),
- ('f', 'force', None, _('apply on top of local changes')),
(
- 'e',
- 'exact',
+ b'',
+ b'keep-changes',
+ None,
+ _(b'tolerate non-conflicting local changes'),
+ ),
+ (b'f', b'force', None, _(b'apply on top of local changes')),
+ (
+ b'e',
+ b'exact',
None,
- _('apply the target patch to its recorded parent'),
+ _(b'apply the target patch to its recorded parent'),
),
- ('l', 'list', None, _('list patch name in commit text')),
- ('a', 'all', None, _('apply all patches')),
- ('m', 'merge', None, _('merge from another queue (DEPRECATED)')),
- ('n', 'name', '', _('merge queue name (DEPRECATED)'), _('NAME')),
- ('', 'move', None, _('reorder patch series and apply only the patch')),
- ('', 'no-backup', None, _('do not save backup copies of files')),
+ (b'l', b'list', None, _(b'list patch name in commit text')),
+ (b'a', b'all', None, _(b'apply all patches')),
+ (b'm', b'merge', None, _(b'merge from another queue (DEPRECATED)')),
+ (b'n', b'name', b'', _(b'merge queue name (DEPRECATED)'), _(b'NAME')),
+ (
+ b'',
+ b'move',
+ None,
+ _(b'reorder patch series and apply only the patch'),
+ ),
+ (b'', b'no-backup', None, _(b'do not save backup copies of files')),
],
- _('hg qpush [-f] [-l] [-a] [--move] [PATCH | INDEX]'),
+ _(b'hg qpush [-f] [-l] [-a] [--move] [PATCH | INDEX]'),
helpcategory=command.CATEGORY_CHANGE_ORGANIZATION,
helpbasic=True,
)
@@ -3427,41 +3474,46 @@
opts = pycompat.byteskwargs(opts)
opts = fixkeepchangesopts(ui, opts)
- if opts.get('merge'):
- if opts.get('name'):
- newpath = repo.vfs.join(opts.get('name'))
+ if opts.get(b'merge'):
+ if opts.get(b'name'):
+ newpath = repo.vfs.join(opts.get(b'name'))
else:
newpath, i = lastsavename(q.path)
if not newpath:
- ui.warn(_("no saved queues found, please use -n\n"))
+ ui.warn(_(b"no saved queues found, please use -n\n"))
return 1
mergeq = queue(ui, repo.baseui, repo.path, newpath)
- ui.warn(_("merging with queue at: %s\n") % mergeq.path)
+ ui.warn(_(b"merging with queue at: %s\n") % mergeq.path)
ret = q.push(
repo,
patch,
- force=opts.get('force'),
- list=opts.get('list'),
+ force=opts.get(b'force'),
+ list=opts.get(b'list'),
mergeq=mergeq,
- all=opts.get('all'),
- move=opts.get('move'),
- exact=opts.get('exact'),
- nobackup=opts.get('no_backup'),
- keepchanges=opts.get('keep_changes'),
+ all=opts.get(b'all'),
+ move=opts.get(b'move'),
+ exact=opts.get(b'exact'),
+ nobackup=opts.get(b'no_backup'),
+ keepchanges=opts.get(b'keep_changes'),
)
return ret
@command(
- "qpop",
+ b"qpop",
[
- ('a', 'all', None, _('pop all patches')),
- ('n', 'name', '', _('queue name to pop (DEPRECATED)'), _('NAME')),
- ('', 'keep-changes', None, _('tolerate non-conflicting local changes')),
- ('f', 'force', None, _('forget any local changes to patched files')),
- ('', 'no-backup', None, _('do not save backup copies of files')),
+ (b'a', b'all', None, _(b'pop all patches')),
+ (b'n', b'name', b'', _(b'queue name to pop (DEPRECATED)'), _(b'NAME')),
+ (
+ b'',
+ b'keep-changes',
+ None,
+ _(b'tolerate non-conflicting local changes'),
+ ),
+ (b'f', b'force', None, _(b'forget any local changes to patched files')),
+ (b'', b'no-backup', None, _(b'do not save backup copies of files')),
],
- _('hg qpop [-a] [-f] [PATCH | INDEX]'),
+ _(b'hg qpop [-a] [-f] [PATCH | INDEX]'),
helpcategory=command.CATEGORY_CHANGE_ORGANIZATION,
helpbasic=True,
)
@@ -3482,29 +3534,29 @@
opts = pycompat.byteskwargs(opts)
opts = fixkeepchangesopts(ui, opts)
localupdate = True
- if opts.get('name'):
- q = queue(ui, repo.baseui, repo.path, repo.vfs.join(opts.get('name')))
- ui.warn(_('using patch queue: %s\n') % q.path)
+ if opts.get(b'name'):
+ q = queue(ui, repo.baseui, repo.path, repo.vfs.join(opts.get(b'name')))
+ ui.warn(_(b'using patch queue: %s\n') % q.path)
localupdate = False
else:
q = repo.mq
ret = q.pop(
repo,
patch,
- force=opts.get('force'),
+ force=opts.get(b'force'),
update=localupdate,
- all=opts.get('all'),
- nobackup=opts.get('no_backup'),
- keepchanges=opts.get('keep_changes'),
+ all=opts.get(b'all'),
+ nobackup=opts.get(b'no_backup'),
+ keepchanges=opts.get(b'keep_changes'),
)
q.savedirty()
return ret
@command(
- "qrename|qmv",
+ b"qrename|qmv",
[],
- _('hg qrename PATCH1 [PATCH2]'),
+ _(b'hg qrename PATCH1 [PATCH2]'),
helpcategory=command.CATEGORY_CHANGE_ORGANIZATION,
)
def rename(ui, repo, patch, name=None, **opts):
@@ -3523,19 +3575,19 @@
patch = q.lookup(patch)
else:
if not q.applied:
- ui.write(_('no patches applied\n'))
+ ui.write(_(b'no patches applied\n'))
return
- patch = q.lookup('qtip')
+ patch = q.lookup(b'qtip')
absdest = q.join(name)
if os.path.isdir(absdest):
name = normname(os.path.join(name, os.path.basename(patch)))
absdest = q.join(name)
q.checkpatchname(name)
- ui.note(_('renaming %s to %s\n') % (patch, name))
+ ui.note(_(b'renaming %s to %s\n') % (patch, name))
i = q.findseries(patch)
guards = q.guard_re.findall(q.fullseries[i])
- q.fullseries[i] = name + ''.join([' #' + g for g in guards])
+ q.fullseries[i] = name + b''.join([b' #' + g for g in guards])
q.parseseries()
q.seriesdirty = True
@@ -3552,7 +3604,7 @@
if r and patch in r.dirstate:
wctx = r[None]
with r.wlock():
- if r.dirstate[patch] == 'a':
+ if r.dirstate[patch] == b'a':
r.dirstate.drop(patch)
r.dirstate.add(name)
else:
@@ -3563,12 +3615,12 @@
@command(
- "qrestore",
+ b"qrestore",
[
- ('d', 'delete', None, _('delete save entry')),
- ('u', 'update', None, _('update queue working directory')),
+ (b'd', b'delete', None, _(b'delete save entry')),
+ (b'u', b'update', None, _(b'update queue working directory')),
],
- _('hg qrestore [-d] [-u] REV'),
+ _(b'hg qrestore [-d] [-u] REV'),
helpcategory=command.CATEGORY_CHANGE_ORGANIZATION,
)
def restore(ui, repo, rev, **opts):
@@ -3585,15 +3637,15 @@
@command(
- "qsave",
+ b"qsave",
[
- ('c', 'copy', None, _('copy patch directory')),
- ('n', 'name', '', _('copy directory name'), _('NAME')),
- ('e', 'empty', None, _('clear queue status file')),
- ('f', 'force', None, _('force copy')),
+ (b'c', b'copy', None, _(b'copy patch directory')),
+ (b'n', b'name', b'', _(b'copy directory name'), _(b'NAME')),
+ (b'e', b'empty', None, _(b'clear queue status file')),
+ (b'f', b'force', None, _(b'force copy')),
]
+ cmdutil.commitopts,
- _('hg qsave [-m TEXT] [-l FILE] [-c] [-n NAME] [-e] [-f]'),
+ _(b'hg qsave [-m TEXT] [-l FILE] [-c] [-n NAME] [-e] [-f]'),
helpcategory=command.CATEGORY_CHANGE_ORGANIZATION,
)
def save(ui, repo, **opts):
@@ -3607,25 +3659,26 @@
if ret:
return ret
q.savedirty() # save to .hg/patches before copying
- if opts.get('copy'):
+ if opts.get(b'copy'):
path = q.path
- if opts.get('name'):
- newpath = os.path.join(q.basepath, opts.get('name'))
+ if opts.get(b'name'):
+ newpath = os.path.join(q.basepath, opts.get(b'name'))
if os.path.exists(newpath):
if not os.path.isdir(newpath):
raise error.Abort(
- _('destination %s exists and is not ' 'a directory')
+ _(b'destination %s exists and is not ' b'a directory')
% newpath
)
- if not opts.get('force'):
+ if not opts.get(b'force'):
raise error.Abort(
- _('destination %s exists, ' 'use -f to force') % newpath
+ _(b'destination %s exists, ' b'use -f to force')
+ % newpath
)
else:
newpath = savename(path)
- ui.warn(_("copy %s to %s\n") % (path, newpath))
+ ui.warn(_(b"copy %s to %s\n") % (path, newpath))
util.copyfiles(path, newpath)
- if opts.get('empty'):
+ if opts.get(b'empty'):
del q.applied[:]
q.applieddirty = True
q.savedirty()
@@ -3633,14 +3686,14 @@
@command(
- "qselect",
+ b"qselect",
[
- ('n', 'none', None, _('disable all guards')),
- ('s', 'series', None, _('list all guards in series file')),
- ('', 'pop', None, _('pop to before first guarded applied patch')),
- ('', 'reapply', None, _('pop, then reapply patches')),
+ (b'n', b'none', None, _(b'disable all guards')),
+ (b's', b'series', None, _(b'list all guards in series file')),
+ (b'', b'pop', None, _(b'pop to before first guarded applied patch')),
+ (b'', b'reapply', None, _(b'pop, then reapply patches')),
],
- _('hg qselect [OPTION]... [GUARD]...'),
+ _(b'hg qselect [OPTION]... [GUARD]...'),
helpcategory=command.CATEGORY_CHANGE_ORGANIZATION,
)
def select(ui, repo, *args, **opts):
@@ -3682,7 +3735,7 @@
opts = pycompat.byteskwargs(opts)
guards = q.active()
pushable = lambda i: q.pushable(q.applied[i].name)[0]
- if args or opts.get('none'):
+ if args or opts.get(b'none'):
old_unapplied = q.unapplied(repo)
old_guarded = [
i for i in pycompat.xrange(len(q.applied)) if not pushable(i)
@@ -3690,8 +3743,8 @@
q.setactive(args)
q.savedirty()
if not args:
- ui.status(_('guards deactivated\n'))
- if not opts.get('pop') and not opts.get('reapply'):
+ ui.status(_(b'guards deactivated\n'))
+ if not opts.get(b'pop') and not opts.get(b'reapply'):
unapplied = q.unapplied(repo)
guarded = [
i for i in pycompat.xrange(len(q.applied)) if not pushable(i)
@@ -3699,20 +3752,20 @@
if len(unapplied) != len(old_unapplied):
ui.status(
_(
- 'number of unguarded, unapplied patches has '
- 'changed from %d to %d\n'
+ b'number of unguarded, unapplied patches has '
+ b'changed from %d to %d\n'
)
% (len(old_unapplied), len(unapplied))
)
if len(guarded) != len(old_guarded):
ui.status(
_(
- 'number of guarded, applied patches has changed '
- 'from %d to %d\n'
+ b'number of guarded, applied patches has changed '
+ b'from %d to %d\n'
)
% (len(old_guarded), len(guarded))
)
- elif opts.get('series'):
+ elif opts.get(b'series'):
guards = {}
noguards = 0
for gs in q.seriesguards:
@@ -3722,29 +3775,29 @@
guards.setdefault(g, 0)
guards[g] += 1
if ui.verbose:
- guards['NONE'] = noguards
+ guards[b'NONE'] = noguards
guards = list(guards.items())
guards.sort(key=lambda x: x[0][1:])
if guards:
- ui.note(_('guards in series file:\n'))
+ ui.note(_(b'guards in series file:\n'))
for guard, count in guards:
- ui.note('%2d ' % count)
- ui.write(guard, '\n')
+ ui.note(b'%2d ' % count)
+ ui.write(guard, b'\n')
else:
- ui.note(_('no guards in series file\n'))
+ ui.note(_(b'no guards in series file\n'))
else:
if guards:
- ui.note(_('active guards:\n'))
+ ui.note(_(b'active guards:\n'))
for g in guards:
- ui.write(g, '\n')
+ ui.write(g, b'\n')
else:
- ui.write(_('no active guards\n'))
- reapply = opts.get('reapply') and q.applied and q.applied[-1].name
+ ui.write(_(b'no active guards\n'))
+ reapply = opts.get(b'reapply') and q.applied and q.applied[-1].name
popped = False
- if opts.get('pop') or opts.get('reapply'):
+ if opts.get(b'pop') or opts.get(b'reapply'):
for i in pycompat.xrange(len(q.applied)):
if not pushable(i):
- ui.status(_('popping guarded patches\n'))
+ ui.status(_(b'popping guarded patches\n'))
popped = True
if i == 0:
q.pop(repo, all=True)
@@ -3754,16 +3807,16 @@
if popped:
try:
if reapply:
- ui.status(_('reapplying unguarded patches\n'))
+ ui.status(_(b'reapplying unguarded patches\n'))
q.push(repo, reapply)
finally:
q.savedirty()
@command(
- "qfinish",
- [('a', 'applied', None, _('finish all applied changesets'))],
- _('hg qfinish [-a] [REV]...'),
+ b"qfinish",
+ [(b'a', b'applied', None, _(b'finish all applied changesets'))],
+ _(b'hg qfinish [-a] [REV]...'),
helpcategory=command.CATEGORY_CHANGE_ORGANIZATION,
)
def finish(ui, repo, *revrange, **opts):
@@ -3785,18 +3838,18 @@
Returns 0 on success.
"""
if not opts.get(r'applied') and not revrange:
- raise error.Abort(_('no revisions specified'))
+ raise error.Abort(_(b'no revisions specified'))
elif opts.get(r'applied'):
- revrange = ('qbase::qtip',) + revrange
+ revrange = (b'qbase::qtip',) + revrange
q = repo.mq
if not q.applied:
- ui.status(_('no patches applied\n'))
+ ui.status(_(b'no patches applied\n'))
return 0
revs = scmutil.revrange(repo, revrange)
- if repo['.'].rev() in revs and repo[None].files():
- ui.warn(_('warning: uncommitted changes in the working directory\n'))
+ if repo[b'.'].rev() in revs and repo[None].files():
+ ui.warn(_(b'warning: uncommitted changes in the working directory\n'))
# queue.finish may changes phases but leave the responsibility to lock the
# repo to the caller to avoid deadlock with wlock. This command code is
# responsibility for this locking.
@@ -3807,16 +3860,16 @@
@command(
- "qqueue",
+ b"qqueue",
[
- ('l', 'list', False, _('list all available queues')),
- ('', 'active', False, _('print name of active queue')),
- ('c', 'create', False, _('create new queue')),
- ('', 'rename', False, _('rename active queue')),
- ('', 'delete', False, _('delete reference to queue')),
- ('', 'purge', False, _('delete queue, and remove patch dir')),
+ (b'l', b'list', False, _(b'list all available queues')),
+ (b'', b'active', False, _(b'print name of active queue')),
+ (b'c', b'create', False, _(b'create new queue')),
+ (b'', b'rename', False, _(b'rename active queue')),
+ (b'', b'delete', False, _(b'delete reference to queue')),
+ (b'', b'purge', False, _(b'delete queue, and remove patch dir')),
],
- _('[OPTION] [QUEUE]'),
+ _(b'[OPTION] [QUEUE]'),
helpcategory=command.CATEGORY_CHANGE_ORGANIZATION,
)
def qqueue(ui, repo, name=None, **opts):
@@ -3841,19 +3894,19 @@
Returns 0 on success.
'''
q = repo.mq
- _defaultqueue = 'patches'
- _allqueues = 'patches.queues'
- _activequeue = 'patches.queue'
+ _defaultqueue = b'patches'
+ _allqueues = b'patches.queues'
+ _activequeue = b'patches.queue'
def _getcurrent():
cur = os.path.basename(q.path)
- if cur.startswith('patches-'):
+ if cur.startswith(b'patches-'):
cur = cur[8:]
return cur
def _noqueues():
try:
- fh = repo.vfs(_allqueues, 'r')
+ fh = repo.vfs(_allqueues, b'r')
fh.close()
except IOError:
return True
@@ -3864,7 +3917,7 @@
current = _getcurrent()
try:
- fh = repo.vfs(_allqueues, 'r')
+ fh = repo.vfs(_allqueues, b'r')
queues = [queue.strip() for queue in fh if queue.strip()]
fh.close()
if current not in queues:
@@ -3878,112 +3931,112 @@
if q.applied:
raise error.Abort(
_(
- 'new queue created, but cannot make active '
- 'as patches are applied'
+ b'new queue created, but cannot make active '
+ b'as patches are applied'
)
)
_setactivenocheck(name)
def _setactivenocheck(name):
- fh = repo.vfs(_activequeue, 'w')
- if name != 'patches':
+ fh = repo.vfs(_activequeue, b'w')
+ if name != b'patches':
fh.write(name)
fh.close()
def _addqueue(name):
- fh = repo.vfs(_allqueues, 'a')
- fh.write('%s\n' % (name,))
+ fh = repo.vfs(_allqueues, b'a')
+ fh.write(b'%s\n' % (name,))
fh.close()
def _queuedir(name):
- if name == 'patches':
- return repo.vfs.join('patches')
+ if name == b'patches':
+ return repo.vfs.join(b'patches')
else:
- return repo.vfs.join('patches-' + name)
+ return repo.vfs.join(b'patches-' + name)
def _validname(name):
for n in name:
- if n in ':\\/.':
+ if n in b':\\/.':
return False
return True
def _delete(name):
if name not in existing:
- raise error.Abort(_('cannot delete queue that does not exist'))
+ raise error.Abort(_(b'cannot delete queue that does not exist'))
current = _getcurrent()
if name == current:
- raise error.Abort(_('cannot delete currently active queue'))
-
- fh = repo.vfs('patches.queues.new', 'w')
+ raise error.Abort(_(b'cannot delete currently active queue'))
+
+ fh = repo.vfs(b'patches.queues.new', b'w')
for queue in existing:
if queue == name:
continue
- fh.write('%s\n' % (queue,))
+ fh.write(b'%s\n' % (queue,))
fh.close()
- repo.vfs.rename('patches.queues.new', _allqueues)
+ repo.vfs.rename(b'patches.queues.new', _allqueues)
opts = pycompat.byteskwargs(opts)
- if not name or opts.get('list') or opts.get('active'):
+ if not name or opts.get(b'list') or opts.get(b'active'):
current = _getcurrent()
- if opts.get('active'):
- ui.write('%s\n' % (current,))
+ if opts.get(b'active'):
+ ui.write(b'%s\n' % (current,))
return
for queue in _getqueues():
- ui.write('%s' % (queue,))
+ ui.write(b'%s' % (queue,))
if queue == current and not ui.quiet:
- ui.write(_(' (active)\n'))
+ ui.write(_(b' (active)\n'))
else:
- ui.write('\n')
+ ui.write(b'\n')
return
if not _validname(name):
raise error.Abort(
- _('invalid queue name, may not contain the characters ":\\/."')
+ _(b'invalid queue name, may not contain the characters ":\\/."')
)
with repo.wlock():
existing = _getqueues()
- if opts.get('create'):
+ if opts.get(b'create'):
if name in existing:
- raise error.Abort(_('queue "%s" already exists') % name)
+ raise error.Abort(_(b'queue "%s" already exists') % name)
if _noqueues():
_addqueue(_defaultqueue)
_addqueue(name)
_setactive(name)
- elif opts.get('rename'):
+ elif opts.get(b'rename'):
current = _getcurrent()
if name == current:
raise error.Abort(
- _('can\'t rename "%s" to its current name') % name
+ _(b'can\'t rename "%s" to its current name') % name
)
if name in existing:
- raise error.Abort(_('queue "%s" already exists') % name)
+ raise error.Abort(_(b'queue "%s" already exists') % name)
olddir = _queuedir(current)
newdir = _queuedir(name)
if os.path.exists(newdir):
raise error.Abort(
- _('non-queue directory "%s" already exists') % newdir
+ _(b'non-queue directory "%s" already exists') % newdir
)
- fh = repo.vfs('patches.queues.new', 'w')
+ fh = repo.vfs(b'patches.queues.new', b'w')
for queue in existing:
if queue == current:
- fh.write('%s\n' % (name,))
+ fh.write(b'%s\n' % (name,))
if os.path.exists(olddir):
util.rename(olddir, newdir)
else:
- fh.write('%s\n' % (queue,))
+ fh.write(b'%s\n' % (queue,))
fh.close()
- repo.vfs.rename('patches.queues.new', _allqueues)
+ repo.vfs.rename(b'patches.queues.new', _allqueues)
_setactivenocheck(name)
- elif opts.get('delete'):
+ elif opts.get(b'delete'):
_delete(name)
- elif opts.get('purge'):
+ elif opts.get(b'purge'):
if name in existing:
_delete(name)
qdir = _queuedir(name)
@@ -3991,14 +4044,14 @@
shutil.rmtree(qdir)
else:
if name not in existing:
- raise error.Abort(_('use --create to create a new queue'))
+ raise error.Abort(_(b'use --create to create a new queue'))
_setactive(name)
def mqphasedefaults(repo, roots):
"""callback used to set mq changeset as secret when no phase data exists"""
if repo.mq.applied:
- if repo.ui.configbool('mq', 'secret'):
+ if repo.ui.configbool(b'mq', b'secret'):
mqphase = phases.secret
else:
mqphase = phases.draft
@@ -4028,7 +4081,7 @@
def commit(
self,
- text="",
+ text=b"",
user=None,
date=None,
match=None,
@@ -4039,7 +4092,7 @@
if extra is None:
extra = {}
self.abortifwdirpatched(
- _('cannot commit over an applied mq patch'), force
+ _(b'cannot commit over an applied mq patch'), force
)
return super(mqrepo, self).commit(
@@ -4062,7 +4115,7 @@
# looking for pushed and shared changeset
for node in outapplied:
if self[node].phase() < phases.secret:
- raise error.Abort(_('source has mq patches applied'))
+ raise error.Abort(_(b'source has mq patches applied'))
# no non-secret patches pushed
super(mqrepo, self).checkpush(pushop)
@@ -4081,7 +4134,7 @@
self.unfiltered().changelog.rev(mqtags[-1][0])
except error.LookupError:
self.ui.warn(
- _('mq status file refers to unknown node %s\n')
+ _(b'mq status file refers to unknown node %s\n')
% short(mqtags[-1][0])
)
return result
@@ -4092,14 +4145,14 @@
if not mqtags:
return result
- mqtags.append((mqtags[-1][0], 'qtip'))
- mqtags.append((mqtags[0][0], 'qbase'))
- mqtags.append((self.changelog.parents(mqtags[0][0])[0], 'qparent'))
+ mqtags.append((mqtags[-1][0], b'qtip'))
+ mqtags.append((mqtags[0][0], b'qbase'))
+ mqtags.append((self.changelog.parents(mqtags[0][0])[0], b'qparent'))
tags = result[0]
for patch in mqtags:
if patch[1] in tags:
self.ui.warn(
- _('tag %s overrides mq patch of the same ' 'name\n')
+ _(b'tag %s overrides mq patch of the same ' b'name\n')
% patch[1]
)
else:
@@ -4114,11 +4167,11 @@
def mqimport(orig, ui, repo, *args, **kwargs):
- if util.safehasattr(repo, 'abortifwdirpatched') and not kwargs.get(
+ if util.safehasattr(repo, b'abortifwdirpatched') and not kwargs.get(
r'no_commit', False
):
repo.abortifwdirpatched(
- _('cannot import over an applied patch'), kwargs.get(r'force')
+ _(b'cannot import over an applied patch'), kwargs.get(r'force')
)
return orig(ui, repo, *args, **kwargs)
@@ -4133,13 +4186,13 @@
repopath = args[0]
if not hg.islocal(repopath):
raise error.Abort(
- _('only a local queue repository ' 'may be initialized')
+ _(b'only a local queue repository ' b'may be initialized')
)
else:
repopath = cmdutil.findrepo(encoding.getcwd())
if not repopath:
raise error.Abort(
- _('there is no Mercurial repository here ' '(.hg not found)')
+ _(b'there is no Mercurial repository here ' b'(.hg not found)')
)
repo = hg.repository(ui, repopath)
return qinit(ui, repo, True)
@@ -4157,7 +4210,7 @@
q = repo.mq
r = q.qrepo()
if not r:
- raise error.Abort(_('no queue repository'))
+ raise error.Abort(_(b'no queue repository'))
return orig(r.ui, r, *args, **kwargs)
@@ -4166,25 +4219,25 @@
m = []
a, u = len(q.applied), len(q.unapplied(repo))
if a:
- m.append(ui.label(_("%d applied"), 'qseries.applied') % a)
+ m.append(ui.label(_(b"%d applied"), b'qseries.applied') % a)
if u:
- m.append(ui.label(_("%d unapplied"), 'qseries.unapplied') % u)
+ m.append(ui.label(_(b"%d unapplied"), b'qseries.unapplied') % u)
if m:
# i18n: column positioning for "hg summary"
- ui.write(_("mq: %s\n") % ', '.join(m))
+ ui.write(_(b"mq: %s\n") % b', '.join(m))
else:
# i18n: column positioning for "hg summary"
- ui.note(_("mq: (empty queue)\n"))
+ ui.note(_(b"mq: (empty queue)\n"))
revsetpredicate = registrar.revsetpredicate()
-@revsetpredicate('mq()')
+@revsetpredicate(b'mq()')
def revsetmq(repo, subset, x):
"""Changesets managed by MQ.
"""
- revsetlang.getargs(x, 0, 0, _("mq takes no arguments"))
+ revsetlang.getargs(x, 0, 0, _(b"mq takes no arguments"))
applied = {repo[r.node].rev() for r in repo.mq.applied}
return smartset.baseset([r for r in subset if r in applied])
@@ -4196,12 +4249,12 @@
def extsetup(ui):
# Ensure mq wrappers are called first, regardless of extension load order by
# NOT wrapping in uisetup() and instead deferring to init stage two here.
- mqopt = [('', 'mq', None, _("operate on patch repository"))]
-
- extensions.wrapcommand(commands.table, 'import', mqimport)
- cmdutil.summaryhooks.add('mq', summaryhook)
-
- entry = extensions.wrapcommand(commands.table, 'init', mqinit)
+ mqopt = [(b'', b'mq', None, _(b"operate on patch repository"))]
+
+ extensions.wrapcommand(commands.table, b'import', mqimport)
+ cmdutil.summaryhooks.add(b'mq', summaryhook)
+
+ entry = extensions.wrapcommand(commands.table, b'init', mqinit)
entry[1].extend(mqopt)
def dotable(cmdtable):
@@ -4221,11 +4274,11 @@
colortable = {
- 'qguard.negative': 'red',
- 'qguard.positive': 'yellow',
- 'qguard.unguarded': 'green',
- 'qseries.applied': 'blue bold underline',
- 'qseries.guarded': 'black bold',
- 'qseries.missing': 'red bold',
- 'qseries.unapplied': 'black bold',
+ b'qguard.negative': b'red',
+ b'qguard.positive': b'yellow',
+ b'qguard.unguarded': b'green',
+ b'qseries.applied': b'blue bold underline',
+ b'qseries.guarded': b'black bold',
+ b'qseries.missing': b'red bold',
+ b'qseries.unapplied': b'black bold',
}