X-Git-Url: http://git.grml.org/?p=grml2usb.git;a=blobdiff_plain;f=grml2usb;h=cdbb3e83fffcca1473626a9a8599afa09468c39a;hp=504b14194fa0da41cc36f69abf71dd2a9e8c698e;hb=d33e012e1a3388b32fe53e7faf1ac45a663917af;hpb=2b2bf9e4163f86e289e3dfd3c928e79867e0ca22 diff --git a/grml2usb b/grml2usb index 504b141..cdbb3e8 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,19 +162,36 @@ 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"]) proc.wait() - try: - for device in MOUNTED: + for device in MOUNTED.copy(): + try: unmount(device, "") - for tmpfile in TMPFILES: - os.unlink(tmpfile) - # ignore: RuntimeError: Set changed size during iteration - except RuntimeError: - logging.debug('caught exception RuntimeError, ignoring') + logging.debug('Unmounted %s' % device) + except StandardError: + logging.debug('RuntimeError while umount %s, ignoring' % device) + + for tmppath in TMPFILES.copy(): + try: + 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 StandardError: + msg = 'RuntimeError while removing temporary %s, ignoring' + logging.debug(msg % tmppath) def register_tmpfile(path):