@@ -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