@@ -1164,7 +1164,17 @@ func (analyser *BurndownAnalysis) handleDeletion(
1164
1164
file .Delete ()
1165
1165
delete (analyser .files , name )
1166
1166
delete (analyser .fileHistories , name )
1167
- analyser .renames [name ] = ""
1167
+ stack := []string {name }
1168
+ for len (stack ) > 0 {
1169
+ head := stack [len (stack )- 1 ]
1170
+ stack = stack [:len (stack )- 1 ]
1171
+ analyser .renames [head ] = ""
1172
+ for key , val := range analyser .renames {
1173
+ if val == head {
1174
+ stack = append (stack , key )
1175
+ }
1176
+ }
1177
+ }
1168
1178
if analyser .day == burndown .TreeMergeMark {
1169
1179
analyser .mergedFiles [name ] = false
1170
1180
}
@@ -1313,15 +1323,24 @@ func (analyser *BurndownAnalysis) handleRename(from, to string) error {
1313
1323
if analyser .TrackFiles {
1314
1324
history := analyser .fileHistories [from ]
1315
1325
if history == nil {
1326
+ var futureRename string
1327
+ if _ , exists := analyser .renames ["" ]; exists {
1328
+ panic ("burndown renames tracking corruption" )
1329
+ }
1330
+ newRename , exists := analyser .renames [from ]
1331
+ for exists {
1332
+ futureRename = newRename
1333
+ newRename , exists = analyser .renames [futureRename ]
1334
+ }
1316
1335
// a future branch could have already renamed it and we are retarded
1317
- futureRename , exists := analyser .renames [from ]
1318
- if futureRename == "" && exists {
1336
+ if futureRename == "" {
1319
1337
// the file will be deleted in the future, whatever
1320
1338
history = sparseHistory {}
1321
1339
} else {
1322
1340
history = analyser .fileHistories [futureRename ]
1323
1341
if history == nil {
1324
- return fmt .Errorf ("file %s > %s does not exist (histories)" , from , to )
1342
+ return fmt .Errorf ("file %s > %s (%s) does not exist (histories)" ,
1343
+ from , to , futureRename )
1325
1344
}
1326
1345
}
1327
1346
}
0 commit comments