MCPcopy Create free account
hub / github.com/HashLoad/boss / Queue

Method Queue

core/compiler/graphs/graph.go:124–174  ·  view source on GitHub ↗
(pkg *models.Package, allDeps bool)

Source from the content-addressed store, hash-verified

122}
123
124func (g *GraphItem) Queue(pkg *models.Package, allDeps bool) *NodeQueue {
125 g.lock()
126 queue := NodeQueue{}
127 queue.New()
128 nodes := g.nodes
129 for key := 0; key < len(nodes); key++ {
130 if !pkg.Lock.GetInstalled(nodes[key].Dep).Changed && !allDeps {
131 nodes = removeNode(nodes, key)
132 key--
133 }
134 }
135
136 var redo = true
137 for {
138 if !redo {
139 break
140 }
141 redo = false
142 for _, node := range nodes {
143 usedBy := g.usedBy[node.Value]
144 if !containsAll(nodes, usedBy) {
145 for _, consumerNode := range usedBy {
146 installed := pkg.Lock.GetInstalled(consumerNode.Dep)
147 installed.Changed = true
148 pkg.Lock.SetInstalled(consumerNode.Dep, installed)
149 if !contains(nodes, consumerNode) {
150 redo = true
151 nodes = append(nodes, consumerNode)
152 }
153 }
154 }
155 }
156 }
157
158 for {
159 if len(nodes) == 0 {
160 break
161 }
162
163 for key := 0; key < len(nodes); key++ {
164 node := nodes[key]
165 if !containsOne(g.depends[node.Value], nodes) {
166 queue.Enqueue(*node)
167 nodes = removeNode(nodes, key)
168 key--
169 }
170 }
171 }
172 g.unlock()
173 return &queue
174}
175
176type NodeQueue struct {
177 items []Node

Callers 2

loadOrderGraphFunction · 0.95
LoadOrderGraphAllFunction · 0.95

Calls 10

lockMethod · 0.95
NewMethod · 0.95
EnqueueMethod · 0.95
unlockMethod · 0.95
removeNodeFunction · 0.85
containsAllFunction · 0.85
containsFunction · 0.85
containsOneFunction · 0.85
GetInstalledMethod · 0.80
SetInstalledMethod · 0.80

Tested by

no test coverage detected