@@ -83,16 +83,60 @@
83 83 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
84 84 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
proc striptrailingslash {path} {
85 85 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# split and rejoin gets rid of a traling / character.
86 86 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return [eval [linsert [file split $path] 0 ::file join]]
87 87 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
88 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
89 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # The windows filesystem is storing file-names case-sensitive, but
90 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # matching is case-insensitive. That is a problem as without
91 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # precaution the two files Attic/X,v and x,v may be mistakenly
92 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # identified as the same file. A similar thing can happen for
93 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # files and directories. To prevent such mistakes we need commands
94 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # which do case-sensitive file matching even on systems which do
95 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # not perform this natively. These are below.
96 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
97 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if {$tcl_platform(platform) eq "windows"} {
98 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # We use glob to get the list of files (with proper case in
99 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # the names) to perform our own, case-sensitive matching. WE
100 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # use 8.5 features where possible, for clarity.
101 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
102 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if {[package vsatisfies [package present Tcl] 8.5]} {
103 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ proc fileexists_ci {path} {
104 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ set dir [::file dirname $path]
105 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ set file [::file tail $path]
106 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return [expr {$file in [glob -nocomplain -tail -directory $dir *]}]
107 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
108 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
109 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ proc fileisdir_ci {path} {
110 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ set dir [::file dirname $path]
111 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ set file [::file tail $path]
112 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return [expr {$file in [glob -nocomplain -types d -tail -directory $dir *]}]
113 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
114 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ } else {
115 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ proc fileexists_ci {path} {
116 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ set dir [::file dirname $path]
117 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ set file [::file tail $path]
118 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return [expr {[lsearch [glob -nocomplain -tail -directory $dir *] $file] >= 0}]
119 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
120 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
121 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ proc fileisdir_ci {path} {
122 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ set dir [::file dirname $path]
123 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ set file [::file tail $path]
124 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return [expr {[lsearch [glob -nocomplain -types d -tail -directory $dir *] $file] >= 0}]
125 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
126 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
127 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ } else {
128 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ proc fileexists_ci {path} { return [file exists $path] }
129 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ proc fileisdir_ci {path} { return [file isdirectory $path] }
130 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
88 131 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
89 132 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# # ## ### ##### ######## #############
90 133 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
91 134 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
92 135 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
namespace eval ::vc::tools::misc {
93 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- namespace export sp nsp max min max2 min2 ldelete striptrailingslash
136 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ namespace export sp nsp max min max2 min2 ldelete
137 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ namespace export striptrailingslash fileexists_ci fileisdir_ci
94 138 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
95 139 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
96 140 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# -----------------------------------------------------------------------------
97 141 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# Ready
98 142 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
99 143 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!