Fossil SCM
Bugfix in the changeset class. The index from revisions to containing changesets is not 1:1, but 1:n. While only one revision changeset is possible there can also be zero or more symbol changesets.
Commit
8c9030e3e8a69da37e09851baeccf04a1e965524
Parent
6d63634309ff7e9…
1 file changed
+31
-6
+31
-6
| --- tools/cvs2fossil/lib/c2f_prev.tcl | ||
| +++ tools/cvs2fossil/lib/c2f_prev.tcl | ||
| @@ -46,11 +46,11 @@ | ||
| 46 | 46 | |
| 47 | 47 | # Keep track of the generated changesets and of the inverse |
| 48 | 48 | # mapping from revisions to them. |
| 49 | 49 | lappend mychangesets $self |
| 50 | 50 | set myidmap($myid) $self |
| 51 | - foreach r $revisions { set myrevmap($r) $self } | |
| 51 | + foreach r $revisions { lappend myrevmap($r) $self } | |
| 52 | 52 | return |
| 53 | 53 | } |
| 54 | 54 | |
| 55 | 55 | method id {} { return $myid } |
| 56 | 56 | method revisions {} { return $myrevisions } |
| @@ -67,16 +67,20 @@ | ||
| 67 | 67 | ($mybranchcode == [state one { |
| 68 | 68 | SELECT type FROM symbol WHERE sid = $mysrcid |
| 69 | 69 | }])}] |
| 70 | 70 | } |
| 71 | 71 | |
| 72 | + # result = dict (revision -> list (changeset)) | |
| 72 | 73 | method successormap {} { |
| 73 | 74 | # NOTE / FUTURE: Possible bottleneck. |
| 74 | 75 | array set tmp {} |
| 75 | 76 | foreach {rev children} [$self nextmap] { |
| 76 | 77 | foreach child $children { |
| 77 | - lappend tmp($rev) $myrevmap($child) | |
| 78 | + # 8.5 lappend tmp($rev) {*}$myrevmap($child) | |
| 79 | + foreach cset $myrevmap($child) { | |
| 80 | + lappend tmp($rev) $cset | |
| 81 | + } | |
| 78 | 82 | } |
| 79 | 83 | set tmp($rev) [lsort -unique $tmp($rev)] |
| 80 | 84 | } |
| 81 | 85 | return [array get tmp] |
| 82 | 86 | } |
| @@ -84,22 +88,29 @@ | ||
| 84 | 88 | method successors {} { |
| 85 | 89 | # NOTE / FUTURE: Possible bottleneck. |
| 86 | 90 | set csets {} |
| 87 | 91 | foreach {_ children} [$self nextmap] { |
| 88 | 92 | foreach child $children { |
| 89 | - lappend csets $myrevmap($child) | |
| 93 | + # 8.5 lappend csets {*}$myrevmap($child) | |
| 94 | + foreach cset $myrevmap($child) { | |
| 95 | + lappend csets $cset | |
| 96 | + } | |
| 90 | 97 | } |
| 91 | 98 | } |
| 92 | 99 | return [lsort -unique $csets] |
| 93 | 100 | } |
| 94 | 101 | |
| 102 | + # result = dict (revision -> list (changeset)) | |
| 95 | 103 | method predecessormap {} { |
| 96 | 104 | # NOTE / FUTURE: Possible bottleneck. |
| 97 | 105 | array set tmp {} |
| 98 | 106 | foreach {rev children} [$self premap] { |
| 99 | 107 | foreach child $children { |
| 100 | - lappend tmp($rev) $myrevmap($child) | |
| 108 | + # 8.5 lappend tmp($rev) {*}$myrevmap($child) | |
| 109 | + foreach cset $myrevmap($child) { | |
| 110 | + lappend tmp($rev) $cset | |
| 111 | + } | |
| 101 | 112 | } |
| 102 | 113 | set tmp($rev) [lsort -unique $tmp($rev)] |
| 103 | 114 | } |
| 104 | 115 | return [array get tmp] |
| 105 | 116 | } |
| @@ -296,11 +307,18 @@ | ||
| 296 | 307 | state run { |
| 297 | 308 | DELETE FROM changeset WHERE cid = $myid; |
| 298 | 309 | DELETE FROM csrevision WHERE cid = $myid; |
| 299 | 310 | } |
| 300 | 311 | } |
| 301 | - foreach r $myrevisions { unset myrevmap($r) } | |
| 312 | + foreach r $myrevisions { | |
| 313 | + if {[llength $myrevmap($r)] == 1} { | |
| 314 | + unset myrevmap($r) | |
| 315 | + } else { | |
| 316 | + set pos [lsearch -exact $myrevmap($r) $self] | |
| 317 | + set myrevmap($r) [lreplace $myrevmap($r) $pos $pos] | |
| 318 | + } | |
| 319 | + } | |
| 302 | 320 | set pos [lsearch -exact $mychangesets $self] |
| 303 | 321 | set mychangesets [lreplace $mychangesets $pos $pos] |
| 304 | 322 | return |
| 305 | 323 | } |
| 306 | 324 | |
| @@ -670,11 +688,18 @@ | ||
| 670 | 688 | } |
| 671 | 689 | |
| 672 | 690 | # # ## ### ##### ######## ############# |
| 673 | 691 | |
| 674 | 692 | typevariable mychangesets {} ; # List of all known changesets. |
| 675 | - typevariable myrevmap -array {} ; # Map from revisions to their changeset. | |
| 693 | + typevariable myrevmap -array {} ; # Map from revisions to the list | |
| 694 | + # of changesets containing | |
| 695 | + # it. NOTE: While only one | |
| 696 | + # revision changeset can contain | |
| 697 | + # the revision, there can | |
| 698 | + # however also be one or more | |
| 699 | + # additional symbol changesets | |
| 700 | + # which use it, hence a list. | |
| 676 | 701 | typevariable myidmap -array {} ; # Map from changeset id to changeset. |
| 677 | 702 | typevariable mybranchcode {} ; # Local copy of project::sym/mybranch. |
| 678 | 703 | |
| 679 | 704 | typemethod all {} { return $mychangesets } |
| 680 | 705 | typemethod of {id} { return $myidmap($id) } |
| 681 | 706 |
| --- tools/cvs2fossil/lib/c2f_prev.tcl | |
| +++ tools/cvs2fossil/lib/c2f_prev.tcl | |
| @@ -46,11 +46,11 @@ | |
| 46 | |
| 47 | # Keep track of the generated changesets and of the inverse |
| 48 | # mapping from revisions to them. |
| 49 | lappend mychangesets $self |
| 50 | set myidmap($myid) $self |
| 51 | foreach r $revisions { set myrevmap($r) $self } |
| 52 | return |
| 53 | } |
| 54 | |
| 55 | method id {} { return $myid } |
| 56 | method revisions {} { return $myrevisions } |
| @@ -67,16 +67,20 @@ | |
| 67 | ($mybranchcode == [state one { |
| 68 | SELECT type FROM symbol WHERE sid = $mysrcid |
| 69 | }])}] |
| 70 | } |
| 71 | |
| 72 | method successormap {} { |
| 73 | # NOTE / FUTURE: Possible bottleneck. |
| 74 | array set tmp {} |
| 75 | foreach {rev children} [$self nextmap] { |
| 76 | foreach child $children { |
| 77 | lappend tmp($rev) $myrevmap($child) |
| 78 | } |
| 79 | set tmp($rev) [lsort -unique $tmp($rev)] |
| 80 | } |
| 81 | return [array get tmp] |
| 82 | } |
| @@ -84,22 +88,29 @@ | |
| 84 | method successors {} { |
| 85 | # NOTE / FUTURE: Possible bottleneck. |
| 86 | set csets {} |
| 87 | foreach {_ children} [$self nextmap] { |
| 88 | foreach child $children { |
| 89 | lappend csets $myrevmap($child) |
| 90 | } |
| 91 | } |
| 92 | return [lsort -unique $csets] |
| 93 | } |
| 94 | |
| 95 | method predecessormap {} { |
| 96 | # NOTE / FUTURE: Possible bottleneck. |
| 97 | array set tmp {} |
| 98 | foreach {rev children} [$self premap] { |
| 99 | foreach child $children { |
| 100 | lappend tmp($rev) $myrevmap($child) |
| 101 | } |
| 102 | set tmp($rev) [lsort -unique $tmp($rev)] |
| 103 | } |
| 104 | return [array get tmp] |
| 105 | } |
| @@ -296,11 +307,18 @@ | |
| 296 | state run { |
| 297 | DELETE FROM changeset WHERE cid = $myid; |
| 298 | DELETE FROM csrevision WHERE cid = $myid; |
| 299 | } |
| 300 | } |
| 301 | foreach r $myrevisions { unset myrevmap($r) } |
| 302 | set pos [lsearch -exact $mychangesets $self] |
| 303 | set mychangesets [lreplace $mychangesets $pos $pos] |
| 304 | return |
| 305 | } |
| 306 | |
| @@ -670,11 +688,18 @@ | |
| 670 | } |
| 671 | |
| 672 | # # ## ### ##### ######## ############# |
| 673 | |
| 674 | typevariable mychangesets {} ; # List of all known changesets. |
| 675 | typevariable myrevmap -array {} ; # Map from revisions to their changeset. |
| 676 | typevariable myidmap -array {} ; # Map from changeset id to changeset. |
| 677 | typevariable mybranchcode {} ; # Local copy of project::sym/mybranch. |
| 678 | |
| 679 | typemethod all {} { return $mychangesets } |
| 680 | typemethod of {id} { return $myidmap($id) } |
| 681 |
| --- tools/cvs2fossil/lib/c2f_prev.tcl | |
| +++ tools/cvs2fossil/lib/c2f_prev.tcl | |
| @@ -46,11 +46,11 @@ | |
| 46 | |
| 47 | # Keep track of the generated changesets and of the inverse |
| 48 | # mapping from revisions to them. |
| 49 | lappend mychangesets $self |
| 50 | set myidmap($myid) $self |
| 51 | foreach r $revisions { lappend myrevmap($r) $self } |
| 52 | return |
| 53 | } |
| 54 | |
| 55 | method id {} { return $myid } |
| 56 | method revisions {} { return $myrevisions } |
| @@ -67,16 +67,20 @@ | |
| 67 | ($mybranchcode == [state one { |
| 68 | SELECT type FROM symbol WHERE sid = $mysrcid |
| 69 | }])}] |
| 70 | } |
| 71 | |
| 72 | # result = dict (revision -> list (changeset)) |
| 73 | method successormap {} { |
| 74 | # NOTE / FUTURE: Possible bottleneck. |
| 75 | array set tmp {} |
| 76 | foreach {rev children} [$self nextmap] { |
| 77 | foreach child $children { |
| 78 | # 8.5 lappend tmp($rev) {*}$myrevmap($child) |
| 79 | foreach cset $myrevmap($child) { |
| 80 | lappend tmp($rev) $cset |
| 81 | } |
| 82 | } |
| 83 | set tmp($rev) [lsort -unique $tmp($rev)] |
| 84 | } |
| 85 | return [array get tmp] |
| 86 | } |
| @@ -84,22 +88,29 @@ | |
| 88 | method successors {} { |
| 89 | # NOTE / FUTURE: Possible bottleneck. |
| 90 | set csets {} |
| 91 | foreach {_ children} [$self nextmap] { |
| 92 | foreach child $children { |
| 93 | # 8.5 lappend csets {*}$myrevmap($child) |
| 94 | foreach cset $myrevmap($child) { |
| 95 | lappend csets $cset |
| 96 | } |
| 97 | } |
| 98 | } |
| 99 | return [lsort -unique $csets] |
| 100 | } |
| 101 | |
| 102 | # result = dict (revision -> list (changeset)) |
| 103 | method predecessormap {} { |
| 104 | # NOTE / FUTURE: Possible bottleneck. |
| 105 | array set tmp {} |
| 106 | foreach {rev children} [$self premap] { |
| 107 | foreach child $children { |
| 108 | # 8.5 lappend tmp($rev) {*}$myrevmap($child) |
| 109 | foreach cset $myrevmap($child) { |
| 110 | lappend tmp($rev) $cset |
| 111 | } |
| 112 | } |
| 113 | set tmp($rev) [lsort -unique $tmp($rev)] |
| 114 | } |
| 115 | return [array get tmp] |
| 116 | } |
| @@ -296,11 +307,18 @@ | |
| 307 | state run { |
| 308 | DELETE FROM changeset WHERE cid = $myid; |
| 309 | DELETE FROM csrevision WHERE cid = $myid; |
| 310 | } |
| 311 | } |
| 312 | foreach r $myrevisions { |
| 313 | if {[llength $myrevmap($r)] == 1} { |
| 314 | unset myrevmap($r) |
| 315 | } else { |
| 316 | set pos [lsearch -exact $myrevmap($r) $self] |
| 317 | set myrevmap($r) [lreplace $myrevmap($r) $pos $pos] |
| 318 | } |
| 319 | } |
| 320 | set pos [lsearch -exact $mychangesets $self] |
| 321 | set mychangesets [lreplace $mychangesets $pos $pos] |
| 322 | return |
| 323 | } |
| 324 | |
| @@ -670,11 +688,18 @@ | |
| 688 | } |
| 689 | |
| 690 | # # ## ### ##### ######## ############# |
| 691 | |
| 692 | typevariable mychangesets {} ; # List of all known changesets. |
| 693 | typevariable myrevmap -array {} ; # Map from revisions to the list |
| 694 | # of changesets containing |
| 695 | # it. NOTE: While only one |
| 696 | # revision changeset can contain |
| 697 | # the revision, there can |
| 698 | # however also be one or more |
| 699 | # additional symbol changesets |
| 700 | # which use it, hence a list. |
| 701 | typevariable myidmap -array {} ; # Map from changeset id to changeset. |
| 702 | typevariable mybranchcode {} ; # Local copy of project::sym/mybranch. |
| 703 | |
| 704 | typemethod all {} { return $mychangesets } |
| 705 | typemethod of {id} { return $myidmap($id) } |
| 706 |