Patchwork [03,of,11,py3] basestring: introduce an alias for this type in pycompat

login
register
mail settings
Submitter Augie Fackler
Date Oct. 9, 2016, 2:16 p.m.
Message ID <b5f982c40f6721ab2db8.1476022605@augie-macbookair2.roam.corp.google.com>
Download mbox | patch
Permalink /patch/17001/
State Accepted
Headers show

Comments

Augie Fackler - Oct. 9, 2016, 2:16 p.m.
# HG changeset patch
# User Augie Fackler <augie@google.com>
# Date 1476020808 14400
#      Sun Oct 09 09:46:48 2016 -0400
# Node ID b5f982c40f6721ab2db8ddcfe1b4f8df44ab25a2
# Parent  826ebebef37bd58fea9abdd4690ea7b5ad6b7552
basestring: introduce an alias for this type in pycompat

It's a mostly nonsense notion on py3, but it's still helpful for cases
where we care about "stringlike vs listlike" or similar.
Yuya Nishihara - Oct. 10, 2016, 7:45 p.m.
On Sun, 09 Oct 2016 10:16:45 -0400, Augie Fackler wrote:
> # HG changeset patch
> # User Augie Fackler <augie@google.com>
> # Date 1476020808 14400
> #      Sun Oct 09 09:46:48 2016 -0400
> # Node ID b5f982c40f6721ab2db8ddcfe1b4f8df44ab25a2
> # Parent  826ebebef37bd58fea9abdd4690ea7b5ad6b7552
> basestring: introduce an alias for this type in pycompat

> --- a/mercurial/pycompat.py
> +++ b/mercurial/pycompat.py
> @@ -87,6 +87,11 @@ class _pycompatstub(object):
>          self.__dict__[name] = obj = getattr(origin, item)
>          return obj
>  
> +try:
> +    basestring

Need to assign 'basestring' variable. Another option is to export 'basestring'
by py3 importer (like xrange.)

Patch

diff --git a/hgext/convert/convcmd.py b/hgext/convert/convcmd.py
--- a/hgext/convert/convcmd.py
+++ b/hgext/convert/convcmd.py
@@ -449,7 +449,7 @@  class converter(object):
         commit = self.commitcache[rev]
         full = self.opts.get('full')
         changes = self.source.getchanges(rev, full)
-        if isinstance(changes, basestring):
+        if isinstance(changes, pycompat.basestring):
             if changes == SKIPREV:
                 dest = SKIPREV
             else:
diff --git a/mercurial/cmdutil.py b/mercurial/cmdutil.py
--- a/mercurial/cmdutil.py
+++ b/mercurial/cmdutil.py
@@ -3182,7 +3182,7 @@  def revert(ui, repo, ctx, parents, *pats
                                 else:
                                     util.rename(target, bakname)
                     if ui.verbose or not exact:
-                        if not isinstance(msg, basestring):
+                        if not isinstance(msg, pycompat.basestring):
                             msg = msg(abs)
                         ui.status(msg % rel)
                 elif exact:
diff --git a/mercurial/dispatch.py b/mercurial/dispatch.py
--- a/mercurial/dispatch.py
+++ b/mercurial/dispatch.py
@@ -263,7 +263,7 @@  def callcatch(ui, func):
             ui.warn(_("(%s)\n") % inst.hint)
     except error.ResponseError as inst:
         ui.warn(_("abort: %s") % inst.args[0])
-        if not isinstance(inst.args[1], basestring):
+        if not isinstance(inst.args[1], pycompat.basestring):
             ui.warn(" %r\n" % (inst.args[1],))
         elif not inst.args[1]:
             ui.warn(_(" empty string\n"))
diff --git a/mercurial/httppeer.py b/mercurial/httppeer.py
--- a/mercurial/httppeer.py
+++ b/mercurial/httppeer.py
@@ -104,13 +104,13 @@  class httppeer(wireproto.wirepeer):
         postargsok = self.caps is not None and 'httppostargs' in self.caps
         # TODO: support for httppostargs when data is a file-like
         # object rather than a basestring
-        canmungedata = not data or isinstance(data, basestring)
+        canmungedata = not data or isinstance(data, pycompat.basestring)
         if postargsok and canmungedata:
             strargs = urlreq.urlencode(sorted(args.items()))
             if strargs:
                 if not data:
                     data = strargs
-                elif isinstance(data, basestring):
+                elif isinstance(data, pycompat.basestring):
                     data = strargs + data
                 headers['X-HgArgs-Post'] = len(strargs)
         else:
diff --git a/mercurial/pycompat.py b/mercurial/pycompat.py
--- a/mercurial/pycompat.py
+++ b/mercurial/pycompat.py
@@ -87,6 +87,11 @@  class _pycompatstub(object):
         self.__dict__[name] = obj = getattr(origin, item)
         return obj
 
+try:
+    basestring
+except NameError:
+    basestring = (bytes, str)
+
 httpserver = _pycompatstub()
 urlreq = _pycompatstub()
 urlerr = _pycompatstub()
diff --git a/mercurial/ui.py b/mercurial/ui.py
--- a/mercurial/ui.py
+++ b/mercurial/ui.py
@@ -25,6 +25,7 @@  from . import (
     error,
     formatter,
     progress,
+    pycompat,
     scmutil,
     util,
 )
@@ -520,7 +521,7 @@  class ui(object):
         result = self.config(section, name, untrusted=untrusted)
         if result is None:
             result = default or []
-        if isinstance(result, basestring):
+        if isinstance(result, pycompat.basestring):
             result = _configlist(result.lstrip(' ,\n'))
             if result is None:
                 result = default or []