Переглянути джерело

Merge pull request #95 from vmarkovtsev/master

Survive tensorflow/tensorflow
Vadim Markovtsev 6 роки тому
батько
коміт
64390ae762
1 змінених файлів з 25 додано та 13 видалено
  1. 25 13
      internal/core/forks.go

+ 25 - 13
internal/core/forks.go

@@ -288,11 +288,16 @@ func bindOrderNodes(mergedDag map[plumbing.Hash][]*object.Commit) orderer {
 }
 
 // inverts `dag`
-func buildParents(dag map[plumbing.Hash][]*object.Commit) map[plumbing.Hash][]plumbing.Hash {
-	parents := map[plumbing.Hash][]plumbing.Hash{}
+func buildParents(dag map[plumbing.Hash][]*object.Commit) map[plumbing.Hash]map[plumbing.Hash]bool {
+	parents := map[plumbing.Hash]map[plumbing.Hash]bool{}
 	for key, vals := range dag {
 		for _, val := range vals {
-			parents[val.Hash] = append(parents[val.Hash], key)
+			myps := parents[val.Hash]
+			if myps == nil {
+				myps = map[plumbing.Hash]bool{}
+				parents[val.Hash] = myps
+			}
+			myps[key] = true
 		}
 	}
 	return parents
@@ -314,11 +319,16 @@ func mergeDag(
 		}
 		c := head
 		for true {
-			next := parents[c]
-			if len(next) != 1 || len(dag[next[0]]) != 1 {
+			nextParents := parents[c]
+			var next plumbing.Hash
+			for p := range nextParents {
+				next = p
+				break
+			}
+			if len(nextParents) != 1 || len(dag[next]) != 1 {
 				break
 			}
-			c = next[0]
+			c = next
 		}
 		head = c
 		var seq []*object.Commit
@@ -363,7 +373,7 @@ func collapseFastForwards(
 			visited := map[plumbing.Hash]bool{child.Hash: true}
 			childParents := parents[child.Hash]
 			childNumOtherParents := 0
-			for _, parent := range childParents {
+			for parent := range childParents {
 				if parent != key {
 					visited[parent] = true
 					childNumOtherParents++
@@ -388,9 +398,10 @@ func collapseFastForwards(
 							delete(mergedDag, child.Hash)
 							parents[child.Hash] = parents[immediateParent]
 							for _, vals := range parents {
-								for i, v := range vals {
+								for v := range vals {
 									if v == child.Hash {
-										vals[i] = immediateParent
+										delete(vals, v)
+										vals[immediateParent] = true
 										break
 									}
 								}
@@ -399,7 +410,7 @@ func collapseFastForwards(
 					}
 					break
 				}
-				for _, parent := range parents[head] {
+				for parent := range parents[head] {
 					if !visited[parent] {
 						visited[head] = true
 						queue = append(queue, parent)
@@ -427,9 +438,10 @@ func collapseFastForwards(
 				delete(mergedDag, onlyChild)
 				parents[onlyChild] = parents[key]
 				for _, vals := range parents {
-					for i, v := range vals {
+					for v := range vals {
 						if v == onlyChild {
-							vals[i] = key
+							delete(vals, v)
+							vals[key] = true
 							break
 						}
 					}
@@ -498,7 +510,7 @@ func generatePlan(
 			// merge after the merge commit (the first in the sequence)
 			var items []int
 			minBranch := 1 << 31
-			for _, parent := range parents[commit.Hash] {
+			for parent := range parents[commit.Hash] {
 				parentBranch := -1
 				if parents, exists := branchers[commit.Hash]; exists {
 					if inheritedBranch, exists := parents[parent]; exists {