hgext/convert/darcs.py
changeset 43077 687b865b95ad
parent 43076 2372284d9457
child 46819 d4ba4d51f85f
--- 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):