Fossil SCM

Easier name for self-referential changesets, loopcheck. Made conditional on option --loopcheck, default off, and avoided if the general checks on changesets report trouble. Reinstated the loop check in the cycle breaker core in simpler form, reusing the new command in the changeset class.

aku 2007-11-30 06:57 trunk
Commit 0af7a3c8acfdfce52ff74a7949db128303c3c3da
--- tools/cvs2fossil/lib/c2f_cyclebreaker.tcl
+++ tools/cvs2fossil/lib/c2f_cyclebreaker.tcl
@@ -24,10 +24,11 @@
2424
package require vc::tools::log ; # User feedback.
2525
package require vc::tools::trouble ; # Error reporting.
2626
package require vc::tools::misc ; # Text formatting.
2727
package require vc::fossil::import::cvs::project::rev ; # Project level changesets
2828
package require vc::fossil::import::cvs::project::revlink ; # Cycle links.
29
+package require vc::fossil::import::cvs::integrity ; # State integrity checks.
2930
3031
# # ## ### ##### ######## ############# #####################
3132
##
3233
3334
snit::type ::vc::fossil::import::cvs::cyclebreaker {
@@ -197,10 +198,14 @@
197198
foreach succ [$cset successors] {
198199
# Changesets may have dependencies outside of the
199200
# chosen set. These are ignored
200201
if {![$dg node exists $succ]} continue
201202
$dg arc insert $cset $succ
203
+ if {$succ eq $cset} {
204
+ $cset loopcheck
205
+ trouble fatal "[$cset str] depends on itself"
206
+ }
202207
}
203208
}
204209
205210
if {$log} {
206211
log write 3 cyclebreaker "Has [nsp [llength [$dg arcs]] dependency dependencies]"
@@ -416,10 +421,14 @@
416421
foreach succ [$cset successors] {
417422
# The new changesets may have dependencies outside of
418423
# the chosen set. These are ignored
419424
if {![$dg node exists $succ]} continue
420425
$dg arc insert $cset $succ
426
+ if {$succ eq $cset} {
427
+ $cset loopcheck
428
+ trouble fatal "[$cset str] depends on itself"
429
+ }
421430
}
422431
}
423432
foreach cset $pre {
424433
foreach succ [$cset successors] {
425434
# Note that the arc may already exist in the graph. If
@@ -539,10 +548,11 @@
539548
540549
namespace eval ::vc::fossil::import::cvs {
541550
namespace export cyclebreaker
542551
namespace eval cyclebreaker {
543552
namespace eval project {
553
+ namespace import ::vc::fossil::import::cvs::integrity
544554
namespace import ::vc::fossil::import::cvs::project::rev
545555
namespace import ::vc::fossil::import::cvs::project::revlink
546556
}
547557
namespace import ::vc::tools::misc::*
548558
namespace import ::vc::tools::log
549559
--- tools/cvs2fossil/lib/c2f_cyclebreaker.tcl
+++ tools/cvs2fossil/lib/c2f_cyclebreaker.tcl
@@ -24,10 +24,11 @@
24 package require vc::tools::log ; # User feedback.
25 package require vc::tools::trouble ; # Error reporting.
26 package require vc::tools::misc ; # Text formatting.
27 package require vc::fossil::import::cvs::project::rev ; # Project level changesets
28 package require vc::fossil::import::cvs::project::revlink ; # Cycle links.
 
29
30 # # ## ### ##### ######## ############# #####################
31 ##
32
33 snit::type ::vc::fossil::import::cvs::cyclebreaker {
@@ -197,10 +198,14 @@
197 foreach succ [$cset successors] {
198 # Changesets may have dependencies outside of the
199 # chosen set. These are ignored
200 if {![$dg node exists $succ]} continue
201 $dg arc insert $cset $succ
 
 
 
 
202 }
203 }
204
205 if {$log} {
206 log write 3 cyclebreaker "Has [nsp [llength [$dg arcs]] dependency dependencies]"
@@ -416,10 +421,14 @@
416 foreach succ [$cset successors] {
417 # The new changesets may have dependencies outside of
418 # the chosen set. These are ignored
419 if {![$dg node exists $succ]} continue
420 $dg arc insert $cset $succ
 
 
 
 
421 }
422 }
423 foreach cset $pre {
424 foreach succ [$cset successors] {
425 # Note that the arc may already exist in the graph. If
@@ -539,10 +548,11 @@
539
540 namespace eval ::vc::fossil::import::cvs {
541 namespace export cyclebreaker
542 namespace eval cyclebreaker {
543 namespace eval project {
 
544 namespace import ::vc::fossil::import::cvs::project::rev
545 namespace import ::vc::fossil::import::cvs::project::revlink
546 }
547 namespace import ::vc::tools::misc::*
548 namespace import ::vc::tools::log
549
--- tools/cvs2fossil/lib/c2f_cyclebreaker.tcl
+++ tools/cvs2fossil/lib/c2f_cyclebreaker.tcl
@@ -24,10 +24,11 @@
24 package require vc::tools::log ; # User feedback.
25 package require vc::tools::trouble ; # Error reporting.
26 package require vc::tools::misc ; # Text formatting.
27 package require vc::fossil::import::cvs::project::rev ; # Project level changesets
28 package require vc::fossil::import::cvs::project::revlink ; # Cycle links.
29 package require vc::fossil::import::cvs::integrity ; # State integrity checks.
30
31 # # ## ### ##### ######## ############# #####################
32 ##
33
34 snit::type ::vc::fossil::import::cvs::cyclebreaker {
@@ -197,10 +198,14 @@
198 foreach succ [$cset successors] {
199 # Changesets may have dependencies outside of the
200 # chosen set. These are ignored
201 if {![$dg node exists $succ]} continue
202 $dg arc insert $cset $succ
203 if {$succ eq $cset} {
204 $cset loopcheck
205 trouble fatal "[$cset str] depends on itself"
206 }
207 }
208 }
209
210 if {$log} {
211 log write 3 cyclebreaker "Has [nsp [llength [$dg arcs]] dependency dependencies]"
@@ -416,10 +421,14 @@
421 foreach succ [$cset successors] {
422 # The new changesets may have dependencies outside of
423 # the chosen set. These are ignored
424 if {![$dg node exists $succ]} continue
425 $dg arc insert $cset $succ
426 if {$succ eq $cset} {
427 $cset loopcheck
428 trouble fatal "[$cset str] depends on itself"
429 }
430 }
431 }
432 foreach cset $pre {
433 foreach succ [$cset successors] {
434 # Note that the arc may already exist in the graph. If
@@ -539,10 +548,11 @@
548
549 namespace eval ::vc::fossil::import::cvs {
550 namespace export cyclebreaker
551 namespace eval cyclebreaker {
552 namespace eval project {
553 namespace import ::vc::fossil::import::cvs::integrity
554 namespace import ::vc::fossil::import::cvs::project::rev
555 namespace import ::vc::fossil::import::cvs::project::revlink
556 }
557 namespace import ::vc::tools::misc::*
558 namespace import ::vc::tools::log
559
--- tools/cvs2fossil/lib/c2f_integrity.tcl
+++ tools/cvs2fossil/lib/c2f_integrity.tcl
@@ -58,11 +58,18 @@
5858
5959
set n 0
6060
RevisionChangesets
6161
TagChangesets
6262
BranchChangesets
63
- Selfreferentiality $csets
63
+ trouble abort? ; # Avoid expensive check if anything found before
64
+
65
+ LoopCheck $csets
66
+ return
67
+ }
68
+
69
+ typemethof loopcheckon {} {
70
+ set myloopcheck 1
6471
return
6572
}
6673
6774
# # ## ### ##### ######## #############
6875
## Internal methods
@@ -736,15 +743,18 @@
736743
AND T.tid = C.type
737744
}
738745
return
739746
}
740747
741
- proc Selfreferentiality {csets} {
748
+ proc LoopCheck {csets} {
749
+ variable ::myloopcheck
750
+ if {!$myloopcheck} return
751
+
742752
log write 4 integrity {Checking changesets for self-references}
743753
744754
foreach cset $csets {
745
- if {[$cset selfreferential]} {
755
+ if {[$cset loopcheck]} {
746756
trouble fatal "[$cset str] depends on itself"
747757
}
748758
}
749759
return
750760
}
@@ -866,10 +876,17 @@
866876
trouble fatal "$fname <$revnr> [string map [list @ $b] $label]"
867877
}
868878
log write 5 integrity {\[[format %02d [incr n]]\] [expr {$ok ? "Ok " : "Failed"}] ... $header}
869879
return
870880
}
881
+
882
+ # # ## ### ##### ######## #############
883
+
884
+ typevariable myloopcheck 0 ; # Boolean flag. Controls whether
885
+ # 'integrity changesets' looks for
886
+ # changesets with loops or not.
887
+ # Default is to not look for them.
871888
872889
# # ## ### ##### ######## #############
873890
## Configuration
874891
875892
pragma -hasinstances no ; # singleton
876893
--- tools/cvs2fossil/lib/c2f_integrity.tcl
+++ tools/cvs2fossil/lib/c2f_integrity.tcl
@@ -58,11 +58,18 @@
58
59 set n 0
60 RevisionChangesets
61 TagChangesets
62 BranchChangesets
63 Selfreferentiality $csets
 
 
 
 
 
 
 
64 return
65 }
66
67 # # ## ### ##### ######## #############
68 ## Internal methods
@@ -736,15 +743,18 @@
736 AND T.tid = C.type
737 }
738 return
739 }
740
741 proc Selfreferentiality {csets} {
 
 
 
742 log write 4 integrity {Checking changesets for self-references}
743
744 foreach cset $csets {
745 if {[$cset selfreferential]} {
746 trouble fatal "[$cset str] depends on itself"
747 }
748 }
749 return
750 }
@@ -866,10 +876,17 @@
866 trouble fatal "$fname <$revnr> [string map [list @ $b] $label]"
867 }
868 log write 5 integrity {\[[format %02d [incr n]]\] [expr {$ok ? "Ok " : "Failed"}] ... $header}
869 return
870 }
 
 
 
 
 
 
 
871
872 # # ## ### ##### ######## #############
873 ## Configuration
874
875 pragma -hasinstances no ; # singleton
876
--- tools/cvs2fossil/lib/c2f_integrity.tcl
+++ tools/cvs2fossil/lib/c2f_integrity.tcl
@@ -58,11 +58,18 @@
58
59 set n 0
60 RevisionChangesets
61 TagChangesets
62 BranchChangesets
63 trouble abort? ; # Avoid expensive check if anything found before
64
65 LoopCheck $csets
66 return
67 }
68
69 typemethof loopcheckon {} {
70 set myloopcheck 1
71 return
72 }
73
74 # # ## ### ##### ######## #############
75 ## Internal methods
@@ -736,15 +743,18 @@
743 AND T.tid = C.type
744 }
745 return
746 }
747
748 proc LoopCheck {csets} {
749 variable ::myloopcheck
750 if {!$myloopcheck} return
751
752 log write 4 integrity {Checking changesets for self-references}
753
754 foreach cset $csets {
755 if {[$cset loopcheck]} {
756 trouble fatal "[$cset str] depends on itself"
757 }
758 }
759 return
760 }
@@ -866,10 +876,17 @@
876 trouble fatal "$fname <$revnr> [string map [list @ $b] $label]"
877 }
878 log write 5 integrity {\[[format %02d [incr n]]\] [expr {$ok ? "Ok " : "Failed"}] ... $header}
879 return
880 }
881
882 # # ## ### ##### ######## #############
883
884 typevariable myloopcheck 0 ; # Boolean flag. Controls whether
885 # 'integrity changesets' looks for
886 # changesets with loops or not.
887 # Default is to not look for them.
888
889 # # ## ### ##### ######## #############
890 ## Configuration
891
892 pragma -hasinstances no ; # singleton
893
--- tools/cvs2fossil/lib/c2f_option.tcl
+++ tools/cvs2fossil/lib/c2f_option.tcl
@@ -25,10 +25,11 @@
2525
package require vc::tools::misc ; # Misc. path reformatting.
2626
package require vc::fossil::import::cvs::pass ; # Pass management
2727
package require vc::fossil::import::cvs::pass::collar ; # Pass I.
2828
package require vc::fossil::import::cvs::repository ; # Repository management
2929
package require vc::fossil::import::cvs::state ; # State storage
30
+package require vc::fossil::import::cvs::integrity ; # State integrity checks.
3031
package require vc::fossil::import::cvs::project::sym ; # Project level symbols
3132
package require vc::fossil::import::cvs::cyclebreaker ; # Breaking dependency cycles.
3233
3334
# # ## ### ##### ######## ############# #####################
3435
##
@@ -46,10 +47,11 @@
4647
# -q, --quiet
4748
# --state (conversion status, ala config.cache)
4849
# --trunk-only
4950
# --exclude, --force-tag, --force-branch
5051
# --batch
52
+ # --loopcheck
5153
5254
# -o, --output
5355
# --dry-run
5456
# --symbol-transform RE:XX
5557
@@ -80,10 +82,11 @@
8082
--force-tag { project::sym forcetag [Value arguments] }
8183
--force-branch { project::sym forcebranch [Value arguments] }
8284
--batch { log noprogress }
8385
--dots { cyclebreaker dotsto [Value arguments] }
8486
--watch { cyclebreaker watch [Value arguments] }
87
+ --loopcheck { integrity loopcheckon }
8588
default {
8689
Usage $badoption$option\n$gethelp
8790
}
8891
}
8992
}
@@ -146,10 +149,12 @@
146149
trouble info ""
147150
trouble info " --dots PATH Write the changeset graphs before, after,"
148151
trouble info " and during breaking the of cycles to the"
149152
trouble info " direcotry PATH, using GraphViz's dot format"
150153
trouble info ""
154
+ trouble info " --loopcheck Activate the expensive search for change-"
155
+ trouble info " with loops, i.e. depending on themselves."
151156
152157
# --project, --cache
153158
# ...
154159
return
155160
}
@@ -223,10 +228,11 @@
223228
namespace import ::vc::fossil::import::cvs::pass
224229
namespace import ::vc::fossil::import::cvs::pass::collar
225230
namespace import ::vc::fossil::import::cvs::cyclebreaker
226231
namespace import ::vc::fossil::import::cvs::repository
227232
namespace import ::vc::fossil::import::cvs::state
233
+ namespace import ::vc::fossil::import::cvs::integrity
228234
namespace eval project {
229235
namespace import ::vc::fossil::import::cvs::project::sym
230236
}
231237
namespace import ::vc::tools::trouble
232238
namespace import ::vc::tools::log
233239
--- tools/cvs2fossil/lib/c2f_option.tcl
+++ tools/cvs2fossil/lib/c2f_option.tcl
@@ -25,10 +25,11 @@
25 package require vc::tools::misc ; # Misc. path reformatting.
26 package require vc::fossil::import::cvs::pass ; # Pass management
27 package require vc::fossil::import::cvs::pass::collar ; # Pass I.
28 package require vc::fossil::import::cvs::repository ; # Repository management
29 package require vc::fossil::import::cvs::state ; # State storage
 
