@@ -1312,8 +1312,8 @@ func (analyser *BurndownAnalysis) handleRename(from, to string) error {
1312
1312
if ! exists {
1313
1313
return fmt .Errorf ("file %s > %s does not exist (files)" , from , to )
1314
1314
}
1315
- analyser .files [to ] = file
1316
1315
delete (analyser .files , from )
1316
+ analyser .files [to ] = file
1317
1317
if analyser .day == burndown .TreeMergeMark {
1318
1318
analyser .mergedFiles [from ] = false
1319
1319
}
@@ -1325,10 +1325,24 @@ func (analyser *BurndownAnalysis) handleRename(from, to string) error {
1325
1325
if _ , exists := analyser .renames ["" ]; exists {
1326
1326
panic ("burndown renames tracking corruption" )
1327
1327
}
1328
+ known := map [string ]bool {}
1328
1329
newRename , exists := analyser .renames [from ]
1330
+ known [from ] = true
1329
1331
for exists {
1330
1332
futureRename = newRename
1331
1333
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
1332
1346
}
1333
1347
// a future branch could have already renamed it and we are retarded
1334
1348
if futureRename == "" {
@@ -1342,8 +1356,8 @@ func (analyser *BurndownAnalysis) handleRename(from, to string) error {
1342
1356
}
1343
1357
}
1344
1358
}
1345
- analyser .fileHistories [to ] = history
1346
1359
delete (analyser .fileHistories , from )
1360
+ analyser .fileHistories [to ] = history
1347
1361
}
1348
1362
analyser .renames [from ] = to
1349
1363
return nil
0 commit comments