Merged from trunk -r14097:14107
authorFabian Groffen <grobian@gentoo.org>
Mon, 24 Aug 2009 09:36:42 +0000 (09:36 -0000)
committerFabian Groffen <grobian@gentoo.org>
Mon, 24 Aug 2009 09:36:42 +0000 (09:36 -0000)
   | 14098    | Use _encodings['repo.content'] for decoding profiles.desc,  |
   | zmedico  | ChangeLog, metadata.xml, and ebuilds.                       |

   | 14099    | Use _encodings where appropriate.                           |
   | zmedico  |                                                             |

   | 14100    | Use _encodings where appropriate.                           |
   | zmedico  |                                                             |

   | 14101    | Use _encodings where appropriate.                           |
   | zmedico  |                                                             |

   | 14102    | If sys.getdefaultencoding() returns None (this can happen   |
   | zmedico  | if python is built with USE=build, in stage 1), fall back   |
   |          | to _encodings['merge'] = 'ascii'.                           |

   | 14103    | Fix typo from previous commit.                              |
   | zmedico  |                                                             |

   | 14104    | Fix portage.5 man page to document the fact that some files |
   | arfrever | in profiles directory can be directories.                   |

   | 14105    | Use _encodings where appropriate.                           |
   | zmedico  |                                                             |

   | 14106    | Use _encodings where appropriate.                           |
   | zmedico  |                                                             |

   | 14107    | Use _encodings where appropriate.                           |
   | zmedico  |                                                             |

svn path=/main/branches/prefix/; revision=14142

16 files changed:
bin/repoman
man/portage.5
pym/_emerge/Binpkg.py
pym/_emerge/BinpkgVerifier.py
pym/_emerge/EbuildBuild.py
pym/_emerge/EbuildFetcher.py
pym/_emerge/EbuildMetadataPhase.py
pym/_emerge/EbuildPhase.py
pym/_emerge/PackageUninstall.py
pym/_emerge/Scheduler.py
pym/_emerge/changelog.py
pym/_emerge/emergelog.py
pym/portage/__init__.py
pym/portage/cache/flat_hash.py
pym/portage/cache/flat_list.py
pym/portage/cache/metadata.py

index 7abcc80f10eec40dc05bb950ffa2d8272701d628..7f1ba3b8fc5a8facef355cfcb5b1790a5e908729 100755 (executable)
@@ -44,6 +44,8 @@ import portage
 
 portage._disable_legacy_globals()
 from portage import os
+from portage import _encodings
+from portage import _unicode_encode
 
 from repoman.checks import run_checks
 from repoman import utilities
@@ -600,8 +602,9 @@ for path in portdb.porttrees:
 
        desc_path = os.path.join(path, 'profiles', 'profiles.desc')
        try:
-               desc_file = codecs.open(desc_path, mode='r',
-                       encoding='utf_8', errors='replace')
+               desc_file = codecs.open(_unicode_encode(desc_path,
+                       encoding=_encodings['fs'], errors='strict'),
+                       mode='r', encoding=_encodings['repo.content'], errors='replace')
        except EnvironmentError:
                pass
        else:
@@ -971,8 +974,9 @@ for x in scanlist:
                        continue
                try:
                        line = 1
-                       for l in codecs.open(os.path.join(checkdir, y), mode='r',
-                               encoding='utf_8'):
+                       for l in codecs.open(_unicode_encode(os.path.join(checkdir, y),
+                               encoding=_encodings['fs'], errors='strict'),
+                               mode='r', encoding=_encodings['repo.content']):
                                line +=1
                except UnicodeDecodeError, ue:
                        stats["file.UTF8"] += 1
@@ -1553,7 +1557,9 @@ for x in scanlist:
                full_path = os.path.join(repodir, relative_path)
                try:
                        # All ebuilds should have utf_8 encoding.
