summaryrefslogtreecommitdiffstats
path: root/Lib/distutils/dir_util.py
diff options
context:
space:
mode:
authorGreg Ward <gward@python.net>2000-06-17 01:58:14 (GMT)
committerGreg Ward <gward@python.net>2000-06-17 01:58:14 (GMT)
commit039accfb2caafdaa6d792f09b217ff0f5935df42 (patch)
tree292181c3cbfe1833b3056abb6d5b4463dd60ddb0 /Lib/distutils/dir_util.py
parentc566232c4dbfbeda855e8721ced5fef55ab60e09 (diff)
downloadcpython-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.py35
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)