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.01k stars 326 forks source link

Allow excluding file patterns by passing in a file #60

Closed bengillies closed 7 years ago

bengillies commented 9 years ago

Basically what I'd like is to pass in my .gitignore file(s) and have it exclude everything that matches rather than specify everything via regexp.

emcrisostomo commented 9 years ago

Hi @bengillies,

In fact, this is an issue which has already been requested. I leave it open for reference and hope I'll be able to integrate it quite soon. The only catch I have (that I have not investigated yet) is a convenient way to implement the ** wildcard in patterns, since AFAIK functions like glob or fnmatch do not recognize it.

If someone has got an idea about this, let's brainstorm, since end of the year is quite a busy time.

Cheers, -- Enrico

bengillies commented 9 years ago

Thanks for replying so quickly. I'm afraid I'm not much of a C++ person so probably not much help.

Question though: does it really need to support ** immediately?

emcrisostomo commented 9 years ago

You're welcome.

Well, it certainly needs not, although I'd like to avoid confusing the users. git had the same problems some time ago: ** was initially implemented only on certain systems, leading users to quite a good deal of confusion.

I want to have a look at git sources to check what they've done and then decide what I'll do. I'm just short of time.

I'll then consider omitting implementing ** and see how it goes.

Cheers, -- Enrico

ricardobeat commented 8 years ago

@emcrisostomo any updates on this?

grayside commented 8 years ago

globstar is supported by default on Bash 4

emcrisostomo commented 8 years ago

Hi @ricardobeat, I'm afraid this issue hasn't been worked on yet.

fernandomora commented 7 years ago

+1

ricardobeat commented 7 years ago

In the meantime, git-check-ignore allows deferring this logic togit itself: fswatch . | while read file; do git check-ignore -q $file || echo $file; done

emcrisostomo commented 7 years ago

Being able to exclude files is important so that fswatch can exert a lesser load on the system, especially when the monitor uses limited resources such as file descriptors. Trimming an otherwise huge file hierarchy is a feature that is definitely required. Maintaining the current implementation (a fswatch-specific syntax) is OK to me.

Having fswatch understand other exclude file types may be nice, but it's not only essential: the output can be filtered, how a user exactly wants. Furthermore, as @ricardobeat pointed out, in the case of git it's very easy to check a path against the ignore patterns.

I'm closing this issue and I'll probably add an example using git check-ignore to the documentation.