@@ -9,24 +9,21 @@
9 9 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# individuals. For exact contribution history, see the revision
10 10 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# history and logs, available at http://fossil-scm.hwaci.com/fossil
11 11 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# # ## ### ##### ######## ############# #####################
12 12 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
13 13 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
## Pass III. This pass divides the symbols collected by the previous
14 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ## pass into branches, tags, and excludes. The latter are __not__
15 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ## deleted by this pass, only marked. It is the next pass,
16 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ## 'FilterSym', which performs the actual deletion.
14 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ## pass into branches, tags, and excludes. The latter are also
15 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ## partially deleted by this pass, not only marked. It is the next
16 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ## pass however, 'FilterSym', which performs the full deletion.
17 17 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
18 18 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# # ## ### ##### ######## ############# #####################
19 19 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
## Requirements
20 20 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
21 21 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
package require Tcl 8.4 ; # Required runtime.
22 22 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
package require snit ; # OO system.
23 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #package require fileutil::traverse ; # Directory traversal.
24 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #package require fileutil ; # File & path utilities.
25 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #package require vc::tools::trouble ; # Error reporting.
23 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ package require vc::tools::trouble ; # Error reporting.
26 24 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
package require vc::tools::log ; # User feedback.
27 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #package require vc::fossil::import::cvs::pass ; # Pass management.
28 25 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
package require vc::fossil::import::cvs::repository ; # Repository management.
29 26 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
package require vc::fossil::import::cvs::state ; # State storage.
30 27 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
package require vc::fossil::import::cvs::project::sym ; # Project level symbols
31 28 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
32 29 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# # ## ### ##### ######## ############# #####################
@@ -49,11 +46,10 @@
49 46 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# pass.
50 47 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
51 48 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
state reading symbol
52 49 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
state reading blocker
53 50 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
state reading parent
54 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
55 51 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return
56 52 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
57 53 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
58 54 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
typemethod load {} {
59 55 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# TODO
@@ -68,25 +64,132 @@
68 64 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
repository determinesymboltypes
69 65 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
70 66 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
project::sym printrulestatistics
71 67 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
project::sym printtypestatistics
72 68 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
69 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
70 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if {![trouble ?]} {
71 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ UnconvertedSymbols
72 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ BadSymbolTypes
73 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ BlockedExcludes
74 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ InvalidTags
75 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
76 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
77 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if {![trouble ?]} {
78 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ DropExcludedSymbolsFromReferences
79 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
73 80 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
74 81 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
log write 1 collsym "Collation completed"
75 82 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return
76 83 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
77 84 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
78 85 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
typemethod discard {} {
79 86 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# Pass manager interface. Executed for all passes after the
80 87 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# run passes, to remove all data of this pass from the state,
81 88 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# as being out of date.
82 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
83 89 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return
84 90 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
85 91 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
86 92 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# # ## ### ##### ######## #############
87 93 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
## Internal methods
94 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
95 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ proc UnconvertedSymbols {} {
96 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # Paranoia - Have we left symbols without conversion
97 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # information (i.e. with type 'undefined') ?
98 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
99 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ set undef [project::sym undef]
100 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
101 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ foreach {pname sname} [state run {
102 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SELECT P.name, S.name
103 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ FROM project P, symbol S
104 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ WHERE P.pid = S.pid
105 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ AND S.type = $undef
106 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }] {
107 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ trouble fatal "$pname : The symbol '$sname' was left undefined"
108 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
109 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return
110 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
111 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
112 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ proc BadSymbolTypes {} {
113 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # Paranoia - Have we left symbols with bogus conversion
114 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # information (type out of the valid range (excluded, branch,
115 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # tag)) ?
116 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
117 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ foreach {pname sname} [state run {
118 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SELECT P.name, S.name
119 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ FROM project P, symbol S
120 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ WHERE P.pid = S.pid
121 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ AND S.type NOT IN (0,1,2)
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 "$pname : The symbol '$sname' has no proper conversion type"
124 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
125 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return
126 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
127 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
128 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ proc BlockedExcludes {} {
129 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # Paranoia - Have we scheduled symbols for exclusion without
130 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # also excluding their dependent symbols ?
131 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
132 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ set excl [project::sym excluded]
133 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
134 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ foreach {pname sname bname} [state run {
135 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SELECT P.name, S.name, SB.name
136 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ FROM project P, symbol S, blocker B, symbol SB
137 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ WHERE P.pid = S.pid
138 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ AND S.type = $excl
139 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ AND S.sid = B.sid
140 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ AND B.bid = SB.sid
141 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ AND SB.type != $excl
142 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }] {
143 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ trouble fatal "$pname : The symbol '$sname' cannot be excluded as the unexcluded symbol '$bname' depends on it."
144 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
145 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return
146 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
147 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
148 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ proc InvalidTags {} {
149 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # Paranoia - Have we scheduled symbols for conversion as tags
150 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # which absolutely cannot be converted as tags due to commits
151 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # made on them ?
152 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
153 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # In other words, this checks finds out if the user has asked
154 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # nonsensical conversions of symbols, which should have been
155 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # left to the heuristics, most specifically
156 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # 'project::sym.HasCommits()'.
157 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
158 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ set tag [project::sym tag]
159 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
160 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ foreach {pname sname} [state run {
161 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SELECT P.name, S.name
162 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ FROM project P, symbol S
163 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ WHERE P.pid = S.pid
164 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ AND S.type = $tag
165 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ AND S.commit_count > 0
166 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }] {
167 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ trouble fatal "$pname : The symbol '$sname' cannot be forced to be converted as tag because it has commits."
168 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
169 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return
170 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
171 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
172 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ proc DropExcludedSymbolsFromReferences {} {
173 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # The excluded symbols cann be used as blockers nor as
174 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # possible parent for other symbols. We now drop the relevant
175 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # entries to prevent them from causing confusion later on.
176 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
177 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ set excl [project::sym excluded]
178 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
179 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ state run {
180 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ DELETE FROM blocker
181 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ WHERE bid IN (SELECT sid
182 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ FROM symbol
183 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ WhERE type = $excl);
184 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ DELETE FROM parent
185 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ WHERE pid IN (SELECT sid
186 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ FROM symbol
187 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ WhERE type = $excl);
188 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
189 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return
190 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
88 191 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
89 192 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# # ## ### ##### ######## #############
90 193 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
## Configuration
91 194 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
92 195 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pragma -hasinstances no ; # singleton
@@ -102,11 +205,11 @@
102 205 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
namespace import ::vc::fossil::import::cvs::repository
103 206 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
namespace import ::vc::fossil::import::cvs::state
104 207 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
namespace eval project {
105 208 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
namespace import ::vc::fossil::import::cvs::project::sym
106 209 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
107 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #namespace import ::vc::tools::trouble
210 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ namespace import ::vc::tools::trouble
108 211 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
namespace import ::vc::tools::log
109 212 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
log register collsym
110 213 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
111 214 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
112 215 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
113 216 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!