浏览代码

Merge pull request #174 from vmarkovtsev/master

Fix chained renames
Vadim Markovtsev 6 年之前
父节点
当前提交
40d8ffd5fb
共有 1 个文件被更改,包括 23 次插入4 次删除
  1. 23 4
      leaves/burndown.go

+ 23 - 4
leaves/burndown.go

@@ -1164,7 +1164,17 @@ func (analyser *BurndownAnalysis) handleDeletion(
 	file.Delete()
 	delete(analyser.files, name)
 	delete(analyser.fileHistories, name)
-	analyser.renames[name] = ""
+	stack := []string{name}
+	for len(stack) > 0 {
+		head := stack[len(stack)-1]
+		stack = stack[:len(stack)-1]
+		analyser.renames[head] = ""
+		for key, val := range analyser.renames {
+			if val == head {
+				stack = append(stack, key)
+			}
+		}
+	}
 	if analyser.day == burndown.TreeMergeMark {
 		analyser.mergedFiles[name] = false
 	}
@@ -1313,15 +1323,24 @@ func (analyser *BurndownAnalysis) handleRename(from, to string) error {
 	if analyser.TrackFiles {
 		history := analyser.fileHistories[from]
 		if history == nil {
+			var futureRename string
+			if _, exists := analyser.renames[""]; exists {
+				panic("burndown renames tracking corruption")
+			}
+			newRename, exists := analyser.renames[from]
+			for exists {
+				futureRename = newRename
+				newRename, exists = analyser.renames[futureRename]
+			}
 			// a future branch could have already renamed it and we are retarded
-			futureRename, exists := analyser.renames[from]
-			if futureRename == "" && exists {
+			if futureRename == "" {
 				// the file will be deleted in the future, whatever
 				history = sparseHistory{}
 			} else {
 				history = analyser.fileHistories[futureRename]
 				if history == nil {
-					return fmt.Errorf("file %s > %s does not exist (histories)", from, to)
+					return fmt.Errorf("file %s > %s (%s) does not exist (histories)",
+						from, to, futureRename)
 				}
 			}
 		}