@@ -20,11 +20,13 @@
20 20 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
## Requirements
21 21 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
22 22 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
package require Tcl 8.4 ; # Required runtime.
23 23 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
package require snit ; # OO system.
24 24 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
package require struct::list ; # Higher order list operations.
25 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ package require vc::tools::misc ; # Min, max.
25 26 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
package require vc::tools::log ; # User feedback.
27 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ package require vc::tools::trouble ; # Error reporting.
26 28 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
package require vc::fossil::import::cvs::repository ; # Repository management.
27 29 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
package require vc::fossil::import::cvs::cyclebreaker ; # Breaking dependency cycles.
28 30 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
package require vc::fossil::import::cvs::state ; # State storage.
29 31 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
package require vc::fossil::import::cvs::project::rev ; # Project level changesets
30 32 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -105,10 +107,43 @@
105 107 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
106 108 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
107 109 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# # ## ### ##### ######## #############
108 110 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
109 111 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
proc BreakRetrogradeBranches {graph} {
112 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # We go over all branch changesets, i.e. the changesets
113 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # created by the symbols which are translated as branches, and
114 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # break any which are 'retrograde'. Meaning that they have
115 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # incoming revision changesets which are committed after some
116 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # outgoing revision changeset.
117 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
118 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # NOTE: We might be able to use our knowledge that we are
119 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # looking at all changesets to create a sql which selects all
120 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # the branch changesets from the state in one go instead of
121 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # having to check each changeset separately. Consider this
122 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # later, get the pass working first.
123 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #
124 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # NOTE 2: Might we even be able to select the retrograde
125 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # changesets too ?
126 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
127 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ foreach cset [$graph nodes] {
128 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if {![$cset isbranch]} continue
129 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ CheckAndBreakRetrograde $graph $cset
130 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
131 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return
132 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
133 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
134 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ proc CheckAndBreakRetrograde {graph cset} {
135 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ while {[IsRetrograde $graph $cset]} {
136 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ log write 5 breakacycle "Breaking retrograde changeset <[$cset id]>"
137 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
138 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ break
139 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
140 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return
141 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
142 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
143 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ proc IsRetrograde {dg cset} {
144 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return 0
110 145 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
111 146 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
112 147 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# # ## ### ##### ######## #############
113 148 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
114 149 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
proc SaveOrder {cset pos} {
@@ -143,10 +178,12 @@
143 178 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
namespace import ::vc::fossil::import::cvs::repository
144 179 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
namespace import ::vc::fossil::import::cvs::state
145 180 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
namespace eval project {
146 181 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
namespace import ::vc::fossil::import::cvs::project::rev
147 182 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
183 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ namespace import ::vc::tools::misc::*
184 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ namespace import ::vc::tools::trouble
148 185 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
namespace import ::vc::tools::log
149 186 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
log register breakacycle
150 187 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
151 188 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
152 189 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
153 190 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!