##// END OF EJS Templates
py3: provide encoding.environ which is a dict of bytes...
Yuya Nishihara -
r30034:e4a6b439 default
parent child Browse files
Show More
@@ -47,6 +47,19 b' def hfsignoreclean(s):'
47 s = s.replace(c, '')
47 s = s.replace(c, '')
48 return s
48 return s
49
49
50 # encoding.environ is provided read-only, which may not be used to modify
51 # the process environment
52 _nativeenviron = (not pycompat.ispy3 or os.supports_bytes_environ)
53 if not pycompat.ispy3:
54 environ = os.environ
55 elif _nativeenviron:
56 environ = os.environb
57 else:
58 # preferred encoding isn't known yet; use utf-8 to avoid unicode error
59 # and recreate it once encoding is settled
60 environ = dict((k.encode(u'utf-8'), v.encode(u'utf-8'))
61 for k, v in os.environ.items())
62
50 def _getpreferredencoding():
63 def _getpreferredencoding():
51 '''
64 '''
52 On darwin, getpreferredencoding ignores the locale environment and
65 On darwin, getpreferredencoding ignores the locale environment and
@@ -78,13 +91,13 b' def _getpreferredencoding():'
78 }
91 }
79
92
80 try:
93 try:
81 encoding = os.environ.get("HGENCODING")
94 encoding = environ.get("HGENCODING")
82 if not encoding:
95 if not encoding:
83 encoding = locale.getpreferredencoding() or 'ascii'
96 encoding = locale.getpreferredencoding() or 'ascii'
84 encoding = _encodingfixers.get(encoding, lambda: encoding)()
97 encoding = _encodingfixers.get(encoding, lambda: encoding)()
85 except locale.Error:
98 except locale.Error:
86 encoding = 'ascii'
99 encoding = 'ascii'
87 encodingmode = os.environ.get("HGENCODINGMODE", "strict")
100 encodingmode = environ.get("HGENCODINGMODE", "strict")
88 fallbackencoding = 'ISO-8859-1'
101 fallbackencoding = 'ISO-8859-1'
89
102
90 class localstr(str):
103 class localstr(str):
@@ -183,8 +196,14 b' def fromlocal(s):'
183 except LookupError as k:
196 except LookupError as k:
184 raise error.Abort(k, hint="please check your locale settings")
197 raise error.Abort(k, hint="please check your locale settings")
185
198
199 if not _nativeenviron:
200 # now encoding and helper functions are available, recreate the environ
201 # dict to be exported to other modules
202 environ = dict((tolocal(k.encode(u'utf-8')), tolocal(v.encode(u'utf-8')))
203 for k, v in os.environ.items())
204
186 # How to treat ambiguous-width characters. Set to 'wide' to treat as wide.
205 # How to treat ambiguous-width characters. Set to 'wide' to treat as wide.
187 wide = (os.environ.get("HGENCODINGAMBIGUOUS", "narrow") == "wide"
206 wide = (environ.get("HGENCODINGAMBIGUOUS", "narrow") == "wide"
188 and "WFA" or "WF")
207 and "WFA" or "WF")
189
208
190 def colwidth(s):
209 def colwidth(s):
@@ -17,89 +17,90 b''
17 > | xargs $PYTHON3 contrib/check-py3-compat.py \
17 > | xargs $PYTHON3 contrib/check-py3-compat.py \
18 > | sed 's/[0-9][0-9]*)$/*)/'
18 > | sed 's/[0-9][0-9]*)$/*)/'
19 doc/hgmanpage.py: invalid syntax: invalid syntax (<unknown>, line *)
19 doc/hgmanpage.py: invalid syntax: invalid syntax (<unknown>, line *)
20 hgext/acl.py: error importing: <TypeError> str expected, not bytes (error at encoding.py:*)
20 hgext/acl.py: error importing: <TypeError> str expected, not bytes (error at i18n.py:*)
21 hgext/automv.py: error importing: <TypeError> str expected, not bytes (error at encoding.py:*)
21 hgext/automv.py: error importing: <TypeError> str expected, not bytes (error at i18n.py:*)
22 hgext/blackbox.py: error importing: <TypeError> str expected, not bytes (error at encoding.py:*)
22 hgext/blackbox.py: error importing: <TypeError> str expected, not bytes (error at i18n.py:*)
23 hgext/bugzilla.py: error importing: <TypeError> str expected, not bytes (error at encoding.py:*)
23 hgext/bugzilla.py: error importing: <TypeError> str expected, not bytes (error at i18n.py:*)
24 hgext/censor.py: error importing: <TypeError> str expected, not bytes (error at encoding.py:*)
24 hgext/censor.py: error importing: <TypeError> str expected, not bytes (error at i18n.py:*)
25 hgext/chgserver.py: error importing: <TypeError> str expected, not bytes (error at encoding.py:*)
25 hgext/chgserver.py: error importing: <TypeError> str expected, not bytes (error at i18n.py:*)
26 hgext/children.py: error importing: <TypeError> str expected, not bytes (error at encoding.py:*)
26 hgext/children.py: error importing: <TypeError> str expected, not bytes (error at i18n.py:*)
27 hgext/churn.py: error importing: <TypeError> str expected, not bytes (error at encoding.py:*)
27 hgext/churn.py: error importing: <TypeError> str expected, not bytes (error at i18n.py:*)
28 hgext/clonebundles.py: error importing: <TypeError> str expected, not bytes (error at encoding.py:*)
28 hgext/clonebundles.py: error importing: <TypeError> str expected, not bytes (error at i18n.py:*)
29 hgext/color.py: error importing: <TypeError> str expected, not bytes (error at encoding.py:*)
29 hgext/color.py: error importing: <TypeError> str expected, not bytes (error at i18n.py:*)
30 hgext/convert/bzr.py: error importing: <TypeError> str expected, not bytes (error at encoding.py:*)
30 hgext/convert/bzr.py: error importing: <TypeError> str expected, not bytes (error at i18n.py:*)
31 hgext/convert/common.py: error importing: <TypeError> str expected, not bytes (error at encoding.py:*)
31 hgext/convert/common.py: error importing: <TypeError> str expected, not bytes (error at i18n.py:*)
32 hgext/convert/convcmd.py: error importing: <TypeError> str expected, not bytes (error at encoding.py:*)
32 hgext/convert/convcmd.py: error importing: <TypeError> str expected, not bytes (error at i18n.py:*)
33 hgext/convert/cvs.py: error importing: <TypeError> str expected, not bytes (error at encoding.py:*)
33 hgext/convert/cvs.py: error importing: <TypeError> str expected, not bytes (error at i18n.py:*)
34 hgext/convert/cvsps.py: error importing: <TypeError> str expected, not bytes (error at encoding.py:*)
34 hgext/convert/cvsps.py: error importing: <TypeError> str expected, not bytes (error at i18n.py:*)
35 hgext/convert/darcs.py: error importing: <TypeError> str expected, not bytes (error at encoding.py:*)
35 hgext/convert/darcs.py: error importing: <TypeError> str expected, not bytes (error at i18n.py:*)
36 hgext/convert/filemap.py: error importing: <TypeError> str expected, not bytes (error at encoding.py:*)
36 hgext/convert/filemap.py: error importing: <TypeError> str expected, not bytes (error at i18n.py:*)
37 hgext/convert/git.py: error importing: <TypeError> str expected, not bytes (error at encoding.py:*)
37 hgext/convert/git.py: error importing: <TypeError> str expected, not bytes (error at i18n.py:*)
38 hgext/convert/gnuarch.py: error importing: <TypeError> str expected, not bytes (error at encoding.py:*)
38 hgext/convert/gnuarch.py: error importing: <TypeError> str expected, not bytes (error at i18n.py:*)
39 hgext/convert/hg.py: error importing: <TypeError> str expected, not bytes (error at encoding.py:*)
39 hgext/convert/hg.py: error importing: <TypeError> str expected, not bytes (error at i18n.py:*)
40 hgext/convert/monotone.py: error importing: <TypeError> str expected, not bytes (error at encoding.py:*)
40 hgext/convert/monotone.py: error importing: <TypeError> str expected, not bytes (error at i18n.py:*)
41 hgext/convert/p4.py: error importing: <TypeError> str expected, not bytes (error at encoding.py:*)
41 hgext/convert/p4.py: error importing: <TypeError> str expected, not bytes (error at i18n.py:*)
42 hgext/convert/subversion.py: error importing: <TypeError> str expected, not bytes (error at encoding.py:*)
42 hgext/convert/subversion.py: error importing: <TypeError> str expected, not bytes (error at i18n.py:*)
43 hgext/convert/transport.py: error importing module: <ImportError> No module named 'svn.client' (line *)
43 hgext/convert/transport.py: error importing module: <ImportError> No module named 'svn.client' (line *)
44 hgext/eol.py: error importing: <TypeError> str expected, not bytes (error at encoding.py:*)
44 hgext/eol.py: error importing: <TypeError> str expected, not bytes (error at i18n.py:*)
45 hgext/extdiff.py: error importing: <TypeError> str expected, not bytes (error at encoding.py:*)
45 hgext/extdiff.py: error importing: <TypeError> str expected, not bytes (error at i18n.py:*)
46 hgext/factotum.py: error importing: <TypeError> str expected, not bytes (error at encoding.py:*)
46 hgext/factotum.py: error importing: <TypeError> str expected, not bytes (error at i18n.py:*)
47 hgext/fetch.py: error importing: <TypeError> str expected, not bytes (error at encoding.py:*)
47 hgext/fetch.py: error importing: <TypeError> str expected, not bytes (error at i18n.py:*)
48 hgext/fsmonitor/state.py: error importing: <TypeError> str expected, not bytes (error at encoding.py:*)
48 hgext/fsmonitor/state.py: error importing: <TypeError> str expected, not bytes (error at i18n.py:*)
49 hgext/fsmonitor/watchmanclient.py: error importing: <TypeError> str expected, not bytes (error at encoding.py:*)
49 hgext/fsmonitor/watchmanclient.py: error importing: <TypeError> str expected, not bytes (error at i18n.py:*)
50 hgext/gpg.py: error importing: <TypeError> str expected, not bytes (error at encoding.py:*)
50 hgext/gpg.py: error importing: <TypeError> str expected, not bytes (error at i18n.py:*)
51 hgext/graphlog.py: error importing: <TypeError> str expected, not bytes (error at encoding.py:*)
51 hgext/graphlog.py: error importing: <TypeError> str expected, not bytes (error at i18n.py:*)
52 hgext/hgk.py: error importing: <TypeError> str expected, not bytes (error at encoding.py:*)
52 hgext/hgk.py: error importing: <TypeError> str expected, not bytes (error at i18n.py:*)
53 hgext/histedit.py: error importing: <TypeError> str expected, not bytes (error at encoding.py:*)
53 hgext/histedit.py: error importing: <TypeError> str expected, not bytes (error at i18n.py:*)
54 hgext/journal.py: error importing: <TypeError> str expected, not bytes (error at encoding.py:*)
54 hgext/journal.py: error importing: <TypeError> str expected, not bytes (error at i18n.py:*)
55 hgext/keyword.py: error importing: <TypeError> str expected, not bytes (error at encoding.py:*)
55 hgext/keyword.py: error importing: <TypeError> str expected, not bytes (error at i18n.py:*)
56 hgext/largefiles/basestore.py: error importing: <TypeError> str expected, not bytes (error at encoding.py:*)
56 hgext/largefiles/basestore.py: error importing: <TypeError> str expected, not bytes (error at i18n.py:*)
57 hgext/largefiles/lfcommands.py: error importing: <TypeError> str expected, not bytes (error at encoding.py:*)
57 hgext/largefiles/lfcommands.py: error importing: <TypeError> str expected, not bytes (error at i18n.py:*)
58 hgext/largefiles/lfutil.py: error importing: <TypeError> str expected, not bytes (error at encoding.py:*)
58 hgext/largefiles/lfutil.py: error importing: <TypeError> str expected, not bytes (error at i18n.py:*)
59 hgext/largefiles/localstore.py: error importing: <TypeError> str expected, not bytes (error at encoding.py:*)
59 hgext/largefiles/localstore.py: error importing: <TypeError> str expected, not bytes (error at i18n.py:*)
60 hgext/largefiles/overrides.py: error importing: <TypeError> str expected, not bytes (error at encoding.py:*)
60 hgext/largefiles/overrides.py: error importing: <TypeError> str expected, not bytes (error at i18n.py:*)
61 hgext/largefiles/proto.py: error importing: <TypeError> str expected, not bytes (error at encoding.py:*)
61 hgext/largefiles/proto.py: error importing: <TypeError> str expected, not bytes (error at i18n.py:*)
62 hgext/largefiles/remotestore.py: error importing: <TypeError> str expected, not bytes (error at encoding.py:*)
62 hgext/largefiles/remotestore.py: error importing: <TypeError> str expected, not bytes (error at i18n.py:*)
63 hgext/largefiles/reposetup.py: error importing: <TypeError> str expected, not bytes (error at encoding.py:*)
63 hgext/largefiles/reposetup.py: error importing: <TypeError> str expected, not bytes (error at i18n.py:*)
64 hgext/largefiles/storefactory.py: error importing: <TypeError> str expected, not bytes (error at encoding.py:*)
64 hgext/largefiles/storefactory.py: error importing: <TypeError> str expected, not bytes (error at i18n.py:*)
65 hgext/largefiles/uisetup.py: error importing: <TypeError> str expected, not bytes (error at encoding.py:*)
65 hgext/largefiles/uisetup.py: error importing: <TypeError> str expected, not bytes (error at i18n.py:*)
66 hgext/largefiles/wirestore.py: error importing module: <SystemError> Parent module 'hgext.largefiles' not loaded, cannot perform relative import (line *)
66 hgext/largefiles/wirestore.py: error importing module: <SystemError> Parent module 'hgext.largefiles' not loaded, cannot perform relative import (line *)
67 hgext/mq.py: error importing: <TypeError> str expected, not bytes (error at encoding.py:*)
67 hgext/mq.py: error importing: <TypeError> str expected, not bytes (error at i18n.py:*)
68 hgext/notify.py: error importing: <TypeError> str expected, not bytes (error at encoding.py:*)
68 hgext/notify.py: error importing: <TypeError> str expected, not bytes (error at i18n.py:*)
69 hgext/pager.py: error importing: <TypeError> str expected, not bytes (error at encoding.py:*)
69 hgext/pager.py: error importing: <TypeError> str expected, not bytes (error at i18n.py:*)
70 hgext/patchbomb.py: error importing: <TypeError> str expected, not bytes (error at encoding.py:*)
70 hgext/patchbomb.py: error importing: <TypeError> str expected, not bytes (error at i18n.py:*)
71 hgext/purge.py: error importing: <TypeError> str expected, not bytes (error at encoding.py:*)
71 hgext/purge.py: error importing: <TypeError> str expected, not bytes (error at i18n.py:*)
72 hgext/rebase.py: error importing: <TypeError> str expected, not bytes (error at encoding.py:*)
72 hgext/rebase.py: error importing: <TypeError> str expected, not bytes (error at i18n.py:*)
73 hgext/record.py: error importing: <TypeError> str expected, not bytes (error at encoding.py:*)
73 hgext/record.py: error importing: <TypeError> str expected, not bytes (error at i18n.py:*)
74 hgext/relink.py: error importing: <TypeError> str expected, not bytes (error at encoding.py:*)
74 hgext/relink.py: error importing: <TypeError> str expected, not bytes (error at i18n.py:*)
75 hgext/schemes.py: error importing: <TypeError> str expected, not bytes (error at encoding.py:*)
75 hgext/schemes.py: error importing: <TypeError> str expected, not bytes (error at i18n.py:*)
76 hgext/share.py: error importing: <TypeError> str expected, not bytes (error at encoding.py:*)
76 hgext/share.py: error importing: <TypeError> str expected, not bytes (error at i18n.py:*)
77 hgext/shelve.py: error importing: <TypeError> str expected, not bytes (error at encoding.py:*)
77 hgext/shelve.py: error importing: <TypeError> str expected, not bytes (error at i18n.py:*)
78 hgext/strip.py: error importing: <TypeError> str expected, not bytes (error at encoding.py:*)
78 hgext/strip.py: error importing: <TypeError> str expected, not bytes (error at i18n.py:*)
79 hgext/transplant.py: error importing: <TypeError> str expected, not bytes (error at encoding.py:*)
79 hgext/transplant.py: error importing: <TypeError> str expected, not bytes (error at i18n.py:*)
80 hgext/win32mbcs.py: error importing: <TypeError> str expected, not bytes (error at encoding.py:*)
80 hgext/win32mbcs.py: error importing: <TypeError> str expected, not bytes (error at i18n.py:*)
81 hgext/win32text.py: error importing: <TypeError> str expected, not bytes (error at encoding.py:*)
81 hgext/win32text.py: error importing: <TypeError> str expected, not bytes (error at i18n.py:*)
82 mercurial/archival.py: error importing: <TypeError> str expected, not bytes (error at encoding.py:*)
82 mercurial/archival.py: error importing: <TypeError> str expected, not bytes (error at i18n.py:*)
83 mercurial/bookmarks.py: error importing: <TypeError> str expected, not bytes (error at encoding.py:*)
83 mercurial/bookmarks.py: error importing: <TypeError> str expected, not bytes (error at i18n.py:*)
84 mercurial/branchmap.py: error importing: <TypeError> str expected, not bytes (error at encoding.py:*)
84 mercurial/branchmap.py: error importing: <TypeError> str expected, not bytes (error at i18n.py:*)
85 mercurial/bundle2.py: error importing: <TypeError> str expected, not bytes (error at encoding.py:*)
85 mercurial/bundle2.py: error importing: <TypeError> str expected, not bytes (error at i18n.py:*)
86 mercurial/bundlerepo.py: error importing: <TypeError> str expected, not bytes (error at encoding.py:*)
86 mercurial/bundlerepo.py: error importing: <TypeError> str expected, not bytes (error at i18n.py:*)
87 mercurial/byterange.py: error importing: <TypeError> str expected, not bytes (error at encoding.py:*)
87 mercurial/byterange.py: error importing: <TypeError> str expected, not bytes (error at i18n.py:*)
88 mercurial/changegroup.py: error importing: <TypeError> str expected, not bytes (error at encoding.py:*)
88 mercurial/changegroup.py: error importing: <TypeError> str expected, not bytes (error at i18n.py:*)
89 mercurial/changelog.py: error importing: <TypeError> str expected, not bytes (error at encoding.py:*)
89 mercurial/changelog.py: error importing: <TypeError> str expected, not bytes (error at i18n.py:*)
90 mercurial/cmdutil.py: error importing: <TypeError> str expected, not bytes (error at encoding.py:*)
90 mercurial/cmdutil.py: error importing: <TypeError> str expected, not bytes (error at i18n.py:*)
91 mercurial/commands.py: error importing: <TypeError> str expected, not bytes (error at encoding.py:*)
91 mercurial/commands.py: error importing: <TypeError> str expected, not bytes (error at i18n.py:*)
92 mercurial/commandserver.py: error importing: <TypeError> str expected, not bytes (error at encoding.py:*)
92 mercurial/commandserver.py: error importing: <TypeError> str expected, not bytes (error at i18n.py:*)
93 mercurial/config.py: error importing: <TypeError> str expected, not bytes (error at encoding.py:*)
93 mercurial/config.py: error importing: <TypeError> str expected, not bytes (error at i18n.py:*)
94 mercurial/context.py: error importing: <TypeError> str expected, not bytes (error at encoding.py:*)
94 mercurial/context.py: error importing: <TypeError> str expected, not bytes (error at i18n.py:*)
95 mercurial/copies.py: error importing: <TypeError> str expected, not bytes (error at encoding.py:*)
95 mercurial/copies.py: error importing: <TypeError> str expected, not bytes (error at i18n.py:*)
96 mercurial/crecord.py: error importing: <TypeError> str expected, not bytes (error at encoding.py:*)
96 mercurial/crecord.py: error importing: <TypeError> str expected, not bytes (error at i18n.py:*)
97 mercurial/dagparser.py: error importing: <TypeError> str expected, not bytes (error at encoding.py:*)
97 mercurial/dagparser.py: error importing: <TypeError> str expected, not bytes (error at i18n.py:*)
98 mercurial/dagutil.py: error importing: <TypeError> str expected, not bytes (error at encoding.py:*)
98 mercurial/dagutil.py: error importing: <TypeError> str expected, not bytes (error at i18n.py:*)
99 mercurial/destutil.py: error importing: <TypeError> str expected, not bytes (error at encoding.py:*)
99 mercurial/destutil.py: error importing: <TypeError> str expected, not bytes (error at i18n.py:*)
100 mercurial/dirstate.py: error importing: <TypeError> str expected, not bytes (error at encoding.py:*)
100 mercurial/dirstate.py: error importing: <TypeError> str expected, not bytes (error at i18n.py:*)
101 mercurial/discovery.py: error importing: <TypeError> str expected, not bytes (error at encoding.py:*)
101 mercurial/discovery.py: error importing: <TypeError> str expected, not bytes (error at i18n.py:*)
102 mercurial/dispatch.py: error importing: <TypeError> str expected, not bytes (error at encoding.py:*)
102 mercurial/dispatch.py: error importing: <TypeError> str expected, not bytes (error at i18n.py:*)
103 mercurial/encoding.py: error importing module: <TypeError> bytes expected, not str (line *)
103 mercurial/exchange.py: error importing: <TypeError> str expected, not bytes (error at i18n.py:*)
104 mercurial/exchange.py: error importing: <TypeError> str expected, not bytes (error at i18n.py:*)
104 mercurial/extensions.py: error importing: <TypeError> str expected, not bytes (error at i18n.py:*)
105 mercurial/extensions.py: error importing: <TypeError> str expected, not bytes (error at i18n.py:*)
105 mercurial/fancyopts.py: error importing: <TypeError> str expected, not bytes (error at i18n.py:*)
106 mercurial/fancyopts.py: error importing: <TypeError> str expected, not bytes (error at i18n.py:*)
@@ -165,10 +166,11 b''
165 mercurial/ui.py: error importing: <TypeError> __slots__ items must be strings, not 'bytes' (error at util.py:*)
166 mercurial/ui.py: error importing: <TypeError> __slots__ items must be strings, not 'bytes' (error at util.py:*)
166 mercurial/unionrepo.py: error importing: <TypeError> __slots__ items must be strings, not 'bytes' (error at util.py:*)
167 mercurial/unionrepo.py: error importing: <TypeError> __slots__ items must be strings, not 'bytes' (error at util.py:*)
167 mercurial/url.py: error importing: <TypeError> __slots__ items must be strings, not 'bytes' (error at util.py:*)
168 mercurial/url.py: error importing: <TypeError> __slots__ items must be strings, not 'bytes' (error at util.py:*)
168 mercurial/verify.py: error importing module: <TypeError> unorderable types: str() >= tuple() (line *)
169 mercurial/util.py: error importing module: <TypeError> encode() argument 1 must be str, not bytes (line *)
170 mercurial/verify.py: error importing: <TypeError> __slots__ items must be strings, not 'bytes' (error at util.py:*)
169 mercurial/win32.py: error importing module: <ImportError> No module named 'msvcrt' (line *)
171 mercurial/win32.py: error importing module: <ImportError> No module named 'msvcrt' (line *)
170 mercurial/windows.py: error importing module: <ImportError> No module named 'msvcrt' (line *)
172 mercurial/windows.py: error importing module: <ImportError> No module named 'msvcrt' (line *)
171 mercurial/wireproto.py: error importing module: <TypeError> unorderable types: str() >= tuple() (line *)
173 mercurial/wireproto.py: error importing: <TypeError> __slots__ items must be strings, not 'bytes' (error at util.py:*)
172
174
173 #endif
175 #endif
174
176
@@ -176,5 +178,5 b''
176 $ hg files 'set:(**.py) and grep(pygments)' | sed 's|\\|/|g' \
178 $ hg files 'set:(**.py) and grep(pygments)' | sed 's|\\|/|g' \
177 > | xargs $PYTHON3 contrib/check-py3-compat.py \
179 > | xargs $PYTHON3 contrib/check-py3-compat.py \
178 > | sed 's/[0-9][0-9]*)$/*)/'
180 > | sed 's/[0-9][0-9]*)$/*)/'
179 hgext/highlight/highlight.py: error importing: <TypeError> str expected, not bytes (error at encoding.py:*)
181 hgext/highlight/highlight.py: error importing: <TypeError> str expected, not bytes (error at i18n.py:*)
180 #endif
182 #endif
General Comments 0
You need to be logged in to leave comments. Login now