emcrisostomo / fswatch

A cross-platform file change monitor with multiple backends: Apple OS X File System Events, *BSD kqueue, Solaris/Illumos File Events Notification, Linux inotify, Microsoft Windows and a stat()-based backend.
https://emcrisostomo.github.io/fswatch/
GNU General Public License v3.0
5.02k stars 327 forks source link

fswatch broken on OS X 10.10 Yosemite #61

Closed grossbart closed 9 years ago

grossbart commented 9 years ago

After upgrading from OS X 10.9 to 10.10, fswatch doesn't work for me anymore, i.e. it doesn't report file changes anymore. I installed it via homebrew, brew updated, brew doctord, and all is fine. I updated XCode, brew uninstall fswatchd and reinstalled it after the OS upgrade, too, but it just doesn't report file changes anymore.

I feel quite stupid reporting this issue without any further information, but I'm not sure where to start. Are there other ways besides fswatch -v (tells me that SIGTERM, SIGABRT and SIGINT handler have been registered) to debug? Are there dependencies that I should check?

emcrisostomo commented 9 years ago

Hi,

I'll check it ASAP. In the case of the OS X, the monitor does very little, so there's nothing you can debug from the binary.

Thanks for the report,

Enrico

Enrico M. Crisostomo

Sent from a mobile device. Please excuse typos and brevity.

On 23 Oct 2014, at 07:53, Peter Gassner notifications@github.com wrote:

After upgrading from OS X 10.9 to 10.10, fswatch doesn't work for me anymore, i.e. it doesn't report file changes anymore. I installed it via homebrew, brew updated, brew doctord, and all is fine. I updated XCode, brew uninstall fswatchd and reinstalled it after the OS upgrade, too, but it just doesn't report file changes anymore.

I feel quite stupid reporting this issue without any further information, but I'm not sure where to start. Are there other ways besides fswatch -v (tells me that SIGTERM, SIGABRT and SIGINT handler have been registered) to debug? Are there dependencies that I should check?

— Reply to this email directly or view it on GitHub.

emcrisostomo commented 9 years ago

Hi @naehrstoff,

I've just built and tested fswatch on Yosemite and I see no problem. Could you please tell me how you invoke it?

grossbart commented 9 years ago

Sure, thanks for the quick reply, @emcrisostomo!

I originally invoked it like this: fswatch -0 -o src/ -o vendor/ | xargs -0 -n1 -I{} make build, but after this didn't work anymore, I tried to just run fswatch -o src/ and fswatch -vor src/ and even fswatch src/specific-file.js – none of those printed any output.

Could it be that it binds to an old lib or something that's still around from 10.9? But where to look? Homebrew? (I used brew cleanup to get rid of old stuff, but maybe there's more that needs to be done?).

emcrisostomo commented 9 years ago

You're welcome!

Just to be sure, I tried -o and it works fine. This is otool -L output on my OS X 10.10 if you want to check it with yours:

% otool -L ~/usr/bin/fswatch
/Users/enricomariacrisostomo/usr/bin/fswatch:
    /System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation (compatibility version 150.0.0, current version 1151.16.0)
    /Users/enricomariacrisostomo/usr/lib/libfswatch.0.dylib (compatibility version 2.0.0, current version 2.0.0)
    /opt/local/lib/libintl.8.dylib (compatibility version 10.0.0, current version 10.2.0)
    /System/Library/Frameworks/CoreServices.framework/Versions/A/CoreServices (compatibility version 1.0.0, current version 62.0.0)
    /usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 120.0.0)
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1213.0.0)

I'm afraid I'm a MacPorts kind of guy: I maintain the Brew package and keep it in sync with fswatch releases but I can't test it on my machine at the moment; I use /usr/local to install local stuff, and I'm not comfortable with any package manager using that path.

Just to make a test in case otool gives no hints: would you try to download the latest fswatch tarball, build it on your system and try it? You don't even need to install it, you can run it from the build directory. These are the steps:

$ unzip fswatch-1.4.5.1.zip
$ ./configure
$ make
$ ./src/fswatch -or path/to/watch ... 

Thanks.

Enrico

grossbart commented 9 years ago

I figured it out: it works after I restarted the computer. Embarassing, I'm so sorry for the troubles! (And I even waited a day before reporting…)

Long story short: I upgraded the OS from 10.9 to 10.10 (which involved many restarts), then tried fswatch and it didn't work. I figured it was due to some bindings, so I uninstalled and reinstalled fswatch using Homebrew in many variations. Still didn't work. Restarted the computer and now it works.

I'm not sure whether this is due to FSEvents having crashed or the build binding to old stuff or something – that's a bit too deep into the OS internals for me :)

Just for your information, here's the output of otool (it's a pity that I can't provide this output from before the restart, maybe would've been interesting):

% otool -L /usr/local/bin/fswatch
/usr/local/bin/fswatch:
    /usr/local/Cellar/fswatch/1.4.5/lib/libfswatch.0.dylib (compatibility version 2.0.0, current version 2.0.0)
    /System/Library/Frameworks/CoreServices.framework/Versions/A/CoreServices (compatibility version 1.0.0, current version 62.0.0)
    /usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 120.0.0)
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1213.0.0)

Thanks again and sorry for the troubles! I hope a tiny bit of added value was gained from this issue… Closing now.

emcrisostomo commented 9 years ago

Hi, @naehrstoff, don't worry, we'll classify this as "voodoo bug". ;)