Skip to content

Commit f982e9a

Browse files
authored
Merge pull request #208 from vmarkovtsev/master
Fix infinite cycle with renames in --burndown-files mode
2 parents 5f1d4e3 + 8c41da2 commit f982e9a

File tree

2 files changed

+156
-111
lines changed

2 files changed

+156
-111
lines changed

leaves/burndown.go

+16-2
Original file line numberDiff line numberDiff line change
@@ -1312,8 +1312,8 @@ func (analyser *BurndownAnalysis) handleRename(from, to string) error {
13121312
if !exists {
13131313
return fmt.Errorf("file %s > %s does not exist (files)", from, to)
13141314
}
1315-
analyser.files[to] = file
13161315
delete(analyser.files, from)
1316+
analyser.files[to] = file
13171317
if analyser.day == burndown.TreeMergeMark {
13181318
analyser.mergedFiles[from] = false
13191319
}
@@ -1325,10 +1325,24 @@ func (analyser *BurndownAnalysis) handleRename(from, to string) error {
13251325
if _, exists := analyser.renames[""]; exists {
13261326
panic("burndown renames tracking corruption")
13271327
}
1328+
known := map[string]bool{}
13281329
newRename, exists := analyser.renames[from]
1330+
known[from] = true
13291331
for exists {
13301332
futureRename = newRename
13311333
newRename, exists = analyser.renames[futureRename]
1334+
if known[newRename] {
1335+
// infinite cycle
1336+
futureRename = ""
1337+
for key := range known {
1338+
if analyser.fileHistories[key] != nil {
1339+
futureRename = key
1340+
break
1341+
}
1342+
}
1343+
break
1344+
}
1345+
known[futureRename] = true
13321346
}
13331347
// a future branch could have already renamed it and we are retarded
13341348
if futureRename == "" {
@@ -1342,8 +1356,8 @@ func (analyser *BurndownAnalysis) handleRename(from, to string) error {
13421356
}
13431357
}
13441358
}
1345-
analyser.fileHistories[to] = history
13461359
delete(analyser.fileHistories, from)
1360+
analyser.fileHistories[to] = history
13471361
}
13481362
analyser.renames[from] = to
13491363
return nil

0 commit comments

Comments
 (0)