github.com/joey-fossa/fossa-cli@v0.7.34-0.20190708193710-569f1e8679f0/buildtools/composer/readtree_generated.go (about) 1 // This file was automatically generated by genny. 2 // Any changes will be lost if this file is regenerated. 3 // see https://github.com/cheekybits/genny 4 5 package composer 6 7 // level is 1-indexed 8 type LineParser func(line string) (level int, node Package, err error) 9 10 func ReadPackageTree(lines []string, parser LineParser) ([]Package, map[Package][]Package, error) { 11 var imports []Package 12 edges := make(map[Package]map[Package]bool) 13 parents := []Package{} 14 15 for _, line := range lines { 16 level, node, err := parser(line) 17 if err != nil { 18 return nil, nil, err 19 } 20 21 // Add to graph. 22 if len(parents) >= level { 23 parents = parents[:level-1] 24 } 25 if level == 1 { 26 imports = append(imports, node) 27 } else { 28 parent := parents[len(parents)-1] 29 _, ok := edges[parent] 30 if !ok { 31 edges[parent] = make(map[Package]bool) 32 } 33 edges[parent][node] = true 34 } 35 parents = append(parents, node) 36 } 37 38 graph := make(map[Package][]Package) 39 for parent, children := range edges { 40 for child := range children { 41 graph[parent] = append(graph[parent], child) 42 _, ok := graph[child] 43 if !ok { 44 graph[child] = nil 45 } 46 } 47 } 48 for _, i := range imports { 49 _, ok := edges[i] 50 if !ok { 51 graph[i] = nil 52 } 53 } 54 55 return imports, graph, nil 56 }