changeset 235:b8b0b0765237

* Close snapshot archive files after unpacking, so that they can be deleted after the build on win32. * Fix logging of failures in `shtools`.
author cmlenz
date Fri, 30 Sep 2005 17:00:29 +0000
parents 7297fdb90255
children 34202d89f57d
files bitten/build/shtools.py bitten/util/archive.py
diffstat 2 files changed, 30 insertions(+), 18 deletions(-) [+]
line wrap: on
line diff
--- a/bitten/build/shtools.py
+++ b/bitten/build/shtools.py
@@ -56,7 +56,8 @@
             output_file.close()
 
     if cmdline.returncode != 0:
-        ctxt.error('Executing %s failed (%s)' % (file_, cmdline.returncode))
+        ctxt.error('Executing %s failed (%s)' % (executable,
+                   cmdline.returncode))
 
 def pipe(ctxt, executable=None, file_=None, input_=None, output=None,
          args=None):
@@ -107,5 +108,5 @@
             output_file.close()
 
     if cmdline.returncode != 0:
-        ctxt.error('Piping through %s failed (%s)' % (file_,
+        ctxt.error('Piping through %s failed (%s)' % (executable,
                    cmdline.returncode))
--- a/bitten/util/archive.py
+++ b/bitten/util/archive.py
@@ -98,9 +98,10 @@
                 archive.writestr(info, node.get_content().read())
             except zipfile.error, e:
                 raise Error, e
-    _add_entry(root)
-
-    archive.close()
+    try:
+        _add_entry(root)
+    finally:
+        archive.close()
 
     return filename
 
@@ -119,24 +120,34 @@
     if format in ('bzip2', 'gzip'):
         try:
             tar_file = tarfile.open(filename)
-            for tarinfo in tar_file:
-                names.append(tarinfo.name)
-                tar_file.extract(tarinfo, dest_path)
+            try:
+                for tarinfo in tar_file:
+                    names.append(tarinfo.name)
+                    tar_file.extract(tarinfo, dest_path)
+            finally:
+                tar_file.close()
         except tarfile.TarError, e:
             raise Error, e
     elif format == 'zip':
         try:
             zip_file = zipfile.ZipFile(filename, 'r')
-            for name in zip_file.namelist():
-                names.append(name)
-                path = os.path.join(dest_path, name)
-                if name.endswith('/'):
-                    os.makedirs(path)
-                else:
-                    dirname = os.path.dirname(path)
-                    if not os.path.isdir(dirname):
-                        os.makedirs(dirname)
-                    file(path, 'wb').write(zip_file.read(name))
+            try:
+                for name in zip_file.namelist():
+                    names.append(name)
+                    path = os.path.join(dest_path, name)
+                    if name.endswith('/'):
+                        os.makedirs(path)
+                    else:
+                        dirname = os.path.dirname(path)
+                        if not os.path.isdir(dirname):
+                            os.makedirs(dirname)
+                        dest_file = file(path, 'wb')
+                        try:
+                            dest_file.write(zip_file.read(name))
+                        finally:
+                            dest_file.close()
+            finally:
+                zip_file.close()
         except (IOError, zipfile.error), e:
             raise Error, e
     return os.path.commonprefix(names)
Copyright (C) 2012-2017 Edgewall Software