-                       f = codecs.open(full_path, mode='r', encoding='utf_8')
+                       f = codecs.open(_unicode_encode(full_path,
+                               encoding=_encodings['fs'], errors='strict'),
+                               mode='r', encoding=_encodings['repo.content'])
                        try:
                                for check_name, e in run_checks(f, pkg):
                                        stats[check_name] += 1
index 37bf93148d7138775dde9d68621ca8d285411803..6cc46706a1f451d78c366e03e52cae6ba7eebe08 100644 (file)
@@ -143,6 +143,18 @@ settings, use \fB/etc/portage/profile/\fR (it supports all of the same file
 types that \fB/etc/make.profile/\fR does, except parent). Do NOT edit the
 settings in \fB/etc/make.profile/\fR because they WILL be lost with the next
 `emerge \-\-sync`.
+
+Any file in this directory, directories of other profiles or top-level
+"profiles" directory that begins with "package." or "use." can be more than
+just a flat file.  If it is a directory, then all the files in that directory
+will be sorted in ascending alphabetical order by file name and summed together
+as if it were a single file.
+
+.I Example:
+.nf
+/usr/portage/profiles/package.mask/removals
+/usr/portage/profiles/package.mask/testing
+.fi
 .RS
 .TP
 .BR deprecated
index 74227e456b22cb6c402c42d02f89790f116950f9..35c38599e92a5d1d70a05784f5a1614991fe4635 100644 (file)
@@ -12,6 +12,8 @@ from _emerge.EbuildBuildDir import EbuildBuildDir
 from portage.util import writemsg
 import portage
 from portage import os
+from portage import _encodings
+from portage import _unicode_encode
 import codecs
 import sys
 if os.environ.__contains__("PORTAGE_PYTHONPATH"):
@@ -41,8 +43,9 @@ class Binpkg(CompositeTask):
 
                log_path = self.settings.get("PORTAGE_LOG_FILE")
                if  log_path is not None:
-                       f = codecs.open(log_path, mode='a',
-                               encoding='utf_8', errors='replace')
+                       f = codecs.open(_unicode_encode(log_path,
+                               encoding=_encodings['fs'], errors='strict'),
+                               mode='a', encoding=_encodings['content'], errors='replace')
                        try:
                                f.write(msg)
                        finally:
@@ -235,15 +238,18 @@ class Binpkg(CompositeTask):
                        else:
                                continue
 
-                       f = codecs.open(os.path.join(infloc, k), mode='w',
-                               encoding='utf_8', errors='replace')
+                       f = codecs.open(_unicode_encode(os.path.join(infloc, k),
+                               encoding=_encodings['fs'], errors='strict'),
+                               mode='w', encoding=_encodings['content'], errors='replace')
                        try:
                                f.write(v + "\n")
                        finally:
                                f.close()
 
                # Store the md5sum in the vdb.
-               f = open(os.path.join(infloc, "BINPKGMD5"), "w")
+               f = codecs.open(_unicode_encode(os.path.join(infloc, 'BINPKGMD5'),
+                       encoding=_encodings['fs'], errors='strict'),
+                       mode='w', encoding=_encodings['content'], errors='strict')
                try:
                        f.write(str(portage.checksum.perform_md5(pkg_path)) + "\n")
                finally:
index 31599e2e2fd4ae305e4b185312d3999dbedf570f..36e1bb8b640cbb19077a01d8bac605bad18946d8 100644 (file)
@@ -7,6 +7,8 @@ from portage.util import writemsg
 import sys
 import portage
 from portage import os
+from portage import _encodings
+from portage import _unicode_encode
 import codecs
 
 class BinpkgVerifier(AsynchronousTask):
@@ -27,8 +29,9 @@ class BinpkgVerifier(AsynchronousTask):
                stderr_orig = sys.stderr
                log_file = None
                if self.background and self.logfile is not None:
-                       log_file = codecs.open(self.logfile, mode='a',
-                               encoding='utf_8', errors='replace')
+                       log_file = codecs.open(_unicode_encode(self.logfile,
+                       encoding=_encodings['fs'], errors='strict'),
+                               mode='a', encoding=_encodings['content'], errors='replace')
                try:
                        if log_file is not None:
                                sys.stdout = log_file
