@@ -44,10 +44,12 @@
44 44 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
## Public API
45 45 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
46 46 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
typemethod setup {} {
47 47 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# Define the names and structure of the persistent state of
48 48 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# this pass.
49 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
50 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ state reading csorder
49 51 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return
50 52 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
51 53 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
52 54 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
typemethod load {} {
53 55 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# Pass manager interface. Executed to load data computed by
@@ -63,10 +65,11 @@
63 65 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
cyclebreaker precmd [myproc BreakRetrogradeBranches]
64 66 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
cyclebreaker savecmd [myproc SaveOrder]
65 67 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
cyclebreaker breakcmd [myproc BreakCycle]
66 68 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
67 69 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
state transaction {
70 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ LoadCommitOrder
68 71 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
cyclebreaker run break-all [myproc Changesets]
69 72 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
70 73 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
71 74 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
repository printcsetstatistics
72 75 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return
@@ -81,10 +84,27 @@
81 84 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
82 85 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# # ## ### ##### ######## #############
83 86 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
## Internal methods
84 87 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
85 88 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
proc Changesets {} { project::rev all }
89 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
90 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ proc LoadCommitOrder {} {
91 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ::variable mycset
92 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
93 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ state transaction {
94 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ foreach {cid pos} [state run { SELECT cid, pos FROM csorder }] {
95 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ set cset [project::rev of $cid]
96 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ $cset setpos $pos
97 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ set mycset($pos) $cset
98 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
99 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # Remove the order information now that we have it in
100 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # memory, so that we can save it once more, for all
101 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # changesets, while breaking the remaining cycles.
102 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ state run { DELETE FROM csorder }
103 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
104 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return
105 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
86 106 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
87 107 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# # ## ### ##### ######## #############
88 108 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
89 109 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
proc BreakRetrogradeBranches {graph} {
90 110 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -97,10 +117,16 @@
97 117 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# # ## ### ##### ######## #############
98 118 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
99 119 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
proc BreakCycle {graph} {
100 120 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
cyclebreaker break $graph
101 121 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
122 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
123 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # # ## ### ##### ######## #############
124 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
125 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ typevariable mycset -array {} ; # Map from commit positions to the
126 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # changeset (object ref) at that
127 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # position.
102 128 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
103 129 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# # ## ### ##### ######## #############
104 130 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
## Configuration
105 131 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
106 132 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pragma -hasinstances no ; # singleton
107 133 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!