@@ -8,22 +8,25 @@
8 8 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# This software consists of voluntary contributions made by many
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 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ## Pass V. This pass defines the first approximate set of project
14 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ## level revisions, aka changesets.
13 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ## Pass V. This pass creates the initial set of project level
14 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ## revisions, aka changesets. Later passes will refine them, puts them
15 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ## into proper order, set their dependencies, etc.
15 16 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
16 17 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# # ## ### ##### ######## ############# #####################
17 18 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
## Requirements
18 19 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
19 20 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
package require Tcl 8.4 ; # Required runtime.
20 21 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
package require snit ; # OO system.
21 22 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
package require vc::tools::misc ; # Text formatting.
22 23 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
package require vc::tools::log ; # User feedback.
24 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ package require vc::fossil::import::cvs::repository ; # Repository management.
23 25 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
package require vc::fossil::import::cvs::state ; # State storage.
24 26 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
package require vc::fossil::import::cvs::project::sym ; # Project level symbols
27 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ package require vc::fossil::import::cvs::project::rev ; # Project level changesets
25 28 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
26 29 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# # ## ### ##### ######## ############# #####################
27 30 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
## Register the pass with the management
28 31 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
29 32 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
vc::fossil::import::cvs::pass define \
@@ -39,36 +42,247 @@
39 42 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
## Public API
40 43 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
41 44 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
typemethod setup {} {
42 45 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# Define the names and structure of the persistent state of
43 46 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# this pass.
47 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
48 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ state reading meta
49 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ state reading revision
50 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ state reading branch
51 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ state reading tag
52 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ state reading symbol
53 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
54 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # Data per changeset, namely the project it belongs to, how it
55 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # was induced (revision or symbol), plus reference to the
56 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # primary entry causing it (meta entry or symbol). An adjunct
57 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # table translates the type id's into human readable labels.
58 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
59 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ state writing changeset {
60 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ cid INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
61 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pid INTEGER NOT NULL REFERENCES project,
62 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ type INTEGER NOT NULL REFERENCES cstype,
63 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ src INTEGER NOT NULL -- REFERENCES meta|symbol (type dependent)
64 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
65 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ state writing cstype {
66 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ tid INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
67 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ name TEXT NOT NULL,
68 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ UNIQUE (name)
69 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
70 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ state run {
71 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ INSERT INTO cstype VALUES (0,'rev');
72 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ INSERT INTO cstype VALUES (1,'sym');
73 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
74 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
75 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # Map from changesets to the (file level) revisions they
76 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # contain. The pos'ition provides an order of the revisions
77 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # within a changeset. They are unique within the changeset.
78 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # The revisions are in principle unique, if we were looking
79 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # only at revision changesets. However a revision can appear
80 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # in both revision and symbol changesets, and in multiple
81 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # symbol changesets as well. So we can only say that it is
82 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # unique within the changeset.
83 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #
84 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # TODO: Check if integrity checks are possible.
85 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
86 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ state writing csrevision {
87 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ cid INTEGER NOT NULL REFERENCES changeset,
88 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pos INTEGER NOT NULL,
89 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rid INTEGER NOT NULL REFERENCES revision,
90 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ UNIQUE (cid, pos),
91 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ UNIQUE (cid, rid)
92 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
93 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
94 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ project::rev getcstypes
44 95 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return
45 96 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
46 97 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
47 98 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
typemethod load {} {
48 99 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# Pass manager interface. Executed to load data computed by
49 100 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# this pass into memory when this pass is skipped instead of
50 101 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# executed.
51 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- # /TODO/
102 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # /TODO/load changesets
103 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
104 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ project::rev getcstypes
52 105 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return
53 106 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
54 107 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
55 108 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
typemethod run {} {
56 109 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# Pass manager interface. Executed to perform the
57 110 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# functionality of the pass.
111 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
112 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ set csets {}
113 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ state transaction {
114 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ CreateRevisionChangesets csets ; # Group file revisions into csets.
115 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ CreateSymbolChangesets csets ; # Create csets for tags and branches.
116 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ PersistTheChangesets $csets
117 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
58 118 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return
59 119 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
60 120 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
61 121 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
typemethod discard {} {
62 122 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# Pass manager interface. Executed for all passes after the
63 123 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# run passes, to remove all data of this pass from the state,
64 124 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# as being out of date.
125 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
126 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ state discard changeset
127 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ state discard cstype
128 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ state discard csrevision
65 129 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return
66 130 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
67 131 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
68 132 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# # ## ### ##### ######## #############
69 133 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
## Internal methods
134 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
135 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ proc CreateRevisionChangesets {cv} {
136 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ upvar 1 $cv csets
137 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
138 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ log write 3 initcsets {Create changesets based on revisions}
139 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
140 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # To get the initial of changesets we first group all file
141 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # level revisions using the same meta data entry together. As
142 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # the meta data encodes not only author and log message, but
143 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # also line of development and project we can be sure that
144 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # revisions in different project and lines of development are
145 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # not grouped together. In contrast to cvs2svn we do __not__
146 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # use distance in time between revisions to break them
147 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # apart. We have seen CVS repositories (from SF) where a
148 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # single commit contained revisions several hours apart,
149 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # likely due to trouble on the server hosting the repository.
150 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
151 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # We order the revisions here by time, this will help the
152 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # later passes (avoids joins later to get at the ordering
153 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # info).
154 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
155 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ set n 0
156 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
157 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ set lastmeta {}
158 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ set lastproject {}
159 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ set revisions {}
160 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
161 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # Note: We could have written this loop to create the csets
162 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # early, extending them with all their revisions. This
163 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # however would mean lots of (slow) method invokations
164 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # on the csets. Doing it like this, late creation, means
165 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # less such calls. None, but the creation itself.
166 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
167 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ foreach {mid rid pid} [state run {
168 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SELECT M.mid, R.rid, M.pid
169 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ FROM revision R, meta M -- R ==> M, using PK index of M.
170 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ WHERE R.mid = M.mid
171 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ORDER BY M.mid, R.date
172 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }] {
173 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if {$lastmeta != $mid} {
174 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if {[llength $revisions]} {
175 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ incr n
176 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ set p [repository projectof $lastproject]
177 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ lappend csets [project::rev %AUTO% $p rev $lastmeta $revisions]
178 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ set revisions {}
179 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
180 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ set lastmeta $mid
181 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ set lastproject $pid
182 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
183 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ lappend revisions $rid
184 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
185 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
186 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if {[llength $revisions]} {
187 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ incr n
188 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ set p [repository projectof $lastproject]
189 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ lappend csets [project::rev %AUTO% $p rev $lastmeta $revisions]
190 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
191 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
192 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ log write 4 initcsets "Created [nsp $n {revision changeset}]"
193 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return
194 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
195 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
196 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ proc CreateSymbolChangesets {cv} {
197 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ upvar 1 $cv csets
198 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
199 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ log write 3 initcsets {Create changesets based on symbols}
200 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
201 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # Tags and branches induce changesets as well, containing the
202 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # revisions they are attached to (tags), or spawned from
203 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # (branches).
204 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
205 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ set n 0
206 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
207 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # First process the tags, then the branches. We know that
208 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # their ids do not overlap with each other.
209 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
210 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ set lastsymbol {}
211 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ set lastproject {}
212 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ set revisions {}
213 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
214 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ foreach {sid rid pid} [state run {
215 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SELECT S.sid, R.rid, S.pid
216 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ FROM tag T, revision R, symbol S -- T ==> R/S, using PK indices of R, S.
217 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ WHERE T.rev = R.rid
218 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ AND T.sid = S.sid
219 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ORDER BY S.sid, R.date
220 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }] {
221 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if {$lastsymbol != $sid} {
222 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if {[llength $revisions]} {
223 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ incr n
224 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ set p [repository projectof $lastproject]
225 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ lappend csets [project::rev %AUTO% $p sym $lastsymbol $revisions]
226 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ set revisions {}
227 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
228 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ set lastsymbol $sid
229 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ set lastproject $pid
230 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
231 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ lappend revisions $rid
232 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
233 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
234 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if {[llength $revisions]} {
235 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ incr n
236 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ set p [repository projectof $lastproject]
237 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ lappend csets [project::rev %AUTO% $p sym $lastsymbol $revisions]
238 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
239 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
240 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ set lastsymbol {}
241 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ set lasproject {}
242 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ set revisions {}
243 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
244 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ foreach {sid rid pid} [state run {
245 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SELECT S.sid, R.rid, S.pid
246 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ FROM branch B, revision R, symbol S -- B ==> R/S, using PK indices of R, S.
247 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ WHERE B.root = R.rid
248 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ AND B.sid = S.sid
249 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ORDER BY S.sid, R.date
250 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }] {
251 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if {$lastsymbol != $sid} {
252 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if {[llength $revisions]} {
253 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ incr n
254 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ set p [repository projectof $lastproject]
255 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ lappend csets [project::rev %AUTO% $p sym $lastsymbol $revisions]
256 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ set revisions {}
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 lastsymbol $sid
259 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ set lastproject $pid
260 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
261 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ lappend revisions $rid
262 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
263 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
264 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if {[llength $revisions]} {
265 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ incr n
266 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ set p [repository projectof $lastproject]
267 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ lappend csets [project::rev %AUTO% $p sym $lastsymbol $revisions]
268 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
269 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
270 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ log write 4 initcsets "Created [nsp $n {symbol changeset}]"
271 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return
272 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
273 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
274 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ proc PersistTheChangesets {csets} {
275 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ log write 3 initcsets {Saving the created changesets to the persistent state}
276 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
277 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ foreach cset $csets {
278 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ $cset persist
279 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
280 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
281 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ log write 4 initcsets {Ok.}
282 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return
283 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
70 284 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
71 285 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# # ## ### ##### ######## #############
72 286 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
## Configuration
73 287 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
74 288 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pragma -hasinstances no ; # singleton
@@ -79,11 +293,16 @@
79 293 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
80 294 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
81 295 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
namespace eval ::vc::fossil::import::cvs::pass {
82 296 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
namespace export initcsets
83 297 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
namespace eval initcsets {
298 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ namespace import ::vc::fossil::import::cvs::repository
84 299 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
namespace import ::vc::fossil::import::cvs::state
300 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ namespace eval project {
301 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ namespace import ::vc::fossil::import::cvs::project::rev
302 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
303 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ namespace import ::vc::tools::misc::*
85 304 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
namespace import ::vc::tools::log
86 305 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
log register initcsets
87 306 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
88 307 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
89 308 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
90 309 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!