]> granicus.if.org Git - python/commitdiff
The 'copy_file()' and 'copy_tree()' functions in util.py now have
authorGreg Ward <gward@python.net>
Sun, 2 May 1999 21:42:05 +0000 (21:42 +0000)
committerGreg Ward <gward@python.net>
Sun, 2 May 1999 21:42:05 +0000 (21:42 +0000)
meaningful return values: respectively, whether the copy was done, and
the list of files that were copied.  This meant some trivial changes in
core.py as well: the Command methods that mirror 'copy_file()' and
'copy_tree()' have to pass on their return values.

Lib/distutils/core.py
Lib/distutils/util.py

index 980ba5b30d612d4b118d65e3b551107731ac8eb9..4b8c78384e34f079546aed577a73984ce252ed65 100644 (file)
@@ -636,10 +636,10 @@ class Command:
                    preserve_mode=1, preserve_times=1, update=1, level=1):
         """Copy a file respecting verbose and dry-run flags."""
 
-        util.copy_file (infile, outfile,
-                        preserve_mode, preserve_times,
-                        update, self.distribution.verbose >= level,
-                        self.distribution.dry_run)
+        return util.copy_file (infile, outfile,
+                               preserve_mode, preserve_times,
+                               update, self.distribution.verbose >= level,
+                               self.distribution.dry_run)
 
 
     def copy_tree (self, infile, outfile,
@@ -648,10 +648,10 @@ class Command:
         """Copy an entire directory tree respecting verbose and dry-run
            flags."""
 
-        util.copy_tree (infile, outfile, 
-                        preserve_mode, preserve_times, preserve_symlinks,
-                        update, self.distribution.verbose >= level,
-                        self.distribution.dry_run)
+        return util.copy_tree (infile, outfile, 
+                               preserve_mode,preserve_times,preserve_symlinks,
+                               update, self.distribution.verbose >= level,
+                               self.distribution.dry_run)
 
 
     def make_file (self, infiles, outfile, func, args,
index f4a1df791ff7d03d2d8d33b89f004e47be9e1a9c..7aedc1c6df8f2f6dbaefe83cb2e8b339f3df6bd6 100644 (file)
@@ -164,7 +164,11 @@ def copy_file (src, dst,
        'update' is true, 'src' will only be copied if 'dst' does not
        exist, or if 'dst' does exist but is older than 'src'.  If
        'verbose' is true, then a one-line summary of the copy will be
-       printed to stdout."""
+       printed to stdout.
+
+       Return true if the file was copied (or would have been copied),
+       false otherwise (ie. 'update' was true and the destination is
+       up-to-date)."""
 
     # XXX doesn't copy Mac-specific metadata
        
@@ -181,14 +185,15 @@ def copy_file (src, dst,
         dir = os.path.dirname (dst)
 
     if update and not newer (src, dst):
-        print "not copying %s (output up-to-date)" % src
-        return
+        if verbose:
+            print "not copying %s (output up-to-date)" % src
+        return 0
 
     if verbose:
         print "copying %s -> %s" % (src, dir)
 
     if dry_run:
-        return
+        return 1
 
     _copy_file_contents (src, dst)
     if preserve_mode or preserve_times:
@@ -198,6 +203,8 @@ def copy_file (src, dst,
         if preserve_times:
             os.utime (dst, (st[ST_ATIME], st[ST_MTIME]))
 
+    return 1
+
 # copy_file ()
 
 
@@ -213,9 +220,12 @@ def copy_tree (src, dst,
     """Copy an entire directory tree 'src' to a new location 'dst'.  Both
        'src' and 'dst' must be directory names.  If 'src' is not a
        directory, raise DistutilsFileError.  If 'dst' does not exist, it
-       is created with 'mkpath'.  The endresult of the copy is that
+       is created with 'mkpath'.  The end result of the copy is that
        every file in 'src' is copied to 'dst', and directories under
-       'src' are recursively copied to 'dst'.
+       'src' are recursively copied to 'dst'.  Return the list of files
+       copied (under their output names) -- note that if 'update' is true,
+       this might be less than the list of files considered.  Return
+       value is not affected by 'dry_run'.
 
        'preserve_mode' and 'preserve_times' are the same as for
        'copy_file'; note that they only apply to regular files, not to
@@ -236,6 +246,8 @@ def copy_tree (src, dst,
     if not dry_run:
         mkpath (dst, verbose=verbose)
 
+    outputs = []
+
     for n in names:
         src_name = os.path.join (src, n)
         dst_name = os.path.join (dst, n)
@@ -246,13 +258,19 @@ def copy_tree (src, dst,
                 print "linking %s -> %s" % (dst_name, link_dest)
             if not dry_run:
                 os.symlink (link_dest, dst_name)
+            outputs.append (dst_name)
+            
         elif os.path.isdir (src_name):
-            copy_tree (src_name, dst_name,
-                       preserve_mode, preserve_times, preserve_symlinks,
-                       update, verbose, dry_run)
+            outputs[-1:] = \
+                copy_tree (src_name, dst_name,
+                           preserve_mode, preserve_times, preserve_symlinks,
+                           update, verbose, dry_run)
         else:
-            copy_file (src_name, dst_name,
-                       preserve_mode, preserve_times,
-                       update, verbose, dry_run)
+            if (copy_file (src_name, dst_name,
+                           preserve_mode, preserve_times,
+                           update, verbose, dry_run)):
+                outputs.append (dst_name)
+
+    return outputs
 
 # copy_tree ()