@@ -111,23 +111,13 @@
111 111 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
set rcs [fileutil::stripPath $base $path]
112 112 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if {[IsCVSAdmin $rcs]} continue
113 113 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if {![IsRCSArchive $path]} continue
114 114 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
115 115 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
set usr [UserPath $rcs isattic]
116 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if {[IsSuperceded $base $rcs $usr $isattic]} continue
117 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
118 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- # XXX Checkme: not sure if this will still fail in the case where a directory does conflict with a file XXX
119 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if {
120 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- [fileexists_cs $base/$usr] &&
121 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- [fileisdir_cs $base/$usr]
122 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- } {
123 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- trouble fatal "Directory name conflicts with filename."
124 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- trouble fatal "Please remove or rename one of the following:"
125 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- trouble fatal " $base/$usr"
126 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- trouble fatal " $base/$rcs"
127 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- continue
128 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
116 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
117 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if {[CheckForAndReportPathConflicts $base $rcs $usr $isattic]} continue
118 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if {[HandleDotFile $base $rcs usr $isattic]} continue
129 119 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
130 120 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
log write 4 collar "Found $rcs"
131 121 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
$project addfile $rcs $usr [file executable $rcs]
132 122 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
133 123 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
incr n
@@ -158,15 +148,26 @@
158 148 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
159 149 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
typemethod ignore_conflicting_attics {} {
160 150 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
set myignore 1
161 151 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return
162 152 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
153 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
154 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ typemethod accept_and_convert_dotfiles {} {
155 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ set myconvertdot 1
156 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return
157 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
163 158 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
164 159 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# # ## ### ##### ######## #############
165 160 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
## Internal methods
166 161 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
167 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- typevariable myignore 0
162 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ typevariable myignore 0 ; # Flag. When set Attic files
163 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # superceded by regular files
164 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # ignored.
165 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ typevariable myconvertdot 0 ; # Flag. When set dotfiles do not
166 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # cause rejection, but their names
167 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # are converted to a dotless form
168 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # ('dot-' prefix instead of '.').
168 169 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
169 170 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
proc FilterAtticSubdir {base path} {
170 171 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# This command is used by the traverser to prevent it from
171 172 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# scanning into subdirectories of an Attic. We get away with
172 173 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# checking the immediate parent directory of the current path
@@ -186,13 +187,18 @@
186 187 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
trouble warn $msg
187 188 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return 0
188 189 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
189 190 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
190 191 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
proc IsCVSAdmin {rcs} {
191 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if {![string match CVSROOT/* $rcs]} {return 0}
192 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- log write 4 collar "Ignored $rcs, administrative archive"
193 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return 1
192 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if {
193 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ [string match {CVSROOT/*} $rcs] ||
194 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ [string match {.cvsignore*} [file tail $rcs]]
195 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ } {
196 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ log write 4 collar "Ignored $rcs, administrative archive"
197 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return 1
198 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
199 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return 0
194 200 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
195 201 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
196 202 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
proc UserPath {rcs iav} {
197 203 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
upvar 1 $iav isattic
198 204 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -237,10 +243,72 @@
237 243 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
} else {
238 244 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
trouble warn "Ignored $rcs, superceded archive"
239 245 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
240 246 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return 1
241 247 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
248 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
249 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # In the future we should move the activity below into the fossil
250 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # backend, as the exact set of paths requiring translation, and
251 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # how to translate them, depends entirely on the limitations
252 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # imposed by the destination repository.
253 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
254 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ proc HandleDotFile {base rcs usrvar isattic} {
255 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ::variable myconvertdot
256 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ upvar 1 $usrvar usr
257 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
258 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ set dedot [DeDot $usr]
259 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if {$dedot eq $usr} { return 0 }
260 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
261 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # Ok, we now have established that the path has to be
262 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # translated. Which as already happened as part of the check
263 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # above. Left is to report the action, and to check if the new
264 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # path collides with existing files and directories.
265 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
266 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if {!$myconvertdot} {
267 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ trouble warn "Ignored $rcs, is a dot-file"
268 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return 1
269 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
270 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
271 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ log write 2 collar "Convert $rcs, is a dot-file"
272 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ set usr $dedot
273 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
274 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return [CheckForAndReportPathConflicts $base $rcs $usr $isattic]
275 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
276 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
277 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ proc DeDot {path} {
278 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ set res {}
279 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ foreach segment [file split $path] {
280 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ lappend res [expr {
281 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ [string match {.*} $segment]
282 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ? "dot-[string range $segment 1 end]"
283 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ : $segment
284 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }]
285 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
286 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return [eval [linsert $res 0 file join]]
287 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #8.5: return [file join {*}$res]
288 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
289 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
290 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ proc CheckForAndReportPathConflicts {base rcs usr isattic {intro {}}} {
291 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if {[IsSuperceded $base $rcs $usr $isattic]} { return 1 }
292 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
293 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # XXX Checkme: not sure if this will still fail in the case
294 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # where a directory does conflict with a file XXX
295 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if {
296 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ [fileexists_cs $base/$usr] &&
297 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ [fileisdir_cs $base/$usr]
298 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ } {
299 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if {$intro ne {}} {
300 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ trouble fatal $intro
301 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
302 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ trouble fatal "Directory name conflicts with filename."
303 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ trouble fatal "Please remove or rename one of the following:"
304 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ trouble fatal " $base/$usr"
305 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ trouble fatal " $base/$rcs"
306 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return 1
307 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
308 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return 0
309 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
242 310 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
243 311 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# # ## ### ##### ######## #############
244 312 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
## Configuration
245 313 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
246 314 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pragma -hasinstances no ; # singleton
247 315 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!