Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Modified cycle breaker API. Hook for processed nodes now takes the graph as new first argument. Extended API, exposed method for dumping the current state of the graph, including ability to dump a sub graph. |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
5f5620fbd25ccc50fac7757fc38abfcb |
User & Date: | aku 2007-11-23 05:43:25 |
Context
2007-11-24
| ||
03:56 | Updated passes 6 and 8 for to the changtes in the cycle breaker API (changed signature of save callback). check-in: 7ed2f29d user: aku tags: trunk | |
2007-11-23
| ||
05:43 | Modified cycle breaker API. Hook for processed nodes now takes the graph as new first argument. Extended API, exposed method for dumping the current state of the graph, including ability to dump a sub graph. check-in: 5f5620fb user: aku tags: trunk | |
05:41 | Extended the dot graph exporter to allow the export of a subgraph specified through a set of nodes. Default is the export of the whole graph, as before. check-in: 86f33190 user: aku tags: trunk | |
Changes
Changes to tools/cvs2fossil/lib/c2f_cyclebreaker.tcl.
61 62 63 64 65 66 67 68 69 70 71 72 73 74 .. 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 ... 147 148 149 150 151 152 153 154 155 156 157 158 159 160 ... 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 ... 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 |
::variable mydotid 0 set dg [Setup $changesets 0] Mark $dg $dg destroy return } # # ## ### ##### ######## ############# typemethod run {label changesetcmd} { ::variable myat 0 ::variable mydotprefix $label ::variable mydotid 0 ................................................................................ # and work on breaking it. log write 3 cyclebreaker {Now sorting the changesets, breaking cycles} InitializeCandidates $dg while {1} { while {[WithoutPredecessor $dg n]} { ProcessedHook $n $myat $dg node delete $n incr myat ShowPendingNodes } if {![llength [dg nodes]]} break ................................................................................ set dg [struct::graph dg] foreach cset $changesets { $dg node insert $cset $dg node set $cset timerange [$cset timerange] $dg node set $cset label [ID $cset] } # 2. Find for all relevant changeset their revisions and their # dependencies. Map the latter back to changesets and # construct the corresponding arcs. if {$log} { ................................................................................ # TODO: This should be a graph method. proc HasArc {dg a b} { #8.5: return [expr {$b in [$dg nodes -out $a]}] if {[lsearch -exact [$dg nodes -out $a] $b] < 0} { return 0 } return 1 } proc Mark {dg {suffix {}}} { ::variable mydotdestination if {$mydotdestination eq ""} return ::variable mydotprefix ::variable mydotid set fname $mydotdestination/${mydotprefix}${mydotid}${suffix}.dot file mkdir [file dirname $fname] dot write $dg $mydotprefix$suffix $fname incr mydotid log write 5 cyclebreaker ".dot export $fname" return } proc Replace {dg n replacements} { ................................................................................ if {![llength $myprecmd]} return uplevel #0 [linsert $myprecmd end $graph] Mark $graph -pre-done return } proc ProcessedHook {cset pos} { # Give the user of the cycle breaker the opportunity to work # with the changeset before it is removed from the graph. ::variable mysavecmd if {![llength $mysavecmd]} return uplevel #0 [linsert $mysavecmd end $pos $cset] return } proc BreakCycleHook {graph} { # Call out to the chosen algorithm for cycle breaking. Finding # a cycle if no breaker was chosen is an error. |
> > > > > | > | | | | |
61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 .. 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 ... 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 ... 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 ... 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 |
::variable mydotid 0 set dg [Setup $changesets 0] Mark $dg $dg destroy return } typemethod mark {graph suffix {subgraph {}}} { Mark $graph $suffix $subgraph return } # # ## ### ##### ######## ############# typemethod run {label changesetcmd} { ::variable myat 0 ::variable mydotprefix $label ::variable mydotid 0 ................................................................................ # and work on breaking it. log write 3 cyclebreaker {Now sorting the changesets, breaking cycles} InitializeCandidates $dg while {1} { while {[WithoutPredecessor $dg n]} { ProcessedHook $dg $n $myat $dg node delete $n incr myat ShowPendingNodes } if {![llength [dg nodes]]} break ................................................................................ set dg [struct::graph dg] foreach cset $changesets { $dg node insert $cset $dg node set $cset timerange [$cset timerange] $dg node set $cset label [ID $cset] $dg node set $cset __id__ [$cset id] } # 2. Find for all relevant changeset their revisions and their # dependencies. Map the latter back to changesets and # construct the corresponding arcs. if {$log} { ................................................................................ # TODO: This should be a graph method. proc HasArc {dg a b} { #8.5: return [expr {$b in [$dg nodes -out $a]}] if {[lsearch -exact [$dg nodes -out $a] $b] < 0} { return 0 } return 1 } proc Mark {dg {suffix {}} {subgraph {}}} { ::variable mydotdestination if {$mydotdestination eq ""} return ::variable mydotprefix ::variable mydotid set fname $mydotdestination/${mydotprefix}${mydotid}${suffix}.dot file mkdir [file dirname $fname] dot write $dg $mydotprefix$suffix $fname $subgraph incr mydotid log write 5 cyclebreaker ".dot export $fname" return } proc Replace {dg n replacements} { ................................................................................ if {![llength $myprecmd]} return uplevel #0 [linsert $myprecmd end $graph] Mark $graph -pre-done return } proc ProcessedHook {dg cset pos} { # Give the user of the cycle breaker the opportunity to work # with the changeset before it is removed from the graph. ::variable mysavecmd if {![llength $mysavecmd]} return uplevel #0 [linsert $mysavecmd end $dg $pos $cset] return } proc BreakCycleHook {graph} { # Call out to the chosen algorithm for cycle breaking. Finding # a cycle if no breaker was chosen is an error. |