--- a/hgext/convert/darcs.py Sun Oct 06 09:45:02 2019 -0400
+++ b/hgext/convert/darcs.py Sun Oct 06 09:48:39 2019 -0400
@@ -46,22 +46,22 @@
class darcs_source(common.converter_source, common.commandline):
def __init__(self, ui, repotype, path, revs=None):
common.converter_source.__init__(self, ui, repotype, path, revs=revs)
- common.commandline.__init__(self, ui, 'darcs')
+ common.commandline.__init__(self, ui, b'darcs')
# check for _darcs, ElementTree so that we can easily skip
# test-convert-darcs if ElementTree is not around
- if not os.path.exists(os.path.join(path, '_darcs')):
- raise NoRepo(_("%s does not look like a darcs repository") % path)
+ if not os.path.exists(os.path.join(path, b'_darcs')):
+ raise NoRepo(_(b"%s does not look like a darcs repository") % path)
- common.checktool('darcs')
- version = self.run0('--version').splitlines()[0].strip()
- if version < '2.1':
+ common.checktool(b'darcs')
+ version = self.run0(b'--version').splitlines()[0].strip()
+ if version < b'2.1':
raise error.Abort(
- _('darcs version 2.1 or newer needed (found %r)') % version
+ _(b'darcs version 2.1 or newer needed (found %r)') % version
)
- if "ElementTree" not in globals():
- raise error.Abort(_("Python ElementTree module is not available"))
+ if b"ElementTree" not in globals():
+ raise error.Abort(_(b"Python ElementTree module is not available"))
self.path = os.path.realpath(path)
@@ -73,30 +73,33 @@
# Check darcs repository format
format = self.format()
if format:
- if format in ('darcs-1.0', 'hashed'):
+ if format in (b'darcs-1.0', b'hashed'):
raise NoRepo(
- _("%s repository format is unsupported, " "please upgrade")
+ _(
+ b"%s repository format is unsupported, "
+ b"please upgrade"
+ )
% format
)
else:
- self.ui.warn(_('failed to detect repository format!'))
+ self.ui.warn(_(b'failed to detect repository format!'))
def before(self):
self.tmppath = pycompat.mkdtemp(
- prefix='convert-' + os.path.basename(self.path) + '-'
+ prefix=b'convert-' + os.path.basename(self.path) + b'-'
)
- output, status = self.run('init', repodir=self.tmppath)
+ output, status = self.run(b'init', repodir=self.tmppath)
self.checkexit(status)
tree = self.xml(
- 'changes', xml_output=True, summary=True, repodir=self.path
+ b'changes', xml_output=True, summary=True, repodir=self.path
)
tagname = None
child = None
- for elt in tree.findall('patch'):
- node = elt.get('hash')
- name = elt.findtext('name', '')
- if name.startswith('TAG '):
+ for elt in tree.findall(b'patch'):
+ node = elt.get(b'hash')
+ name = elt.findtext(b'name', b'')
+ if name.startswith(b'TAG '):
tagname = name[4:].strip()
elif tagname is not None:
self.tags[tagname] = node
@@ -107,7 +110,7 @@
self.parents[child] = []
def after(self):
- self.ui.debug('cleaning up %s\n' % self.tmppath)
+ self.ui.debug(b'cleaning up %s\n' % self.tmppath)
shutil.rmtree(self.tmppath, ignore_errors=True)
def recode(self, s, encoding=None):
@@ -125,7 +128,7 @@
# While we are decoding the XML as latin-1 to be as liberal as
# possible, etree will still raise an exception if any
# non-printable characters are in the XML changelog.
- parser = XMLParser(encoding='latin-1')
+ parser = XMLParser(encoding=b'latin-1')
p = self._run(cmd, **kwargs)
etree.parse(p.stdout, parser=parser)
p.wait()
@@ -133,20 +136,20 @@
return etree.getroot()
def format(self):
- output, status = self.run('show', 'repo', repodir=self.path)
+ output, status = self.run(b'show', b'repo', repodir=self.path)
self.checkexit(status)
m = re.search(r'^\s*Format:\s*(.*)$', output, re.MULTILINE)
if not m:
return None
- return ','.join(sorted(f.strip() for f in m.group(1).split(',')))
+ return b','.join(sorted(f.strip() for f in m.group(1).split(b',')))
def manifest(self):
man = []
output, status = self.run(
- 'show', 'files', no_directories=True, repodir=self.tmppath
+ b'show', b'files', no_directories=True, repodir=self.tmppath
)
self.checkexit(status)
- for line in output.split('\n'):
+ for line in output.split(b'\n'):
path = line[2:]
if path:
man.append(path)
@@ -157,14 +160,14 @@
def getcommit(self, rev):
elt = self.changes[rev]
- dateformat = '%a %b %d %H:%M:%S %Z %Y'
- date = dateutil.strdate(elt.get('local_date'), dateformat)
- desc = elt.findtext('name') + '\n' + elt.findtext('comment', '')
+ dateformat = b'%a %b %d %H:%M:%S %Z %Y'
+ date = dateutil.strdate(elt.get(b'local_date'), dateformat)
+ desc = elt.findtext(b'name') + b'\n' + elt.findtext(b'comment', b'')
# etree can return unicode objects for name, comment, and author,
# so recode() is used to ensure str objects are emitted.
- newdateformat = '%Y-%m-%d %H:%M:%S %1%2'
+ newdateformat = b'%Y-%m-%d %H:%M:%S %1%2'
return common.commit(
- author=self.recode(elt.get('author')),
+ author=self.recode(elt.get(b'author')),
date=dateutil.datestr(date, newdateformat),
desc=self.recode(desc).strip(),
parents=self.parents[rev],
@@ -172,34 +175,34 @@
def pull(self, rev):
output, status = self.run(
- 'pull',
+ b'pull',
self.path,
all=True,
- match='hash %s' % rev,
+ match=b'hash %s' % rev,
no_test=True,
no_posthook=True,
- external_merge='/bin/false',
+ external_merge=b'/bin/false',
repodir=self.tmppath,
)
if status:
- if output.find('We have conflicts in') == -1:
+ if output.find(b'We have conflicts in') == -1:
self.checkexit(status, output)
- output, status = self.run('revert', all=True, repodir=self.tmppath)
+ output, status = self.run(b'revert', all=True, repodir=self.tmppath)
self.checkexit(status, output)
def getchanges(self, rev, full):
if full:
- raise error.Abort(_("convert from darcs does not support --full"))
+ raise error.Abort(_(b"convert from darcs does not support --full"))
copies = {}
changes = []
man = None
- for elt in self.changes[rev].find('summary').getchildren():
- if elt.tag in ('add_directory', 'remove_directory'):
+ for elt in self.changes[rev].find(b'summary').getchildren():
+ if elt.tag in (b'add_directory', b'remove_directory'):
continue
- if elt.tag == 'move':
+ if elt.tag == b'move':
if man is None:
man = self.manifest()
- source, dest = elt.get('from'), elt.get('to')
+ source, dest = elt.get(b'from'), elt.get(b'to')
if source in man:
# File move
changes.append((source, rev))
@@ -207,11 +210,11 @@
copies[dest] = source
else:
# Directory move, deduce file moves from manifest
- source = source + '/'
+ source = source + b'/'
for f in man:
if not f.startswith(source):
continue
- fdest = dest + '/' + f[len(source) :]
+ fdest = dest + b'/' + f[len(source) :]
changes.append((f, rev))
changes.append((fdest, rev))
copies[fdest] = f
@@ -223,7 +226,7 @@
def getfile(self, name, rev):
if rev != self.lastrev:
- raise error.Abort(_('internal calling inconsistency'))
+ raise error.Abort(_(b'internal calling inconsistency'))
path = os.path.join(self.tmppath, name)
try:
data = util.readfile(path)
@@ -232,7 +235,7 @@
if inst.errno == errno.ENOENT:
return None, None
raise
- mode = (mode & 0o111) and 'x' or ''
+ mode = (mode & 0o111) and b'x' or b''
return data, mode
def gettags(self):