class Listen::Adapter::Darwin

Adapter implementation for Mac OS X `FSEvents`.

Constants

DEFAULTS

The default delay between checking for changes.

OS_REGEXP

Private Instance Methods

_configure(dir, &callback) click to toggle source

NOTE: each directory gets a DIFFERENT callback!

# File lib/listen/adapter/darwin.rb, line 16
def _configure(dir, &callback)
  require 'rb-fsevent'
  opts = { latency: options.latency }

  @workers ||= Queue.new
  @workers << FSEvent.new.tap do |worker|
    worker.watch(dir.to_s, opts, &callback)
  end
end
_process_event(dir, event) click to toggle source
# File lib/listen/adapter/darwin.rb, line 42
def _process_event(dir, event)
  event.each do |path|
    new_path = Pathname.new(path.sub(/\/$/, ''))
    _log :debug, "fsevent: #{new_path}"
    # TODO: does this preserve symlinks?
    rel_path = new_path.relative_path_from(dir).to_s
    _queue_change(:dir, dir, rel_path, recursive: true)
  end
end
_run() click to toggle source

NOTE: _run is called within a thread, so run every other worker in it's own thread

# File lib/listen/adapter/darwin.rb, line 28
def _run
  first = @workers.pop
  until @workers.empty?
    Listen::Internals::ThreadPool.add do
      begin
        @workers.pop.run
      rescue
        _log_exception 'run() in extra thread(s) failed: %s: %s'
      end
    end
  end
  first.run
end