From 69388cd859310b23a18d36a8f54c6cd5e2c3a099 Mon Sep 17 00:00:00 2001 From: Bas Zalmstra Date: Fri, 19 Jul 2024 16:48:16 +0200 Subject: [PATCH] test: add failing test --- .../rattler/src/install/clobber_registry.rs | 64 ++++++++++++++++++ .../clobber-with-dir-0.1.0-h4616a5c_0.conda | Bin 0 -> 2039 bytes ...clobber-without-dir-0.1.0-h4616a5c_0.conda | Bin 0 -> 2052 bytes test-data/clobber/recipe/recipe-with-dir.yaml | 23 +++++++ 4 files changed, 87 insertions(+) create mode 100644 test-data/clobber/clobber-with-dir-0.1.0-h4616a5c_0.conda create mode 100644 test-data/clobber/clobber-without-dir-0.1.0-h4616a5c_0.conda create mode 100644 test-data/clobber/recipe/recipe-with-dir.yaml diff --git a/crates/rattler/src/install/clobber_registry.rs b/crates/rattler/src/install/clobber_registry.rs index 3c9a62570..60d218791 100644 --- a/crates/rattler/src/install/clobber_registry.rs +++ b/crates/rattler/src/install/clobber_registry.rs @@ -1173,4 +1173,68 @@ mod tests { assert_check_files(&target_prefix.path().join("bin"), &["python"]); } + + // This used to hit an expect in the clobbering code + #[tokio::test] + async fn test_directory_clobber() { + // Create a transaction + let repodata_record_with_dir = get_repodata_record( + get_test_data_dir().join("clobber/clobber-with-dir-0.1.0-h4616a5c_0.conda"), + ); + let repodata_record_without_dir = get_repodata_record( + get_test_data_dir().join("clobber/clobber-without-dir-0.1.0-h4616a5c_0.conda"), + ); + + let transaction = transaction::Transaction:: { + operations: vec![TransactionOperation::Install(repodata_record_with_dir)], + python_info: None, + current_python_info: None, + platform: Platform::current(), + }; + + // execute transaction + let target_prefix = tempfile::tempdir().unwrap(); + + let packages_dir = tempfile::tempdir().unwrap(); + let cache = PackageCache::new(packages_dir.path()); + + execute_transaction( + transaction, + target_prefix.path(), + &reqwest_middleware::ClientWithMiddleware::from(reqwest::Client::new()), + &cache, + &InstallDriver::default(), + &InstallOptions::default(), + ) + .await; + + let prefix_records = PrefixRecord::collect_from_prefix(target_prefix.path()).unwrap(); + + // remove one of the clobbering files + let transaction = transaction::Transaction:: { + operations: vec![ + TransactionOperation::Remove(prefix_records[0].clone()), + TransactionOperation::Install(repodata_record_without_dir), + ], + python_info: None, + current_python_info: None, + platform: Platform::current(), + }; + + let install_driver = InstallDriver::builder() + .with_prefix_records(&prefix_records) + .finish(); + + execute_transaction( + transaction, + target_prefix.path(), + &reqwest_middleware::ClientWithMiddleware::from(reqwest::Client::new()), + &cache, + &install_driver, + &InstallOptions::default(), + ) + .await; + + assert_check_files(&target_prefix.path(), &["dir"]); + } } diff --git a/test-data/clobber/clobber-with-dir-0.1.0-h4616a5c_0.conda b/test-data/clobber/clobber-with-dir-0.1.0-h4616a5c_0.conda new file mode 100644 index 0000000000000000000000000000000000000000..339b889d092918427bc62dd6fdfc80d5a4fff7ff GIT binary patch literal 2039 zcmb7_c{JOJ7RP@P`x0r232H6I(uAb;X|-N!DM~D*wMFcENK&3sVy#x}LY3H~>Pdr+ zZEB_%rD&xT6^fcNgI7{Zm8s=L-yiR^=e$39@A;m4?;qdqx&M7I)?i)<;7eWKygCH< zA?3Npk;J$P^CRJWaU>ivn1~OLRrbM$`{J+>Apux_JRuB6!bbTKh(Y*pWn=VB%vV99 zM&n&rZorWcTyZ@JpHRHFw;ur!9YhL5_y!RWI!F{!2N9^NkJ88K`CxUBBpd;GgGf?u z(cbq01QYcr*R#j`;B}6a3m!6 z)1YvF{P(_kP7eWWUoTUE+HHw0l&hxYkPy262p{wG;*G1Qa+V}tRw0#?NC41OARCki zP`NF|VTlJ(!sDoQ?}Qge^7bG2_XkcN+FXeezDIoD@Z86D3?AmvGyY2Vxa;1FcC#oK znrwC0l+4PNs?viTkJx-j-%=fgmi}6O;3|~DXgyPNzV%^;{>qCfq{yNZ$KL1Pi6eb< zR)={js#OQp7q!}H1uN>>eM>~fAcxa(wTst`iYy1(RYK%PmZdCEA)yo(Zm}9j1JCT&H;3`<;rE8}W?h>&8q> zT$6@}GFm2FLz+I88sGFaI=&bxv-D;z;q-60#VE851?tc!Ko5}-khD~cpfj}Y7S?3* z^55ty(V9bLV~~S=swfk|AI`_IHVS^6Ng@9BnU-MNkW4^%F;H@B*3LB<7!)EU!2_o^ zW-@!nG&;i`ZrDAE)LSpHH&>G83_r>;_Q}!2fuZ6k^ZuU>hr5<1LJWUi8{VQ>>`Z$E z9po}v14@%6!3U30O!(IJJ1&$Dnhx*Oo;2}(XSAY1 z&7NN`=+l51KT|&xOgj1O)5@9DnhttyR$Jd#ZhKzVtiuBK#G)0e`F+t1X6*d28;(QT zXYE9)rQmzWz`GooG=pPj}EgnI}=8k_u^pq9~|a6_4d$qT2$*PZw63 zK<+KLS^m1wJ=fBuL=YV_&#BZLWyFL6jsk*cKu?m)dt2W{Ra)*mM=gv2w#}# ziLbxKI=zZn#kN&UH|InQ_ow+KUtC?Qrp6|Ffn9;P36QeF4_u>iqXxEy=Xe-UKkwc~Wb(`#rtu>IjbA{w%Tg~_WMFWJgk=n<$^Xb!; zsgd!$t7JuoN6bSFrKIh`n^Cg0QDrgRyoM*6#(Sh8{hC8MK-k@Jb>1=xt_P#-61Z4yu@o0A6yRh()58;IX|ZxcRW_z zWooWkm=}3@ja3uW%8>&g)~WCS@=hmw&f|D^W*0V85%?AIq3Th6 zdy)1ixDi@0r6V)1ZIZ5o0xyFoQxgD1rdmN+WIOp3IZaOd?<#3NRs$LqE%2cL%_O!l z51Q%^_fV>W9~2aWXWYuBoXP&?Sz^neOVvprWrNY(*8?0-;+r(FN$;LLj5UY{3I6}U z;{xDI)g&H`ukiP+^;^XK*9ZVLiI=$RcLDF)=x>?yzvxZw`hA4LSo858`N7=Y;7-n$ F>p!%-W1;{6 literal 0 HcmV?d00001 diff --git a/test-data/clobber/clobber-without-dir-0.1.0-h4616a5c_0.conda b/test-data/clobber/clobber-without-dir-0.1.0-h4616a5c_0.conda new file mode 100644 index 0000000000000000000000000000000000000000..1380136d283792388e7f50447131a0a501b4b0ff GIT binary patch literal 2052 zcmbW2c{JOJ7RP@Qdj+*df{Cp}E2Je8Dy?GLl30f*X(y7P_6&kiT8Vn2w66x~*wr5U z7OiEf#Y;tF=|XMO#n#1GTB;ST@}lpLciMB_AM@@#-*fN%<9^TgzmF>(EUp54spxm7 z1^|DQw&>UuM5Hi(2E~uUprC@I=;86YGK|zm8^j2tM>9dLb|1l^%5skLSl(tH%hN5UiR1A<~KRP!1W|!lg#xmjz!WR3R@Q?k=Kx3r~{e0XI z&+4G#V|>z^I92B`{}JAr&sc`1@c2*e#C259n)iry@=%LKUP}Q?L)N~n7n*)RDWT$; zyu)&#oHF{KKE(O;{Z5 ze8GsQb>^dtnf-wcdIQ^P?tUTj>hIAy5M7+~yt(v|`*Hg8^psIet9+?ES35G#LS7)V zDix}LoZY+mONI>V^_;b(zYGbPRzXtxuKCgp{;?cRwpxh%tH3%vZd<^TvNQ<3ff zzP7dGd4544w!xWmj2Eoc*PU|CJ6qizTCr9*i%)O}<~`FuYC!9a(n^gS2Lzm4@|@w^6Nj2uu;dk-1aRT*VYxiZ z)PX$Cw#V-cC7CQ4X?IulnIWK{H_Z-CppMhe+KJlTLq+bhT4BFb$>K=X}0|; z+od3_g;v|Cb>4jkcLMF04dz+CdWeu_w5ySn;d~%s&*<+jZ;Ycq=~rj*$j6VAgs%`U z9KYNsB!>RbOzOFITuJCosQd9R=Ocz=xq&5Yp4mioVruTzh#u-D^z1Vtfu9D8DCnAH z;fhxcsOEYOf|IgZ&5CFOIt6h{OX)4Su&sb)XV*FV6 zD+b<@fBXW_F{{S`u2Y@+a$BFdssCwaLZ+Qq$iw%#sBY6)G%CxJUW_wJg zRhD9NHMTHyYcs{`*G~}PNCiR)wGm%r0=#M*4aV|6?gJJmIF$iS9e6>2q9OO~$*0F= zSUJqjQNyKeh74}MwaVt)`h(nw!o5dEZ_S z>1C2k98{vxB8U~#ciO(b3Lj04#cz{6d()F1`GIYWb0!CJSW{Tfai+oE1HEpBT8@%b zM{nvn(kP%bva`jrIw{5DYRk+K9zw+(F+i{y6e|g$ft5VtbqJyIhY*>{vV?kT#k5Cl zY_kogEQE!}Fz-9L0Wq34mEuv{zCA}+05!=mFSyC5TqUY2GBYXNwLZ*tg4&%7Fgta! zparA4s$q-g-aa%LHH4_=fL(-~c>oVH#&PwNOV*${cj3Jc`SJlOwzdrtqj_Dq*R?T& zSRce~)fwH4A)!M^?+es#GlX9?rNEETgHEKPl25$ZV!34a-u{ev`j#{8FYJ_3ZLcJ;>Tm8A6U8@ch6n#HAnS_1o z1(&ul1$PSTj9317c^xnY@~6!NV87Ek)=|q)*nl+R+C{~@Ke>bH37pU#ZuRNRH$YJX zVfx8(O=6v~wO$S&J_-TOjGMUpKy*E%$NzPmS?<;Y#K9dtF3xWNHnA6_Y|)epu6QvJ z3jDvhCxXD2DrfDEuPFHK>$jx)&m#bovm8Y0-{s!7?%$&6zwRGI>)!^ID_%l!*8(hR Kp=f^ia{U`Eq*5>d literal 0 HcmV?d00001 diff --git a/test-data/clobber/recipe/recipe-with-dir.yaml b/test-data/clobber/recipe/recipe-with-dir.yaml new file mode 100644 index 000000000..29151a6ba --- /dev/null +++ b/test-data/clobber/recipe/recipe-with-dir.yaml @@ -0,0 +1,23 @@ +recipe: + name: clobber-with-dir + version: 0.1.0 + +outputs: + - package: + name: clobber-with-dir + version: 0.1.0 + + build: + noarch: generic + script: + - mkdir $PREFIX/dir + - echo "clobber-1" > $PREFIX/dir/clobber.txt + + - package: + name: clobber-without-dir + version: 0.1.0 + + build: + noarch: generic + script: + - echo "clobber-1" > $PREFIX/dir