aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBryn M. Reeves <bmr@redhat.com>2013-06-10 16:41:19 +0100
committerBryn M. Reeves <bmr@redhat.com>2013-06-10 16:41:19 +0100
commitd0c3df0e2c2a0c9ccc81827f01b4cc95e68dffb0 (patch)
tree9ae520562057ea11ee051738929671812177f040
parent3809560f70c0183284d1d35b6d61597097f9f001 (diff)
downloadsos-d0c3df0e2c2a0c9ccc81827f01b4cc95e68dffb0.tar.gz
Add Archive.cleanup()
Add a cleanup() method to the Archive classes and ensure that it is called during normal and abnormal termination (unless the pdb debugger has been invoked during --debug mode). Signed-off-by: Bryn M. Reeves <bmr@redhat.com>
-rw-r--r--sos/archive.py10
-rw-r--r--sos/sosreport.py4
2 files changed, 11 insertions, 3 deletions
diff --git a/sos/archive.py b/sos/archive.py
index 376d7069..8e391c3f 100644
--- a/sos/archive.py
+++ b/sos/archive.py
@@ -59,6 +59,10 @@ class Archive(object):
def add_dir(self, path):
raise NotImplementedError
+ def cleanup(self):
+ """Clean up any temporary resources used by an Archive class."""
+ pass
+
def finalize(self, method):
"""Finalize an archive object via method. This may involve creating
An archive that is subsequently compressed or simply closing an
@@ -141,10 +145,13 @@ class FileCacheArchive(Archive):
path = self.dest_path(path)
return open(path, "r")
+ def cleanup(self):
+ shutil.rmtree(self._archive_root)
+
def finalize(self, method):
self.log.debug("finalizing archive %s" % self._archive_root)
- #print "finalizing archive %s" % self._archive_root
self._build_archive()
+ self.cleanup()
self.log.debug("built archive at %s (size=%d)" % (self._archive_path,
os.stat(self._archive_path).st_size))
return self._compress()
@@ -205,7 +212,6 @@ class TarFileArchive(FileCacheArchive):
tar.add(os.path.split(self._name)[1], filter=self.copy_permissions_filter)
tar.close()
os.chdir(old_pwd)
- shutil.rmtree(self._archive_root)
def _compress(self):
methods = ['xz', 'bzip2', 'gzip']
diff --git a/sos/sosreport.py b/sos/sosreport.py
index b6b4cbf7..0f162cf4 100644
--- a/sos/sosreport.py
+++ b/sos/sosreport.py
@@ -1155,7 +1155,9 @@ class SoSReport(object):
self.version()
return self.final_work()
- except SystemExit:
+ except (SystemExit, KeyboardInterrupt):
+ self.archive.cleanup()
+ self.tempfile_util.clean()
return False
def main(args):