index 58bb7769d3d7d007aaa55cfce9c3d41721170d93..3bf9b1b3d1f8f7b2132c4b5552d7dcb678e7f9b9 100644 (file)
@@ -13,6 +13,9 @@ from _emerge.EbuildBuildDir import EbuildBuildDir
 from portage.util import writemsg
 import portage
 from portage import os
+from portage import _encodings
+from portage import _unicode_encode
+import codecs
 from portage.output import colorize
 from portage.const import EPREFIX
 class EbuildBuild(CompositeTask):
@@ -182,8 +185,9 @@ class EbuildBuild(CompositeTask):
 
                        log_path = self.settings.get("PORTAGE_LOG_FILE")
                        if log_path is not None:
-                               log_file = codecs.open(log_path, mode='a',
-                                       encoding='utf_8', errors='replace')
+                               log_file = codecs.open(_unicode_encode(log_path,
+                                       encoding=_encodings['fs'], errors='strict'),
+                                       mode='a', encoding=_encodings['content'], errors='replace')
                                try:
                                        log_file.write(msg)
                                finally:
index d7cf571b25ee36ac9de59996df804c445fb22f07..7b1893ad625939e5089e3ddc6b09320db4a11d0e 100644 (file)
@@ -9,6 +9,8 @@ import os
 import sys
 import portage
 from portage import os
+from portage import _encodings
+from portage import _unicode_encode
 import codecs
 from portage.elog.messages import eerror
 
@@ -90,8 +92,9 @@ class EbuildFetcher(SpawnProcess):
                                elog_out = None
                                if self.logfile is not None:
                                        if self.background:
-                                               elog_out = codecs.open(self.logfile, mode='a',
-                                                       encoding='utf_8', errors='replace')
+                                               elog_out = codecs.open(_unicode_encode(self.logfile,
+                                                       encoding=_encodings['fs'], errors='strict'),
+                                                       mode='a', encoding=_encodings['content'], errors='replace')
                                msg = "Fetch failed for '%s'" % (self.pkg.cpv,)
                                if self.logfile is not None:
                                        msg += ", Log file:"
index a84d722bebf5e5902f0d89fad840f73b5f40f549..60b91edb8713d74108850258609640e7106b8cdf 100644 (file)
@@ -8,6 +8,8 @@ import sys
 from portage.cache.mappings import slot_dict_class
 import portage
 from portage import os
+from portage import _encodings
+from portage import _unicode_encode
 from itertools import izip
 import fcntl
 import codecs
@@ -38,8 +40,11 @@ class EbuildMetadataPhase(SubProcess):
                                os.path.basename(ebuild_path))
                if eapi is None and \
                        'parse-eapi-ebuild-head' in settings.features:
-                       eapi = portage._parse_eapi_ebuild_head(codecs.open(ebuild_path,
-                               mode='r', encoding='utf_8', errors='replace'))
+                       eapi = portage._parse_eapi_ebuild_head(
+                               codecs.open(_unicode_encode(ebuild_path,
+                               encoding=_encodings['fs'], errors='strict'),
+                               mode='r', encoding=_encodings['repo.content'],
+                               errors='replace'))
 
                if eapi is not None:
                        if not portage.eapi_is_supported(eapi):
@@ -82,7 +87,7 @@ class EbuildMetadataPhase(SubProcess):
                fd_pipes[self._metadata_fd] = slave_fd
 
                self._raw_metadata = []
-               files.ebuild = os.fdopen(master_fd, 'r')
+               files.ebuild = os.fdopen(master_fd, 'rb')
                self._reg_id = self.scheduler.register(files.ebuild.fileno(),
                        self._registered_events, self._output_handler)
                self._registered = True
