| 930 | } |
| 931 | |
| 932 | fn should_detect_renames(diff: &Diff) -> bool { |
| 933 | let mut adds = 0usize; |
| 934 | let mut deletes = 0usize; |
| 935 | |
| 936 | for delta in diff.deltas() { |
| 937 | match delta.status() { |
| 938 | Delta::Added => adds += 1, |
| 939 | Delta::Deleted => deletes += 1, |
| 940 | _ => {} |
| 941 | } |
| 942 | } |
| 943 | |
| 944 | if adds == 0 || deletes == 0 { |
| 945 | return false; |
| 946 | } |
| 947 | |
| 948 | // libgit2 rename detection is similarity matching over candidate |
| 949 | // add/delete pairs. On root imports or vendored-tree rewrites this can |
| 950 | // dominate the whole import before Atomic sees a single ParsedCommit. |
| 951 | adds.saturating_mul(deletes) <= 250_000 |
| 952 | } |
| 953 | |
| 954 | fn record_generated_full_replace( |
| 955 | path: &str, |