summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorZac Medico <zmedico@gentoo.org>2009-02-23 16:31:57 +0000
committerZac Medico <zmedico@gentoo.org>2009-02-23 16:31:57 +0000
commitd3e46cd7a762d32e91b074e41d60cc9a055be4b4 (patch)
tree96c400377d0d35b8fa3d9069f28f1a93e8de2524
parent00dc361f4dbd8b91505c6772f3676afde720c66e (diff)
downloadportage-d3e46cd7a762d32e91b074e41d60cc9a055be4b4.tar.gz
portage-d3e46cd7a762d32e91b074e41d60cc9a055be4b4.tar.bz2
portage-d3e46cd7a762d32e91b074e41d60cc9a055be4b4.zip
Reorganize _ensure_default_encoding().
svn path=/main/trunk/; revision=12694
-rw-r--r--pym/portage/__init__.py93
1 files changed, 46 insertions, 47 deletions
diff --git a/pym/portage/__init__.py b/pym/portage/__init__.py
index 5891732a6..990da479c 100644
--- a/pym/portage/__init__.py
+++ b/pym/portage/__init__.py
@@ -12,6 +12,7 @@ VERSION="$Rev$"[6:-2] + "-svn"
try:
import sys
+ import codecs
import copy
import errno
import logging
@@ -7467,33 +7468,7 @@ def portageexit():
atexit_register(portageexit)
-def _ensure_default_encoding():
- """
- The python that's inside stage 1 or 2 is built with a minimal
- configuration which does not include the /usr/lib/pythonX.Y/encodings
- directory. This results in error like the following:
-
- LookupError: no codec search functions registered: can't find encoding
-
- In order to solve this problem, detect it early and manually register
- a search function for the ascii and utf_8 codecs. Starting with python-3.0
- this problem is more noticeable because of stricter handling of encoding
- and decoding between strings of characters and bytes.
- """
-
- import codecs
- default_encoding = sys.getdefaultencoding()
- required_encodings = set(['ascii', 'utf_8'])
- required_encodings.add(default_encoding)
- missing_encodings = set()
- for codec_name in required_encodings:
- try:
- codecs.lookup(codec_name)
- except LookupError:
- missing_encodings.add(codec_name)
-
- if not missing_encodings:
- return
+def _gen_missing_encodings(missing_encodings):
encodings = {}
@@ -7513,7 +7488,7 @@ def _ensure_default_encoding():
class AsciiStreamReader(codecs.StreamReader):
decode = codecs.ascii_decode
- ascii_codec_info = codecs.CodecInfo(
+ encodings['ascii'] = codecs.CodecInfo(
name='ascii',
encode=codecs.ascii_encode,
decode=codecs.ascii_decode,
@@ -7523,8 +7498,6 @@ def _ensure_default_encoding():
streamreader=AsciiStreamReader,
)
- encodings['ascii'] = ascii_codec_info
-
if 'utf_8' in missing_encodings:
def utf8decode(input, errors='strict'):
@@ -7543,7 +7516,7 @@ def _ensure_default_encoding():
class Utf8StreamReader(codecs.StreamReader):
decode = codecs.utf_8_decode
- utf8_codec_info = codecs.CodecInfo(
+ encodings['utf_8'] = codecs.CodecInfo(
name='utf-8',
encode=codecs.utf_8_encode,
decode=utf8decode,
@@ -7553,7 +7526,46 @@ def _ensure_default_encoding():
streamwriter=Utf8StreamReader,
)
- encodings['utf_8'] = utf8_codec_info
+ return encodings
+
+def _ensure_default_encoding():
+ """
+ The python that's inside stage 1 or 2 is built with a minimal
+ configuration which does not include the /usr/lib/pythonX.Y/encodings
+ directory. This results in error like the following:
+
+ LookupError: no codec search functions registered: can't find encoding
+
+ In order to solve this problem, detect it early and manually register
+ a search function for the ascii and utf_8 codecs. Starting with python-3.0
+ this problem is more noticeable because of stricter handling of encoding
+ and decoding between strings of characters and bytes.
+ """
+
+ default_fallback = 'utf_8'
+ default_encoding = sys.getdefaultencoding()
+ required_encodings = set(['ascii', 'utf_8'])
+ required_encodings.add(default_encoding)
+ missing_encodings = set()
+ for codec_name in required_encodings:
+ try:
+ codecs.lookup(codec_name)
+ except LookupError:
+ missing_encodings.add(codec_name)
+
+ if not missing_encodings:
+ return
+
+ encodings = _gen_missing_encodings(missing_encodings)
+
+ if default_encoding not in encodings:
+ # Make the fallback codec correspond to whatever name happens
+ # to be returned by sys.getdefaultencoding().
+
+ try:
+ encodings[default_encoding] = codecs.lookup(default_fallback)
+ except LookupError:
+ encodings[default_encoding] = encodings[default_fallback]
def search_function(name):
codec_info = encodings.get(name)
@@ -7571,21 +7583,8 @@ def _ensure_default_encoding():
codecs.register(search_function)
- if default_encoding in missing_encodings and \
- default_encoding not in encodings:
-
- default_fallback = 'utf_8'
-
- # Make the fallback codec correspond to whatever name happens
- # to be returned by sys.getdefaultencoding().
- try:
- encodings[default_encoding] = codecs.lookup(default_fallback)
- except LookupError:
- encodings[default_encoding] = encodings[default_fallback]
-
- del default_fallback
-
- del codec_name, default_encoding, missing_encodings, required_encodings
+ del codec_name, default_encoding, default_fallback, missing_encodings, \
+ required_encodings, search_function
def _global_updates(trees, prev_mtimes):
"""