Fossil SCM

Reworked the revision import to use the new state tracking system instead of the simple array. Moved some log outputs. Added a file listing the known problems to prevent me from forgetting stuff as it piles up :/

aku 2008-02-04 06:05 trunk
Commit e1dbf3186dd40762f79a22957096dfa1a498875a
--- a/cvs2fossil.txt
+++ b/cvs2fossil.txt
@@ -0,0 +1,19 @@
1
+
2
+Known problems and areas to work on
3
+===================================
4
+
5
+* Currently not properly tracking when a file is removed on some
6
+ branch (detectable by a 'dead' revision (optype)) during the
7
+ import of changesets.
8
+
9
+* Not yet able to handle the specification of multiple projects
10
+ for one CVS repository. I.e. I can, for example, import all of
11
+ tcllib, or a single subproject of tcllib, like tklib, but not
12
+ multiple sub-projects in one go.
13
+
14
+* An internal error thrown when trying to import tcllib of
15
+ tcllib shows that I am apparently not properly handling the
16
+ possibility of more than one symbol used to create a
17
+ vendor-branch with.
18
+
19
+ In tcllib most files (
--- a/cvs2fossil.txt
+++ b/cvs2fossil.txt
@@ -0,0 +1,19 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
--- a/cvs2fossil.txt
+++ b/cvs2fossil.txt
@@ -0,0 +1,19 @@
1
2 Known problems and areas to work on
3 ===================================
4
5 * Currently not properly tracking when a file is removed on some
6 branch (detectable by a 'dead' revision (optype)) during the
7 import of changesets.
8
9 * Not yet able to handle the specification of multiple projects
10 for one CVS repository. I.e. I can, for example, import all of
11 tcllib, or a single subproject of tcllib, like tklib, but not
12 multiple sub-projects in one go.
13
14 * An internal error thrown when trying to import tcllib of
15 tcllib shows that I am apparently not properly handling the
16 possibility of more than one symbol used to create a
17 vendor-branch with.
18
19 In tcllib most files (
--- tools/cvs2fossil/lib/c2f_file.tcl
+++ tools/cvs2fossil/lib/c2f_file.tcl
@@ -275,10 +275,12 @@
275275
276276
# # ## ### ##### ######## #############
277277
## Pass XII (Import).
278278
279279
method pushto {repository} {
280
+ log write 2 file {Importing file "$mypath"}
281
+
280282
set ws [$repository workspace]
281283
struct::list assign [$self Expand $ws] filemap revmap
282284
# filemap = dict (path -> uuid)
283285
# revmap = dict (path -> rid)
284286
285287
--- tools/cvs2fossil/lib/c2f_file.tcl
+++ tools/cvs2fossil/lib/c2f_file.tcl
@@ -275,10 +275,12 @@
275
276 # # ## ### ##### ######## #############
277 ## Pass XII (Import).
278
279 method pushto {repository} {
 
 
280 set ws [$repository workspace]
281 struct::list assign [$self Expand $ws] filemap revmap
282 # filemap = dict (path -> uuid)
283 # revmap = dict (path -> rid)
284
285
--- tools/cvs2fossil/lib/c2f_file.tcl
+++ tools/cvs2fossil/lib/c2f_file.tcl
@@ -275,10 +275,12 @@
275
276 # # ## ### ##### ######## #############
277 ## Pass XII (Import).
278
279 method pushto {repository} {
280 log write 2 file {Importing file "$mypath"}
281
282 set ws [$repository workspace]
283 struct::list assign [$self Expand $ws] filemap revmap
284 # filemap = dict (path -> uuid)
285 # revmap = dict (path -> rid)
286
287
--- tools/cvs2fossil/lib/c2f_pimport.tcl
+++ tools/cvs2fossil/lib/c2f_pimport.tcl
@@ -22,10 +22,11 @@
2222
package require snit ; # OO system.
2323
package require vc::tools::log ; # User feedback.
2424
package require vc::fossil::import::cvs::repository ; # Repository management.
2525
package require vc::fossil::import::cvs::state ; # State storage.
2626
package require vc::fossil::import::cvs::fossil ; # Access to fossil repositories.
27
+package require vc::fossil::import::cvs::ristate ; # Import state (revisions)
2728
2829
# # ## ### ##### ######## ############# #####################
2930
## Register the pass with the management
3031
3132
vc::fossil::import::cvs::pass define \
@@ -84,26 +85,25 @@
8485
8586
foreach project [repository projects] {
8687
log write 1 import {Importing project "[$project base]"}
8788
8889
set fossil [fossil %AUTO%]
90
+ set rstate [ristate %AUTO%]
8991
9092
state transaction {
9193
# Layer I: Files and their revisions
9294
foreach file [$project files] {
93
- set path [$file path]
94
- log write 2 import {Importing file "$path"}
9595
$file pushto $fossil
9696
}
9797
# Layer II: Changesets
98
- array set rstate {}
9998
foreach {revision date} [$project revisionsinorder] {
100
- log write 2 import {Importing revision [$revision str]}
101
- $revision pushto rstate $fossil $date
99
+ $revision pushto $fossil $date $rstate
102100
}
103101
unset rstate
104102
}
103
+
104
+ $rstate destroy
105105
106106
# At last copy the temporary repository file to its final
107107
# destination and release the associated memory.
108108
109109
$fossil finalize [$project base].fsl
@@ -140,10 +140,11 @@
140140
namespace export import
141141
namespace eval import {
142142
namespace import ::vc::fossil::import::cvs::repository
143143
namespace import ::vc::fossil::import::cvs::state
144144
namespace import ::vc::fossil::import::cvs::fossil
145
+ namespace import ::vc::fossil::import::cvs::ristate
145146
namespace import ::vc::tools::log
146147
log register import
147148
}
148149
}
149150
150151
--- tools/cvs2fossil/lib/c2f_pimport.tcl
+++ tools/cvs2fossil/lib/c2f_pimport.tcl
@@ -22,10 +22,11 @@
22 package require snit ; # OO system.
23 package require vc::tools::log ; # User feedback.
24 package require vc::fossil::import::cvs::repository ; # Repository management.
25 package require vc::fossil::import::cvs::state ; # State storage.
26 package require vc::fossil::import::cvs::fossil ; # Access to fossil repositories.
 
27
28 # # ## ### ##### ######## ############# #####################
29 ## Register the pass with the management
30
31 vc::fossil::import::cvs::pass define \
@@ -84,26 +85,25 @@
84
85 foreach project [repository projects] {
86 log write 1 import {Importing project "[$project base]"}
87
88 set fossil [fossil %AUTO%]
 
89
90 state transaction {
91 # Layer I: Files and their revisions
92 foreach file [$project files] {
93 set path [$file path]
94 log write 2 import {Importing file "$path"}
95 $file pushto $fossil
96 }
97 # Layer II: Changesets
98 array set rstate {}
99 foreach {revision date} [$project revisionsinorder] {
100 log write 2 import {Importing revision [$revision str]}
101 $revision pushto rstate $fossil $date
102 }
103 unset rstate
104 }
 
 
105
106 # At last copy the temporary repository file to its final
107 # destination and release the associated memory.
108
109 $fossil finalize [$project base].fsl
@@ -140,10 +140,11 @@
140 namespace export import
141 namespace eval import {
142 namespace import ::vc::fossil::import::cvs::repository
143 namespace import ::vc::fossil::import::cvs::state
144 namespace import ::vc::fossil::import::cvs::fossil
 
145 namespace import ::vc::tools::log
146 log register import
147 }
148 }
149
150
--- tools/cvs2fossil/lib/c2f_pimport.tcl
+++ tools/cvs2fossil/lib/c2f_pimport.tcl
@@ -22,10 +22,11 @@
22 package require snit ; # OO system.
23 package require vc::tools::log ; # User feedback.
24 package require vc::fossil::import::cvs::repository ; # Repository management.
25 package require vc::fossil::import::cvs::state ; # State storage.
26 package require vc::fossil::import::cvs::fossil ; # Access to fossil repositories.
27 package require vc::fossil::import::cvs::ristate ; # Import state (revisions)
28
29 # # ## ### ##### ######## ############# #####################
30 ## Register the pass with the management
31
32 vc::fossil::import::cvs::pass define \
@@ -84,26 +85,25 @@
85
86 foreach project [repository projects] {
87 log write 1 import {Importing project "[$project base]"}
88
89 set fossil [fossil %AUTO%]
90 set rstate [ristate %AUTO%]
91
92 state transaction {
93 # Layer I: Files and their revisions
94 foreach file [$project files] {
 
 
95 $file pushto $fossil
96 }
97 # Layer II: Changesets
 
98 foreach {revision date} [$project revisionsinorder] {
99 $revision pushto $fossil $date $rstate
 
100 }
101 unset rstate
102 }
103
104 $rstate destroy
105
106 # At last copy the temporary repository file to its final
107 # destination and release the associated memory.
108
109 $fossil finalize [$project base].fsl
@@ -140,10 +140,11 @@
140 namespace export import
141 namespace eval import {
142 namespace import ::vc::fossil::import::cvs::repository
143 namespace import ::vc::fossil::import::cvs::state
144 namespace import ::vc::fossil::import::cvs::fossil
145 namespace import ::vc::fossil::import::cvs::ristate
146 namespace import ::vc::tools::log
147 log register import
148 }
149 }
150
151
--- tools/cvs2fossil/lib/c2f_prev.tcl
+++ tools/cvs2fossil/lib/c2f_prev.tcl
@@ -389,13 +389,11 @@
389389
if {!$kill} return
390390
trouble internal "[$self str] depends on itself"
391391
return
392392
}
393393
394
- method pushto {sv repository date} {
395
- upvar 1 $sv state
396
-
394
+ method pushto {repository date rstate} {
397395
# Generate and import the manifest for this changeset.
398396
#
399397
# Data needed:
400398
# - Commit message (-- mysrcid -> repository meta)
401399
# - User doing the commit (s.a.)
@@ -408,19 +406,36 @@
408406
# - List of the file revisions in the changeset.
409407
410408
struct::list assign [$myproject getmeta $mysrcid] __ branch user message
411409
struct::list assign $branch __ lodname
412410
411
+ log write 2 csets {Importing revision [$self str] on $lodname}
412
+
413413
# Perform the import. As part of that we determine the parent
414414
# we need, and convert the list of items in the changeset into
415415
# uuids and printable data.
416416
417
- set uuid [Updatestate state $lodname \
418
- [$repository importrevision [$self str] \
419
- $user $message $date \
420
- [Getparent state $lodname $myproject $myitems] \
421
- [Getrevisioninfo $myitems]]]
417
+ struct::list assign [Getisdefault $myitems] isdefault lastdefaultontrunk
418
+
419
+ log write 8 csets {LOD '$lodname'}
420
+ log write 8 csets { def? $isdefault}
421
+ log write 8 csets { last? $lastdefaultontrunk}
422
+
423
+ set lws [Getworkspace $rstate $lodname $myproject $isdefault]
424
+ $lws add [Getrevisioninfo $myitems]
425
+
426
+ set uuid [$repository importrevision [$self str] \
427
+ $user $message $date \
428
+ [$lws getid] [$lws get]]
429
+
430
+ # Remember the imported changeset in the state, under our
431
+ # LOD. And if it is the last trunk changeset on the vendor
432
+ # branch then the revision is also the actual root of the
433
+ # :trunk:, so we remember it as such in the state.
434
+
435
+ $lws defid $uuid
436
+ if {$lastdefaultontrunk} { $rstate new :trunk: [$lws name] }
422437
423438
# Remember the whole changeset / uuid mapping, for the tags.
424439
425440
state run {
426441
INSERT INTO csuuid (cid, uuid)
@@ -442,80 +457,58 @@
442457
lappend revisions $frid $path $fname/$revnr
443458
}
444459
return $revisions
445460
}
446461
447
- proc Getparent {sv lodname project items} {
448
- upvar 1 $sv state
449
-
450
- struct::list assign [Getisdefault $items] isdefault lastdefaultontrunk
451
-
452
- log write 8 csets {LOD '$lodname'}
453
- log write 8 csets { def? $isdefault}
454
- log write 8 csets { last? $lastdefaultontrunk}
455
-
456
- foreach k [lsort [array names state]] {
457
- log write 8 csets { $k = $state($k)}
458
- }
459
-
460
- # See (a) below, we have to remember if the changeset is last
461
- # on vendor branch also belonging to trunk even if we find a
462
- # parent in the state. The caller will later (after import)
463
- # make us the first trunk changeset in the state (See (**)).
464
-
465
- if {$lastdefaultontrunk} {
466
- set state(:vendor:last:) .
467
- }
468
-
469
- # The state array holds for each line-of-development (LOD) the
470
- # last committed changeset belonging to that LOD.
462
+ proc Getworkspace {rstate lodname project isdefault} {
463
+
464
+ # The state object holds the workspace state of each known
465
+ # line-of-development (LOD), up to the last committed
466
+ # changeset belonging to that LOD.
471467
472468
# (*) Standard handling if in-LOD changesets. If the LOD of
473469
# the current changeset exists in the state (= has been
474
- # committed to) then the stored changeset is the parent we
475
- # are looking for.
470
+ # committed to) then this it has the workspace we are
471
+ # looking for.
476472
477
- if {[info exists state($lodname)]} {
478
- return $state($lodname)
473
+ if {[$rstate has $lodname]} {
474
+ return [$rstate get $lodname]
479475
}
480476
481
- # If the LOD is not yet known the current changeset can either
482
- # be
483
- # (a) the root of a vendor branch,
484
- # (b) the root of the trunk LOD, or
477
+ # If the LOD is however not yet known, then the current
478
+ # changeset can be either of
479
+ # (a) root of a vendor branch,
480
+ # (b) root of the trunk LOD, or
485481
# (c) the first changeset in a new LOD which was spawned from
486482
# an existing LOD.
487483
488
- if {$isdefault} {
489
- # In case of (a) the changeset has no parent, signaled by
490
- # the empty string. We do remember if the changeset is
491
- # last on the vendor branch still belonging to trunk, for
492
- # the trunk root.
493
- return {}
494
- }
495
-
496
- if {$lodname eq ":trunk:"} {
497
- # This is case (b), and we also can be sure that there is
498
- # no vendor branch changeset which could be our
499
- # parent. That was already dealt with through the
500
- # :vendor:last: signal and code in the caller (setting
501
- # such a changeset up as parent in the state, causing the
502
- # standard LOD handler at (*) to kick in. So, no parent
503
- # here at all.
504
- return {}
505
- }
506
-
507
- # Case (c). We find the parent LOD of our LOD and take the
508
- # last changeset committed to that as our parent. If that
509
- # doesn't exist we have an error on our hands.
484
+ if {$isdefault || ($lodname eq ":trunk:")} {
485
+ # For both (a) and (b) we have to create a new workspace
486
+ # for the lod, and it doesn't inherit from anything.
487
+
488
+ # Note that case (b) may never occur. See the variable
489
+ # 'lastdefaultontrunk' in the caller (method pushto). This
490
+ # flag can the generation of the workspace for the :trunk:
491
+ # LOD as well, making it inherit the state of the last
492
+ # trunk-changeset on the vendor-branch.
493
+
494
+ return [$rstate new $lodname]
495
+ }
496
+
497
+ # Case (c). We find the parent LOD of our LOD and let the new
498
+ # workspace inherit from the parent's workspace.
510499
511500
set plodname [[[$project getsymbol $lodname] parent] name]
512501
513502
log write 8 csets {pLOD '$plodname'}
514503
515
- if {[info exists state($plodname)]} {
516
- return $state($plodname)
504
+ if {[$rstate has $plodname]} {
505
+ return [$rstate new $lodname $plodname]
506
+ }
507
+
508
+ foreach k [lsort [$rstate names]] {
509
+ log write 8 csets { $k = [[$rstate get $k] getid]}
517510
}
518511
519512
trouble internal {Unable to determine changeset parent}
520513
return
521514
}
@@ -534,27 +527,10 @@
534527
# ambigous.
535528
536529
return [list $def [expr {$last ne ""}]]
537530
}
538531
539
- proc Updatestate {sv lodname uuid} {
540
- upvar 1 $sv state
541
-
542
- # Remember the imported changeset in the state, under our
543
- # LOD. (**) And if the :vendor:last: signal is present then
544
- # the revision is also the actual root of the :trunk:, so
545
- # remember it as such.
546
-
547
- set state($lodname) $uuid
548
- if {[info exists state(:vendor:last:)]} {
549
- unset state(:vendor:last:)
550
- set state(:trunk:) $uuid
551
- }
552
-
553
- return $uuid
554
- }
555
-
556532
typemethod split {cset args} {
557533
# As part of the creation of the new changesets specified in
558534
# ARGS as sets of items, all subsets of CSET's item set, CSET
559535
# will be dropped from all databases, in and out of memory,
560536
# and then destroyed.
561537
--- tools/cvs2fossil/lib/c2f_prev.tcl
+++ tools/cvs2fossil/lib/c2f_prev.tcl
@@ -389,13 +389,11 @@
389 if {!$kill} return
390 trouble internal "[$self str] depends on itself"
391 return
392 }
393
394 method pushto {sv repository date} {
395 upvar 1 $sv state
396
397 # Generate and import the manifest for this changeset.
398 #
399 # Data needed:
400 # - Commit message (-- mysrcid -> repository meta)
401 # - User doing the commit (s.a.)
@@ -408,19 +406,36 @@
408 # - List of the file revisions in the changeset.
409
410 struct::list assign [$myproject getmeta $mysrcid] __ branch user message
411 struct::list assign $branch __ lodname
412
 
 
413 # Perform the import. As part of that we determine the parent
414 # we need, and convert the list of items in the changeset into
415 # uuids and printable data.
416
417 set uuid [Updatestate state $lodname \
418 [$repository importrevision [$self str] \
419 $user $message $date \
420 [Getparent state $lodname $myproject $myitems] \
421 [Getrevisioninfo $myitems]]]
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
422
423 # Remember the whole changeset / uuid mapping, for the tags.
424
425 state run {
426 INSERT INTO csuuid (cid, uuid)
@@ -442,80 +457,58 @@
442 lappend revisions $frid $path $fname/$revnr
443 }
444 return $revisions
445 }
446
447 proc Getparent {sv lodname project items} {
448 upvar 1 $sv state
449
450 struct::list assign [Getisdefault $items] isdefault lastdefaultontrunk
451
452 log write 8 csets {LOD '$lodname'}
453 log write 8 csets { def? $isdefault}
454 log write 8 csets { last? $lastdefaultontrunk}
455
456 foreach k [lsort [array names state]] {
457 log write 8 csets { $k = $state($k)}
458 }
459
460 # See (a) below, we have to remember if the changeset is last
461 # on vendor branch also belonging to trunk even if we find a
462 # parent in the state. The caller will later (after import)
463 # make us the first trunk changeset in the state (See (**)).
464
465 if {$lastdefaultontrunk} {
466 set state(:vendor:last:) .
467 }
468
469 # The state array holds for each line-of-development (LOD) the
470 # last committed changeset belonging to that LOD.
471
472 # (*) Standard handling if in-LOD changesets. If the LOD of
473 # the current changeset exists in the state (= has been
474 # committed to) then the stored changeset is the parent we
475 # are looking for.
476
477 if {[info exists state($lodname)]} {
478 return $state($lodname)
479 }
480
481 # If the LOD is not yet known the current changeset can either
482 # be
483 # (a) the root of a vendor branch,
484 # (b) the root of the trunk LOD, or
485 # (c) the first changeset in a new LOD which was spawned from
486 # an existing LOD.
487
488 if {$isdefault} {
489 # In case of (a) the changeset has no parent, signaled by
490 # the empty string. We do remember if the changeset is
491 # last on the vendor branch still belonging to trunk, for
492 # the trunk root.
493 return {}
494 }
495
496 if {$lodname eq ":trunk:"} {
497 # This is case (b), and we also can be sure that there is
498 # no vendor branch changeset which could be our
499 # parent. That was already dealt with through the
500 # :vendor:last: signal and code in the caller (setting
501 # such a changeset up as parent in the state, causing the
502 # standard LOD handler at (*) to kick in. So, no parent
503 # here at all.
504 return {}
505 }
506
507 # Case (c). We find the parent LOD of our LOD and take the
508 # last changeset committed to that as our parent. If that
509 # doesn't exist we have an error on our hands.
510
511 set plodname [[[$project getsymbol $lodname] parent] name]
512
513 log write 8 csets {pLOD '$plodname'}
514
515 if {[info exists state($plodname)]} {
516 return $state($plodname)
 
 
 
 
517 }
518
519 trouble internal {Unable to determine changeset parent}
520 return
521 }
@@ -534,27 +527,10 @@
534 # ambigous.
535
536 return [list $def [expr {$last ne ""}]]
537 }
538
539 proc Updatestate {sv lodname uuid} {
540 upvar 1 $sv state
541
542 # Remember the imported changeset in the state, under our
543 # LOD. (**) And if the :vendor:last: signal is present then
544 # the revision is also the actual root of the :trunk:, so
545 # remember it as such.
546
547 set state($lodname) $uuid
548 if {[info exists state(:vendor:last:)]} {
549 unset state(:vendor:last:)
550 set state(:trunk:) $uuid
551 }
552
553 return $uuid
554 }
555
556 typemethod split {cset args} {
557 # As part of the creation of the new changesets specified in
558 # ARGS as sets of items, all subsets of CSET's item set, CSET
559 # will be dropped from all databases, in and out of memory,
560 # and then destroyed.
561
--- tools/cvs2fossil/lib/c2f_prev.tcl
+++ tools/cvs2fossil/lib/c2f_prev.tcl
@@ -389,13 +389,11 @@
389 if {!$kill} return
390 trouble internal "[$self str] depends on itself"
391 return
392 }
393
394 method pushto {repository date rstate} {
 
 
395 # Generate and import the manifest for this changeset.
396 #
397 # Data needed:
398 # - Commit message (-- mysrcid -> repository meta)
399 # - User doing the commit (s.a.)
@@ -408,19 +406,36 @@
406 # - List of the file revisions in the changeset.
407
408 struct::list assign [$myproject getmeta $mysrcid] __ branch user message
409 struct::list assign $branch __ lodname
410
411 log write 2 csets {Importing revision [$self str] on $lodname}
412
413 # Perform the import. As part of that we determine the parent
414 # we need, and convert the list of items in the changeset into
415 # uuids and printable data.
416
417 struct::list assign [Getisdefault $myitems] isdefault lastdefaultontrunk
418
419 log write 8 csets {LOD '$lodname'}
420 log write 8 csets { def? $isdefault}
421 log write 8 csets { last? $lastdefaultontrunk}
422
423 set lws [Getworkspace $rstate $lodname $myproject $isdefault]
424 $lws add [Getrevisioninfo $myitems]
425
426 set uuid [$repository importrevision [$self str] \
427 $user $message $date \
428 [$lws getid] [$lws get]]
429
430 # Remember the imported changeset in the state, under our
431 # LOD. And if it is the last trunk changeset on the vendor
432 # branch then the revision is also the actual root of the
433 # :trunk:, so we remember it as such in the state.
434
435 $lws defid $uuid
436 if {$lastdefaultontrunk} { $rstate new :trunk: [$lws name] }
437
438 # Remember the whole changeset / uuid mapping, for the tags.
439
440 state run {
441 INSERT INTO csuuid (cid, uuid)
@@ -442,80 +457,58 @@
457 lappend revisions $frid $path $fname/$revnr
458 }
459 return $revisions
460 }
461
462 proc Getworkspace {rstate lodname project isdefault} {
463
464 # The state object holds the workspace state of each known
465 # line-of-development (LOD), up to the last committed
466 # changeset belonging to that LOD.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
467
468 # (*) Standard handling if in-LOD changesets. If the LOD of
469 # the current changeset exists in the state (= has been
470 # committed to) then this it has the workspace we are
471 # looking for.
472
473 if {[$rstate has $lodname]} {
474 return [$rstate get $lodname]
475 }
476
477 # If the LOD is however not yet known, then the current
478 # changeset can be either of
479 # (a) root of a vendor branch,
480 # (b) root of the trunk LOD, or
481 # (c) the first changeset in a new LOD which was spawned from
482 # an existing LOD.
483
484 if {$isdefault || ($lodname eq ":trunk:")} {
485 # For both (a) and (b) we have to create a new workspace
486 # for the lod, and it doesn't inherit from anything.
487
488 # Note that case (b) may never occur. See the variable
489 # 'lastdefaultontrunk' in the caller (method pushto). This
490 # flag can the generation of the workspace for the :trunk:
491 # LOD as well, making it inherit the state of the last
492 # trunk-changeset on the vendor-branch.
493
494 return [$rstate new $lodname]
495 }
496
497 # Case (c). We find the parent LOD of our LOD and let the new
498 # workspace inherit from the parent's workspace.
 
 
 
 
 
 
 
499
500 set plodname [[[$project getsymbol $lodname] parent] name]
501
502 log write 8 csets {pLOD '$plodname'}
503
504 if {[$rstate has $plodname]} {
505 return [$rstate new $lodname $plodname]
506 }
507
508 foreach k [lsort [$rstate names]] {
509 log write 8 csets { $k = [[$rstate get $k] getid]}
510 }
511
512 trouble internal {Unable to determine changeset parent}
513 return
514 }
@@ -534,27 +527,10 @@
527 # ambigous.
528
529 return [list $def [expr {$last ne ""}]]
530 }
531
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
532 typemethod split {cset args} {
533 # As part of the creation of the new changesets specified in
534 # ARGS as sets of items, all subsets of CSET's item set, CSET
535 # will be dropped from all databases, in and out of memory,
536 # and then destroyed.
537

Keyboard Shortcuts

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