D5767: subrepo: clean up lingering bytes/str issues in svn support
durin42 (Augie Fackler)
phabricator at mercurial-scm.org
Thu Jan 31 00:30:58 UTC 2019
durin42 created this revision.
Herald added a reviewer: pulkit.
Herald added a subscriber: mercurial-devel.
Herald added a reviewer: hg-reviewers.
REVISION SUMMARY
I've decided to use fsencode instead of utf8 for turning Subversion
paths into native paths. I don't really know which one is more
correct, but I _suspect_ that this means that Python3 will avoid some
bugs that are possible on Python2 when it comes to Subversion
functionality.
Subversion subrepo tests now pass in Python 3.
REPOSITORY
rHG Mercurial
REVISION DETAIL
https://phab.mercurial-scm.org/D5767
AFFECTED FILES
contrib/python3-whitelist
mercurial/subrepo.py
CHANGE DETAILS
diff --git a/mercurial/subrepo.py b/mercurial/subrepo.py
--- a/mercurial/subrepo.py
+++ b/mercurial/subrepo.py
@@ -961,6 +961,7 @@
universal_newlines=True,
env=procutil.tonativeenv(env), **extrakw)
stdout, stderr = p.communicate()
+ stdout, stderr = pycompat.fsencode(stdout), pycompat.fsencode(stderr)
stderr = stderr.strip()
if not failok:
if p.returncode:
@@ -987,13 +988,14 @@
# both. We used to store the working directory one.
output, err = self._svncommand(['info', '--xml'])
doc = xml.dom.minidom.parseString(output)
- entries = doc.getElementsByTagName('entry')
+ entries = doc.getElementsByTagName(r'entry')
lastrev, rev = '0', '0'
if entries:
- rev = str(entries[0].getAttribute('revision')) or '0'
- commits = entries[0].getElementsByTagName('commit')
+ rev = pycompat.bytestr(entries[0].getAttribute(r'revision')) or '0'
+ commits = entries[0].getElementsByTagName(r'commit')
if commits:
- lastrev = str(commits[0].getAttribute('revision')) or '0'
+ lastrev = pycompat.bytestr(
+ commits[0].getAttribute(r'revision')) or '0'
return (lastrev, rev)
def _wcrev(self):
@@ -1008,19 +1010,19 @@
output, err = self._svncommand(['status', '--xml'])
externals, changes, missing = [], [], []
doc = xml.dom.minidom.parseString(output)
- for e in doc.getElementsByTagName('entry'):
- s = e.getElementsByTagName('wc-status')
+ for e in doc.getElementsByTagName(r'entry'):
+ s = e.getElementsByTagName(r'wc-status')
if not s:
continue
- item = s[0].getAttribute('item')
- props = s[0].getAttribute('props')
- path = e.getAttribute('path')
- if item == 'external':
+ item = s[0].getAttribute(r'item')
+ props = s[0].getAttribute(r'props')
+ path = pycompat.fsencode(e.getAttribute(r'path'))
+ if item == r'external':
externals.append(path)
- elif item == 'missing':
+ elif item == r'missing':
missing.append(path)
- if (item not in ('', 'normal', 'unversioned', 'external')
- or props not in ('', 'none', 'normal')):
+ if (item not in (r'', r'normal', r'unversioned', r'external')
+ or props not in (r'', r'none', r'normal')):
changes.append(path)
for path in changes:
for ext in externals:
@@ -1141,14 +1143,14 @@
output = self._svncommand(['list', '--recursive', '--xml'])[0]
doc = xml.dom.minidom.parseString(output)
paths = []
- for e in doc.getElementsByTagName('entry'):
- kind = pycompat.bytestr(e.getAttribute('kind'))
+ for e in doc.getElementsByTagName(r'entry'):
+ kind = pycompat.bytestr(e.getAttribute(r'kind'))
if kind != 'file':
continue
- name = ''.join(c.data for c
- in e.getElementsByTagName('name')[0].childNodes
- if c.nodeType == c.TEXT_NODE)
- paths.append(name.encode('utf-8'))
+ name = r''.join(c.data for c
+ in e.getElementsByTagName(r'name')[0].childNodes
+ if c.nodeType == c.TEXT_NODE)
+ paths.append(pycompat.fsencode(name))
return paths
def filedata(self, name, decode):
diff --git a/contrib/python3-whitelist b/contrib/python3-whitelist
--- a/contrib/python3-whitelist
+++ b/contrib/python3-whitelist
@@ -430,6 +430,7 @@
test-mq-qrename.t
test-mq-qsave.t
test-mq-safety.t
+test-mq-subrepo-svn.t
test-mq-subrepo.t
test-mq-symlinks.t
test-mq.t
@@ -682,6 +683,7 @@
test-subrepo-paths.t
test-subrepo-recursion.t
test-subrepo-relative-path.t
+test-subrepo-svn.t
test-subrepo.t
test-symlink-os-yes-fs-no.py
test-symlink-placeholder.t
To: durin42, pulkit, #hg-reviewers
Cc: mercurial-devel
More information about the Mercurial-devel
mailing list