From: Zac Medico Date: Tue, 8 Dec 2009 21:38:56 +0000 (-0000) Subject: When reading the remote Packages file for --getbinpkg, use codecs.iterdecode X-Git-Tag: v2.2_rc57~12 X-Git-Url: http://git.tremily.us/?a=commitdiff_plain;h=e9923790b9290ae44ba3a8dd7670c8d878d3d88d;p=portage.git When reading the remote Packages file for --getbinpkg, use codecs.iterdecode to decode the stream. Also, don't use finally to close the atomic_ofstream when writing the file since we want it to abort if an exception is raised. svn path=/main/trunk/; revision=14969 --- diff --git a/pym/portage/dbapi/bintree.py b/pym/portage/dbapi/bintree.py index 4df2020b5..cd5d0b6eb 100644 --- a/pym/portage/dbapi/bintree.py +++ b/pym/portage/dbapi/bintree.py @@ -711,8 +711,10 @@ class binarytree(object): # protocols and requires the base url to have a trailing # slash, so join manually... f = urllib_request_urlopen(base_url.rstrip("/") + "/Packages") + f_dec = codecs.iterdecode(f, + _encodings['repo.content'], errors='replace') try: - rmt_idx.readHeader(f) + rmt_idx.readHeader(f_dec) remote_timestamp = rmt_idx.header.get("TIMESTAMP", None) if not remote_timestamp: # no timestamp in the header, something's wrong @@ -724,7 +726,7 @@ class binarytree(object): rmt_idx.header.get("VERSION"), noiselevel=-1) pkgindex = None elif local_timestamp != remote_timestamp: - rmt_idx.readBody(f) + rmt_idx.readBody(f_dec) pkgindex = rmt_idx finally: f.close() @@ -739,10 +741,8 @@ class binarytree(object): from portage.util import atomic_ofstream, ensure_dirs ensure_dirs(os.path.dirname(pkgindex_file)) f = atomic_ofstream(pkgindex_file) - try: - pkgindex.write(f) - finally: - f.close() + pkgindex.write(f) + f.close() if pkgindex: self._remotepkgs = {} for d in pkgindex.packages: