summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorvincentdarley <vincentdarley>2001-11-04 17:59:48 (GMT)
committervincentdarley <vincentdarley>2001-11-04 17:59:48 (GMT)
commit724c015bc9598656596b14ead4f67496cb0e72dd (patch)
treed89c849c745946899ac0ff5c2a8175e06766620d
parent194b57cf7965f1a5ae122835392cca76dcbcb99c (diff)
downloadtcl-724c015bc9598656596b14ead4f67496cb0e72dd.zip
tcl-724c015bc9598656596b14ead4f67496cb0e72dd.tar.gz
tcl-724c015bc9598656596b14ead4f67496cb0e72dd.tar.bz2
vfs robustness fix
-rw-r--r--ChangeLog6
-rw-r--r--library/init.tcl24
2 files changed, 19 insertions, 11 deletions
diff --git a/ChangeLog b/ChangeLog
index 7812c0a..a34f86f 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2001-11-04 Vince Darley <vincentdarley@users.sourceforge.net>
+
+ * library/init.tcl: made filesystem fallback proc
+ ::tcl::CopyDirectory more robust to vagaries of non-native
+ filesystems.
+
2001-11-02 Vince Darley <vincentdarley@users.sourceforge.net>
* doc/file.n:
diff --git a/library/init.tcl b/library/init.tcl
index 5f7e58f..4802683 100644
--- a/library/init.tcl
+++ b/library/init.tcl
@@ -3,7 +3,7 @@
# Default system startup file for Tcl-based applications. Defines
# "unknown" procedure and auto-load facilities.
#
-# RCS: @(#) $Id: init.tcl,v 1.49 2001/07/31 19:12:07 vincentdarley Exp $
+# RCS: @(#) $Id: init.tcl,v 1.50 2001/11/04 17:59:48 vincentdarley Exp $
#
# Copyright (c) 1991-1993 The Regents of the University of California.
# Copyright (c) 1994-1996 Sun Microsystems, Inc.
@@ -647,7 +647,8 @@ proc ::tcl::CopyDirectory {action src dest} {
set nsrc [file normalize $src]
set ndest [file normalize $dest]
if {[string equal $action "renaming"]} {
- # Can't rename volumes
+ # Can't rename volumes. We could give a more precise
+ # error message here, but that would break the test suite.
if {[lsearch -exact [file volumes] $nsrc] != -1} {
return -code error "error $action \"$src\" to\
\"$dest\": trying to rename a volume or move a directory\
@@ -690,15 +691,16 @@ proc ::tcl::CopyDirectory {action src dest} {
}
file mkdir $dest
}
- # Have to be careful to capture both visible and hidden files
- foreach s [glob -nocomplain -directory $src *] {
- if {([file tail $s] != ".") && ([file tail $s] != "..")} {
- file copy $s [file join $dest [file tail $s]]
- }
- }
- # This will pick up things beginning with '.' on Unix and on
- # Windows/MacOS those files which the OS considers invisible.
- foreach s [glob -nocomplain -directory $src -types hidden *] {
+ # Have to be careful to capture both visible and hidden files.
+ # We will also be more generous to the file system and not
+ # assume the hidden and non-hidden lists are non-overlapping.
+ #
+ # On Unix 'hidden' files begin with '.'. On other platforms
+ # or filesystems hidden files may have other interpretations.
+ set filelist [concat [glob -nocomplain -directory $src *] \
+ [glob -nocomplain -directory $src -types hidden *]]
+
+ foreach s [lsort -unique $filelist] {
if {([file tail $s] != ".") && ([file tail $s] != "..")} {
file copy $s [file join $dest [file tail $s]]
}