From 2700dd6bfe8df1162eb4f75d5d48b91d3375e8f6 Mon Sep 17 00:00:00 2001 From: Lukas Prokop Date: Wed, 19 Feb 2014 23:16:27 +0100 Subject: [PATCH] Implement folder cleanup support for TMPFILES. Closes #5. --- grml2usb | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/grml2usb b/grml2usb index 92c2cbf..da6bfe0 100755 --- a/grml2usb +++ b/grml2usb @@ -28,6 +28,7 @@ import sys import tempfile import time import uuid +import shutil # The line following this line is patched by debian/rules and tarball.sh. PROG_VERSION = '***UNRELEASED***' @@ -161,6 +162,9 @@ def string2array(s): def cleanup(): """Cleanup function to make sure there aren't any mounted devices left behind. """ + def del_failed(fn, filepath, exc): + msg = "Deletion of %s failed in temporary folder %s" + logging.warn(msg % (filepath, path)) logging.info("Cleaning up before exiting...") proc = subprocess.Popen(["sync"]) @@ -171,12 +175,22 @@ def cleanup(): unmount(device, "") except RuntimeError: logging.debug('RuntimeError while umount %s, ignoring' % device) - for tmpfile in TMPFILES: + + for tmppath in TMPFILES: try: - os.unlink(tmpfile) + if os.path.isdir(tmppath) and not os.path.islink(tmppath): + # symbolic links to directories are ignored + # without the check it will throw an OSError + shutil.rmtree(tmppath, onerror=del_failed) + logging.debug('temporary directory %s deleted' % tmppath) + unregister_tmpfile(tmppath) + elif os.path.isfile: + os.unlink(tmppath) + logging.debug('temporary file %s deleted' % tmppath) + unregister_tmpfile(tmppath) except RuntimeError: msg = 'RuntimeError while removing temporary %s, ignoring' - logging.debug(msg % tmpfile) + logging.debug(msg % tmppath) def register_tmpfile(path): -- 2.1.4