Fossil SCM

Reworked the basic structure of pass InitCSets to keep memory consumption down. Now incremental creates, breaks, saves, and releases changesets, instead of piling them on before saving all at the end. Memory tracking confirms that this changes the accumulating mountain into a near-constant usage, with the expected spikes from the breaking.

aku 2008-02-17 02:06 trunk
Commit f46458d5bdc221859c6b009de9b8e5dcbbc2534a
--- tools/cvs2fossil/getmemoryseries.tcl
+++ tools/cvs2fossil/getmemoryseries.tcl
@@ -1,11 +1,11 @@
11
#!/bin/bash
22
# -*- tcl -*- \
33
exec tclsh "$0" ${1+"$@"}
44
55
package require csv
6
-foreach {in outbasic outmarker plot} $argv break
6
+foreach {in outbasic outmarker plot outbasicold} $argv break
77
88
set in [open $in r]
99
set ba [open $outbasic w]
1010
set mr [open $outmarker w]
1111
@@ -45,10 +45,19 @@
4545
puts $f "plot \"$outbasic\" using 1:2 title 'Memory' with steps, \\"
4646
puts $f " \"$outbasic\" using 1:3 title 'Max Memory' with steps"
4747
puts $f "pause -1"
4848
puts $f ""
4949
close $f
50
+
51
+# Generate gnuplot control file for comparison of series
52
+set f [open ${plot}-compare w]
53
+puts $f ""
54
+puts $f "plot \"$outbasicold\" using 1:2 title 'Memory Old' with steps, \\"
55
+puts $f " \"$outbasic\" using 1:2 title 'Memory New' with steps"
56
+puts $f "pause -1"
57
+puts $f ""
58
+close $f
5059
exit
5160
5261
# Comparison to baseline
5362
plot "basic.dat" using 1:2 title 'Memory Base' with steps lt rgb "blue", \
5463
"newbasic.dat" using 1:2 title 'Memory Current' with steps lt rgb "red", \
5564
--- tools/cvs2fossil/getmemoryseries.tcl
+++ tools/cvs2fossil/getmemoryseries.tcl
@@ -1,11 +1,11 @@
1 #!/bin/bash
2 # -*- tcl -*- \
3 exec tclsh "$0" ${1+"$@"}
4
5 package require csv
6 foreach {in outbasic outmarker plot} $argv break
7
8 set in [open $in r]
9 set ba [open $outbasic w]
10 set mr [open $outmarker w]
11
@@ -45,10 +45,19 @@
45 puts $f "plot \"$outbasic\" using 1:2 title 'Memory' with steps, \\"
46 puts $f " \"$outbasic\" using 1:3 title 'Max Memory' with steps"
47 puts $f "pause -1"
48 puts $f ""
49 close $f
 
 
 
 
 
 
 
 
 
