Commit 96983b36 authored by Tarek Ziadé's avatar Tarek Ziadé

Merged revisions 69324 via svnmerge from

svn+ssh://pythondev@svn.python.org/python/trunk

........
  r69324 | tarek.ziade | 2009-02-06 01:31:59 +0100 (Fri, 06 Feb 2009) | 1 line

  Fixed #1276768: verbose option was not used in the code.
........
parent 1ccb3b08
...@@ -15,7 +15,7 @@ _path_created = {} ...@@ -15,7 +15,7 @@ _path_created = {}
# I don't use os.makedirs because a) it's new to Python 1.5.2, and # I don't use os.makedirs because a) it's new to Python 1.5.2, and
# b) it blows up if the directory already exists (I want to silently # b) it blows up if the directory already exists (I want to silently
# succeed in that case). # succeed in that case).
def mkpath (name, mode=0o777, verbose=0, dry_run=0): def mkpath (name, mode=0o777, verbose=1, dry_run=0):
"""Create a directory and any missing ancestor directories. If the """Create a directory and any missing ancestor directories. If the
directory already exists (or if 'name' is the empty string, which directory already exists (or if 'name' is the empty string, which
means the current directory, which of course exists), then do means the current directory, which of course exists), then do
...@@ -48,13 +48,9 @@ def mkpath (name, mode=0o777, verbose=0, dry_run=0): ...@@ -48,13 +48,9 @@ def mkpath (name, mode=0o777, verbose=0, dry_run=0):
tails = [tail] # stack of lone dirs to create tails = [tail] # stack of lone dirs to create
while head and tail and not os.path.isdir(head): while head and tail and not os.path.isdir(head):
#print "splitting '%s': " % head,
(head, tail) = os.path.split(head) (head, tail) = os.path.split(head)
#print "to ('%s','%s')" % (head, tail)
tails.insert(0, tail) # push next higher dir onto stack tails.insert(0, tail) # push next higher dir onto stack
#print "stack of tails:", tails
# now 'head' contains the deepest directory that already exists # now 'head' contains the deepest directory that already exists
# (that is, the child of 'head' in 'name' is the highest directory # (that is, the child of 'head' in 'name' is the highest directory
# that does *not* exist) # that does *not* exist)
...@@ -66,7 +62,8 @@ def mkpath (name, mode=0o777, verbose=0, dry_run=0): ...@@ -66,7 +62,8 @@ def mkpath (name, mode=0o777, verbose=0, dry_run=0):
if _path_created.get(abs_head): if _path_created.get(abs_head):
continue continue
log.info("creating %s", head) if verbose == 1:
log.info("creating %s", head)
if not dry_run: if not dry_run:
try: try:
...@@ -82,7 +79,7 @@ def mkpath (name, mode=0o777, verbose=0, dry_run=0): ...@@ -82,7 +79,7 @@ def mkpath (name, mode=0o777, verbose=0, dry_run=0):
# mkpath () # mkpath ()
def create_tree (base_dir, files, mode=0o777, verbose=0, dry_run=0): def create_tree (base_dir, files, mode=0o777, verbose=1, dry_run=0):
"""Create all the empty directories under 'base_dir' needed to """Create all the empty directories under 'base_dir' needed to
put 'files' there. 'base_dir' is just the a name of a directory put 'files' there. 'base_dir' is just the a name of a directory
...@@ -99,7 +96,7 @@ def create_tree (base_dir, files, mode=0o777, verbose=0, dry_run=0): ...@@ -99,7 +96,7 @@ def create_tree (base_dir, files, mode=0o777, verbose=0, dry_run=0):
# Now create them # Now create them
for dir in sorted(need_dir): for dir in sorted(need_dir):
mkpath(dir, mode, dry_run=dry_run) mkpath(dir, mode, verbose=verbose, dry_run=dry_run)
# create_tree () # create_tree ()
...@@ -109,7 +106,7 @@ def copy_tree (src, dst, ...@@ -109,7 +106,7 @@ def copy_tree (src, dst,
preserve_times=1, preserve_times=1,
preserve_symlinks=0, preserve_symlinks=0,
update=0, update=0,
verbose=0, verbose=1,
dry_run=0): dry_run=0):
"""Copy an entire directory tree 'src' to a new location 'dst'. Both """Copy an entire directory tree 'src' to a new location 'dst'. Both
...@@ -146,7 +143,7 @@ def copy_tree (src, dst, ...@@ -146,7 +143,7 @@ def copy_tree (src, dst,
"error listing files in '%s': %s" % (src, errstr)) "error listing files in '%s': %s" % (src, errstr))
if not dry_run: if not dry_run:
mkpath(dst) mkpath(dst, verbose=verbose)
outputs = [] outputs = []
...@@ -156,7 +153,8 @@ def copy_tree (src, dst, ...@@ -156,7 +153,8 @@ def copy_tree (src, dst,
if preserve_symlinks and os.path.islink(src_name): if preserve_symlinks and os.path.islink(src_name):
link_dest = os.readlink(src_name) link_dest = os.readlink(src_name)
log.info("linking %s -> %s", dst_name, link_dest) if verbose == 1:
log.info("linking %s -> %s", dst_name, link_dest)
if not dry_run: if not dry_run:
os.symlink(link_dest, dst_name) os.symlink(link_dest, dst_name)
outputs.append(dst_name) outputs.append(dst_name)
...@@ -165,10 +163,11 @@ def copy_tree (src, dst, ...@@ -165,10 +163,11 @@ def copy_tree (src, dst,
outputs.extend( outputs.extend(
copy_tree(src_name, dst_name, preserve_mode, copy_tree(src_name, dst_name, preserve_mode,
preserve_times, preserve_symlinks, update, preserve_times, preserve_symlinks, update,
dry_run=dry_run)) verbose=verbose, dry_run=dry_run))
else: else:
copy_file(src_name, dst_name, preserve_mode, copy_file(src_name, dst_name, preserve_mode,
preserve_times, update, dry_run=dry_run) preserve_times, update, verbose=verbose,
dry_run=dry_run)
outputs.append(dst_name) outputs.append(dst_name)
return outputs return outputs
...@@ -184,14 +183,15 @@ def _build_cmdtuple(path, cmdtuples): ...@@ -184,14 +183,15 @@ def _build_cmdtuple(path, cmdtuples):
cmdtuples.append((os.rmdir, path)) cmdtuples.append((os.rmdir, path))
def remove_tree (directory, verbose=0, dry_run=0): def remove_tree (directory, verbose=1, 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 distutils.util import grok_environment_error from distutils.util import grok_environment_error
global _path_created global _path_created
log.info("removing '%s' (and everything under it)", directory) if verbose == 1:
log.info("removing '%s' (and everything under it)", directory)
if dry_run: if dry_run:
return return
cmdtuples = [] cmdtuples = []
......
...@@ -67,7 +67,7 @@ def _copy_file_contents(src, dst, buffer_size=16*1024): ...@@ -67,7 +67,7 @@ def _copy_file_contents(src, dst, buffer_size=16*1024):
fsrc.close() fsrc.close()
def copy_file(src, dst, preserve_mode=1, preserve_times=1, update=0, def copy_file(src, dst, preserve_mode=1, preserve_times=1, update=0,
link=None, verbose=0, dry_run=0): link=None, verbose=1, dry_run=0):
"""Copy a file 'src' to 'dst'. If 'dst' is a directory, then 'src' is """Copy a file 'src' to 'dst'. If 'dst' is a directory, then 'src' is
copied there with the same name; otherwise, it must be a filename. (If copied there with the same name; otherwise, it must be a filename. (If
the file exists, it will be ruthlessly clobbered.) If 'preserve_mode' the file exists, it will be ruthlessly clobbered.) If 'preserve_mode'
...@@ -112,17 +112,20 @@ def copy_file(src, dst, preserve_mode=1, preserve_times=1, update=0, ...@@ -112,17 +112,20 @@ def copy_file(src, dst, preserve_mode=1, preserve_times=1, update=0,
dir = os.path.dirname(dst) dir = os.path.dirname(dst)
if update and not newer(src, dst): if update and not newer(src, dst):
log.debug("not copying %s (output up-to-date)", src) if verbose == 1:
log.debug("not copying %s (output up-to-date)", src)
return (dst, 0) return (dst, 0)
try: try:
action = _copy_action[link] action = _copy_action[link]
except KeyError: except KeyError:
raise ValueError("invalid value '%s' for 'link' argument" % link) raise ValueError("invalid value '%s' for 'link' argument" % link)
if os.path.basename(dst) == os.path.basename(src):
log.info("%s %s -> %s", action, src, dir) if verbose == 1:
else: if os.path.basename(dst) == os.path.basename(src):
log.info("%s %s -> %s", action, src, dst) log.info("%s %s -> %s", action, src, dir)
else:
log.info("%s %s -> %s", action, src, dst)
if dry_run: if dry_run:
return (dst, 1) return (dst, 1)
...@@ -164,7 +167,7 @@ def copy_file(src, dst, preserve_mode=1, preserve_times=1, update=0, ...@@ -164,7 +167,7 @@ def copy_file(src, dst, preserve_mode=1, preserve_times=1, update=0,
# XXX I suspect this is Unix-specific -- need porting help! # XXX I suspect this is Unix-specific -- need porting help!
def move_file (src, dst, def move_file (src, dst,
verbose=0, verbose=1,
dry_run=0): dry_run=0):
"""Move a file 'src' to 'dst'. If 'dst' is a directory, the file will """Move a file 'src' to 'dst'. If 'dst' is a directory, the file will
...@@ -177,7 +180,8 @@ def move_file (src, dst, ...@@ -177,7 +180,8 @@ def move_file (src, dst,
from os.path import exists, isfile, isdir, basename, dirname from os.path import exists, isfile, isdir, basename, dirname
import errno import errno
log.info("moving %s -> %s", src, dst) if verbose == 1:
log.info("moving %s -> %s", src, dst)
if dry_run: if dry_run:
return dst return dst
...@@ -209,7 +213,7 @@ def move_file (src, dst, ...@@ -209,7 +213,7 @@ def move_file (src, dst,
"couldn't move '%s' to '%s': %s" % (src, dst, msg)) "couldn't move '%s' to '%s': %s" % (src, dst, msg))
if copy_it: if copy_it:
copy_file(src, dst) copy_file(src, dst, verbose=verbose)
try: try:
os.unlink(src) os.unlink(src)
except os.error as e: except os.error as e:
......
"""Tests for distutils.dir_util."""
import unittest
import os
import shutil
from distutils.dir_util import mkpath
from distutils.dir_util import remove_tree
from distutils.dir_util import create_tree
from distutils.dir_util import copy_tree
from distutils import log
class DirUtilTestCase(unittest.TestCase):
def _log(self, msg, *args):
if len(args) > 0:
self._logs.append(msg % args)
else:
self._logs.append(msg)
def setUp(self):
self._logs = []
self.root_target = os.path.join(os.path.dirname(__file__), 'deep')
self.target = os.path.join(self.root_target, 'here')
self.target2 = os.path.join(os.path.dirname(__file__), 'deep2')
self.old_log = log.info
log.info = self._log
def tearDown(self):
for target in (self.target, self.target2):
if os.path.exists(target):
shutil.rmtree(target)
log.info = self.old_log
def test_mkpath_remove_tree_verbosity(self):
mkpath(self.target, verbose=0)
wanted = []
self.assertEquals(self._logs, wanted)
remove_tree(self.root_target, verbose=0)
mkpath(self.target, verbose=1)
wanted = ['creating %s' % self.root_target,
'creating %s' % self.target]
self.assertEquals(self._logs, wanted)
self._logs = []
remove_tree(self.root_target, verbose=1)
wanted = ["removing '%s' (and everything under it)" % self.root_target]
self.assertEquals(self._logs, wanted)
def test_create_tree_verbosity(self):
create_tree(self.root_target, ['one', 'two', 'three'], verbose=0)
self.assertEquals(self._logs, [])
remove_tree(self.root_target, verbose=0)
wanted = ['creating %s' % self.root_target]
create_tree(self.root_target, ['one', 'two', 'three'], verbose=1)
self.assertEquals(self._logs, wanted)
remove_tree(self.root_target, verbose=0)
def test_copy_tree_verbosity(self):
mkpath(self.target, verbose=0)
copy_tree(self.target, self.target2, verbose=0)
self.assertEquals(self._logs, [])
remove_tree(self.root_target, verbose=0)
mkpath(self.target, verbose=0)
a_file = os.path.join(self.target, 'ok.txt')
f = open(a_file, 'w')
f.write('some content')
f.close()
wanted = ['copying %s -> %s' % (a_file, self.target2)]
copy_tree(self.target, self.target2, verbose=1)
self.assertEquals(self._logs, wanted)
remove_tree(self.root_target, verbose=0)
remove_tree(self.target2, verbose=0)
def test_suite():
return unittest.makeSuite(DirUtilTestCase)
if __name__ == "__main__":
unittest.main(defaultTest="test_suite")
"""Tests for distutils.file_util."""
import unittest
import os
import shutil
from distutils.file_util import move_file
from distutils import log
class FileUtilTestCase(unittest.TestCase):
def _log(self, msg, *args):
if len(args) > 0:
self._logs.append(msg % args)
else:
self._logs.append(msg)
def setUp(self):
self._logs = []
self.old_log = log.info
log.info = self._log
self.source = os.path.join(os.path.dirname(__file__), 'f1')
self.target = os.path.join(os.path.dirname(__file__), 'f2')
self.target_dir = os.path.join(os.path.dirname(__file__), 'd1')
def tearDown(self):
log.info = self.old_log
for f in (self.source, self.target, self.target_dir):
if os.path.exists(f):
if os.path.isfile(f):
os.remove(f)
else:
shutil.rmtree(f)
def test_move_file_verbosity(self):
f = open(self.source, 'w')
f.write('some content')
f.close()
move_file(self.source, self.target, verbose=0)
wanted = []
self.assertEquals(self._logs, wanted)
# back to original state
move_file(self.target, self.source, verbose=0)
move_file(self.source, self.target, verbose=1)
wanted = ['moving %s -> %s' % (self.source, self.target)]
self.assertEquals(self._logs, wanted)
# back to original state
move_file(self.target, self.source, verbose=0)
self._logs = []
# now the target is a dir
os.mkdir(self.target_dir)
move_file(self.source, self.target_dir, verbose=1)
wanted = ['moving %s -> %s' % (self.source, self.target_dir)]
self.assertEquals(self._logs, wanted)
def test_suite():
return unittest.makeSuite(FileUtilTestCase)
if __name__ == "__main__":
unittest.main(defaultTest="test_suite")
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment