[PATCH 6 of 6] pycompat: use unicode literals to appease Python 3

Gregory Szorc gregory.szorc at gmail.com
Sat Jun 25 11:16:37 EDT 2016


On Thu, Jun 9, 2016 at 7:53 AM, Yuya Nishihara <yuya at tcha.org> wrote:

> On Tue, 31 May 2016 22:53:03 -0700, Gregory Szorc wrote:
> > # HG changeset patch
> > # User Gregory Szorc <gregory.szorc at gmail.com>
> > # Date 1464759504 25200
> > #      Tue May 31 22:38:24 2016 -0700
> > # Node ID dc6956f6ec9efe421e7d023db24687b127291318
> > # Parent  856a1794f165a93ec8eb6fe1963b0ca1a68c647b
> > pycompat: use unicode literals to appease Python 3
> >
> > More of the same.
> >
> > diff --git a/mercurial/pycompat.py b/mercurial/pycompat.py
> > --- a/mercurial/pycompat.py
> > +++ b/mercurial/pycompat.py
> > @@ -29,17 +29,17 @@ class _pycompatstub(object):
> >      pass
> >
> >  def _alias(alias, origin, items):
> >      """ populate a _pycompatstub
> >
> >      copies items from origin to alias
> >      """
> >      def hgcase(item):
> > -        return item.replace('_', '').lower()
> > +        return item.replace(u'_', u'').lower()
> >      for item in items:
> >          try:
> >              setattr(alias, hgcase(item), getattr(origin, item))
>
> Can we have bytes setattr() and getattr() and rewrite them by importer?
>

In theory, yes.

We could also likely scan for string literals passed to inline getattr()
and setattr() and transform to u'' by the importer. That would remove the
run-time penalty of calling an extra function. Although it wouldn't find
the more complicated callers of getattr() and setattr() such as in this
file.


> getattr() is frequently used. Converting all arguments to unicode would be
> a pain and likely to cause unicode bugs.
>

I'm not sure what unicode bugs this would hit as hitting a unicode bug
would require a non-ascii attribute name and I don't think we have any of
those.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.mercurial-scm.org/pipermail/mercurial-devel/attachments/20160625/2fcacfae/attachment.html>


More information about the Mercurial-devel mailing list