(pkg *models.Package, allDeps bool)
| 122 | } |
| 123 | |
| 124 | func (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 | |
| 176 | type NodeQueue struct { |
| 177 | items []Node |
no test coverage detected