[PATCH 4 of 8] py3: use unicode literals in pycompat.py

Pulkit Goyal 7895pulkit at gmail.com
Sun Aug 7 15:54:37 EDT 2016


# HG changeset patch
# User Pulkit Goyal <7895pulkit at gmail.com>
# Date 1470165929 -19800
#      Wed Aug 03 00:55:29 2016 +0530
# Node ID bed55202ebb207a4a7a532135c808e2b62ec6ac8
# Parent  184be5c73cededc590bca889b6c17889345e1039
py3: use unicode literals in pycompat.py

The items list literals later in the file are using string literals.
These will get rewritten to bytes literals courtesy of our module
importer. We add some code to convert them back to str and use the
appropriate type for arguments to .replace().

diff --git a/mercurial/pycompat.py b/mercurial/pycompat.py
--- a/mercurial/pycompat.py
+++ b/mercurial/pycompat.py
@@ -42,8 +42,10 @@
     copies items from origin to alias
     """
     def hgcase(item):
-        return item.replace('_', '').lower()
+        return item.replace(u'_', u'').lower()
     for item in items:
+        if not isinstance(item, str):
+            item = item.decode(u'latin1')
         try:
             setattr(alias, hgcase(item), getattr(origin, item))
         except AttributeError:
diff --git a/tests/test-check-py3-compat.t b/tests/test-check-py3-compat.t
--- a/tests/test-check-py3-compat.t
+++ b/tests/test-check-py3-compat.t
@@ -15,96 +15,96 @@
 #if py3exe
   $ hg files 'set:(**.py)' | sed 's|\\|/|g' | xargs $PYTHON3 contrib/check-py3-compat.py
   doc/hgmanpage.py: invalid syntax: invalid syntax (<unknown>, line *) (glob)
-  hgext/acl.py: error importing: <TypeError> getattr(): attribute name must be string (error at pycompat.py:*) (glob)
+  hgext/acl.py: error importing: <TypeError> getattr(): attribute name must be string (error at util.py:*) (glob)
   hgext/automv.py: error importing module: <SyntaxError> invalid syntax (commands.py, line *) (line *) (glob)
-  hgext/blackbox.py: error importing: <TypeError> getattr(): attribute name must be string (error at pycompat.py:*) (glob)
-  hgext/bugzilla.py: error importing: <TypeError> getattr(): attribute name must be string (error at pycompat.py:*) (glob)
-  hgext/censor.py: error importing: <TypeError> getattr(): attribute name must be string (error at pycompat.py:*) (glob)
-  hgext/chgserver.py: error importing: <TypeError> getattr(): attribute name must be string (error at pycompat.py:*) (glob)
-  hgext/children.py: error importing: <TypeError> getattr(): attribute name must be string (error at pycompat.py:*) (glob)
-  hgext/churn.py: error importing: <TypeError> getattr(): attribute name must be string (error at pycompat.py:*) (glob)
-  hgext/clonebundles.py: error importing: <TypeError> getattr(): attribute name must be string (error at pycompat.py:*) (glob)
+  hgext/blackbox.py: error importing: <TypeError> getattr(): attribute name must be string (error at util.py:*) (glob)
+  hgext/bugzilla.py: error importing: <TypeError> getattr(): attribute name must be string (error at util.py:*) (glob)
+  hgext/censor.py: error importing: <TypeError> getattr(): attribute name must be string (error at util.py:*) (glob)
+  hgext/chgserver.py: error importing: <TypeError> getattr(): attribute name must be string (error at util.py:*) (glob)
+  hgext/children.py: error importing: <TypeError> getattr(): attribute name must be string (error at util.py:*) (glob)
+  hgext/churn.py: error importing: <TypeError> getattr(): attribute name must be string (error at util.py:*) (glob)
+  hgext/clonebundles.py: error importing: <TypeError> getattr(): attribute name must be string (error at util.py:*) (glob)
   hgext/color.py: invalid syntax: invalid syntax (<unknown>, line *) (glob)
   hgext/convert/bzr.py: error importing module: <SystemError> Parent module 'hgext.convert' not loaded, cannot perform relative import (line *) (glob)
-  hgext/convert/common.py: error importing: <TypeError> getattr(): attribute name must be string (error at pycompat.py:*) (glob)
-  hgext/convert/convcmd.py: error importing: <TypeError> getattr(): attribute name must be string (error at pycompat.py:*) (glob)
-  hgext/convert/cvs.py: error importing: <TypeError> getattr(): attribute name must be string (error at pycompat.py:*) (glob)
-  hgext/convert/cvsps.py: error importing: <TypeError> getattr(): attribute name must be string (error at pycompat.py:*) (glob)
-  hgext/convert/darcs.py: error importing: <TypeError> getattr(): attribute name must be string (error at pycompat.py:*) (glob)
+  hgext/convert/common.py: error importing: <TypeError> getattr(): attribute name must be string (error at util.py:*) (glob)
+  hgext/convert/convcmd.py: error importing: <TypeError> getattr(): attribute name must be string (error at util.py:*) (glob)
+  hgext/convert/cvs.py: error importing: <TypeError> getattr(): attribute name must be string (error at util.py:*) (glob)
+  hgext/convert/cvsps.py: error importing: <TypeError> getattr(): attribute name must be string (error at util.py:*) (glob)
+  hgext/convert/darcs.py: error importing: <TypeError> getattr(): attribute name must be string (error at util.py:*) (glob)
   hgext/convert/filemap.py: error importing module: <SystemError> Parent module 'hgext.convert' not loaded, cannot perform relative import (line *) (glob)
-  hgext/convert/git.py: error importing: <TypeError> getattr(): attribute name must be string (error at pycompat.py:*) (glob)
-  hgext/convert/gnuarch.py: error importing: <TypeError> getattr(): attribute name must be string (error at pycompat.py:*) (glob)
-  hgext/convert/hg.py: error importing: <TypeError> getattr(): attribute name must be string (error at pycompat.py:*) (glob)
-  hgext/convert/monotone.py: error importing: <TypeError> getattr(): attribute name must be string (error at pycompat.py:*) (glob)
-  hgext/convert/p4.py: error importing: <TypeError> getattr(): attribute name must be string (error at pycompat.py:*) (glob)
-  hgext/convert/subversion.py: error importing: <TypeError> getattr(): attribute name must be string (error at pycompat.py:*) (glob)
+  hgext/convert/git.py: error importing: <TypeError> getattr(): attribute name must be string (error at util.py:*) (glob)
+  hgext/convert/gnuarch.py: error importing: <TypeError> getattr(): attribute name must be string (error at util.py:*) (glob)
+  hgext/convert/hg.py: error importing: <TypeError> getattr(): attribute name must be string (error at util.py:*) (glob)
+  hgext/convert/monotone.py: error importing: <TypeError> getattr(): attribute name must be string (error at util.py:*) (glob)
+  hgext/convert/p4.py: error importing: <TypeError> getattr(): attribute name must be string (error at util.py:*) (glob)
+  hgext/convert/subversion.py: error importing: <TypeError> getattr(): attribute name must be string (error at util.py:*) (glob)
   hgext/convert/transport.py: error importing module: <ImportError> No module named 'svn.client' (line *) (glob)
-  hgext/eol.py: error importing: <TypeError> getattr(): attribute name must be string (error at pycompat.py:*) (glob)
+  hgext/eol.py: error importing: <TypeError> getattr(): attribute name must be string (error at util.py:*) (glob)
   hgext/extdiff.py: error importing module: <SyntaxError> invalid syntax (archival.py, line *) (line *) (glob)
-  hgext/factotum.py: error importing: <TypeError> getattr(): attribute name must be string (error at pycompat.py:*) (glob)
-  hgext/fetch.py: error importing: <TypeError> getattr(): attribute name must be string (error at pycompat.py:*) (glob)
-  hgext/fsmonitor/state.py: error importing: <TypeError> getattr(): attribute name must be string (error at pycompat.py:*) (glob)
-  hgext/fsmonitor/watchmanclient.py: error importing: <TypeError> getattr(): attribute name must be string (error at pycompat.py:*) (glob)
-  hgext/gpg.py: error importing: <TypeError> getattr(): attribute name must be string (error at pycompat.py:*) (glob)
-  hgext/graphlog.py: error importing: <TypeError> getattr(): attribute name must be string (error at pycompat.py:*) (glob)
-  hgext/hgk.py: error importing: <TypeError> getattr(): attribute name must be string (error at pycompat.py:*) (glob)
-  hgext/highlight/highlight.py: error importing: <TypeError> getattr(): attribute name must be string (error at pycompat.py:*) (glob)
+  hgext/factotum.py: error importing: <TypeError> getattr(): attribute name must be string (error at util.py:*) (glob)
+  hgext/fetch.py: error importing: <TypeError> getattr(): attribute name must be string (error at util.py:*) (glob)
+  hgext/fsmonitor/state.py: error importing: <TypeError> getattr(): attribute name must be string (error at util.py:*) (glob)
+  hgext/fsmonitor/watchmanclient.py: error importing: <TypeError> getattr(): attribute name must be string (error at util.py:*) (glob)
+  hgext/gpg.py: error importing: <TypeError> getattr(): attribute name must be string (error at util.py:*) (glob)
+  hgext/graphlog.py: error importing: <TypeError> getattr(): attribute name must be string (error at util.py:*) (glob)
+  hgext/hgk.py: error importing: <TypeError> getattr(): attribute name must be string (error at util.py:*) (glob)
+  hgext/highlight/highlight.py: error importing: <TypeError> getattr(): attribute name must be string (error at util.py:*) (glob)
   hgext/histedit.py: error importing module: <SyntaxError> invalid syntax (bundle2.py, line *) (line *) (glob)
-  hgext/journal.py: error importing: <TypeError> getattr(): attribute name must be string (error at pycompat.py:*) (glob)
-  hgext/keyword.py: error importing: <TypeError> getattr(): attribute name must be string (error at pycompat.py:*) (glob)
-  hgext/largefiles/basestore.py: error importing: <TypeError> getattr(): attribute name must be string (error at pycompat.py:*) (glob)
-  hgext/largefiles/lfcommands.py: error importing: <TypeError> getattr(): attribute name must be string (error at pycompat.py:*) (glob)
-  hgext/largefiles/lfutil.py: error importing: <TypeError> getattr(): attribute name must be string (error at pycompat.py:*) (glob)
+  hgext/journal.py: error importing: <TypeError> getattr(): attribute name must be string (error at util.py:*) (glob)
+  hgext/keyword.py: error importing: <TypeError> getattr(): attribute name must be string (error at util.py:*) (glob)
+  hgext/largefiles/basestore.py: error importing: <TypeError> getattr(): attribute name must be string (error at util.py:*) (glob)
+  hgext/largefiles/lfcommands.py: error importing: <TypeError> getattr(): attribute name must be string (error at util.py:*) (glob)
+  hgext/largefiles/lfutil.py: error importing: <TypeError> getattr(): attribute name must be string (error at util.py:*) (glob)
   hgext/largefiles/localstore.py: error importing module: <SystemError> Parent module 'hgext.largefiles' not loaded, cannot perform relative import (line *) (glob)
   hgext/largefiles/overrides.py: error importing module: <SyntaxError> invalid syntax (archival.py, line *) (line *) (glob)
   hgext/largefiles/proto.py: error importing: <SyntaxError> invalid syntax (bundle2.py, line *) (error at httppeer.py:*) (glob)
-  hgext/largefiles/remotestore.py: error importing: <TypeError> getattr(): attribute name must be string (error at pycompat.py:*) (glob)
-  hgext/largefiles/reposetup.py: error importing: <TypeError> getattr(): attribute name must be string (error at pycompat.py:*) (glob)
-  hgext/largefiles/storefactory.py: error importing: <TypeError> getattr(): attribute name must be string (error at pycompat.py:*) (glob)
-  hgext/largefiles/uisetup.py: error importing: <TypeError> getattr(): attribute name must be string (error at pycompat.py:*) (glob)
+  hgext/largefiles/remotestore.py: error importing: <TypeError> getattr(): attribute name must be string (error at util.py:*) (glob)
+  hgext/largefiles/reposetup.py: error importing: <TypeError> getattr(): attribute name must be string (error at util.py:*) (glob)
+  hgext/largefiles/storefactory.py: error importing: <TypeError> getattr(): attribute name must be string (error at util.py:*) (glob)
+  hgext/largefiles/uisetup.py: error importing: <TypeError> getattr(): attribute name must be string (error at util.py:*) (glob)
   hgext/largefiles/wirestore.py: error importing module: <SystemError> Parent module 'hgext.largefiles' not loaded, cannot perform relative import (line *) (glob)
-  hgext/mq.py: error importing: <TypeError> getattr(): attribute name must be string (error at pycompat.py:*) (glob)
-  hgext/notify.py: error importing: <TypeError> getattr(): attribute name must be string (error at pycompat.py:*) (glob)
-  hgext/pager.py: error importing: <TypeError> getattr(): attribute name must be string (error at pycompat.py:*) (glob)
-  hgext/patchbomb.py: error importing: <TypeError> getattr(): attribute name must be string (error at pycompat.py:*) (glob)
-  hgext/purge.py: error importing: <TypeError> getattr(): attribute name must be string (error at pycompat.py:*) (glob)
-  hgext/rebase.py: error importing: <TypeError> getattr(): attribute name must be string (error at pycompat.py:*) (glob)
-  hgext/record.py: error importing: <TypeError> getattr(): attribute name must be string (error at pycompat.py:*) (glob)
-  hgext/relink.py: error importing: <TypeError> getattr(): attribute name must be string (error at pycompat.py:*) (glob)
-  hgext/schemes.py: error importing: <TypeError> getattr(): attribute name must be string (error at pycompat.py:*) (glob)
-  hgext/share.py: error importing: <TypeError> getattr(): attribute name must be string (error at pycompat.py:*) (glob)
+  hgext/mq.py: error importing: <TypeError> getattr(): attribute name must be string (error at util.py:*) (glob)
+  hgext/notify.py: error importing: <TypeError> getattr(): attribute name must be string (error at util.py:*) (glob)
+  hgext/pager.py: error importing: <TypeError> getattr(): attribute name must be string (error at util.py:*) (glob)
+  hgext/patchbomb.py: error importing: <TypeError> getattr(): attribute name must be string (error at util.py:*) (glob)
+  hgext/purge.py: error importing: <TypeError> getattr(): attribute name must be string (error at util.py:*) (glob)
+  hgext/rebase.py: error importing: <TypeError> getattr(): attribute name must be string (error at util.py:*) (glob)
+  hgext/record.py: error importing: <TypeError> getattr(): attribute name must be string (error at util.py:*) (glob)
+  hgext/relink.py: error importing: <TypeError> getattr(): attribute name must be string (error at util.py:*) (glob)
+  hgext/schemes.py: error importing: <TypeError> getattr(): attribute name must be string (error at util.py:*) (glob)
+  hgext/share.py: error importing: <TypeError> getattr(): attribute name must be string (error at util.py:*) (glob)
   hgext/shelve.py: error importing module: <SyntaxError> invalid syntax (bundle2.py, line 992) (line *) (glob)
-  hgext/strip.py: error importing: <TypeError> getattr(): attribute name must be string (error at pycompat.py:*) (glob)
+  hgext/strip.py: error importing: <TypeError> getattr(): attribute name must be string (error at util.py:*) (glob)
   hgext/transplant.py: error importing: <SyntaxError> invalid syntax (bundle2.py, line 992) (error at bundlerepo.py:*) (glob)
-  hgext/win32text.py: error importing: <TypeError> getattr(): attribute name must be string (error at pycompat.py:*) (glob)
+  hgext/win32text.py: error importing: <TypeError> getattr(): attribute name must be string (error at util.py:*) (glob)
   mercurial/archival.py: invalid syntax: invalid syntax (<unknown>, line *) (glob)
-  mercurial/bookmarks.py: error importing: <TypeError> getattr(): attribute name must be string (error at pycompat.py:*) (glob)
-  mercurial/branchmap.py: error importing: <TypeError> getattr(): attribute name must be string (error at pycompat.py:*) (glob)
+  mercurial/bookmarks.py: error importing: <TypeError> getattr(): attribute name must be string (error at util.py:*) (glob)
+  mercurial/branchmap.py: error importing: <TypeError> getattr(): attribute name must be string (error at util.py:*) (glob)
   mercurial/bundle2.py: invalid syntax: invalid syntax (<unknown>, line *) (glob)
   mercurial/bundlerepo.py: error importing module: <SyntaxError> invalid syntax (bundle2.py, line *) (line *) (glob)
-  mercurial/byterange.py: error importing: <TypeError> getattr(): attribute name must be string (error at pycompat.py:*) (glob)
-  mercurial/changegroup.py: error importing: <TypeError> getattr(): attribute name must be string (error at pycompat.py:*) (glob)
-  mercurial/changelog.py: error importing: <TypeError> getattr(): attribute name must be string (error at pycompat.py:*) (glob)
-  mercurial/cmdutil.py: error importing: <TypeError> getattr(): attribute name must be string (error at pycompat.py:*) (glob)
+  mercurial/byterange.py: error importing: <TypeError> getattr(): attribute name must be string (error at util.py:*) (glob)
+  mercurial/changegroup.py: error importing: <TypeError> getattr(): attribute name must be string (error at util.py:*) (glob)
+  mercurial/changelog.py: error importing: <TypeError> getattr(): attribute name must be string (error at util.py:*) (glob)
+  mercurial/cmdutil.py: error importing: <TypeError> getattr(): attribute name must be string (error at util.py:*) (glob)
   mercurial/commands.py: invalid syntax: invalid syntax (<unknown>, line *) (glob)
-  mercurial/commandserver.py: error importing: <TypeError> getattr(): attribute name must be string (error at pycompat.py:*) (glob)
-  mercurial/config.py: error importing: <TypeError> getattr(): attribute name must be string (error at pycompat.py:*) (glob)
-  mercurial/context.py: error importing: <TypeError> getattr(): attribute name must be string (error at pycompat.py:*) (glob)
-  mercurial/copies.py: error importing: <TypeError> getattr(): attribute name must be string (error at pycompat.py:*) (glob)
-  mercurial/crecord.py: error importing: <TypeError> getattr(): attribute name must be string (error at pycompat.py:*) (glob)
-  mercurial/destutil.py: error importing: <TypeError> getattr(): attribute name must be string (error at pycompat.py:*) (glob)
-  mercurial/dirstate.py: error importing: <TypeError> getattr(): attribute name must be string (error at pycompat.py:*) (glob)
-  mercurial/discovery.py: error importing: <TypeError> getattr(): attribute name must be string (error at pycompat.py:*) (glob)
-  mercurial/dispatch.py: error importing: <TypeError> getattr(): attribute name must be string (error at pycompat.py:*) (glob)
-  mercurial/exchange.py: error importing: <TypeError> getattr(): attribute name must be string (error at pycompat.py:*) (glob)
-  mercurial/extensions.py: error importing: <TypeError> getattr(): attribute name must be string (error at pycompat.py:*) (glob)
-  mercurial/filelog.py: error importing: <TypeError> getattr(): attribute name must be string (error at pycompat.py:*) (glob)
-  mercurial/filemerge.py: error importing: <TypeError> getattr(): attribute name must be string (error at pycompat.py:*) (glob)
-  mercurial/fileset.py: error importing: <TypeError> getattr(): attribute name must be string (error at pycompat.py:*) (glob)
-  mercurial/formatter.py: error importing: <TypeError> getattr(): attribute name must be string (error at pycompat.py:*) (glob)
-  mercurial/graphmod.py: error importing: <TypeError> getattr(): attribute name must be string (error at pycompat.py:*) (glob)
-  mercurial/help.py: error importing: <TypeError> getattr(): attribute name must be string (error at pycompat.py:*) (glob)
-  mercurial/hg.py: error importing: <TypeError> getattr(): attribute name must be string (error at pycompat.py:*) (glob)
+  mercurial/commandserver.py: error importing: <TypeError> getattr(): attribute name must be string (error at util.py:*) (glob)
+  mercurial/config.py: error importing: <TypeError> getattr(): attribute name must be string (error at util.py:*) (glob)
+  mercurial/context.py: error importing: <TypeError> getattr(): attribute name must be string (error at util.py:*) (glob)
+  mercurial/copies.py: error importing: <TypeError> getattr(): attribute name must be string (error at util.py:*) (glob)
+  mercurial/crecord.py: error importing: <TypeError> getattr(): attribute name must be string (error at util.py:*) (glob)
+  mercurial/destutil.py: error importing: <TypeError> getattr(): attribute name must be string (error at util.py:*) (glob)
+  mercurial/dirstate.py: error importing: <TypeError> getattr(): attribute name must be string (error at util.py:*) (glob)
+  mercurial/discovery.py: error importing: <TypeError> getattr(): attribute name must be string (error at util.py:*) (glob)
+  mercurial/dispatch.py: error importing: <TypeError> getattr(): attribute name must be string (error at util.py:*) (glob)
+  mercurial/exchange.py: error importing: <TypeError> getattr(): attribute name must be string (error at util.py:*) (glob)
+  mercurial/extensions.py: error importing: <TypeError> getattr(): attribute name must be string (error at util.py:*) (glob)
+  mercurial/filelog.py: error importing: <TypeError> getattr(): attribute name must be string (error at util.py:*) (glob)
+  mercurial/filemerge.py: error importing: <TypeError> getattr(): attribute name must be string (error at util.py:*) (glob)
+  mercurial/fileset.py: error importing: <TypeError> getattr(): attribute name must be string (error at util.py:*) (glob)
+  mercurial/formatter.py: error importing: <TypeError> getattr(): attribute name must be string (error at util.py:*) (glob)
+  mercurial/graphmod.py: error importing: <TypeError> getattr(): attribute name must be string (error at util.py:*) (glob)
+  mercurial/help.py: error importing: <TypeError> getattr(): attribute name must be string (error at util.py:*) (glob)
+  mercurial/hg.py: error importing: <TypeError> getattr(): attribute name must be string (error at util.py:*) (glob)
   mercurial/hgweb/common.py: error importing module: <SystemError> Parent module 'mercurial.hgweb' not loaded, cannot perform relative import (line *) (glob)
   mercurial/hgweb/hgweb_mod.py: error importing module: <SystemError> Parent module 'mercurial.hgweb' not loaded, cannot perform relative import (line *) (glob)
   mercurial/hgweb/hgwebdir_mod.py: error importing module: <SystemError> Parent module 'mercurial.hgweb' not loaded, cannot perform relative import (line *) (glob)
@@ -114,28 +114,28 @@
   mercurial/hgweb/webcommands.py: error importing module: <SystemError> Parent module 'mercurial.hgweb' not loaded, cannot perform relative import (line *) (glob)
   mercurial/hgweb/webutil.py: error importing module: <SystemError> Parent module 'mercurial.hgweb' not loaded, cannot perform relative import (line *) (glob)
   mercurial/hgweb/wsgicgi.py: error importing module: <SystemError> Parent module 'mercurial.hgweb' not loaded, cannot perform relative import (line *) (glob)
-  mercurial/hook.py: error importing: <TypeError> getattr(): attribute name must be string (error at pycompat.py:*) (glob)
-  mercurial/httpconnection.py: error importing: <TypeError> getattr(): attribute name must be string (error at pycompat.py:*) (glob)
+  mercurial/hook.py: error importing: <TypeError> getattr(): attribute name must be string (error at util.py:*) (glob)
+  mercurial/httpconnection.py: error importing: <TypeError> getattr(): attribute name must be string (error at util.py:*) (glob)
   mercurial/httppeer.py: error importing module: <SyntaxError> invalid syntax (bundle2.py, line *) (line *) (glob)
-  mercurial/keepalive.py: error importing: <TypeError> getattr(): attribute name must be string (error at pycompat.py:*) (glob)
-  mercurial/localrepo.py: error importing: <TypeError> getattr(): attribute name must be string (error at pycompat.py:*) (glob)
-  mercurial/lock.py: error importing: <TypeError> getattr(): attribute name must be string (error at pycompat.py:*) (glob)
-  mercurial/mail.py: error importing: <TypeError> getattr(): attribute name must be string (error at pycompat.py:*) (glob)
-  mercurial/manifest.py: error importing: <TypeError> getattr(): attribute name must be string (error at pycompat.py:*) (glob)
-  mercurial/match.py: error importing: <TypeError> getattr(): attribute name must be string (error at pycompat.py:*) (glob)
-  mercurial/mdiff.py: error importing: <TypeError> getattr(): attribute name must be string (error at pycompat.py:*) (glob)
-  mercurial/merge.py: error importing: <TypeError> getattr(): attribute name must be string (error at pycompat.py:*) (glob)
-  mercurial/minirst.py: error importing: <TypeError> getattr(): attribute name must be string (error at pycompat.py:*) (glob)
-  mercurial/namespaces.py: error importing: <TypeError> getattr(): attribute name must be string (error at pycompat.py:*) (glob)
-  mercurial/obsolete.py: error importing: <TypeError> getattr(): attribute name must be string (error at pycompat.py:*) (glob)
-  mercurial/patch.py: error importing: <TypeError> getattr(): attribute name must be string (error at pycompat.py:*) (glob)
-  mercurial/pathutil.py: error importing: <TypeError> getattr(): attribute name must be string (error at pycompat.py:*) (glob)
-  mercurial/peer.py: error importing: <TypeError> getattr(): attribute name must be string (error at pycompat.py:*) (glob)
+  mercurial/keepalive.py: error importing: <TypeError> getattr(): attribute name must be string (error at util.py:*) (glob)
+  mercurial/localrepo.py: error importing: <TypeError> getattr(): attribute name must be string (error at util.py:*) (glob)
+  mercurial/lock.py: error importing: <TypeError> getattr(): attribute name must be string (error at util.py:*) (glob)
+  mercurial/mail.py: error importing: <TypeError> getattr(): attribute name must be string (error at util.py:*) (glob)
+  mercurial/manifest.py: error importing: <TypeError> getattr(): attribute name must be string (error at util.py:*) (glob)
+  mercurial/match.py: error importing: <TypeError> getattr(): attribute name must be string (error at util.py:*) (glob)
+  mercurial/mdiff.py: error importing: <TypeError> getattr(): attribute name must be string (error at util.py:*) (glob)
+  mercurial/merge.py: error importing: <TypeError> getattr(): attribute name must be string (error at util.py:*) (glob)
+  mercurial/minirst.py: error importing: <TypeError> getattr(): attribute name must be string (error at util.py:*) (glob)
+  mercurial/namespaces.py: error importing: <TypeError> getattr(): attribute name must be string (error at util.py:*) (glob)
+  mercurial/obsolete.py: error importing: <TypeError> getattr(): attribute name must be string (error at util.py:*) (glob)
+  mercurial/patch.py: error importing: <TypeError> getattr(): attribute name must be string (error at util.py:*) (glob)
+  mercurial/pathutil.py: error importing: <TypeError> getattr(): attribute name must be string (error at util.py:*) (glob)
+  mercurial/peer.py: error importing: <TypeError> getattr(): attribute name must be string (error at util.py:*) (glob)
   mercurial/pure/mpatch.py: error importing module: <ImportError> cannot import name 'pycompat' (line *) (glob)
   mercurial/pure/osutil.py: error importing module: <ImportError> cannot import name 'policy' (line *) (glob)
   mercurial/pure/parsers.py: error importing module: <ImportError> No module named 'mercurial.pure.node' (line *) (glob)
-  mercurial/pushkey.py: error importing: <TypeError> getattr(): attribute name must be string (error at pycompat.py:*) (glob)
-  mercurial/pvec.py: error importing: <TypeError> getattr(): attribute name must be string (error at pycompat.py:*) (glob)
+  mercurial/pushkey.py: error importing: <TypeError> getattr(): attribute name must be string (error at util.py:*) (glob)
+  mercurial/pvec.py: error importing: <TypeError> getattr(): attribute name must be string (error at util.py:*) (glob)
   mercurial/registrar.py: error importing: <TypeError> getattr(): attribute name must be string (error at util.py:*) (glob)
   mercurial/repair.py: error importing module: <SyntaxError> invalid syntax (bundle2.py, line *) (line *) (glob)
   mercurial/repoview.py: error importing: <TypeError> getattr(): attribute name must be string (error at util.py:*) (glob)


More information about the Mercurial-devel mailing list