From 5ec97cf37b22c3373694d6219bd78357dda6b8fc Mon Sep 17 00:00:00 2001 From: Roman Shevchenko Date: Mon, 9 Jun 2014 22:00:38 +0400 Subject: [PATCH] IDEA-81568 (ignore FS events from /private unless asked explicitly) --- bin/mac/fsnotifier | Bin 13924 -> 13984 bytes native/fsNotifier/mac/fsnotifier.c | 26 +++++++++++++----- .../openapi/vfs/impl/local/FileWatcher.java | 2 +- 3 files changed, 20 insertions(+), 8 deletions(-) diff --git a/bin/mac/fsnotifier b/bin/mac/fsnotifier index e2524e76d1bfcc1357127de6bcac59a23df7d030..d69157acdb19d6b7d460218ffb8a58b04c4235e8 100755 GIT binary patch delta 3051 zcmai$e^6A{702&ecF8V+y8#83MRpg~F~J}F3>DBwh_6~Ft6;^!7=cWKC8=pCL2D;T z7X+vK`rKr9u8m1*XZRy^YLjscW?D7Yp^A|@v_lM&&{k(acRG)THW;^U8atui^X^-D z`7zU-xx1fp&VA>ebMCosZ+y?d)6q9Fe169A(i!vJ%b1lvB)MZ(3mi2o8GDN{RulVA zZQ3k^-4bK7OZbCQjib4QF*|I{yjQAqv_aYosf}NfYST_Y+6d`{mzUY{c))U6D&W^G z%ia5-T;XHPg5Tul9zY@Yrz~^4R?1izq}O<3O08o8k_*xVqyl~_Wr?KmcT*mgKH-b4 z8>9ig%j&)V0oV^$FqWRe*aC0^27QQWknc>4BE;cw94=?94$>k1duxTu-nn|{&Vlm! zmmA%6>ej3%Pq%Hf`23ie&G*=@ORiI!Qr}PGuFUEO{s~`+XtZy}-q5JQ0c%#nHBQEq zM*`_;_@#w9*>^Nw+#NN{JYG*`)1hM0-cy6KYV0wZld0~V zp-kaP&$O1Taze2Nv?^d&{!kmU^VDp=RLAej4umF^;5Drs7DZ0HBj3i{$w+uP3J{6D zP5w^aq*8sZcsCK58k~&8s$nvUM{}uo6WT|x8haz6pH#!T550KGyj3q=-f_KpSX1|K zrS}5P6?2|H`St=nm7NuuQG*G!X+~KTP=e#yA${d>svz>yeoCT@DTt*u8HJPC&Koq*0p2v9^+Q5R$%~zk#W5xUOaAu8U4@9e**$FJ0qr=9EaE z@u{3`(s5puD@(8Q=W=&i%53~kxn4`9jenZ!&(1;R`-WWz7-y?*#-&Utk~YE1+$*JD z^H%rTjMdZ*bSO~EZTz^qP};&r-9?tAR({Lv`J6e<-FaV=uJFdZ^~*X?Omc@pHQ+6T zCDh=#NNhd4k(x?0pcSX^b9r8=kzdOzEUYw5+p72AkSY%ulWB)9ai6DP`*yxl~lZzRqX{0MQX z;0EGPKgL=i*0GI*e~`dBnu%`+evJ5i!EMA>1V2H1UT_ETpx`~k#{_p0zbd$!_yxiH zi4O>VjySYW2t6b`CAgosMR1sStKdV#Ul$xDt`U5gc$MIni3g zS&Rh67e923`R__z?CatKzEZxzYIls_HMqY7{eEi7=W&Jx3hM&-QESxF*<&5UX~QvM z1!%rDKVu$)`@yTg3!y(*#Mo+shXRakF}QRoV>^?)jInNmdzPcQiP5NZ<>3bZ68s9o zo|9o5!f`U-@AVV#AlQlf8Kp;moWzvo1%oNoKY~*vmws)!Vd$w09}*+b0R&A4keKd! z{{{o~Ki>ra!694(?+T2Sn)o3T?=bNbCjOy`e=Hc^j2$)cc@tk1tOt=GZZNKgsi-?- zsy=g@xX8q-Ok8Q=8WY#^Ka}OH-C@$Sn)ur$-f!YQ!FpJ)a({VF#-Pdi4sR?ks-7`v z5+;`LqD)3Uf%-4O1vL*@Q1j$t6!3d1ilk!xX1Ui!Z`VrxZn@X*26-`j7=8?N3H!fK sNpAlAik~m+YVZ7BS9hy%P)?;+Znb1S{!II~p6+C=&vbWvmw>VV0pi(0D*ylh delta 2772 zcmai$e{2-j5y#)2*T!dT-}!=noDKKG-hzPe%QgfDa7gg-E4g4&ObvuUTST4KR8DG? zR5Edlo#ZylC3hJMB`A>$it6d_W(fkcjCkd>e|u1sXL3puq1SSU@ay5HHi zhDDLmli&I?Z|2R;%$s-b`u2>qCf_aaR|>Iasu2Ew5Gp;W1XGtn-sX8i92G(|r~b7p zFL%BWTNNR4LsYNa?`>HCgsz3Ulx5yFNDYwM=ugVBypxdDLOL0yMcL(~c|K5P(1>Sl zupN{4MuhO-|Kw*1AWG4!S>C>dLf}vI(Z;N0-XWkL(h#H&oyeM@jMBxdRZ516)iug4 z+OCFY*FfKnM+OcNylBMWPo6W_cM(P<;;8U;R0~lLshvJnYy4~T(^>rkH6!t#&wk01 z|3Vw(XRr16*|LOMvqzM|6YFz6&!eH73`L6S7FWUlcrw|Y&TZUi!HH-#Y|?VAm*BvR4JJ|}?D%iSW;KywTcgC#-?iwD`;d&ljN3lE9K*aj z+H7dA@?P0Ne#O4NGS;h!_+z>3EYDi+rTzE3Q+geFnN7py-pl5+gYbbERO`JQdSF^` z`M1!Wh6~Q`e1oRi*mS|_$boO?^@%v|>vueCq26g5YO2tGW-Mc-TKO#jb8nh6g(o}H zC$agaK5nR*wF?;6zqY=aLM6pfWg#ss);h_Tr4@zN*%ul4m>IWy*oFH8GIF$b;Wi-EPWzpMyYN zyq?Ar$)~ZB4fSE`xAwB(x(|H`xot=~mPT>7Gpt@{4c#(zi_0~WZS{0E2W9B#t0(Wc ze+sJZfrU?O+upz17j6)=pfsv<(8kgQ${Fe^-K6}CJ}=dkpVIWQZJvLs^y{*)C#}+< zvS`U?*x>E~zo8GJXS&mVZmqOM@Ed&kWH_cTt8 zp^sWOupy_=A~+CZ=5gC%$$3@d8Ka#|zT^)12x8a144%kr*w?ca@B#0o%WuZqmzJ(O zG!=)BKAS%E$3xazu=?H?3>vWu)(+eA02H>HZl!$5zE%PI@ew_KJe~hk1$QIP)CI2be>Wlgt6hz05h1UuXXIhMoPJ%>S@i2-+Oh zs3*L-fG_h}YyppE`Xa2&_K&`ri@_J`D3*+2SQu%HyFXMNd0J_v!;zX)qndpIMq@i`n7Px#(bKbao#?BZuDxzkw|jg}B!;5RO3M!{x)d{KjF<>A1t3*I96u z;+r@d9l=Eoe$ZbK0MJ`_F;!Q4o(#6k6 z##4v`ElY=2EOC ktQ65xHQ^}Vpka&%#vF|QyMlUa4xOm4ZS>^qX@kA^A8FR_$^ZZW diff --git a/native/fsNotifier/mac/fsnotifier.c b/native/fsNotifier/mac/fsnotifier.c index 0a4a6c8e1846..1f774c40c489 100644 --- a/native/fsNotifier/mac/fsnotifier.c +++ b/native/fsNotifier/mac/fsnotifier.c @@ -18,7 +18,11 @@ #include #include +#define PRIVATE_DIR "/private/" +#define PRIVATE_LEN 9 + static pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER; +static bool report_private = true; static void reportEvent(char *event, char *path) { int len = 0; @@ -32,15 +36,15 @@ static void reportEvent(char *event, char *path) { } pthread_mutex_lock(&lock); - - fputs(event, stdout); - fputc('\n', stdout); - if (path != NULL) { - fwrite(path, len, 1, stdout); + if (report_private || strncasecmp(path, PRIVATE_DIR, PRIVATE_LEN) != 0) { + fputs(event, stdout); fputc('\n', stdout); + if (path != NULL) { + fwrite(path, len, 1, stdout); + fputc('\n', stdout); + } + fflush(stdout); } - - fflush(stdout); pthread_mutex_unlock(&lock); } @@ -128,14 +132,22 @@ static char command[2048]; static void ParseRoots() { CFMutableArrayRef roots = CFArrayCreateMutable(NULL, 0, NULL); + bool has_private_root = false; while (TRUE) { fscanf(stdin, "%s", command); if (strcmp(command, "#") == 0 || feof(stdin)) break; char* path = command[0] == '|' ? command + 1 : command; CFArrayAppendValue(roots, strdup(path)); + if (strcmp(path, "/") == 0 || strncasecmp(path, PRIVATE_DIR, PRIVATE_LEN) == 0) { + has_private_root = true; + } } + pthread_mutex_lock(&lock); + report_private = has_private_root; + pthread_mutex_unlock(&lock); + PrintMountedFileSystems(roots); for (int i = 0; i < CFArrayGetCount(roots); i++) { diff --git a/platform/platform-impl/src/com/intellij/openapi/vfs/impl/local/FileWatcher.java b/platform/platform-impl/src/com/intellij/openapi/vfs/impl/local/FileWatcher.java index d955c496deb3..f7346548124a 100644 --- a/platform/platform-impl/src/com/intellij/openapi/vfs/impl/local/FileWatcher.java +++ b/platform/platform-impl/src/com/intellij/openapi/vfs/impl/local/FileWatcher.java @@ -217,7 +217,7 @@ public class FileWatcher { private static boolean isUpToDate(File executable) { long length = SystemInfo.isWindows ? 71208 : - SystemInfo.isMac ? 13924 : + SystemInfo.isMac ? 13984 : SystemInfo.isLinux ? SystemInfo.isAMD64 ? 29155 : 22791 : -1; return length < 0 || length == executable.length();