[Python-checkins] r69324 - in python/trunk: Lib/distutils/dir_util.py Lib/distutils/file_util.py Lib/distutils/tests/test_dir_util.py Lib/distutils/tests/test_file_util.py Misc/NEWS

tarek.ziade python-checkins at python.org
Fri Feb 6 01:31:59 CET 2009


Author: tarek.ziade
Date: Fri Feb  6 01:31:59 2009
New Revision: 69324

Log:
Fixed #1276768: verbose option was not used in the code.

Added:
   python/trunk/Lib/distutils/tests/test_dir_util.py   (contents, props changed)
   python/trunk/Lib/distutils/tests/test_file_util.py   (contents, props changed)
Modified:
   python/trunk/Lib/distutils/dir_util.py
   python/trunk/Lib/distutils/file_util.py
   python/trunk/Misc/NEWS

Modified: python/trunk/Lib/distutils/dir_util.py
==============================================================================
--- python/trunk/Lib/distutils/dir_util.py	(original)
+++ python/trunk/Lib/distutils/dir_util.py	Fri Feb  6 01:31:59 2009
@@ -16,7 +16,7 @@
 # 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 @@
     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 @@
         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 @@
 # 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 @@
 
     # 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 @@
                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 @@
                   "error listing files in '%s': %s" % (src, errstr)
 
     if not dry_run:
-        mkpath(dst)
+        mkpath(dst, verbose=verbose)
 
     outputs = []
 
@@ -158,7 +155,8 @@
 
         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 @@
             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 @@
     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 = []

Modified: python/trunk/Lib/distutils/file_util.py
==============================================================================
--- python/trunk/Lib/distutils/file_util.py	(original)
+++ python/trunk/Lib/distutils/file_util.py	Fri Feb  6 01:31:59 2009
@@ -76,7 +76,7 @@
                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 @@
         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 @@
     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 @@
 
 # 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 @@
     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 @@
                   "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):

Added: python/trunk/Lib/distutils/tests/test_dir_util.py
==============================================================================
--- (empty file)
+++ python/trunk/Lib/distutils/tests/test_dir_util.py	Fri Feb  6 01:31:59 2009
@@ -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")

Added: python/trunk/Lib/distutils/tests/test_file_util.py
==============================================================================
--- (empty file)
+++ python/trunk/Lib/distutils/tests/test_file_util.py	Fri Feb  6 01:31:59 2009
@@ -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")

Modified: python/trunk/Misc/NEWS
==============================================================================
--- python/trunk/Misc/NEWS	(original)
+++ python/trunk/Misc/NEWS	Fri Feb  6 01:31:59 2009
@@ -149,6 +149,9 @@
 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.
 


More information about the Python-checkins mailing list