50 exit
51
52 # Comparison to baseline
53 plot "basic.dat" using 1:2 title 'Memory Base' with steps lt rgb "blue", \
54 "newbasic.dat" using 1:2 title 'Memory Current' with steps lt rgb "red", \
55
--- tools/cvs2fossil/getmemoryseries.tcl
+++ tools/cvs2fossil/getmemoryseries.tcl
@@ -1,11 +1,11 @@
1 #!/bin/bash
2 # -*- tcl -*- \
3 exec tclsh "$0" ${1+"$@"}
4
5 package require csv
6 foreach {in outbasic outmarker plot outbasicold} $argv break
7
8 set in [open $in r]
9 set ba [open $outbasic w]
10 set mr [open $outmarker w]
11
@@ -45,10 +45,19 @@
45 puts $f "plot \"$outbasic\" using 1:2 title 'Memory' with steps, \\"
46 puts $f " \"$outbasic\" using 1:3 title 'Max Memory' with steps"
47 puts $f "pause -1"
48 puts $f ""
49 close $f
50
51 # Generate gnuplot control file for comparison of series
52 set f [open ${plot}-compare w]
53 puts $f ""
54 puts $f "plot \"$outbasicold\" using 1:2 title 'Memory Old' with steps, \\"
55 puts $f " \"$outbasic\" using 1:2 title 'Memory New' with steps"
56 puts $f "pause -1"
57 puts $f ""
58 close $f
59 exit
60
61 # Comparison to baseline
62 plot "basic.dat" using 1:2 title 'Memory Base' with steps lt rgb "blue", \
63 "newbasic.dat" using 1:2 title 'Memory Current' with steps lt rgb "red", \
64
--- tools/cvs2fossil/lib/c2f_pinitcsets.tcl
+++ tools/cvs2fossil/lib/c2f_pinitcsets.tcl
@@ -125,18 +125,24 @@
125125
typemethod run {} {
126126
# Pass manager interface. Executed to perform the
127127
# functionality of the pass.
128128
129129
state transaction {
130
- CreateRevisionChangesets ; # Group file revisions into csets.
131
- BreakInternalDependencies ; # Split the csets based on internal conflicts.
132
- CreateSymbolChangesets ; # Create csets for tags and branches.
133
- PersistTheChangesets
130
+ CreateRevisionChangesets ; # Group file revisions into
131
+ # preliminary csets and split
132
+ # them based on internal
133
+ # conflicts.
134
+ CreateSymbolChangesets ; # Create csets for tags and
135
+ # branches.
134136
}
135137
136138
repository printcsetstatistics
137139
integrity changesets
140
+
141
+ # Load the changesets for use by the next passes.
142
+ project::rev load ::vc::fossil::import::cvs::repository
143
+ project::rev loadcounter
138144
return
139145
}
140146
141147
typemethod discard {} {
142148
# Pass manager interface. Executed for all passes after the
@@ -168,11 +174,18 @@
168174
169175
# We order the revisions here by time, this will help the
170176
# later passes (avoids joins later to get at the ordering
171177
# info).
172178
173
- set n 0
179
+ # The changesets made from these groups are immediately
180
+ # inspected for internal conflicts and any such are broken by
181
+ # splitting the problematic changeset into multiple
182
+ # fragments. The results are changesets which have no internal
183
+ # dependencies, only external ones.
184
+
185
+ set n 0
186
+ set nx 0
174187
175188
set lastmeta {}
176189
set lastproject {}
177190
set revisions {}
178191
@@ -196,12 +209,15 @@
196209
if {[llength $revisions]} {
197210
incr n
198211
set p [repository projectof $lastproject]
199212
log write 14 initcsets meta_cset_begin
200213
mem::mark
201
- project::rev %AUTO% $p rev $lastmeta $revisions
214
+ set cset [project::rev %AUTO% $p rev $lastmeta $revisions]
202215
log write 14 initcsets meta_cset_done
216
+ $cset breakinternaldependencies nx
217
+ $cset persist
218
+ $cset destroy
203219
mem::mark
204220
set revisions {}
205221
}
206222
set lastmeta $mid
207223
set lastproject $pid
@@ -212,19 +228,26 @@
212228
if {[llength $revisions]} {
213229
incr n
214230
set p [repository projectof $lastproject]
215231
log write 14 initcsets meta_cset_begin
216232
mem::mark
217
- project::rev %AUTO% $p rev $lastmeta $revisions
233
+ set cset [project::rev %AUTO% $p rev $lastmeta $revisions]
218234
log write 14 initcsets meta_cset_done
235
+ $cset breakinternaldependencies nx
236
+ $cset persist
237
+ $cset destroy
219238
mem::mark
220239
}
221240
222241
log write 14 initcsets meta_done
223242
mem::mark
224243
225
- log write 4 initcsets "Created [nsp $n {revision changeset}]"
244
+ log write 4 initcsets "Created and saved [nsp $n {revision changeset}]"
245
+ log write 4 initcsets "Created and saved [nsp $nx {additional revision changeset}]"
246
+
247
+ mem::mark
248
+ log write 4 initcsets Ok.
226249
return
227250
}
228251
229252
proc CreateSymbolChangesets {} {
230253
log write 3 initcsets {Create changesets based on symbols}
@@ -251,12 +274,14 @@
251274
}] {
252275
if {$lastsymbol != $sid} {
253276
if {[llength $tags]} {
254277
incr n
255278
set p [repository projectof $lastproject]
256
- project::rev %AUTO% $p sym::tag $lastsymbol $tags
279
+ set cset [project::rev %AUTO% $p sym::tag $lastsymbol $tags]
257280
set tags {}
281
+ $cset persist
282
+ $cset destroy
258283
}
259284
set lastsymbol $sid
260285
set lastproject $pid
261286
}
262287
lappend tags $tid
@@ -263,11 +288,13 @@
263288
}
264289
265290
if {[llength $tags]} {
266291
incr n
267292
set p [repository projectof $lastproject]
268
- project::rev %AUTO% $p sym::tag $lastsymbol $tags
293
+ set cset [project::rev %AUTO% $p sym::tag $lastsymbol $tags]
294
+ $cset persist
295
+ $cset destroy
269296
}
270297
271298
set lastsymbol {}
272299
set lasproject {}
273300
set branches {}
@@ -280,12 +307,14 @@
280307
}] {
281308
if {$lastsymbol != $sid} {
282309
if {[llength $branches]} {
283310
incr n
284311
set p [repository projectof $lastproject]
285
- project::rev %AUTO% $p sym::branch $lastsymbol $branches
312
+ set cset [project::rev %AUTO% $p sym::branch $lastsymbol $branches]
286313
set branches {}
314
+ $cset persist
315
+ $cset destroy
287316
}
288317
set lastsymbol $sid
289318
set lastproject $pid
290319
}
291320
lappend branches $bid
@@ -292,50 +321,17 @@
292321
}
293322
294323
if {[llength $branches]} {
295324
incr n
296325
set p [repository projectof $lastproject]
297
- project::rev %AUTO% $p sym::branch $lastsymbol $branches
298
- }
299
-
300
- log write 4 initcsets "Created [nsp $n {symbol changeset}]"
301
- mem::mark
302
- return
303
- }
304
-
305
- proc BreakInternalDependencies {} {
306
- # This code operates on the revision changesets created by
307
- # 'CreateRevisionChangesets'. As such it has to follow after
308
- # it, before the symbol changesets are made. The changesets
309
- # are inspected for internal conflicts and any such are broken
310
- # by splitting the problematic changeset into multiple
311
- # fragments. The results are changesets which have no internal
312
- # dependencies, only external ones.
313
-
314
- log write 3 initcsets {Break internal dependencies}
315
- mem::mark
316
- set old [llength [project::rev all]]
317
-
318
- foreach cset [project::rev all] {
319
- $cset breakinternaldependencies
320
- }
321
-
322
- set n [expr {[llength [project::rev all]] - $old}]
323
- log write 4 initcsets "Created [nsp $n {additional revision changeset}]"
324
- log write 4 initcsets Ok.
325
- mem::mark
326
- return
327
- }
328
-
329
- proc PersistTheChangesets {} {
330
- log write 3 initcsets "Saving [nsp [llength [project::rev all]] {initial changeset}] to the persistent state"
331
-
332
- foreach cset [project::rev all] {
333
- $cset persist
334
- }
335
-
336
- log write 4 initcsets Ok.
326
+ set cset [project::rev %AUTO% $p sym::branch $lastsymbol $branches]
327
+ $cset persist
328
+ $cset destroy
329
+ }
330
+
331
+ log write 4 initcsets "Created and saved [nsp $n {symbol changeset}]"
332
+ mem::mark
337333
return
338334
}
339335
340336
# # ## ### ##### ######## #############
341337
## Configuration
342338
--- tools/cvs2fossil/lib/c2f_pinitcsets.tcl
+++ tools/cvs2fossil/lib/c2f_pinitcsets.tcl
@@ -125,18 +125,24 @@
125 typemethod run {} {
126 # Pass manager interface. Executed to perform the
127 # functionality of the pass.
128
129 state transaction {
130 CreateRevisionChangesets ; # Group file revisions into csets.
131 BreakInternalDependencies ; # Split the csets based on internal conflicts.
132 CreateSymbolChangesets ; # Create csets for tags and branches.
133 PersistTheChangesets
 
 
134 }
135
136 repository printcsetstatistics
137 integrity changesets
 
 
 
 
138 return
139 }
140
141 typemethod discard {} {
142 # Pass manager interface. Executed for all passes after the
@@ -168,11 +174,18 @@
168
169 # We order the revisions here by time, this will help the
170 # later passes (avoids joins later to get at the ordering
171 # info).
172
173 set n 0
 
 
 
 
 
 
 
174
175 set lastmeta {}
176 set lastproject {}
177 set revisions {}
178
@@ -196,12 +209,15 @@
196 if {[llength $revisions]} {
197 incr n
198 set p [repository projectof $lastproject]
199 log write 14 initcsets meta_cset_begin
200 mem::mark
201 project::rev %AUTO% $p rev $lastmeta $revisions
202 log write 14 initcsets meta_cset_done
 
 
 
203 mem::mark
204 set revisions {}
205 }
206 set lastmeta $mid
207 set lastproject $pid
@@ -212,19 +228,26 @@
212 if {[llength $revisions]} {
213 incr n
214 set p [repository projectof $lastproject]
215 log write 14 initcsets meta_cset_begin
216 mem::mark
217 project::rev %AUTO% $p rev $lastmeta $revisions
218 log write 14 initcsets meta_cset_done
 
 
 
219 mem::mark
220 }
221
222 log write 14 initcsets meta_done
223 mem::mark
224
225 log write 4 initcsets "Created [nsp $n {revision changeset}]"
 
 
 
 
226 return
227 }
228
229 proc CreateSymbolChangesets {} {
230 log write 3 initcsets {Create changesets based on symbols}
@@ -251,12 +274,14 @@
251 }] {
252 if {$lastsymbol != $sid} {
253 if {[llength $tags]} {
254 incr n
255 set p [repository projectof $lastproject]
256 project::rev %AUTO% $p sym::tag $lastsymbol $tags
257 set tags {}
 
 
258 }
259 set lastsymbol $sid
260 set lastproject $pid
261 }
262 lappend tags $tid
@@ -263,11 +288,13 @@
263 }
264
265 if {[llength $tags]} {
266 incr n
267 set p [repository projectof $lastproject]
268 project::rev %AUTO% $p sym::tag $lastsymbol $tags
 
 
269 }
270
271 set lastsymbol {}
272 set lasproject {}
273 set branches {}
@@ -280,12 +307,14 @@
280 }] {
281 if {$lastsymbol != $sid} {
282 if {[llength $branches]} {
283 incr n
284 set p [repository projectof $lastproject]
285 project::rev %AUTO% $p sym::branch $lastsymbol $branches
286 set branches {}
 
 
287 }
288 set lastsymbol $sid
289 set lastproject $pid
290 }
291 lappend branches $bid
@@ -292,50 +321,17 @@
292 }
293
294 if {[llength $branches]} {
295 incr n
296 set p [repository projectof $lastproject]
297 project::rev %AUTO% $p sym::branch $lastsymbol $branches
298 }
299
300 log write 4 initcsets "Created [nsp $n {symbol changeset}]"
301 mem::mark
302 return
303 }
304
305 proc BreakInternalDependencies {} {
306 # This code operates on the revision changesets created by
307 # 'CreateRevisionChangesets'. As such it has to follow after
308 # it, before the symbol changesets are made. The changesets
309 # are inspected for internal conflicts and any such are broken
310 # by splitting the problematic changeset into multiple
311 # fragments. The results are changesets which have no internal
312 # dependencies, only external ones.
313
314 log write 3 initcsets {Break internal dependencies}
315 mem::mark
316 set old [llength [project::rev all]]
317
318 foreach cset [project::rev all] {
319 $cset breakinternaldependencies
320 }
321
322 set n [expr {[llength [project::rev all]] - $old}]
323 log write 4 initcsets "Created [nsp $n {additional revision changeset}]"
324 log write 4 initcsets Ok.
325 mem::mark
326 return
327 }
328
329 proc PersistTheChangesets {} {
330 log write 3 initcsets "Saving [nsp [llength [project::rev all]] {initial changeset}] to the persistent state"
331
332 foreach cset [project::rev all] {
333 $cset persist
334 }
335
336 log write 4 initcsets Ok.
337 return
338 }
339
340 # # ## ### ##### ######## #############
341 ## Configuration
342
--- tools/cvs2fossil/lib/c2f_pinitcsets.tcl
+++ tools/cvs2fossil/lib/c2f_pinitcsets.tcl
@@ -125,18 +125,24 @@
125 typemethod run {} {
126 # Pass manager interface. Executed to perform the
127 # functionality of the pass.
128
129 state transaction {
130 CreateRevisionChangesets ; # Group file revisions into
131 # preliminary csets and split
132 # them based on internal
133 # conflicts.
134 CreateSymbolChangesets ; # Create csets for tags and
135 # branches.
136 }
137
138 repository printcsetstatistics
139 integrity changesets
140
141 # Load the changesets for use by the next passes.
142 project::rev load ::vc::fossil::import::cvs::repository
143 project::rev loadcounter
144 return
145 }
146
147 typemethod discard {} {
148 # Pass manager interface. Executed for all passes after the
@@ -168,11 +174,18 @@
174
175 # We order the revisions here by time, this will help the
176 # later passes (avoids joins later to get at the ordering
177 # info).
178
179 # The changesets made from these groups are immediately
180 # inspected for internal conflicts and any such are broken by
181 # splitting the problematic changeset into multiple
182 # fragments. The results are changesets which have no internal
183 # dependencies, only external ones.
184
185 set n 0
186 set nx 0
187
188 set lastmeta {}
189 set lastproject {}
190 set revisions {}
191
@@ -196,12 +209,15 @@
209 if {[llength $revisions]} {
210 incr n
211 set p [repository projectof $lastproject]
212 log write 14 initcsets meta_cset_begin
213 mem::mark
214 set cset [project::rev %AUTO% $p rev $lastmeta $revisions]
215 log write 14 initcsets meta_cset_done
216 $cset breakinternaldependencies nx
217 $cset persist
218 $cset destroy
219 mem::mark
220 set revisions {}
221 }
222 set lastmeta $mid
223 set lastproject $pid
@@ -212,19 +228,26 @@
228 if {[llength $revisions]} {
229 incr n
230 set p [repository projectof $lastproject]
231 log write 14 initcsets meta_cset_begin
232 mem::mark
233 set cset [project::rev %AUTO% $p rev $lastmeta $revisions]
234 log write 14 initcsets meta_cset_done
235 $cset breakinternaldependencies nx
236 $cset persist
237 $cset destroy
238 mem::mark
239 }
240
241 log write 14 initcsets meta_done
242 mem::mark
243
244 log write 4 initcsets "Created and saved [nsp $n {revision changeset}]"
245 log write 4 initcsets "Created and saved [nsp $nx {additional revision changeset}]"
246
247 mem::mark
248 log write 4 initcsets Ok.
249 return
250 }
251
252 proc CreateSymbolChangesets {} {
253 log write 3 initcsets {Create changesets based on symbols}
@@ -251,12 +274,14 @@
274 }] {
275 if {$lastsymbol != $sid} {
276 if {[llength $tags]} {
277 incr n
278 set p [repository projectof $lastproject]
279 set cset [project::rev %AUTO% $p sym::tag $lastsymbol $tags]
280 set tags {}
281 $cset persist
282 $cset destroy
283 }
284 set lastsymbol $sid
285 set lastproject $pid
286 }
287 lappend tags $tid
@@ -263,11 +288,13 @@
288 }
289
290 if {[llength $tags]} {
291 incr n
292 set p [repository projectof $lastproject]
293 set cset [project::rev %AUTO% $p sym::tag $lastsymbol $tags]
294 $cset persist
295 $cset destroy
296 }
297
298 set lastsymbol {}
299 set lasproject {}
300 set branches {}
@@ -280,12 +307,14 @@
307 }] {
308 if {$lastsymbol != $sid} {
309 if {[llength $branches]} {
310 incr n
311 set p [repository projectof $lastproject]
312 set cset [project::rev %AUTO% $p sym::branch $lastsymbol $branches]
313 set branches {}
314 $cset persist
315 $cset destroy
316 }
317 set lastsymbol $sid
318 set lastproject $pid
319 }
320 lappend branches $bid
@@ -292,50 +321,17 @@
321 }
322
323 if {[llength $branches]} {
324 incr n
325 set p [repository projectof $lastproject]
326 set cset [project::rev %AUTO% $p sym::branch $lastsymbol $branches]
327 $cset persist
328 $cset destroy
329 }
330
331 log write 4 initcsets "Created and saved [nsp $n {symbol changeset}]"
332 mem::mark
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
333 return
334 }
335
336 # # ## ### ##### ######## #############
337 ## Configuration
338
--- tools/cvs2fossil/lib/c2f_prev.tcl
+++ tools/cvs2fossil/lib/c2f_prev.tcl
@@ -61,10 +61,25 @@
6161
lappend mytitems $key
6262
log write 8 csets {MAP+ item <$key> $self = [$self str]}
6363
}
6464
return
6565
}
66
+
67
+ destructor {
68
+ # The main thing is to keep track of the itemmap and remove
69
+ # the object from it. The lists of changesets (mychangesets,
70
+ # mytchangesets) are not maintained (= reduced), for the
71
+ # moment. We may be able to get rid of this entirely, at least
72
+ # for (de)construction and pass InitCSets.
73
+
74
+ foreach iid $myitems {
75
+ set key [list $mytype $iid]
76
+ unset myitemmap($key)
77
+ log write 8 csets {MAP- item <$key> $self = [$self str]}
78
+ }
79
+ return
80
+ }
6681
6782
method str {} {
6883
set str "<"
6984
set detail ""
7085
if {[$mytypeobj bysymbol]} {
@@ -132,11 +147,12 @@
132147
method nextmap {} {
133148
$mytypeobj successors tmp $myitems
134149
return [array get tmp]
135150
}
136151
137
- method breakinternaldependencies {} {
152
+ method breakinternaldependencies {cv} {
153
+ upvar 1 $cv counter
138154
log write 14 csets {[$self str] BID}
139155
vc::tools::mem::mark
140156
##
141157
## NOTE: This method, maybe in conjunction with its caller
142158
## seems to be a memory hog, especially for large
@@ -288,10 +304,11 @@
288304
foreach fragment [lrange $fragments 1 end] {
289305
Border $fragment s e
290306
integrity assert {$laste == ($s - 1)} {Bad fragment border <$laste | $s>, gap or overlap}
291307
292308
set new [$type %AUTO% $myproject $mytype $mysrcid [lrange $myitems $s $e]]
309
+ incr counter
293310
294311
log write 4 csets "Breaking [$self str ] @ $laste, new [$new str], cutting $breaks($laste)"
295312
296313
set laste $e
297314
}
298315
--- tools/cvs2fossil/lib/c2f_prev.tcl
+++ tools/cvs2fossil/lib/c2f_prev.tcl
@@ -61,10 +61,25 @@
61 lappend mytitems $key
62 log write 8 csets {MAP+ item <$key> $self = [$self str]}
63 }
64 return
65 }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
66
67 method str {} {
68 set str "<"
69 set detail ""
70 if {[$mytypeobj bysymbol]} {
@@ -132,11 +147,12 @@
132 method nextmap {} {
133 $mytypeobj successors tmp $myitems
134 return [array get tmp]
135 }
136
137 method breakinternaldependencies {} {
 
138 log write 14 csets {[$self str] BID}
139 vc::tools::mem::mark
140 ##
141 ## NOTE: This method, maybe in conjunction with its caller
142 ## seems to be a memory hog, especially for large
@@ -288,10 +304,11 @@
288 foreach fragment [lrange $fragments 1 end] {
289 Border $fragment s e
290 integrity assert {$laste == ($s - 1)} {Bad fragment border <$laste | $s>, gap or overlap}
291
292 set new [$type %AUTO% $myproject $mytype $mysrcid [lrange $myitems $s $e]]
 
293
294 log write 4 csets "Breaking [$self str ] @ $laste, new [$new str], cutting $breaks($laste)"
295
296 set laste $e
297 }
298
--- tools/cvs2fossil/lib/c2f_prev.tcl
+++ tools/cvs2fossil/lib/c2f_prev.tcl
@@ -61,10 +61,25 @@
61 lappend mytitems $key
62 log write 8 csets {MAP+ item <$key> $self = [$self str]}
63 }
64 return
65 }
66
67 destructor {
68 # The main thing is to keep track of the itemmap and remove
69 # the object from it. The lists of changesets (mychangesets,
70 # mytchangesets) are not maintained (= reduced), for the
71 # moment. We may be able to get rid of this entirely, at least
72 # for (de)construction and pass InitCSets.
73
74 foreach iid $myitems {
75 set key [list $mytype $iid]
76 unset myitemmap($key)
77 log write 8 csets {MAP- item <$key> $self = [$self str]}
78 }
79 return
80 }
81
82 method str {} {
83 set str "<"
84 set detail ""
85 if {[$mytypeobj bysymbol]} {
@@ -132,11 +147,12 @@
147 method nextmap {} {
148 $mytypeobj successors tmp $myitems
149 return [array get tmp]
150 }
151
152 method breakinternaldependencies {cv} {
153 upvar 1 $cv counter
154 log write 14 csets {[$self str] BID}
155 vc::tools::mem::mark
156 ##
157 ## NOTE: This method, maybe in conjunction with its caller
158 ## seems to be a memory hog, especially for large
@@ -288,10 +304,11 @@
304 foreach fragment [lrange $fragments 1 end] {
305 Border $fragment s e
306 integrity assert {$laste == ($s - 1)} {Bad fragment border <$laste | $s>, gap or overlap}
307
308 set new [$type %AUTO% $myproject $mytype $mysrcid [lrange $myitems $s $e]]
309 incr counter
310
311 log write 4 csets "Breaking [$self str ] @ $laste, new [$new str], cutting $breaks($laste)"
312
313 set laste $e
314 }
315

Keyboard Shortcuts

Open search /
Next entry (timeline) j
Previous entry (timeline) k
Open focused entry Enter
Show this help ?
Toggle theme Top nav button