@@ -118,8 +123,8 @@ class EbuildMetadataPhase(SubProcess):
        def _set_returncode(self, wait_retval):
                SubProcess._set_returncode(self, wait_retval)
                if self.returncode == os.EX_OK:
-                       metadata_lines = u''.join(unicode(chunk,
-                               encoding='utf_8', errors='replace')
+                       metadata_lines = ''.join(unicode(chunk,
+                               encoding=_encodings['repo.content'], errors='replace')
                                for chunk in self._raw_metadata).splitlines()
                        if len(portage.auxdbkeys) != len(metadata_lines):
                                # Don't trust bash's returncode if the
index 9d2ec632d8e69511ab0bd4dc588cf00c5d6e07c3..51f018cb14e0067bac4f8c4e506b7681909447d7 100644 (file)
@@ -8,6 +8,8 @@ from _emerge.CompositeTask import CompositeTask
 from portage.util import writemsg
 import portage
 from portage import os
+from portage import _encodings
+from portage import _unicode_encode
 import codecs
 
 class EbuildPhase(CompositeTask):
@@ -32,8 +34,9 @@ class EbuildPhase(CompositeTask):
                        log_path = self.settings.get("PORTAGE_LOG_FILE")
                        log_file = None
                        if self.background and log_path is not None:
-                               log_file = codecs.open(log_path, mode='a',
-                                       encoding='utf_8', errors='replace')
+                               log_file = codecs.open(_unicode_encode(log_path,
+                                       encoding=_encodings['fs'], errors='strict'),
+                                       mode='a', encoding=_encodings['content'], errors='replace')
                                out = log_file
                        try:
                                portage._check_build_log(self.settings, out=out)
@@ -52,8 +55,9 @@ class EbuildPhase(CompositeTask):
                        log_path = self.settings.get("PORTAGE_LOG_FILE")
                        log_file = None
                        if self.background and log_path is not None:
-                               log_file = codecs.open(log_path, mode='a',
-                                       encoding='utf_8', errors='replace')
+                               log_file = codecs.open(_unicode_encode(log_path,
+                                       encoding=_encodings['fs'], errors='strict'),
+                                       mode='a', encoding=_encodings['content'], errors='replace')
                                out = log_file
                        portage._post_src_install_chost_fix(settings)
                        portage._post_src_install_uid_fix(settings, out=out)
index d86947c4aa7be09dae9b76d33c8b639e19638876..fdd59e1497f409bb7288830fb25347fd656606bd 100644 (file)
@@ -6,6 +6,8 @@ import codecs
 import logging
 import portage
 from portage import os
+from portage import _encodings
+from portage import _unicode_encode
 from _emerge.AsynchronousTask import AsynchronousTask
 from _emerge.unmerge import unmerge
 from _emerge.UninstallFailure import UninstallFailure
@@ -45,8 +47,9 @@ class PackageUninstall(AsynchronousTask):
                                portage.util.writemsg_level(msg,
                                        level=level, noiselevel=noiselevel)
 
-                       f = codecs.open(log_path, mode='a',
-                               encoding='utf_8', errors='replace')
+                       f = codecs.open(_unicode_encode(log_path,
+                               encoding=_encodings['fs'], errors='strict'),
+                               mode='a', encoding=_encodings['content'], errors='replace')
                        try:
                                f.write(msg)
                        finally:
index 7e0c35f8940b605a72eef85adbc34de34537ea23..cbb52448a6d4c3be430a1ba863044e94249ba66e 100644 (file)
@@ -11,10 +11,14 @@ import weakref
 from itertools import izip
 import portage
 from portage import os
+from portage import _encodings
+from portage import _unicode_decode
+from portage import _unicode_encode
 from portage.cache.mappings import slot_dict_class
 from portage.elog.messages import eerror
 from portage.output import colorize, create_color_func, darkgreen, red
 bad = create_color_func("BAD")
+from portage.sets import SETPREFIX
 from portage.sets.base import InternalPackageSet
 from portage.util import writemsg, writemsg_level
 
@@ -471,10 +475,13 @@ class Scheduler(PollScheduler):
 
        def _append_to_log_path(self, log_path, msg):
 
-               f = codecs.open(portage._unicode_encode(log_path), mode='a',
-                       encoding='utf_8', errors='replace')
+               f = codecs.open(_unicode_encode(log_path,
+                       encoding=_encodings['fs'], errors='strict'),
+                       mode='a', encoding=_encodings['content'],
+                       errors='backslashreplace')
                try:
-                       f.write(portage._unicode_decode(msg))
+                       f.write(_unicode_decode(msg,
+                               encoding=_encodings['content'], errors='replace'))
                finally:
                        f.close()
 
@@ -486,8 +493,10 @@ class Scheduler(PollScheduler):
                background = self._background
 
                if background and log_path is not None:
-                       log_file = codecs.open(portage._unicode_encode(log_path), mode='a',
-                               encoding='utf_8', errors='replace')
+                       log_file = codecs.open(_unicode_encode(log_path,
+                               encoding=_encodings['fs'], errors='strict'),
+                               mode='a', encoding=_encodings['content'],
+                               errors='backslashreplace')
                        out = log_file
 
                try:
@@ -862,8 +871,9 @@ class Scheduler(PollScheduler):
                        log_path = self._locate_failure_log(failed_pkg)
                        if log_path is not None:
                                try:
-                                       log_file = codecs.open(portage._unicode_encode(log_path),
-                                               mode='r', encoding='utf_8', errors='replace')
+                                       log_file = codecs.open(_unicode_encode(log_path,
+                                       encoding=_encodings['fs'], errors='strict'),
+                                       mode='r', encoding=_encodings['content'], errors='replace')
                                except IOError:
                                        pass
 
index 4adb8b25bafecb7c566651f89b472d0b96d19264..0fdf5880a9458075c20554fc4b47a763c7ece94c 100644 (file)
@@ -7,6 +7,8 @@ import re
 
 import portage
 from portage import os
+from portage import _encodings
+from portage import _unicode_encode
 
 def calc_changelog(ebuildpath,current,next):
        if ebuildpath == None or not os.path.exists(ebuildpath):
@@ -19,8 +21,10 @@ def calc_changelog(ebuildpath,current,next):
                next = next[:-3]
        changelogpath = os.path.join(os.path.split(ebuildpath)[0],'ChangeLog')
        try:
-               changelog = codecs.open(portage._unicode_encode(changelogpath),
-                       mode='r', encoding='utf_8', errors='replace').read()
+               changelog = codecs.open(_unicode_encode(changelogpath,
+                       encoding=_encodings['fs'], errors='strict'),
+                       mode='r', encoding=_encodings['repo.content'], errors='replace'
+               ).read()
        except SystemExit, e:
                raise # Needed else can't exit
        except:
index 34601f77275b86a260d1146f5580ef196cb0ab4c..bc702228002e8f7e10b7eb5ed64c41afa05d1da5 100644 (file)
@@ -7,6 +7,8 @@ import sys
 import time
 import portage
 from portage import os
+from portage import _encodings
+from portage import _unicode_encode
 from portage.data import secpass
 from portage.output import xtermTitle
 from portage.const import EPREFIX
@@ -26,8 +28,10 @@ def emergelog(xterm_titles, mystr, short_msg=None):
                xtermTitle(short_msg)
        try:
                file_path = os.path.join(_emerge_log_dir, 'emerge.log')
-               mylogfile = codecs.open(portage._unicode_encode(file_path), mode='a',
-                       encoding='utf_8', errors='replace')
+               mylogfile = codecs.open(_unicode_encode(file_path,
+                       encoding=_encodings['fs'], errors='strict'),
+                       mode='a', encoding=_encodings['content'],
+                       errors='backslashreplace')
                portage.util.apply_secpass_permissions(file_path,
                        uid=portage.portage_uid, gid=portage.portage_gid,
                        mode=0660)
index 07f4901e18500531d0ed4c716818961a0f6f734a..87cc5a194995f6ab2f9ef5f08de56c93165c0663 100644 (file)
@@ -125,8 +125,13 @@ _encodings = {
        'content'                : 'utf_8',
        'fs'                     : 'utf_8',
        'merge'                  : sys.getfilesystemencoding(),
+       'repo.content'           : 'utf_8',
 }
 
+# This can happen if python is built with USE=build (stage 1).
+if _encodings['merge'] is None:
+       _encodings['merge'] = 'ascii'
+
 # Deprecated attributes. Instead use _encodings directly.
 _content_encoding = _encodings['content']
 _fs_encoding = _encodings['fs']
@@ -352,7 +357,7 @@ def _ensure_default_encoding():
 
        default_fallback = 'utf_8'
        default_encoding = sys.getdefaultencoding().lower().replace('-', '_')
-       filesystem_encoding = sys.getfilesystemencoding().lower().replace('-', '_')
+       filesystem_encoding = _encodings['merge'].lower().replace('-', '_')
        required_encodings = set(['ascii', 'utf_8'])
        required_encodings.add(default_encoding)
        required_encodings.add(filesystem_encoding)
index 2467f68002f3673b901b60310c3c1937a72f87c9..259be4108b4dfbdad30eb3b9f4ca6c4c5ad51b9b 100644 (file)
@@ -9,6 +9,7 @@ from portage.cache import cache_errors
 import errno
 import stat
 from portage import os
+from portage import _encodings
 from portage import _unicode_encode
 
 class database(fs_template.FsBased):
@@ -29,8 +30,10 @@ class database(fs_template.FsBased):
        def _getitem(self, cpv):
                fp = os.path.join(self.location, cpv)
                try:
-                       myf = codecs.open(_unicode_encode(fp),
-                               mode='r', encoding='utf_8', errors='replace')
+                       myf = codecs.open(_unicode_encode(fp,
+                               encoding=_encodings['fs'], errors='strict'),
+                               mode='r', encoding=_encodings['repo.content'],
+                               errors='replace')
                        try:
                                d = self._parse_data(myf.readlines(), cpv)
                                if '_mtime_' not in d:
@@ -58,14 +61,18 @@ class database(fs_template.FsBased):
                s = cpv.rfind("/")
                fp = os.path.join(self.location,cpv[:s],".update.%i.%s" % (os.getpid(), cpv[s+1:]))
                try:
-                       myf = codecs.open(_unicode_encode(fp), mode='w',
-                               encoding='utf_8', errors='replace')
+                       myf = codecs.open(_unicode_encode(fp,
+                               encoding=_encodings['fs'], errors='strict'),
+                               mode='w', encoding=_encodings['repo.content'],
+                               errors='backslashreplace')
                except (IOError, OSError), e:
                        if errno.ENOENT == e.errno:
                                try:
                                        self._ensure_dirs(cpv)
-                                       myf = codecs.open(_unicode_encode(fp), mode='w',
-                                               encoding='utf_8', errors='replace')
+                                       myf = codecs.open(_unicode_encode(fp,
+                                               encoding=_encodings['fs'], errors='strict'),
+                                               mode='w', encoding=_encodings['repo.content'],
+                                               errors='backslashreplace')
                                except (OSError, IOError),e:
                                        raise cache_errors.CacheCorruption(cpv, e)
                        else:
index 9906dd22dbc5405fb2b2242fc747288d8e8298f9..1d4dbd28f759983d5d84e7abc8112d76a683ab08 100644 (file)
@@ -1,6 +1,7 @@
 from portage.cache import fs_template
 from portage.cache import cache_errors
 from portage import os
+from portage import _encodings
 from portage import _unicode_encode
 import codecs
 import errno
@@ -31,8 +32,10 @@ class database(fs_template.FsBased):
        def _getitem(self, cpv):
                d = {}
                try:
-                       myf = codecs.open(_unicode_encode(os.path.join(self._base, cpv)),
-                               mode='r', encoding='utf_8', errors='replace')
+                       myf = codecs.open(_unicode_encode(os.path.join(self._base, cpv),
+                               encoding=_encodings['fs'], errors='strict'),
+                               mode='r', encoding=_encodings['repo.content'],
+                               errors='replace')
                        for k,v in zip(self.auxdbkey_order, myf):
                                d[k] = v.rstrip("\n")
                except (OSError, IOError),e:
@@ -53,14 +56,18 @@ class database(fs_template.FsBased):
                s = cpv.rfind("/")
                fp=os.path.join(self._base,cpv[:s],".update.%i.%s" % (os.getpid(), cpv[s+1:]))
                try:
-                       myf = codecs.open(_unicode_encode(fp), mode='w',
-                               encoding='utf_8', errors='replace')
+                       myf = codecs.open(_unicode_encode(fp,
+                               encoding=_encodings['fs'], errors='strict'),
+                               mode='w', encoding=_encodings['repo.content'],
+                               errors='backslashreplace')
                except (OSError, IOError), e:
                        if errno.ENOENT == e.errno:
                                try:
                                        self._ensure_dirs(cpv)
-                                       myf = codecs.open(_unicode_encode(fp), mode='w',
-                                               encoding='utf_8', errors='replace')
+                                       myf = codecs.open(_unicode_encode(fp,
+                                               encoding=_encodings['fs'], errors='strict'),
+                                               mode='w', encoding=_encodings['repo.content'],
+                                               errors='backslashreplace')
                                except (OSError, IOError),e:
                                        raise cache_errors.CacheCorruption(cpv, e)
                        else:
index e91ed68d22ed82db393236307b37cc58676c38cb..ff1227bdb1017d9a39df59afa667ff8396c71b61 100644 (file)
@@ -6,6 +6,7 @@
 import errno
 import re
 from portage import os
+from portage import _encodings
 from portage import _unicode_encode
 from portage.cache import cache_errors, flat_hash
 import portage.eclass_cache
@@ -80,16 +81,18 @@ class database(flat_hash.database):
 
                new_content = []
                for k in self.auxdbkey_order:
-                       new_content.append(values.get(k, u''))
-                       new_content.append(u'\n')
+                       new_content.append(values.get(k, ''))
+                       new_content.append('\n')
                for i in xrange(magic_line_count - len(self.auxdbkey_order)):
-                       new_content.append(u'\n')
-               new_content = u''.join(new_content)
-               new_content = _unicode_encode(new_content)
+                       new_content.append('\n')
+               new_content = ''.join(new_content)
+               new_content = _unicode_encode(new_content,
+                       _encodings['repo.content'], errors='backslashreplace')
 
                new_fp = os.path.join(self.location, cpv)
                try:
-                       f = open(_unicode_encode(new_fp), 'rb')
+                       f = open(_unicode_encode(new_fp,
+                               encoding=_encodings['fs'], errors='strict'), 'rb')
                except EnvironmentError:
                        pass
                else:
@@ -117,12 +120,14 @@ class database(flat_hash.database):
                fp = os.path.join(self.location,cpv[:s],
                        ".update.%i.%s" % (os.getpid(), cpv[s+1:]))
                try:
-                       myf = open(_unicode_encode(fp), 'wb')
+                       myf = open(_unicode_encode(fp,
+                               encoding=_encodings['fs'], errors='strict'), 'wb')
                except EnvironmentError, e:
                        if errno.ENOENT == e.errno:
                                try:
                                        self._ensure_dirs(cpv)
-                                       myf = open(_unicode_encode(fp), 'wb')
+                                       myf = open(_unicode_encode(fp,
+                                               encoding=_encodings['fs'], errors='strict'), 'wb')
                                except EnvironmentError, e:
                                        raise cache_errors.CacheCorruption(cpv, e)
                        else: