This commit is contained in:
jguer committed 2022-08-23 18:33:40 +02:00
1 parent cce21ce0b6
commit a4565b367b
2 files changed
+42 -12

No files matched your search

+13 -10
View File
@@ -132,16 +132,23 @@ func installLocalPKGBUILD(
func addNodes(dbExecutor db.Executor, aurClient aur.ClientInterface, pkgName string, pkgBase string, deps []string, graph *topo.Graph[string]) {
graph.AddNode(pkgBase)
graph.Alias(pkgBase, pkgName)
graph.SetNodeInfo(pkgBase, &topo.NodeInfo{Color: "blue"})
for _, depString := range deps {
depName, _, _ := splitDep(depString)
if dbExecutor.LocalSatisfierExists(depString) {
continue
}
graph.DependOn(depName, pkgBase)
warnings := query.AURWarnings{}
if dbExecutor.LocalSatisfierExists(depString) {
graph.SetNodeInfo(depName, &topo.NodeInfo{Color: "green"})
continue
} else {
graph.SetNodeInfo(depName, &topo.NodeInfo{Color: "red"})
}
// Check ALPM
if alpmPkg := dbExecutor.SyncSatisfier(depString); alpmPkg != nil {
newDeps := alpmPkg.Depends().Slice()
newDepsSlice := make([]string, 0, len(newDeps))
@@ -151,10 +158,8 @@ func addNodes(dbExecutor db.Executor, aurClient aur.ClientInterface, pkgName str
}
addNodes(dbExecutor, aurClient, alpmPkg.Name(), alpmPkg.Base(), newDepsSlice, graph)
}
warnings := query.AURWarnings{}
if aurPkgs, _ := query.AURInfo(context.TODO(), aurClient, []string{depName}, &warnings, 1); len(aurPkgs) != 0 {
// Check AUR
} else if aurPkgs, _ := query.AURInfo(context.TODO(), aurClient, []string{depName}, &warnings, 1); len(aurPkgs) != 0 {
pkg := aurPkgs[0]
newDeps := dep.ComputeCombinedDepList(pkg, false, false)
newDepsSlice := make([]string, 0, len(newDeps))
@@ -162,6 +167,4 @@ func addNodes(dbExecutor db.Executor, aurClient aur.ClientInterface, pkgName str
addNodes(dbExecutor, aurClient, pkg.PackageBase, pkg.Name, newDepsSlice, graph)
}
}
return
}
+29 -2
View File
@@ -15,10 +15,17 @@ type (
DepMap[T comparable] map[T]NodeSet[T]
)
type NodeInfo struct {
Color string
}
type Graph[T comparable] struct {
alias AliasMap[T]
nodes NodeSet[T]
// node info map
nodeInfo map[T]NodeInfo
// `dependencies` tracks child -> parents.
dependencies DepMap[T]
// `dependents` tracks parent -> children.
@@ -32,6 +39,7 @@ func New[T comparable]() *Graph[T] {
dependencies: make(DepMap[T]),
dependents: make(DepMap[T]),
alias: make(AliasMap[T]),
nodeInfo: make(map[T]NodeInfo),
}
}
@@ -61,6 +69,15 @@ func (g *Graph[T]) AddNode(node T) {
g.nodes[node] = true
}
func (g *Graph[T]) SetNodeInfo(node T, nodeInfo *NodeInfo) {
// check aliases
if aliasNode, ok := g.alias[node]; ok {
node = aliasNode
}
g.nodeInfo[node] = *nodeInfo
}
func (g *Graph[T]) DependOn(child, parent T) error {
if child == parent {
return ErrSelfReferential
@@ -87,11 +104,21 @@ func (g *Graph[T]) DependOn(child, parent T) error {
func (g *Graph[T]) String() string {
var sb strings.Builder
sb.WriteString("digraph {\n")
// sb.WriteString("rankdir=LR;\n")
sb.WriteString("compound=true;\n")
sb.WriteString("concentrate=true;\n")
sb.WriteString("node [shape = record, ordering=out];\n")
for node := range g.nodes {
sb.WriteString(fmt.Sprintf("\t\"%v\";\n", node))
extra := ""
if info, ok := g.nodeInfo[node]; ok {
if info.Color != "" {
extra = fmt.Sprintf("[color = %s]", info.Color)
}
}
sb.WriteString(fmt.Sprintf("\t\"%v\"%s;\n", node, extra))
}
for parent, children := range g.dependencies {
for child := range children {
sb.WriteString(fmt.Sprintf("\t\"%v\" -> \"%v\";\n", parent, child))