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.
This commit is contained in:
Greg Ward 2000-06-17 01:58:14 +00:00
parent c566232c4d
commit 039accfb2c

View file

@ -180,23 +180,38 @@ def copy_tree (src, dst,
# copy_tree () # 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): def remove_tree (directory, verbose=0, dry_run=0):
"""Recursively remove an entire directory tree. Any errors are ignored """Recursively remove an entire directory tree. Any errors are ignored
(apart from being reported to stdout if 'verbose' is true).""" (apart from being reported to stdout if 'verbose' is true)."""
from shutil import rmtree global PATH_CREATED
if verbose: if verbose:
print "removing '%s' (and everything under it)" % directory print "removing '%s' (and everything under it)" % directory
if dry_run: if dry_run:
return return
try: cmdtuples = []
rmtree(directory,1) _build_cmdtuple(directory, cmdtuples)
except (IOError, OSError), exc: for cmd in cmdtuples:
if verbose: try:
if exc.filename: apply(cmd[0], (cmd[1],))
print "error removing %s: %s (%s)" % \ # 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) (directory, exc.strerror, exc.filename)
else: else:
print "error removing %s: %s" % (directory, exc.strerror) print "error removing %s: %s" % (directory, exc.strerror)