浏览代码

Remove unneeded DependencyGraph

Docker-DCO-1.0-Signed-off-by: Danny Yates <danny@codeaholics.org> (github: codeaholics)
Danny Yates 11 年之前
父节点
当前提交
6b48761ce9
共有 2 个文件被更改,包括 0 次插入172 次删除
  1. 0 116
      utils/utils.go
  2. 0 56
      utils/utils_test.go

+ 0 - 116
utils/utils.go

@@ -890,122 +890,6 @@ func UserLookup(uid string) (*User, error) {
 	return nil, fmt.Errorf("User not found in /etc/passwd")
 }
 
-type DependencyGraph struct {
-	nodes map[string]*DependencyNode
-}
-
-type DependencyNode struct {
-	id   string
-	deps map[*DependencyNode]bool
-}
-
-func NewDependencyGraph() DependencyGraph {
-	return DependencyGraph{
-		nodes: map[string]*DependencyNode{},
-	}
-}
-
-func (graph *DependencyGraph) addNode(node *DependencyNode) string {
-	if graph.nodes[node.id] == nil {
-		graph.nodes[node.id] = node
-	}
-	return node.id
-}
-
-func (graph *DependencyGraph) NewNode(id string) string {
-	if graph.nodes[id] != nil {
-		return id
-	}
-	nd := &DependencyNode{
-		id:   id,
-		deps: map[*DependencyNode]bool{},
-	}
-	graph.addNode(nd)
-	return id
-}
-
-func (graph *DependencyGraph) AddDependency(node, to string) error {
-	if graph.nodes[node] == nil {
-		return fmt.Errorf("Node %s does not belong to this graph", node)
-	}
-
-	if graph.nodes[to] == nil {
-		return fmt.Errorf("Node %s does not belong to this graph", to)
-	}
-
-	if node == to {
-		return fmt.Errorf("Dependency loops are forbidden!")
-	}
-
-	graph.nodes[node].addDependency(graph.nodes[to])
-	return nil
-}
-
-func (node *DependencyNode) addDependency(to *DependencyNode) bool {
-	node.deps[to] = true
-	return node.deps[to]
-}
-
-func (node *DependencyNode) Degree() int {
-	return len(node.deps)
-}
-
-// The magic happens here ::
-func (graph *DependencyGraph) GenerateTraversalMap() ([][]string, error) {
-	Debugf("Generating traversal map. Nodes: %d", len(graph.nodes))
-	result := [][]string{}
-	processed := map[*DependencyNode]bool{}
-	// As long as we haven't processed all nodes...
-	for len(processed) < len(graph.nodes) {
-		// Use a temporary buffer for processed nodes, otherwise
-		// nodes that depend on each other could end up in the same round.
-		tmpProcessed := []*DependencyNode{}
-		for _, node := range graph.nodes {
-			// If the node has more dependencies than what we have cleared,
-			// it won't be valid for this round.
-			if node.Degree() > len(processed) {
-				continue
-			}
-			// If it's already processed, get to the next one
-			if processed[node] {
-				continue
-			}
-			// It's not been processed yet and has 0 deps. Add it!
-			// (this is a shortcut for what we're doing below)
-			if node.Degree() == 0 {
-				tmpProcessed = append(tmpProcessed, node)
-				continue
-			}
-			// If at least one dep hasn't been processed yet, we can't
-			// add it.
-			ok := true
-			for dep := range node.deps {
-				if !processed[dep] {
-					ok = false
-					break
-				}
-			}
-			// All deps have already been processed. Add it!
-			if ok {
-				tmpProcessed = append(tmpProcessed, node)
-			}
-		}
-		Debugf("Round %d: found %d available nodes", len(result), len(tmpProcessed))
-		// If no progress has been made this round,
-		// that means we have circular dependencies.
-		if len(tmpProcessed) == 0 {
-			return nil, fmt.Errorf("Could not find a solution to this dependency graph")
-		}
-		round := []string{}
-		for _, nd := range tmpProcessed {
-			round = append(round, nd.id)
-			processed[nd] = true
-		}
-		result = append(result, round)
-	}
-	return result, nil
-}
-
 // An StatusError reports an unsuccessful exit by a command.
 type StatusError struct {
 	Status     string

+ 0 - 56
utils/utils_test.go

@@ -416,62 +416,6 @@ func TestParseRelease(t *testing.T) {
 	assertParseRelease(t, "3.8.0-19-generic", &KernelVersionInfo{Kernel: 3, Major: 8, Minor: 0, Flavor: "19-generic"}, 0)
 }
 
-func TestDependencyGraphCircular(t *testing.T) {
-	g1 := NewDependencyGraph()
-	a := g1.NewNode("a")
-	b := g1.NewNode("b")
-	g1.AddDependency(a, b)
-	g1.AddDependency(b, a)
-	res, err := g1.GenerateTraversalMap()
-	if res != nil {
-		t.Fatalf("Expected nil result")
-	}
-	if err == nil {
-		t.Fatalf("Expected error (circular graph can not be resolved)")
-	}
-}
-
-func TestDependencyGraph(t *testing.T) {
-	g1 := NewDependencyGraph()
-	a := g1.NewNode("a")
-	b := g1.NewNode("b")
-	c := g1.NewNode("c")
-	d := g1.NewNode("d")
-	g1.AddDependency(b, a)
-	g1.AddDependency(c, a)
-	g1.AddDependency(d, c)
-	g1.AddDependency(d, b)
-	res, err := g1.GenerateTraversalMap()
-
-	if err != nil {
-		t.Fatalf("%s", err)
-	}
-
-	if res == nil {
-		t.Fatalf("Unexpected nil result")
-	}
-
-	if len(res) != 3 {
-		t.Fatalf("Expected map of length 3, found %d instead", len(res))
-	}
-
-	if len(res[0]) != 1 || res[0][0] != "a" {
-		t.Fatalf("Expected [a], found %v instead", res[0])
-	}
-
-	if len(res[1]) != 2 {
-		t.Fatalf("Expected 2 nodes for step 2, found %d", len(res[1]))
-	}
-
-	if (res[1][0] != "b" && res[1][1] != "b") || (res[1][0] != "c" && res[1][1] != "c") {
-		t.Fatalf("Expected [b, c], found %v instead", res[1])
-	}
-
-	if len(res[2]) != 1 || res[2][0] != "d" {
-		t.Fatalf("Expected [d], found %v instead", res[2])
-	}
-}
-
 func TestParsePortMapping(t *testing.T) {
 	data, err := PartParser("ip:public:private", "192.168.1.1:80:8080")
 	if err != nil {