diff options
author | Greg Ward <gward@python.net> | 2000-06-17 01:58:14 (GMT) |
---|---|---|
committer | Greg Ward <gward@python.net> | 2000-06-17 01:58:14 (GMT) |
commit | 039accfb2caafdaa6d792f09b217ff0f5935df42 (patch) | |
tree | 292181c3cbfe1833b3056abb6d5b4463dd60ddb0 /Lib/distutils/dir_util.py | |
parent | c566232c4dbfbeda855e8721ced5fef55ab60e09 (diff) | |
download | cpython-039accfb2caafdaa6d792f09b217ff0f5935df42.zip cpython-039accfb2caafdaa6d792f09b217ff0f5935df42.tar.gz cpython-039accfb2caafdaa6d792f09b217ff0f5935df42.tar.bz2 |
Bastian Kleineidam: added 'remove_tree()' function. Needed so that
'remove_tree()' can cooperate with 'mkpath()' in the maintenance of
the PATH_CREATED cache: specifically, if a directory is created
with 'mkpath()', later removed with 'remove_tree()', and 'mkpath()'
is again requested to create it, then it would erroneously think
the directory already existed, because it was in the PATH_CREATED
cache. The patch (slightly tweaked by me) fixes that.
Diffstat (limited to 'Lib/distutils/dir_util.py')
-rw-r--r-- | Lib/distutils/dir_util.py | 35 |
1 files changed, 25 insertions, 10 deletions
diff --git a/Lib/distutils/dir_util.py b/Lib/distutils/dir_util.py index 194183a..e5b24fe 100644 --- a/Lib/distutils/dir_util.py +++ b/Lib/distutils/dir_util.py @@ -180,23 +180,38 @@ def copy_tree (src, dst, # copy_tree () +# Helper for remove_tree() +def _build_cmdtuple(path, cmdtuples): + for f in os.listdir(path): + real_f = os.path.join(path,f) + if os.path.isdir(real_f) and not os.path.islink(real_f): + _build_cmdtuple(real_f, cmdtuples) + else: + cmdtuples.append((os.remove, real_f)) + cmdtuples.append((os.rmdir, path)) + def remove_tree (directory, verbose=0, dry_run=0): """Recursively remove an entire directory tree. Any errors are ignored (apart from being reported to stdout if 'verbose' is true).""" - from shutil import rmtree - + global PATH_CREATED if verbose: print "removing '%s' (and everything under it)" % directory if dry_run: return - try: - rmtree(directory,1) - except (IOError, OSError), exc: - if verbose: - if exc.filename: - print "error removing %s: %s (%s)" % \ + cmdtuples = [] + _build_cmdtuple(directory, cmdtuples) + for cmd in cmdtuples: + try: + apply(cmd[0], (cmd[1],)) + # remove dir from cache if it's already there + if PATH_CREATED.has_key(cmd[1]): + del PATH_CREATED[cmd[1]] + except (IOError, OSError), exc: + if verbose: + if exc.filename: + print "error removing %s: %s (%s)" % \ (directory, exc.strerror, exc.filename) - else: - print "error removing %s: %s" % (directory, exc.strerror) + else: + print "error removing %s: %s" % (directory, exc.strerror) |