From 09bcb06270fc71af81d75c07b2729707d9e61a39 Mon Sep 17 00:00:00 2001 From: Roman Shevchenko Date: Fri, 6 Jul 2018 09:42:58 +0200 Subject: [PATCH] [platform] Windows file watcher fixes, binaries+tests (IDEA-192665) It no longer rejects paths with symlinks/junctions, but checks that they do not point to UNC paths. --- bin/win/fsnotifier.exe | Bin 84480 -> 84480 bytes bin/win/fsnotifier64.exe | Bin 98816 -> 98816 bytes .../openapi/vfs/local/FileWatcherTest.kt | 79 ++++++++++++++++-- 3 files changed, 70 insertions(+), 9 deletions(-) diff --git a/bin/win/fsnotifier.exe b/bin/win/fsnotifier.exe index 5454e0b47ef6f47a344a45ee05969b27acb07b83..16e6f490efa365cf2ee8a3e1461aa3d44c7f99ef 100644 GIT binary patch delta 18437 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 delta 18161 zcmd^{dt6l2{`dDD1{rY>RKVdPf}*0L&di?s9R)>29R;~4DdwdKQPIHA(7{Fw94KsI zc+5JOR+v^4UegTo0v4K;C6yH!r*`4#ppjvr^L*AGG&`^7`MsXk^Y24_=l%VD*V=2Z zwf0)ywbq`gl4{?QYTqgo+quo0=o~ZRvqjUVZ@DLVVXtkm!Ojb--m+5Q{w;$*2iLmg zVIkkNEoSiYXZyG02-Z9bFkx#H^f6!`69#0*oYrkOsupUIayzpPwBeL?qpg%{KLNZev; zk_R2RZ~?76YQd!Qeg4Z!-uFuitVcI=NKe*L_@1mKp^}lTotPzI(}K~CbiQdI!({LS z@mX2Q|LO7A`9sioHUN!ijJESn^{1@~a+IYeFrE+@u0c;Nq#ZQ_1BBk3e}vRZMn>6@ zgzniOImypXU`jRyFoB!*;b8@y>|^KOAnlUjtd28~&DNtQ!qFv{LHr=H+4y>?vJRW-E1>A-Cd?Kms8!}Gfo*_Mop~0l4y9*`9>0L9* zle*tyf*7X!p`OxHft!1fDh#!;WT1G2(=MdBPgmO6trFYj^M$wF3&dmJH`6NuCpP)C zrt;^|cz5?-BQ!OGPZ}hQ&;q2OBRYJ}`7z}S#O{ZB$}Op$wPFn3BII!Qah;K3_=UQg zD`&G?*@VrFg}29kP?;byP8P4#yElqAIh*K>GWf;x9)F(&*Wf}y1Mc6$hbfPux7a8a zy2^W>0rWmesGSr|7uw=F9rSS{8jE&s`qSG}|H9y3xL`hgGJlO=jNWwj9CaJ|sPtAr zVygQgNru}Z^j_e}K-W(RpSG1INehQ%@ZSqvFGlS{Fgv&7(Fhet<+nmb``v5BrMC)C zFPy)CmQNnr-=*tw$t6b2N%3rumzUwz~ zxSU>ye^MQc%&V18#zhQuv-a{no)9q^Bb7VPV6fPmlIYW9_|k5SnWXMiJ3s%mN&B!nI=CJdI9NS@OVePv=FR zK=PF|N;Eu_{3%tiaxyL;iZzjx09|A*&evR<0vY|+c4EKcmqE9Eq=Y#koKk3kUmh2j=`0OdQf(H27i>O`;TRl z$)f&)y*>STs^@bW(;B_g<8e~iKXS}t!3?vzWMTrtoh?u5NlnjXJt0!mqqoc;sN7d4 zyD%b1Xa7-b9gzi&96Gh1(0p3g&6rvl$J$ZD%F>>1(UD7H84}|=+HW!q$JcL=sz8P4 zCPPjKauSiygdQom8#v6F>+M2X#$L3yYO8R$X?Ve7rsB#WMDG)+bddZjO(kUM~mT|Ajn-;2xpl+P5G3xoNb>o>Sr zZw(!up$ubp@;?imhqa)vv}0s0%U}P4K6vqinfP<}@&uM{6ei43TG0FspUSDsIrz_ygYSdpj-?9Vc`)mXNT4s2L_2rk5uq4GFpI9?OaJ1cpC92ot(c!mq}P z=Q2|lla*B{L2cedN|vLqm}%s#NX!zh-gG_I2P0@Of1VT%_)gSygDf04oPD3T1|Ft{ zaZnW7PUa078S^NXf$~1?$>N1Z-}vMNrXa*UQ?lDW9rHRNANTu^>>e~95A)6-M^q=e zBP$CrX`nkvk}E1p>M48Z&bg$!Ojbt-znQp#HEaiYC-~Ly!J`;vPuuDQA$MU^t~kA1 z-42t#OP&ZxVt0{KAqnxn$1=>OnNp?%g?9K?PL8&FLg*wy96Y3vr?CpSH?*ho&)|V(oz4w*T%tL; zlnldp$~UyfY`BWi5W)Adl}Wuy<3^oX?M^W%6E}<;gO;|IjIRx>?4~1&sFkWct}8yaEVX_ zDMx%FMkcP;(b79Blce?xI=-H#W0S7a5GHwFd77-GcgX!Db(rok#@=Tq8?%_kdCEc<~ZH4IfQgSh3ZNNe;MqpAK zz4?$SWOigQTT7NjD#C^)qGnk_PxA`8R?sJ2*v6kG^^vwAep66xCtV_M70UEUJq3e! zAIx$LPJjLn5-?;$SPsS#I!l($e}Ia*J3S%U@Ywl}$n+sGgJ$6R+$eqz;PB8cltdHf zkZ{`)+P)4yej17^m+_MXxSJNv?+8xk577+# zgns0UA)}>YB;|%KD3|jH?){@;*egUHHM-yH2xMOOYh+2(_~-&^59>I~HFkW6A@ABC zVG6}u<3p!Yg-3Cmyd9+#sV0z)s9Dk$#FySKZ6=e4P7f&j%dvVqd2#6YAlfCBGdkU! zfrou&+xc#Cb?7K(s{88f*{*i)2)PRB3T?;F0&2 z1+Hwo8JOS5EDOxP#JEq5@L*h;JMrdW#^BMF zdJ24TyK+BF3zYBUl6d&>WYMs7(y(7Vo_l*1^35=LKqeieqer3JS^g^$F?)}KFA#e!J#^X=QcW(!MzIy- zKd~`v6&WyM3|mA@Bc?lhZeYt3vWpH!buInucF1mGkL&r|TZAK)T6=6L^S&!yaM9b` zcj*LI@`J8K!Iko$D@SnIA8D;L3c^wM%eiKj=CrxN;tJH4CmK54w24 z<#^D={7PGtC%7VdTPYKK`447`C$%F7J8d-KelxR$Y{d^|D;8WO54v^;uFVg+jtZ`_ z2VE_KtKvZyFSx26a5)`4f^WwIK8Li6HlX@JSES(D^`I+WaMeEOG6}A|54ti1SKWiI zJi&E9aNX;lV!>DcV74l9Y1H7rTAFabe;UcHQ89*mj3e*nqEO-qDgK*P0t+kZ=6lXu zj6RwlL)8S53u9>-lghiMXTAPdKgkp$8!IbK4xjfs?X+`y_$w-KksuBM>m@+3*&+v)sgH^|vB z``My~)nmnM9FIp_U8*szTxFT_X54xl$W;$7W$3I{g%@(2#} ztmp};BcH~<$<`CsxK(U5`E^{E^y;r@A$D=OQpXPR>-gm?YBxd89wq;n@HD%c#K}*H z4t9_qFGf^-T`C6};ESSms zHfnC#n9Ydss8Dz|@1&mG06r7@(Ja@}9>zVB#A{^;xk=g#QBOO0QEO$h$v4`ms)OhU z*G#deyiZ5pbbfI=F63@yctQ%`U+6x!fVO~gl5Fx6 zrC@vBI^Shs3i`V?idl?%oIGhp*Ez|iyF&7{g+e79v=S4rFuKfTS=fme%J?X3C9$6< zAj6FgHh@$Zb6FYr-MEllPclqTMRa%Da4z+PoI!DP#yEm*)2Y?t38^KwO)&!-;cvl^ z<3q7H(XG&O5^q+{2*UP}DF|~=@(Q{k!o~i=l%%dKekP`XBNI!7!-fz30!9$sp%+ea z%vldR9LY`MSQE{lBm2$M`yR!O@FEEdq{m#tmXR7u5_^JtZJ98Nrs(|&em4HOW{O9P z10Y7eCxm*-{XCz0)GEXnxB3L(tm6jf(E_vS9gow!ah9WiI`YZm)-5P3dzf+WMv&7!qZ&CLHSMMgnQ|@56#>|k%toaOS z-t!qE%budlgx+|nrm838M8ldHgcV(yNBm}OXGf72W;sP`=aVS=C=o9wQ|wjj4$^8T zY#Yg&eLMIn?c1bw`nE0w&ovq0w~efuvz>L2z*OzP{_hK$USlUVg`SQ;{_ZJ~nOca( zUr1d&(sdGhpoy0~p7PQvrP@fOQYBqOpmV(RS8T852Rzj@EGFOrw$6=HzM z=8wf^;`~_lM8l)=RV@2U!;9JLS#~A~Tkx9b^1I~hg6W30PkVcZ&pYq&^lnxi*n+v5 zJsnMNK5S!-_%)?;#_|w1v0FJ^d|)l6$7q-F@rSlZAtMWiu@W+gt<% zX*3G?DFPAq)+t*-0N%Cc=a@&laGQm|bWZdSO#5fsfbj(S=VezHPvcVy&tc|xv|j-?jcS-b$tvR9T$ zFzfBvDiEMc?dyOnwzJtvre=PrmtsxikGT4D+#ER(9eZP4;le2s}xAwt1 z$&Sh?Y_8bO*OK`wh7K=4Qi;W!Rhh{a49jIx`BfJ&!Tf{@+S2ic@cf(Pg%uH^Yj2Qu zR>X=sGw0G{0Cp)pNw2bUV-{9pcm(+!WjwggJZVIY&d6mkf>zMDI zWbevJeQFWQ->W76UK!q}j;eJeU{#c;r<06ZrR;AImx z_d4x_udqlmh`{dC9et@vUS1XFyl?XXrnJP!&}Z{UQeviSKRAaoR*iHluHJ zuV<{+lW6pf?e&CtJ;_GjxL%K+*OP+RQ@x(w_LEohhfMo?ztBFh(YL*~rf0k!iP4wu z^}Ox%$c?^1y%*PdJu0JbaIfd-{iOfuFy~`P@T|qcD^SWW78u0O7Z}W^3Y78FDK&he zU`F#Mfw8qMWFrJSUDCZ*us`y}mk-Su(ju#6w@jb60gq^W@oNI0T4d|Y=iTqCj zllkuirtn_~wDTVeOykcB%;ZlA%;t{?%;Db>xP;#)(82E(n8*J^U_QT1U;$q)u!!Fz zu$W&5I%y>immo^;%cU3F^>|| zTIwAnsC%g@5mdV0rg zRDE4gFH`j;L2adKji6qoYK5S-QFW7`wnKIDYXzOB?&X4diK;n*dY!6s1+|l^(*(7P zs#Zbmrm9L%d#E~EQ0WPQj}lZdRR=*8>MWs_uaF?6>K}DZ+6zHc|4$uNgQ?mss4}X4 zA*hj5y(p-N(+q!FP-CfjR8Zrn`nsUTQ}rc5l~c7wP*qf|5L6viHwmhVMgQ|_1>Hv7 z%LO%&syR@FN+(lmj*yT-)hU8%r>aR%)2ONt)J&?56x3|0MhI#SRfC|q&O~}&^Ul8a zjRL7H(BK?%rGN{q#(L=P!q-YIO?_JMbUSd=JNPPzE{w^lMBieiN=^3^273yF@D)U1 zq$kAtUZ^0*Qz*ltR4B#QJTw^MyO=*4X^d#9T-r%@dBV4}35b}zTR5EWu$9IUj~`2R z7HY`F!Z+APvSDo;dxpG%&sy@)+F7imVd&$BMRPN^V8h<_dlOc0rZD8xPa@YfAJ=Wk znlZn=?1|k@Q>)xf@6c4&PvSLFSDTMdvnRGRuN0TXRyt@pcpYX{F+S=bEv014`cb0H zEhKe)EXBI@k+HNSd}lBVFhNw1ct|WH5)urNl4I+q2Gfjg4=p$!QVgluLPDQdV(NN| zCj9;dZnqaI3cFXa+un+er4{SO1;{}&S4r>@4@rB99DZV`sOu?m<%u{7wpc!b=0F*B zKt1Frq!H2#xdds2bUa1Ui<1X=Z!9iD4Iz;bdBa=9<9tLro+E9}_`wys@Z^_8;=Hv? ziaIUC5Wo=`2ZEA`qTi~?BPFBb^xN^k=#nnH4DClZ4dZYXPOtb*mcHu^pogPt&y%Ai zLqKphv|F(`J*H%EE@}^oqyt0q~UORjb8vw zcq2>{n+pBn6xf>K?C|=g--gli&K`Qy*(1jXZs?mU%Up2UHIm^ParToslF6ATld;(g zaBYmZpIJDOQLA#gxZGzpj!onhmqtcC-C4Xq2QSv zEJ_R5reNnaShsQPz105nnhnq1#HlTx91s=#lSEaI$2*T1)hbcRKZ&dQNeaL1&#>{N zW_uY9deP5CAhYQ?4_=m-YB=ZSar9IbgqwNa$)iAYsjE99urwF3Bt6~n_Z)$nQ{i^( z!e!V8(buN*NMwc2?)lVFN8NiQ^j(>dMtw&GpY(6O7Qq*^D8c$y#yv7R9Pk?x2me>$ zC}2-8{O%3B_v<=jh;S#h1Af@t#gTD4h6J5JEpmN2{^`~HYO4BDx@6p6XY96 z!x1v(tq(*Oa~f{FwakZIMjkr!h9nrRw5Rj-hCzpCv+P2$^hh*oZrF0f&9ZNkfyeH$ z4P?MOBSr2^qJQV7fZ7b)wooGcYQ#Y%9FJtDH>4bYRwQaqYiN77P&Bu-<$nt7H1&TQ z*sp&m#7~~4BaY@#_P`ehC8b3O?5!7YE##f` z$-y+I+e1t4g!DjyE(npm;Ntzr9t-vV5ZQ|^2sNXbtID7sfLy*HMD~JEBYUv-#+%`&fb4?QUu;mG-XIn=%q4F%4Ho@5ui=9xgJ^Cf zo=wM;Wv&e+Ou;}i24!PmKb)H7j#!!yV0^!D1k4ymJj}{T;@nU>KQ@)_2k=vuz|wam z40CRhk8j6Nhw85k{ta0lJSt(?hSQ%si+8pp{YrsfCPu$!L@W9D$^_CVs(0??Smq$4 z8S)L}7l=RhI>R6a$Q;N5NCD(&$S%kM$O*_r$W_Qqh`$=wKy;97NIs+jvI|lNIS4ri zxdvf0EE5FLX|Q{;K}mx+AlS(;PeQ67J0S-kjgU_u?T}v}e?a3WeL2@7k zkP=80F}9p~(Of8Qk9m_x7Hm`%v@;NQ%&$*Bw}{bDFN`bF~K zq|B*lG#3wDDeKqfeW83{Y6*-L%m-~?5tsm$fRn&7 zFcGW*@hY6z0ZsvH!Kq*!I1Q`^@s%%g6r2e*g0sM8&<Lz8`BT8!R;)#Grr@2S*I30*8S%a5$I(#)6sP2yh8F63hojfyLlxunZgn zR)b@~S}-0w0FDFCfD^z=pc1?aszBZeMGd73)PT%j3>Hud>OdK&2V+44CG^vIJ%h7!0O^(O?D`56%Nk;8HLJTn=V~d0-y62`mCx35MHdC}Knu8c+SeD%gF& zU7$Z$2TH+%U=Y{{4gy=iV6YVo1>3=JuoD~tO2Y66z+lh_#)B462TlSL!Q~PR_iQNi zx7>N47%T$)z|CM^unP1CcY#u{4h#nmf<~|fTn@H^EJ7O(ioq_>kA}K%lmkjZe^3TW z!B{Zd2}KUY2%10^p)Um#gPEWoxCHDA=7auVF(?Jgz;Lh{G=c{}79sKk*cWUD{lUwi z6l?>-!Rw$A6h~mXvxu3&Q2K(=pg$N7hJ!lL2--n58iNb$3+93TU=d9RH`DZ3RD`C3 zwKN?(K-0maG(8R#qUqpenhv%_VE(i5s1Z#7yJ-R_j>H9W%u}#07zz4=an!HEG^Kvf zM*Uz4_3O}M)CQMO+k_sYHdst;8+we|U^QhTDjJFT@1KmCQb!7EN@>S@1;xdfuV6UX z2GXcFk@3cJ)RE!gTMg0`l>T+WZl%hQ1m;UX3cdx(z*;aCd53B>5K{+Z&7pQ}B6G}p8|v6_XQJSqZ5U_0o^Ou zVZQ`sgWEs{NEfOCumLOq_k&n(oWe?10f!roXcXuN?t)EMv^dxjunzVf@E~{rYy=O0 zE#P^u6?_(K2j2lZ!Lwiwco38fO<+C;gTYH+G&miMAByMS2t^0Sr=T1+>~G02Y9Uz!LBjSOH!JcYu4rz2NI$J@_qn0wiEF*alt(kArPaC>Nnz2fqWm z!LLAZbOQ4Y7zBO+MuO)+2G4jn5C?lHsDn*6BP!T=pbYj%&<5K<)6pP*Fa>rBn2Gf9 zl&~KIoi=3X2W1Hy)nGpOGFS}00hWO?z-sU?SPPy2TTze&JOI0l`eAFqqp*cRjdG>1 z&%maeksPGcUC|}j1z;W05rdq}RXE;+g9qn!rl(b!P%e#`GP^Yzv<&L9OO@?C)9Qkl4z%tJVswXg?+2Zv$)XF+Mk4NYJpGL(WX;HzLOxE5>&cY*b|FbwR3Js<3b zJq+xDy#$mDPhd`hGVnAQ2iAi+@FtO3ZNo)dB0@gd>&_fA^ zV-whnf+N9b*bBgTa3y#N{vn_a_Cl}<*Qvoo*u@}^^k~oy`(dyZb`+QmI|nR7eii6| z{UTTbJ^{{-M#3m4JK%T}+zYM(>p>r|5xfRo0;|BQ;BJry-v+zD*Fa{3_i!R@81Sby zLR7G?W?Cq_GQ0|JKxi@d{yH%rFU`aK|G6zDw5BbTm5H7lR`W+F8#Q+6aNE6H%mnE8 zcHToB&Aq&5=Z>(|d=<(L8I~~8d%?YgOaGPexly#>aKAMZY|NGk-iug8&8flc&{1C) z{^x7cOhS6i1Q{C^aC_okwehVPCu1Y}bBTYsCMMR5m$BjOsG8L>cBtQ}q`xj5_S@vY z-{;JK)$z_Wq4BJ=<_4~f=}P%~_TvA_Zmv;;;TEm#`?m=3TUTjgDk^)MH@#+C7#lGn z=NTKb1VaDrbq{{nAoS-wo2&U4WwF+p8$iMn)ql_Z-<_FJ^FOECYG#MC5g{L6voZgM z&Z)pbpQ`94ehq3a$&dA?vOf)1G z5(kNg$RR3-4q}5OL+p@jhy#)jDTb6lHbcrF6_6@OHDm{57o--l7g7f~067S0gfv5F z{!72voJ=c}HV6;tg7iQnw`@!>LZ^`H&(=38V^A3#o^k zfwV$+NDoB(yN!`Tf+3N=`=RAf;%ma<*@%QZs3njJAq@=y_d@C+jgZTbc1Slw+Knl=L=t*SXY zo_#_~bBD(z+?yKAqp#ZjZv>C<)DfMW-6ifz_cjc6Jb_2PR)(RUxnzm)qc1}kPMwkpmjt}3P}tCjwoma}k4Tpm}%ZQ%}b?{GhJw>U8PpE)MEO~^rflI z^s}kUBsK?|W6k5tIp$^NJo6fJk$I!J)LdaE=AGu<<~sA6<|F3!%+4nBC*~{WugyQ2 zZ%jl@_hN@@-q2z^4;=%^272*`495J zide-s#cah!g+WP_$CPK3KPdIw)g<+Hb**~8dY-@|)!ki`Z(hPO?t3+N}qz z*R0pAH?4FhSA@qVlKabp)t337`(Sw2&qBhN(@-SX$WsovN8KE4mj8l$RYLrH0f^w>I zrZP>Ltz4vhM7c^?pj@wfQu&m!Qn_8ZQ(3F5Q@*ZjP##w{D$gk|DnE59zfgXMF1xPm zQr=d2lzyC)8_0!oL%9*$I8KQ{Xu}|!&ZTl$+#_5e=i;_W=6>(M>dD8MYZ-F&s3! zYv2v5jLsd#w~g-@&l;~9Zy5)e!c3z~@g}3`QB$?)LlcW3wAb8f_L!$x)?2@|VlddS zodFigXDYr`EL2wDdABIXaU7S8XZ{TLJog&+5jQ~fuqsdWv}&K~ebuL`?^GSC8!BJ* z05zvhQ_ojFseVRXt$s;;Mct+T!>JZ)!ZqVGlQb!sOwD4=Rt%F*HLSLecC6N>ovdB1 zEz$1MzN_ug4$zI)X>?XyvMyKmhVHQLyza8@3*Aq;-*kWIeD#6)5&FscAM|(h{)SM) zNJG5AY{)jOF%%n~G*lYu4TlV;4Cf60GR!b;Fzz%SHD18H(wJ75oKKlvH_6e;Sj)qf z<(6{GpO$9p@3f_MM%Z>T@^tw^xk)iaF;B5lAy?{^N!(1%pxUgeR2@2#2-iNX&DYiIj_Xe8zD9-S8WtJyjN6UP#;=Xv8za!akC?WYj+;I=MVMpE zaZZf-L*{0T{KJ-WmaDjZob^-dm$U*oLLG4S@WZ65kT=L#)i0`tH4e?wnrcmh=9nf; zw-K$|V%TbU+VHI5Im1rF6Q(CkeXLTe%sRz7)4I^Q)cTaQ&ib*n-P&bk@^M^3v7CIm ze6D=8yhy$gr8=LLzbZe9sq&%x6Zya8zspA`bc&}G|4~M8qcQZRbL+WpIiBm}{8gh> z7FDupk!rcBNcE)ZW0g%aSF=#FRI^;OTJxFaOHHnB9ol_D$LOVcnSPXBskiI%^ac8L z`j_>M`WF3H`gZ*deY7FYpf(r`a}Dzh>kO|u4WAl*G~6@{GLA56jZ=;DjVp{!<2K_S z;~`^{@e5;z(cctl8gH_h=9mzYglBRIh?T!AKO$FQ;fP!l^}p2D)twk{-Rd4S-X3ctnmHJ6*&1h#W{Ktl)W1{nyQW8j z7s}cZ+F9C7+A?j0wn|&A-GSj(tKF;pMcbwA#xP`bYm7rpBTNdD!&G9rW%|<;U><9> znv={o&A*#_%!3d;7h@!SWofhgBm}UL)_AKDA*|5)gtf$4VXe0Aw7z29Z>_f;vYvEW z=~1B(EgB#X#dDb_Uo3av>8zEz)zM>2Qwu?uhOUJ zSLt2)SM+b{oyYWT`d{_om?FmvrwvyO-G;fwUB<&$c>ay9k2YnS)|n*cW9IkGEoR;v zWQn$nw^Uo+vqV_)FtEO+kEGVyfVuKj7*wkeJByWW*DmRDAa&n8fT(qH@+sWU3xSOhDf|_0D-$_8_YL<0cM}z< zRP9xLqgtjur)$-vnCzxBQzm*O$Fu}bKhKnJDliq9aD5|QZ2pnx(7mVi z9s1k)myM?pTffIZ?lg88yNxlXDOkeqU0dwLAlhsyGks!eHC@HZ-ENv@o@>rGKW;8I zmzX!3Up9YaW-Stn)DmO~w#Y1zcmT1Mm1sker5NqFWuJ{o@^$Y6H z)JhH0=Jl_XzpSjsa&uD|&PCG$cPHLX0EvoZMT#QSu1HhlD3&N3iY`UB;;O1m)vn@I zHD!tHcv>p9mTe*&byWvc2eIopqiRuIRvpQl#J7GPWAqutVuQGBk-5v*I9p z^IbD~GJ8CmiDreDQ9(jIn=QPh%MxUjV;#@4=3A>U{4ZHMtvy)HS>d=XlgG+!Siwu= rwb)p+$r(ko!lbaFa>a@gMJ;APn}ShBD@{t9@<`eg_J9aK1c?4$kOP)J diff --git a/bin/win/fsnotifier64.exe b/bin/win/fsnotifier64.exe index f19cd3947acca230243ca0c11e49e4d2c5a87d0a..d73f75232c57cd8afbe27bb7c3a13a3bcb4244b4 100644 GIT binary patch delta 29356 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 delta 28876 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

CV7vPYe}vUX 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 diff --git a/platform/platform-tests/testSrc/com/intellij/openapi/vfs/local/FileWatcherTest.kt b/platform/platform-tests/testSrc/com/intellij/openapi/vfs/local/FileWatcherTest.kt index 8477a944f010..803f77357503 100644 --- a/platform/platform-tests/testSrc/com/intellij/openapi/vfs/local/FileWatcherTest.kt +++ b/platform/platform-tests/testSrc/com/intellij/openapi/vfs/local/FileWatcherTest.kt @@ -75,13 +75,13 @@ class FileWatcherTest : BareTestFixtureTestCase() { watcher = (fs as LocalFileSystemImpl).fileWatcher assertFalse(watcher.isOperational) watchedPaths += tempDir.root.path - startup(watcher, { path -> + startup(watcher) { path -> if (path === FileWatcher.RESET || path !== FileWatcher.OTHER && watchedPaths.any { path.startsWith(it) }) { alarm.cancelAllRequests() alarm.addRequest({ watcherEvents.up() }, INTER_RESPONSE_DELAY) if (path == FileWatcher.RESET) resetHappened.set(true) } - }) + } LOG.debug("================== setting up " + getTestName(false) + " ==================") } @@ -187,7 +187,8 @@ class FileWatcherTest : BareTestFixtureTestCase() { val pseudoDir = File(file, "sub/zip") refresh(root) - watch(pseudoDir, false) + val checkRoots = if (SystemInfo.isLinux) WatchStatus.CHECK_NOT_WATCHED else WatchStatus.CHECK_WATCHED + watch(pseudoDir, false, checkRoots = checkRoots) assertEvents({ file.writeText("new content") }, mapOf(), SHORT_PROCESS_DELAY) } @@ -260,11 +261,10 @@ class FileWatcherTest : BareTestFixtureTestCase() { assertEvents({ file.writeText("re-creation") }, mapOf(bFilePath to 'C', cFilePath to 'C')) } - @Test fun testSymbolicLinkAboveWatchRoot() { + @Test fun testSymbolicLinkWatchRoot() { val top = tempDir.newFolder("top") val file = tempDir.newFile("top/dir1/dir2/dir3/test.txt") - val link = File(top, "link") - Files.createSymbolicLink(link.toPath(), Paths.get("${top.path}/dir1/dir2")) + val link = Files.createSymbolicLink(Paths.get(top.path, "link"), Paths.get("${top.path}/dir1/dir2")).toFile() val fileLink = File(top, "link/dir3/test.txt") refresh(top) @@ -274,6 +274,52 @@ class FileWatcherTest : BareTestFixtureTestCase() { assertEvents({ file.writeText("re-creation") }, mapOf(fileLink to 'C')) } + @Test fun testSymbolicLinkAboveWatchRoot() { + val top = tempDir.newFolder("top") + val file = tempDir.newFile("top/dir1/dir2/dir3/test.txt") + val link = Files.createSymbolicLink(Paths.get(top.path, "link"), Paths.get("${top.path}/dir1/dir2")).toFile() + val watchRoot = File(link, "dir3") + val fileLink = File(watchRoot, file.name) + refresh(top) + + watch(watchRoot) + assertEvents({ file.writeText("new content") }, mapOf(fileLink to 'U')) + assertEvents({ file.delete() }, mapOf(fileLink to 'D')) + assertEvents({ file.writeText("re-creation") }, mapOf(fileLink to 'C')) + } + + @Test fun testJunctionWatchRoot() { + assumeTrue(SystemInfo.isWindows) + + val top = tempDir.newFolder("top") + val file = tempDir.newFile("top/dir1/dir2/dir3/test.txt") + val junction = IoTestUtil.createJunction("${top.path}/dir1/dir2", "${top}/link") + val fileLink = File(top, "link/dir3/test.txt") + refresh(top) + + watch(junction) + assertEvents({ file.writeText("new content") }, mapOf(fileLink to 'U')) + assertEvents({ file.delete() }, mapOf(fileLink to 'D')) + assertEvents({ file.writeText("re-creation") }, mapOf(fileLink to 'C')) + } + + @Test fun testJunctionAboveWatchRoot() { + assumeTrue(SystemInfo.isWindows) + + val top = tempDir.newFolder("top") + val file = tempDir.newFile("top/dir1/dir2/dir3/test.txt") + IoTestUtil.createJunction("${top.path}/dir1/dir2", "${top}/link") + val watchRoot = File(top, "link/dir3") + val fileLink = File(watchRoot, file.name) + refresh(top) + + watch(watchRoot) + + assertEvents({ file.writeText("new content") }, mapOf(fileLink to 'U')) + assertEvents({ file.delete() }, mapOf(fileLink to 'D')) + assertEvents({ file.writeText("re-creation") }, mapOf(fileLink to 'C')) + } + /* public void testSymlinkBelowWatchRoot() throws Exception { final File targetDir = FileUtil.createTempDirectory("top.", null); @@ -405,7 +451,8 @@ class FileWatcherTest : BareTestFixtureTestCase() { val request = watch(root) assertEvents({ arrayOf(file1, file2).forEach { it.writeText("new content") } }, mapOf(file2 to 'U')) - val rootRequest = watch(fsRoot) + val checkRoots = if (SystemInfo.isLinux) WatchStatus.CHECK_NOT_WATCHED else WatchStatus.CHECK_WATCHED + val rootRequest = watch(fsRoot, checkRoots = checkRoots) assertEvents({ arrayOf(file1, file2).forEach { it.writeText("12345") } }, mapOf(file1 to 'U', file2 to 'U'), SHORT_PROCESS_DELAY) unwatch(rootRequest) @@ -524,9 +571,23 @@ class FileWatcherTest : BareTestFixtureTestCase() { assertThat(VfsTestUtil.print(VfsTestUtil.getEvents { vFile.refresh(false, false) })).containsOnly("U : ${vFile.path}") } - // + @Test fun testUncRoot() { + assumeTrue(SystemInfo.isWindows) + watch(File("\\\\SRV\\share\\path"), checkRoots = WatchStatus.CHECK_NOT_WATCHED) + } - private fun watch(file: File, recursive: Boolean = true) = FileWatcherTestUtil.watch(watcher, file, recursive) + // + private enum class WatchStatus { CHECK_WATCHED, CHECK_NOT_WATCHED, DO_NOT_CHECK } + + private fun watch(file: File, recursive: Boolean = true, checkRoots: WatchStatus = WatchStatus.CHECK_WATCHED): LocalFileSystem.WatchRequest { + val request = FileWatcherTestUtil.watch(watcher, file, recursive) + @Suppress("NON_EXHAUSTIVE_WHEN") + when (checkRoots) { + WatchStatus.CHECK_WATCHED -> assertThat(watcher.manualWatchRoots).doesNotContain(file.path) + WatchStatus.CHECK_NOT_WATCHED -> assertThat(watcher.manualWatchRoots).contains(file.path) + } + return request + } private fun unwatch(request: LocalFileSystem.WatchRequest) { FileWatcherTestUtil.unwatch(watcher, request)