Use 'with file' more.
authorZac Medico <zmedico@gentoo.org>
Sat, 29 Dec 2012 06:30:09 +0000 (22:30 -0800)
committerZac Medico <zmedico@gentoo.org>
Sat, 29 Dec 2012 06:30:09 +0000 (22:30 -0800)
This helps to minimize ResourceWarning triggered by ^C with python3.

pym/portage/cache/flat_hash.py
pym/portage/checksum.py
pym/portage/manifest.py

index b71e118d57c20bfb9ae3ac78b40256e9eb1ae8c3..b1c94313b409efa44c59a2f14a4af280e24a0920 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright: 2005-2011 Gentoo Foundation
+# Copyright: 2005-2012 Gentoo Foundation
 # Distributed under the terms of the GNU General Public License v2
 # Author(s): Brian Harring (ferringb@gentoo.org)
 
@@ -42,11 +42,10 @@ class database(fs_template.FsBased):
                # Don't use os.path.join, for better performance.
                fp = self.location + _os.sep + cpv
                try:
-                       myf = io.open(_unicode_encode(fp,
+                       with io.open(_unicode_encode(fp,
                                encoding=_encodings['fs'], errors='strict'),
                                mode='r', encoding=_encodings['repo.content'],
-                               errors='replace')
-                       try:
+                               errors='replace') as myf:
                                lines = myf.read().split("\n")
                                if not lines[-1]:
                                        lines.pop()
@@ -56,8 +55,6 @@ class database(fs_template.FsBased):
                                        # that uses mtime mangling.
                                        d['_mtime_'] = _os.fstat(myf.fileno())[stat.ST_MTIME]
                                return d
-                       finally:
-                               myf.close()
                except (IOError, OSError) as e:
                        if e.errno != errno.ENOENT:
                                raise cache_errors.CacheCorruption(cpv, e)
index 30a9234e169df099115e844d2ce14f63dedb4ed9..cd663e76726291f1c540b2b1a254aefe822aecbf 100644 (file)
@@ -50,16 +50,15 @@ class _generate_hash_function(object):
                @type filename: String
                @return: The hash and size of the data
                """
-               f = _open_file(filename)
-               blocksize = HASHING_BLOCKSIZE
-               data = f.read(blocksize)
-               size = 0
-               checksum = self._hashobject()
-               while data:
-                       checksum.update(data)
-                       size = size + len(data)
+               with _open_file(filename) as f:
+                       blocksize = HASHING_BLOCKSIZE
+                       size = 0
+                       checksum = self._hashobject()
                        data = f.read(blocksize)
-               f.close()
+                       while data:
+                               checksum.update(data)
+                               size = size + len(data)
+                               data = f.read(blocksize)
 
                return (checksum.hexdigest(), size)
 
index 9a85c8f6d8aa227c13c1690cf9c3cc6804dd4692..a75c63a691c79acb8e2a9f10633ba1b263bdf2be 100644 (file)
@@ -184,13 +184,12 @@ class Manifest(object):
                """Parse a manifest.  If myhashdict is given then data will be added too it.
                   Otherwise, a new dict will be created and returned."""
                try:
-                       fd = io.open(_unicode_encode(file_path,
+                       with io.open(_unicode_encode(file_path,
                                encoding=_encodings['fs'], errors='strict'), mode='r',
-                               encoding=_encodings['repo.content'], errors='replace')
-                       if myhashdict is None:
-                               myhashdict = {}
-                       self._parseDigests(fd, myhashdict=myhashdict, **kwargs)
-                       fd.close()
+                               encoding=_encodings['repo.content'], errors='replace') as f:
+                               if myhashdict is None:
+                                       myhashdict = {}
+                               self._parseDigests(f, myhashdict=myhashdict, **kwargs)
                        return myhashdict
                except (OSError, IOError) as e:
                        if e.errno == errno.ENOENT: