When reading the remote Packages file for --getbinpkg, use codecs.iterdecode
authorZac Medico <zmedico@gentoo.org>
Tue, 8 Dec 2009 21:38:56 +0000 (21:38 -0000)
committerZac Medico <zmedico@gentoo.org>
Tue, 8 Dec 2009 21:38:56 +0000 (21:38 -0000)
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

pym/portage/dbapi/bintree.py

index 4df2020b5d3a5cdb33f06304199f83fb4e896fa0..cd5d0b6eb73507d37ccce2d1a286a4a95a5a5234 100644 (file)
@@ -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: