| 869 | } |
| 870 | |
| 871 | fn should_detect_renames(diff: &Diff) -> bool { |
| 872 | let mut adds = 0usize; |
| 873 | let mut deletes = 0usize; |
| 874 | |
| 875 | for delta in diff.deltas() { |
| 876 | match delta.status() { |
| 877 | Delta::Added => adds += 1, |
| 878 | Delta::Deleted => deletes += 1, |
| 879 | _ => {} |
| 880 | } |
| 881 | } |
| 882 | |
| 883 | if adds == 0 || deletes == 0 { |
| 884 | return false; |
| 885 | } |
| 886 | |
| 887 | // libgit2 rename detection is similarity matching over candidate |
| 888 | // add/delete pairs. On root imports or vendored-tree rewrites this can |
| 889 | // dominate the whole import before Atomic sees a single ParsedCommit. |
| 890 | adds.saturating_mul(deletes) <= 250_000 |
| 891 | } |
| 892 | |
| 893 | fn record_generated_full_replace( |
| 894 | path: &str, |