[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)

AltStyle によって変換されたページ (->オリジナル) /