30 package require vc::fossil::import::cvs::project::sym ; # Project level symbols
31 package require vc::fossil::import::cvs::cyclebreaker ; # Breaking dependency cycles.
32
33 # # ## ### ##### ######## ############# #####################
34 ##
@@ -46,10 +47,11 @@
46 # -q, --quiet
47 # --state (conversion status, ala config.cache)
48 # --trunk-only
49 # --exclude, --force-tag, --force-branch
50 # --batch
 
51
52 # -o, --output
53 # --dry-run
54 # --symbol-transform RE:XX
55
@@ -80,10 +82,11 @@
80 --force-tag { project::sym forcetag [Value arguments] }
81 --force-branch { project::sym forcebranch [Value arguments] }
82 --batch { log noprogress }
83 --dots { cyclebreaker dotsto [Value arguments] }
84 --watch { cyclebreaker watch [Value arguments] }
 
85 default {
86 Usage $badoption$option\n$gethelp
87 }
88 }
89 }
@@ -146,10 +149,12 @@
146 trouble info ""
147 trouble info " --dots PATH Write the changeset graphs before, after,"
148 trouble info " and during breaking the of cycles to the"
149 trouble info " direcotry PATH, using GraphViz's dot format"
150 trouble info ""
 
 
151
152 # --project, --cache
153 # ...
154 return
155 }
@@ -223,10 +228,11 @@
223 namespace import ::vc::fossil::import::cvs::pass
224 namespace import ::vc::fossil::import::cvs::pass::collar
225 namespace import ::vc::fossil::import::cvs::cyclebreaker
226 namespace import ::vc::fossil::import::cvs::repository
227 namespace import ::vc::fossil::import::cvs::state
 
