| 982 | } |
| 983 | |
| 984 | fn should_detect_renames(diff: &Diff) -> bool { |
| 985 | let mut adds = 0usize; |
| 986 | let mut deletes = 0usize; |
| 987 | |
| 988 | for delta in diff.deltas() { |
| 989 | match delta.status() { |
| 990 | Delta::Added => adds += 1, |
| 991 | Delta::Deleted => deletes += 1, |
| 992 | _ => {} |
| 993 | } |
| 994 | } |
| 995 | |
| 996 | if adds == 0 || deletes == 0 { |
| 997 | return false; |
| 998 | } |
| 999 | |
| 1000 | // libgit2 rename detection is similarity matching over candidate |
| 1001 | // add/delete pairs. On root imports or vendored-tree rewrites this can |
| 1002 | // dominate the whole import before Atomic sees a single ParsedCommit. |
| 1003 | adds.saturating_mul(deletes) <= 250_000 |
| 1004 | } |
| 1005 | |
| 1006 | fn record_generated_full_replace( |
| 1007 | path: &str, |