summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTarek Ziadé <ziade.tarek@gmail.com>2009-02-06 00:31:59 (GMT)
committerTarek Ziadé <ziade.tarek@gmail.com>2009-02-06 00:31:59 (GMT)
commitd5eb98549234ec10391744a5a92bb17b47a39d2e (patch)
tree99d80c63969e4491b6a1b91daf8f55420c524915
parent0189ddc1139c4ef5e2f7f8c22c4f0196c6884300 (diff)
downloadcpython-d5eb98549234ec10391744a5a92bb17b47a39d2e.zip
cpython-d5eb98549234ec10391744a5a92bb17b47a39d2e.tar.gz
cpython-d5eb98549234ec10391744a5a92bb17b47a39d2e.tar.bz2
Fixed #1276768: verbose option was not used in the code.
-rw-r--r--Lib/distutils/dir_util.py30
-rw-r--r--Lib/distutils/file_util.py22
-rw-r--r--Lib/distutils/tests/test_dir_util.py91
-rw-r--r--Lib/distutils/tests/test_file_util.py66
-rw-r--r--Misc/NEWS3
5 files changed, 188 insertions, 24 deletions
diff --git a/Lib/distutils/dir_util.py b/Lib/distutils/dir_util.py
index 54f5c68..6d896ee 100644
--- a/Lib/distutils/dir_util.py
+++ b/Lib/distutils/dir_util.py
@@ -16,7 +16,7 @@ _path_created = {}
# 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
# succeed in that case).
-def mkpath (name, mode=0777, verbose=0, dry_run=0):
+def mkpath (name, mode=0777, verbose=1, dry_run=0):
"""Create a directory and any missing ancestor directories. If the
directory already exists (or if 'name' is the empty string, which
means the current directory, which of course exists), then do
@@ -49,13 +49,9 @@ def mkpath (name, mode=0777, verbose=0, dry_run=0):
tails = [tail] # stack of lone dirs to create
while head and tail and not os.path.isdir(head):
- #print "splitting '%s': " % head,
(head, tail) = os.path.split(head)
- #print "to ('%s','%s')" % (head, tail)
tails.insert(0, tail) # push next higher dir onto stack
- #print "stack of tails:", tails
-
# now 'head' contains the deepest directory that already exists
# (that is, the child of 'head' in 'name' is the highest directory
# that does *not* exist)
@@ -67,7 +63,8 @@ def mkpath (name, mode=0777, verbose=0, dry_run=0):
if _path_created.get(abs_head):
continue
- log.info("creating %s", head)
+ if verbose == 1:
+ log.info("creating %s", head)
if not dry_run:
try:
@@ -83,7 +80,7 @@ def mkpath (name, mode=0777, verbose=0, dry_run=0):
# mkpath ()
-def create_tree (base_dir, files, mode=0777, verbose=0, dry_run=0):
+def create_tree (base_dir, files, mode=0777, verbose=1, dry_run=0):
"""Create all the empty directories under 'base_dir' needed to
put 'files' there. 'base_dir' is just the a name of a directory
@@ -102,7 +99,7 @@ def create_tree (base_dir, files, mode=0777, verbose=0, dry_run=0):
# Now create them
for dir in need_dirs:
- mkpath(dir, mode, dry_run=dry_run)
+ mkpath(dir, mode, verbose=verbose, dry_run=dry_run)
# create_tree ()
@@ -112,7 +109,7 @@ def copy_tree (src, dst,
preserve_times=1,
preserve_symlinks=0,
update=0,
- verbose=0,
+ verbose=1,
dry_run=0):
"""Copy an entire directory tree 'src' to a new location 'dst'. Both
@@ -148,7 +145,7 @@ def copy_tree (src, dst,
"error listing files in '%s': %s" % (src, errstr)
if not dry_run:
- mkpath(dst)
+ mkpath(dst, verbose=verbose)
outputs = []
@@ -158,7 +155,8 @@ def copy_tree (src, dst,
if preserve_symlinks and os.path.islink(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:
os.symlink(link_dest, dst_name)
outputs.append(dst_name)
@@ -167,10 +165,11 @@ def copy_tree (src, dst,
outputs.extend(
copy_tree(src_name, dst_name, preserve_mode,
preserve_times, preserve_symlinks, update,
- dry_run=dry_run))
+ verbose=verbose, dry_run=dry_run))
else:
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)
return outputs
@@ -188,14 +187,15 @@ def _build_cmdtuple(path, cmdtuples):
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
(apart from being reported to stdout if 'verbose' is true).
"""
from distutils.util import grok_environment_error
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:
return
cmdtuples = []
diff --git a/Lib/distutils/file_util.py b/Lib/distutils/file_util.py
index 3af6344..82a8b0a 100644
--- a/Lib/distutils/file_util.py
+++ b/Lib/distutils/file_util.py
@@ -76,7 +76,7 @@ def copy_file (src, dst,
preserve_times=1,
update=0,
link=None,
- verbose=0,
+ verbose=1,
dry_run=0):
"""Copy a file 'src' to 'dst'. If 'dst' is a directory, then 'src' is
@@ -123,7 +123,8 @@ def copy_file (src, dst,
dir = os.path.dirname(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
try:
@@ -131,10 +132,12 @@ def copy_file (src, dst,
except KeyError:
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)
- else:
- log.info("%s %s -> %s", action, src, dst)
+
+ if verbose == 1:
+ if os.path.basename(dst) == os.path.basename(src):
+ log.info("%s %s -> %s", action, src, dir)
+ else:
+ log.info("%s %s -> %s", action, src, dst)
if dry_run:
return (dst, 1)
@@ -178,7 +181,7 @@ def copy_file (src, dst,
# XXX I suspect this is Unix-specific -- need porting help!
def move_file (src, dst,
- verbose=0,
+ verbose=1,
dry_run=0):
"""Move a file 'src' to 'dst'. If 'dst' is a directory, the file will
@@ -191,7 +194,8 @@ def move_file (src, dst,
from os.path import exists, isfile, isdir, basename, dirname
import errno
- log.info("moving %s -> %s", src, dst)
+ if verbose == 1:
+ log.info("moving %s -> %s", src, dst)
if dry_run:
return dst
@@ -223,7 +227,7 @@ def move_file (src, dst,
"couldn't move '%s' to '%s': %s" % (src, dst, msg)
if copy_it:
- copy_file(src, dst)
+ copy_file(src, dst, verbose=verbose)
try:
os.unlink(src)
except os.error, (num, msg):
diff --git a/Lib/distutils/tests/test_dir_util.py b/Lib/distutils/tests/test_dir_util.py
new file mode 100644
index 0000000..edf93c4
--- /dev/null
+++ b/Lib/distutils/tests/test_dir_util.py
@@ -0,0 +1,91 @@
+"""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")
diff --git a/Lib/distutils/tests/test_file_util.py b/Lib/distutils/tests/test_file_util.py
new file mode 100644
index 0000000..523f1ae
--- /dev/null
+++ b/Lib/distutils/tests/test_file_util.py
@@ -0,0 +1,66 @@
+"""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")
diff --git a/Misc/NEWS b/Misc/NEWS
index bf4c916..81115ed 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -149,6 +149,9 @@ Core and Builtins
Library
-------
+- Issue #1276768: The verbose option was not used in the code of
+ distutils.file_util and distutils.dir_util.
+
- Issue #5132: Fixed trouble building extensions under Solaris with
--enabled-shared activated. Initial patch by Dave Peterson.