228 namespace eval project {
229 namespace import ::vc::fossil::import::cvs::project::sym
230 }
231 namespace import ::vc::tools::trouble
232 namespace import ::vc::tools::log
233
--- tools/cvs2fossil/lib/c2f_option.tcl
+++ tools/cvs2fossil/lib/c2f_option.tcl
@@ -25,10 +25,11 @@
25 package require vc::tools::misc ; # Misc. path reformatting.
26 package require vc::fossil::import::cvs::pass ; # Pass management
27 package require vc::fossil::import::cvs::pass::collar ; # Pass I.
28 package require vc::fossil::import::cvs::repository ; # Repository management
29 package require vc::fossil::import::cvs::state ; # State storage
30 package require vc::fossil::import::cvs::integrity ; # State integrity checks.
31 package require vc::fossil::import::cvs::project::sym ; # Project level symbols
32 package require vc::fossil::import::cvs::cyclebreaker ; # Breaking dependency cycles.
33
34 # # ## ### ##### ######## ############# #####################
35 ##
@@ -46,10 +47,11 @@
47 # -q, --quiet
48 # --state (conversion status, ala config.cache)
49 # --trunk-only
50 # --exclude, --force-tag, --force-branch
51 # --batch
52 # --loopcheck
53
54 # -o, --output
55 # --dry-run
56 # --symbol-transform RE:XX
57
@@ -80,10 +82,11 @@
82 --force-tag { project::sym forcetag [Value arguments] }
83 --force-branch { project::sym forcebranch [Value arguments] }
84 --batch { log noprogress }
85 --dots { cyclebreaker dotsto [Value arguments] }
86 --watch { cyclebreaker watch [Value arguments] }
87 --loopcheck { integrity loopcheckon }
88 default {
89 Usage $badoption$option\n$gethelp
90 }
91 }
92 }
@@ -146,10 +149,12 @@
149 trouble info ""
150 trouble info " --dots PATH Write the changeset graphs before, after,"
151 trouble info " and during breaking the of cycles to the"
152 trouble info " direcotry PATH, using GraphViz's dot format"
153 trouble info ""
154 trouble info " --loopcheck Activate the expensive search for change-"
155 trouble info " with loops, i.e. depending on themselves."
156
157 # --project, --cache
158 # ...
159 return
160 }
@@ -223,10 +228,11 @@
228 namespace import ::vc::fossil::import::cvs::pass
229 namespace import ::vc::fossil::import::cvs::pass::collar
230 namespace import ::vc::fossil::import::cvs::cyclebreaker
231 namespace import ::vc::fossil::import::cvs::repository
232 namespace import ::vc::fossil::import::cvs::state
233 namespace import ::vc::fossil::import::cvs::integrity
234 namespace eval project {
235 namespace import ::vc::fossil::import::cvs::project::sym
236 }
237 namespace import ::vc::tools::trouble
238 namespace import ::vc::tools::log
239
--- tools/cvs2fossil/lib/c2f_prev.tcl
+++ tools/cvs2fossil/lib/c2f_prev.tcl
@@ -363,11 +363,11 @@
363363
set pos [lsearch -exact $mychangesets $self]
364364
set mychangesets [lreplace $mychangesets $pos $pos]
365365
return
366366
}
367367
368
- method selfreferential {} {
368
+ method loopcheck {} {
369369
log write 7 csets {Checking [$self str] /[llength $myitems]}
370370
371371
if {![struct::set contains [$self successors] $self]} {
372372
return 0
373373
}
@@ -422,11 +422,11 @@
422422
set fragment [$type %AUTO% $project $cstype $cssrc \
423423
[Untag $fragmentitems $cstype]]
424424
lappend newcsets $fragment
425425
$fragment persist
426426
427
- if {[$fragment selfreferential]} {
427
+ if {[$fragment loopcheck]} {
428428
trouble fatal "[$fragment str] depends on itself"
429429
}
430430
}
431431
432432
trouble abort?
433433
--- tools/cvs2fossil/lib/c2f_prev.tcl
+++ tools/cvs2fossil/lib/c2f_prev.tcl
@@ -363,11 +363,11 @@
363 set pos [lsearch -exact $mychangesets $self]
364 set mychangesets [lreplace $mychangesets $pos $pos]
365 return
366 }
367
368 method selfreferential {} {
369 log write 7 csets {Checking [$self str] /[llength $myitems]}
370
371 if {![struct::set contains [$self successors] $self]} {
372 return 0
373 }
@@ -422,11 +422,11 @@
422 set fragment [$type %AUTO% $project $cstype $cssrc \
423 [Untag $fragmentitems $cstype]]
424 lappend newcsets $fragment
425 $fragment persist
426
427 if {[$fragment selfreferential]} {
428 trouble fatal "[$fragment str] depends on itself"
429 }
430 }
431
432 trouble abort?
433
--- tools/cvs2fossil/lib/c2f_prev.tcl
+++ tools/cvs2fossil/lib/c2f_prev.tcl
@@ -363,11 +363,11 @@
363 set pos [lsearch -exact $mychangesets $self]
364 set mychangesets [lreplace $mychangesets $pos $pos]
365 return
366 }
367
368 method loopcheck {} {
369 log write 7 csets {Checking [$self str] /[llength $myitems]}
370
371 if {![struct::set contains [$self successors] $self]} {
372 return 0
373 }
@@ -422,11 +422,11 @@
422 set fragment [$type %AUTO% $project $cstype $cssrc \
423 [Untag $fragmentitems $cstype]]
424 lappend newcsets $fragment
425 $fragment persist
426
427 if {[$fragment loopcheck]} {
428 trouble fatal "[$fragment str] depends on itself"
429 }
430 }
431
432 trouble abort?
433

Keyboard Shortcuts

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