[Python-checkins] CVS: distutils/distutils dir_util.py,1.2,1.3
Greg Ward
python-dev@python.org
2000年6月16日 18:58:17 -0700
Update of /cvsroot/python/distutils/distutils
In directory slayer.i.sourceforge.net:/tmp/cvs-serv21031
Modified Files:
dir_util.py
Log Message:
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.
Index: dir_util.py
===================================================================
RCS file: /cvsroot/python/distutils/distutils/dir_util.py,v
retrieving revision 1.2
retrieving revision 1.3
diff -C2 -r1.2 -r1.3
*** dir_util.py 2000年05月27日 01:35:27 1.2
--- dir_util.py 2000年06月17日 01:58:14 1.3
***************
*** 181,202 ****
# copy_tree ()
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
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)" % \
(directory, exc.strerror, exc.filename)
! else:
! print "error removing %s: %s" % (directory, exc.strerror)
--- 181,217 ----
# 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)."""
+ global PATH_CREATED
if verbose:
print "removing '%s' (and everything under it)" % directory
if dry_run:
return
! 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)