Hello community, here is the log from the commit of package rubygem-listen for openSUSE:Factory checked in at 2016-07-21 07:57:31 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/rubygem-listen (Old) and /work/SRC/openSUSE:Factory/.rubygem-listen.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "rubygem-listen" Changes: -------- --- /work/SRC/openSUSE:Factory/rubygem-listen/rubygem-listen.changes 2016-03-07 13:27:44.000000000 +0100 +++ /work/SRC/openSUSE:Factory/.rubygem-listen.new/rubygem-listen.changes 2016-07-21 07:57:34.000000000 +0200 @@ -1,0 +2,6 @@ +Thu May 26 04:30:31 UTC 2016 - [email protected] + +- updated to version 3.1.5 + see installed CHANGELOG.md + +------------------------------------------------------------------- Old: ---- listen-3.0.6.gem New: ---- listen-3.1.5.gem ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ rubygem-listen.spec ++++++ --- /var/tmp/diff_new_pack.MMvU40/_old 2016-07-21 07:57:35.000000000 +0200 +++ /var/tmp/diff_new_pack.MMvU40/_new 2016-07-21 07:57:35.000000000 +0200 @@ -24,12 +24,12 @@ # Name: rubygem-listen -Version: 3.0.6 +Version: 3.1.5 Release: 0 %define mod_name listen %define mod_full_name %{mod_name}-%{version} BuildRoot: %{_tmppath}/%{name}-%{version}-build -BuildRequires: %{ruby >= 1.9.3} +BuildRequires: %{ruby >= 2.2.3} BuildRequires: %{rubygem gem2rpm} BuildRequires: ruby-macros >= 5 BuildRequires: update-alternatives ++++++ listen-3.0.6.gem -> listen-3.1.5.gem ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/README.md new/README.md --- old/README.md 2016-02-10 05:46:04.000000000 +0100 +++ new/README.md 2016-05-18 04:21:28.000000000 +0200 @@ -1,3 +1,7 @@ +## IMPORTANT: [Ruby 2.1 is officially outdated and unsupported!](https://www.ruby-lang.org/en/news/2016/03/30/ruby-2-1-9-released/) Please upgrade to Ruby 2.2 before installing Listen! + +### (To install for older versions, update Bundler to a prerelease version: `gem install bundler --pre` and Bundler should correctly resolve to an earlier gems for your given Ruby version). + :exclamation: Listen is currently accepting more maintainers. Please [read this](https://github.com/guard/guard/wiki/Maintainers) if you're interested in joining the team. # Listen @@ -13,7 +17,7 @@ * You can watch multiple directories. * Regexp-patterns for ignoring paths for more accuracy and speed * Increased change detection accuracy on OS X HFS and VFAT volumes. -* Tested on MRI Ruby environments (2.0+ only) via [Travis CI](https://travis-ci.org/guard/listen), +* Tested on selected Ruby environments via [Travis CI](https://travis-ci.org/guard/listen). (See [.travis.yml](https:///github.com/guard/listen/master/.travis.yml) for supported/tested Ruby Versions), ## Issues / limitations @@ -27,7 +31,7 @@ * Specs suite on JRuby and Rubinius aren't reliable on Travis CI, but should work. * Windows and \*BSD adapter aren't continuously and automatically tested. * OSX adapter has some performance limitations ([#342](https://github.com/guard/listen/issues/342)). -* Ruby 1.9.3 is no longer maintained (and may not work with Listen) - it's best to upgrade to Ruby 2.2.2. +* Ruby < 2.2.x is no longer supported - upgrade to Ruby 2.2 or 2.3 Pull requests or help is very welcome for these. Files old/checksums.yaml.gz and new/checksums.yaml.gz differ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/listen/adapter/base.rb new/lib/listen/adapter/base.rb --- old/lib/listen/adapter/base.rb 2016-02-10 05:46:04.000000000 +0100 +++ new/lib/listen/adapter/base.rb 2016-05-18 04:21:28.000000000 +0200 @@ -8,7 +8,7 @@ attr_reader :options # TODO: only used by tests - DEFAULTS = {} + DEFAULTS = {}.freeze attr_reader :config @@ -129,8 +129,12 @@ _log(:error, formatted) end - def self._log(*args, &block) - Listen::Logger.send(*args, &block) + class << self + private + + def _log(*args, &block) + Listen::Logger.send(*args, &block) + end end end end diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/listen/adapter/bsd.rb new/lib/listen/adapter/bsd.rb --- old/lib/listen/adapter/bsd.rb 2016-02-10 05:46:04.000000000 +0100 +++ new/lib/listen/adapter/bsd.rb 2016-05-18 04:21:28.000000000 +0200 @@ -16,7 +16,7 @@ :rename # :link, :revoke ] - } + }.freeze BUNDLER_DECLARE_GEM = <<-EOS.gsub(/^ {6}/, '') Please add the following to your Gemfile to avoid polling for changes: @@ -38,9 +38,9 @@ private - def _configure(directory, &_callback) + def _configure(directory, &callback) @worker ||= KQueue::Queue.new - @callback = _callback + @callback = callback # use Record to make a snapshot of dir, so we # can detect new files _find(directory.to_s) { |path| _watch_file(path, @worker) } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/listen/adapter/config.rb new/lib/listen/adapter/config.rb --- old/lib/listen/adapter/config.rb 2016-02-10 05:46:04.000000000 +0100 +++ new/lib/listen/adapter/config.rb 2016-05-18 04:21:28.000000000 +0200 @@ -11,7 +11,7 @@ def initialize(directories, queue, silencer, adapter_options) # Default to current directory if no directories are supplied directories = [Dir.pwd] if directories.to_a.empty? - + # TODO: fix (flatten, array, compact?) @directories = directories.map do |directory| Pathname.new(directory.to_s).realpath diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/listen/adapter/darwin.rb new/lib/listen/adapter/darwin.rb --- old/lib/listen/adapter/darwin.rb 2016-02-10 05:46:04.000000000 +0100 +++ new/lib/listen/adapter/darwin.rb 2016-05-18 04:21:28.000000000 +0200 @@ -6,17 +6,37 @@ # Adapter implementation for Mac OS X `FSEvents`. # class Darwin < Base - OS_REGEXP = /darwin(1.+)?$/i + OS_REGEXP = /darwin(?<major_version>1\d+)/i # The default delay between checking for changes. - DEFAULTS = { latency: 0.1 } + DEFAULTS = { latency: 0.1 }.freeze + + INCOMPATIBLE_GEM_VERSION = <<-EOS.gsub(/^ {8}/, '') + rb-fsevent > 0.9.4 no longer supports OS X 10.6 through 10.8. + + Please add the following to your Gemfile to avoid polling for changes: + require 'rbconfig' + if RbConfig::CONFIG['target_os'] =~ /darwin(1[0-3])/i + gem 'rb-fsevent', '<= 0.9.4' + end + EOS + + def self.usable? + require 'rb-fsevent' + version = RbConfig::CONFIG['target_os'][OS_REGEXP, :major_version] + return false unless version + return true if version.to_i >= 13 # darwin13 is OS X 10.9 + + fsevent_version = Gem::Version.new(FSEvent::VERSION) + return true if fsevent_version <= Gem::Version.new('0.9.4') + Kernel.warn INCOMPATIBLE_GEM_VERSION + false + end private # NOTE: each directory gets a DIFFERENT callback! def _configure(dir, &callback) - require 'rb-fsevent' - opts = { latency: options.latency } @workers ||= ::Queue.new @@ -38,7 +58,7 @@ def _process_event(dir, event) _log :debug, "fsevent: processing event: #{event.inspect}" event.each do |path| - new_path = Pathname.new(path.sub(/\/$/, '')) + new_path = Pathname.new(path.sub(%r{\/$}, '')) _log :debug, "fsevent: #{new_path}" # TODO: does this preserve symlinks? rel_path = new_path.relative_path_from(dir).to_s @@ -50,7 +70,8 @@ _log :debug, "fsevent: running worker: #{worker.inspect}" worker.run rescue - _log_exception 'fsevent: running worker failed: %s:%s called from: %s', caller + format_string = 'fsevent: running worker failed: %s:%s called from: %s' + _log_exception format_string, caller end def _run_workers_in_background(workers) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/listen/adapter/linux.rb new/lib/listen/adapter/linux.rb --- old/lib/listen/adapter/linux.rb 2016-02-10 05:46:04.000000000 +0100 +++ new/lib/listen/adapter/linux.rb 2016-05-18 04:21:28.000000000 +0200 @@ -14,12 +14,12 @@ :close_write ], wait_for_delay: 0.1 - } + }.freeze private WIKI_URL = 'https://github.com/guard/listen'\ - '/wiki/Increasing-the-amount-of-inotify-watchers' + '/wiki/Increasing-the-amount-of-inotify-watchers'.freeze INOTIFY_LIMIT_MESSAGE = <<-EOS.gsub(/^\s*/, '') FATAL: Listen error: unable to monitor directories for changes. @@ -35,7 +35,9 @@ end def _run + Thread.current[:listen_blocking_read_thread] = true @worker.run + Thread.current[:listen_blocking_read_thread] = false end def _process_event(dir, event) @@ -50,10 +52,8 @@ if /1|true/ =~ ENV['LISTEN_GEM_SIMULATE_FSEVENT'] if (event.flags & [:moved_to, :moved_from]) || _dir_event?(event) rel_path = path.dirname.relative_path_from(dir).to_s - _queue_change(:dir, dir, rel_path, {}) - else - _queue_change(:dir, dir, rel_path, {}) end + _queue_change(:dir, dir, rel_path, {}) return end @@ -99,7 +99,7 @@ end def _stop - @worker.close + @worker && @worker.close end end end diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/listen/adapter/polling.rb new/lib/listen/adapter/polling.rb --- old/lib/listen/adapter/polling.rb 2016-02-10 05:46:04.000000000 +0100 +++ new/lib/listen/adapter/polling.rb 2016-05-18 04:21:28.000000000 +0200 @@ -8,7 +8,7 @@ class Polling < Base OS_REGEXP = // # match every OS - DEFAULTS = { latency: 1.0, wait_for_delay: 0.05 } + DEFAULTS = { latency: 1.0, wait_for_delay: 0.05 }.freeze private diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/listen/adapter/windows.rb new/lib/listen/adapter/windows.rb --- old/lib/listen/adapter/windows.rb 2016-02-10 05:46:04.000000000 +0100 +++ new/lib/listen/adapter/windows.rb 2016-05-18 04:21:28.000000000 +0200 @@ -24,21 +24,21 @@ private - def _configure(dir, &callback) + def _configure(dir) require 'wdm' _log :debug, 'wdm - starting...' @worker ||= WDM::Monitor.new @worker.watch_recursively(dir.to_s, :files) do |change| - callback.call([:file, change]) + yield([:file, change]) end @worker.watch_recursively(dir.to_s, :directories) do |change| - callback.call([:dir, change]) + yield([:dir, change]) end events = [:attributes, :last_write] @worker.watch_recursively(dir.to_s, *events) do |change| - callback.call([:attr, change]) + yield([:attr, change]) end end @@ -70,7 +70,6 @@ _queue_change(:dir, dir, Pathname(rel_path).dirname.to_s, {}) elsif change.type == :added _queue_change(:dir, dir, rel_path, {}) - else # do nothing - changed directory means either: # - removed subdirs (handled above) # - added subdirs (handled above) @@ -81,7 +80,7 @@ end rescue details = event.inspect - _log :error, format('wdm - callback (%): %s:%s', details, $ERROR_INFO, + _log :error, format('wdm - callback (%s): %s:%s', details, $ERROR_INFO, $ERROR_POSITION * "\n") raise end diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/listen/adapter.rb new/lib/listen/adapter.rb --- old/lib/listen/adapter.rb 2016-02-10 05:46:04.000000000 +0100 +++ new/lib/listen/adapter.rb 2016-05-18 04:21:28.000000000 +0200 @@ -7,37 +7,39 @@ module Listen module Adapter - OPTIMIZED_ADAPTERS = [Darwin, Linux, BSD, Windows] + OPTIMIZED_ADAPTERS = [Darwin, Linux, BSD, Windows].freeze POLLING_FALLBACK_MESSAGE = 'Listen will be polling for changes.'\ - 'Learn more at https://github.com/guard/listen#listen-adapters.' + 'Learn more at https://github.com/guard/listen#listen-adapters.'.freeze - def self.select(options = {}) - _log :debug, 'Adapter: considering polling ...' - return Polling if options[:force_polling] - _log :debug, 'Adapter: considering optimized backend...' - return _usable_adapter_class if _usable_adapter_class - _log :debug, 'Adapter: falling back to polling...' - _warn_polling_fallback(options) - Polling - rescue - _log :warn, format('Adapter: failed: %s:%s', $ERROR_POSITION.inspect, - $ERROR_POSITION * "\n") - raise - end - - private - - def self._usable_adapter_class - OPTIMIZED_ADAPTERS.detect(&:usable?) - end - - def self._warn_polling_fallback(options) - msg = options.fetch(:polling_fallback_message, POLLING_FALLBACK_MESSAGE) - Kernel.warn "[Listen warning]:\n #{msg}" if msg - end - - def self._log(type, message) - Listen::Logger.send(type, message) + class << self + def select(options = {}) + _log :debug, 'Adapter: considering polling ...' + return Polling if options[:force_polling] + _log :debug, 'Adapter: considering optimized backend...' + return _usable_adapter_class if _usable_adapter_class + _log :debug, 'Adapter: falling back to polling...' + _warn_polling_fallback(options) + Polling + rescue + _log :warn, format('Adapter: failed: %s:%s', $ERROR_POSITION.inspect, + $ERROR_POSITION * "\n") + raise + end + + private + + def _usable_adapter_class + OPTIMIZED_ADAPTERS.detect(&:usable?) + end + + def _warn_polling_fallback(options) + msg = options.fetch(:polling_fallback_message, POLLING_FALLBACK_MESSAGE) + Kernel.warn "[Listen warning]:\n #{msg}" if msg + end + + def _log(type, message) + Listen::Logger.send(type, message) + end end end end diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/listen/backend.rb new/lib/listen/backend.rb --- old/lib/listen/backend.rb 2016-02-10 05:46:04.000000000 +0100 +++ new/lib/listen/backend.rb 2016-05-18 04:21:28.000000000 +0200 @@ -2,10 +2,14 @@ require 'listen/adapter/base' require 'listen/adapter/config' +require 'forwardable' + # This class just aggregates configuration object to avoid Listener specs # from exploding with huge test setup blocks module Listen class Backend + extend Forwardable + def initialize(directories, queue, silencer, config) adapter_select_opts = config.adapter_select_options @@ -22,17 +26,10 @@ @adapter = adapter_class.new(aconfig) end - def start - adapter.start - end - - def stop - adapter.stop - end + delegate start: :adapter + delegate stop: :adapter - def min_delay_between_events - @min_delay_between_events - end + attr_reader :min_delay_between_events private diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/listen/change.rb new/lib/listen/change.rb --- old/lib/listen/change.rb 2016-02-10 05:46:04.000000000 +0100 +++ new/lib/listen/change.rb 2016-05-18 04:21:28.000000000 +0200 @@ -35,7 +35,7 @@ cookie = options[:cookie] if !cookie && config.silenced?(rel_path, type) - Listen::Logger.debug { "(silenced): #{rel_path.inspect}" } + Listen::Logger.debug { "(silenced): #{rel_path.inspect}" } return end @@ -49,16 +49,14 @@ if change options = cookie ? { cookie: cookie } : {} config.queue(type, change, watched_dir, rel_path, options) + elsif type == :dir + # NOTE: POSSIBLE RECURSION + # TODO: fix - use a queue instead + Directory.scan(self, rel_path, options) else - if type == :dir - # NOTE: POSSIBLE RECURSION - # TODO: fix - use a queue instead - Directory.scan(self, rel_path, options) - else - change = File.change(record, rel_path) - return if !change || options[:silence] - config.queue(:file, change, watched_dir, rel_path) - end + change = File.change(record, rel_path) + return if !change || options[:silence] + config.queue(:file, change, watched_dir, rel_path) end rescue RuntimeError => ex msg = format( diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/listen/directory.rb new/lib/listen/directory.rb --- old/lib/listen/directory.rb 2016-02-10 05:46:04.000000000 +0100 +++ new/lib/listen/directory.rb 2016-05-18 04:21:28.000000000 +0200 @@ -12,7 +12,7 @@ # TODO: use children(with_directory: false) path = dir + rel_path - current = Set.new(path.children) + current = Set.new(_children(path)) Listen::Logger.debug do format('%s: %s(%s): %s -> %s', @@ -28,7 +28,7 @@ end rescue Errno::ENOENT # The directory changed meanwhile, so rescan it - current = Set.new(path.children) + current = Set.new(_children(path)) retry end @@ -72,5 +72,16 @@ opts.delete(:recursive) snapshot.invalidate(type, path, opts) end + + def self._children(path) + return path.children unless RUBY_ENGINE == 'jruby' + + # JRuby inconsistency workaround, see: + # https://github.com/jruby/jruby/issues/3840 + exists = path.exist? + directory = path.directory? + return path.children unless exists && !directory + raise Errno::ENOTDIR, path.to_s + end end end diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/listen/event/config.rb new/lib/listen/event/config.rb --- old/lib/listen/event/config.rb 2016-02-10 05:46:04.000000000 +0100 +++ new/lib/listen/event/config.rb 2016-05-18 04:21:28.000000000 +0200 @@ -27,9 +27,7 @@ Time.now.to_f end - def event_queue - @event_queue - end + attr_reader :event_queue def callable? @block @@ -39,9 +37,7 @@ @queue_optimizer.smoosh_changes(changes) end - def min_delay_between_events - @min_delay_between_events - end + attr_reader :min_delay_between_events def stopped? listener.state == :stopped diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/listen/event/queue.rb new/lib/listen/event/queue.rb --- old/lib/listen/event/queue.rb 2016-02-10 05:46:04.000000000 +0100 +++ new/lib/listen/event/queue.rb 2016-05-18 04:21:28.000000000 +0200 @@ -1,8 +1,12 @@ require 'thread' +require 'forwardable' + module Listen module Event class Queue + extend Forwardable + class Config def initialize(relative) @relative = relative @@ -31,13 +35,8 @@ block.call(args) if block end - def empty? - event_queue.empty? - end - - def pop - event_queue.pop - end + delegate empty?: :event_queue + delegate pop: :event_queue private diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/listen/file.rb new/lib/listen/file.rb --- old/lib/listen/file.rb 2016-02-10 05:46:04.000000000 +0100 +++ new/lib/listen/file.rb 2016-05-18 04:21:28.000000000 +0200 @@ -26,7 +26,7 @@ end return if /1|true/ =~ ENV['LISTEN_GEM_DISABLE_HASHING'] - return unless self.inaccurate_mac_time?(lstat) + return unless inaccurate_mac_time?(lstat) # Check if change happened within 1 second (maybe it's even # too much, e.g. 0.3-0.5 could be sufficient). diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/listen/fsm.rb new/lib/listen/fsm.rb --- old/lib/listen/fsm.rb 2016-02-10 05:46:04.000000000 +0100 +++ new/lib/listen/fsm.rb 2016-05-18 04:21:28.000000000 +0200 @@ -111,7 +111,8 @@ attr_reader :name, :transitions def initialize(name, transitions = nil, &block) - @name, @block = name, block + @name = name + @block = block @transitions = nil @transitions = Array(transitions).map(&:to_sym) if transitions end diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/listen/internals/thread_pool.rb new/lib/listen/internals/thread_pool.rb --- old/lib/listen/internals/thread_pool.rb 2016-02-10 05:46:04.000000000 +0100 +++ new/lib/listen/internals/thread_pool.rb 2016-05-18 04:21:28.000000000 +0200 @@ -13,8 +13,16 @@ return if @threads.empty? # return to avoid using possibly stubbed Queue killed = Queue.new + # You can't kill a read on a descriptor in JRuby, so let's just + # ignore running threads (listen rb-inotify waiting for disk activity + # before closing) pray threads die faster than they are created... + limit = RUBY_ENGINE == 'jruby' ? [1] : [] + killed << @threads.pop.kill until @threads.empty? - killed.pop.join until killed.empty? + until killed.empty? + th = killed.pop + th.join(*limit) unless th[:listen_blocking_read_thread] + end end end end diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/listen/listener/config.rb new/lib/listen/listener/config.rb --- old/lib/listen/listener/config.rb 2016-02-10 05:46:04.000000000 +0100 +++ new/lib/listen/listener/config.rb 2016-05-18 04:21:28.000000000 +0200 @@ -10,7 +10,7 @@ # Backend selecting options force_polling: false, polling_fallback_message: nil - } + }.freeze def initialize(opts) @options = DEFAULTS.merge(opts) @@ -23,13 +23,9 @@ @relative end - def min_delay_between_events - @min_delay_between_events - end + attr_reader :min_delay_between_events - def silencer_rules - @silencer_rules - end + attr_reader :silencer_rules def adapter_instance_options(klass) valid_keys = klass.const_get('DEFAULTS').keys diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/listen/listener.rb new/lib/listen/listener.rb --- old/lib/listen/listener.rb 2016-02-10 05:46:04.000000000 +0100 +++ new/lib/listen/listener.rb 2016-05-18 04:21:28.000000000 +0200 @@ -19,6 +19,7 @@ module Listen class Listener + # TODO: move the state machine's methods private include Listen::FSM # Initializes the directories listener. @@ -61,13 +62,13 @@ default_state :initializing - state :initializing, to: :backend_started + state :initializing, to: [:backend_started, :stopped] - state :backend_started, to: [:frontend_ready] do + state :backend_started, to: [:frontend_ready, :stopped] do backend.start end - state :frontend_ready, to: [:processing_events] do + state :frontend_ready, to: [:processing_events, :stopped] do processor.setup end diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/listen/queue_optimizer.rb new/lib/listen/queue_optimizer.rb --- old/lib/listen/queue_optimizer.rb 2016-02-10 05:46:04.000000000 +0100 +++ new/lib/listen/queue_optimizer.rb 2016-05-18 04:21:28.000000000 +0200 @@ -88,7 +88,7 @@ # editor rename() call (e.g. Kate and Sublime) def _reinterpret_related_changes(cookies) table = { moved_to: :added, moved_from: :removed } - cookies.map do |_, changes| + cookies.flat_map do |_, changes| data = _detect_possible_editor_save(changes) if data to_dir, to_file = data @@ -101,7 +101,7 @@ [table.fetch(change, change), dir, path] end end - end.flatten(1) + end end def _detect_possible_editor_save(changes) @@ -113,9 +113,9 @@ changes.each do |data| case data[1] when :moved_from - from_type, from_change, _, from, _ = data + from_type, from_change, _, from, = data when :moved_to - to_type, to_change, to_dir, to, _ = data + to_type, to_change, to_dir, to, = data else return nil end diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/listen/record/entry.rb new/lib/listen/record/entry.rb --- old/lib/listen/record/entry.rb 2016-02-10 05:46:04.000000000 +0100 +++ new/lib/listen/record/entry.rb 2016-05-18 04:21:28.000000000 +0200 @@ -6,14 +6,16 @@ # file: "/home/me/watched_dir", "app/models", "foo.rb" # dir, "/home/me/watched_dir", "." def initialize(root, relative, name = nil) - @root, @relative, @name = root, relative, name + @root = root + @relative = relative + @name = name end attr_reader :root, :relative, :name def children child_relative = _join - (Dir.entries(sys_path) - %w(. ..)).map do |name| + (_entries(sys_path) - %w(. ..)).map do |name| Entry.new(@root, child_relative, name) end end @@ -46,6 +48,17 @@ args = [@relative, @name].compact args.empty? ? nil : ::File.join(*args) end + + def _entries(dir) + return Dir.entries(dir) unless RUBY_ENGINE == 'jruby' + + # JRuby inconsistency workaround, see: + # https://github.com/jruby/jruby/issues/3840 + exists = ::File.exist?(dir) + directory = ::File.directory?(dir) + return Dir.entries(dir) unless exists && !directory + raise Errno::ENOTDIR, dir + end end end end diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/listen/record/symlink_detector.rb new/lib/listen/record/symlink_detector.rb --- old/lib/listen/record/symlink_detector.rb 2016-02-10 05:46:04.000000000 +0100 +++ new/lib/listen/record/symlink_detector.rb 2016-05-18 04:21:28.000000000 +0200 @@ -4,9 +4,9 @@ # @private api class Record class SymlinkDetector - WIKI = 'https://github.com/guard/listen/wiki/Duplicate-directory-errors' + WIKI = 'https://github.com/guard/listen/wiki/Duplicate-directory-errors'.freeze - SYMLINK_LOOP_ERROR = <<-EOS + SYMLINK_LOOP_ERROR = <<-EOS.freeze ** ERROR: directory is already being watched! ** Directory: %s diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/listen/record.rb new/lib/listen/record.rb --- old/lib/listen/record.rb 2016-02-10 05:46:04.000000000 +0100 +++ new/lib/listen/record.rb 2016-05-18 04:21:28.000000000 +0200 @@ -74,9 +74,7 @@ Hash.new { |h, k| h[k] = Hash.new } end - def tree - @tree - end + attr_reader :tree def _fast_update_file(dirname, basename, data) if [nil, '', '.'].include? dirname diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/listen/silencer.rb new/lib/listen/silencer.rb --- old/lib/listen/silencer.rb 2016-02-10 05:46:04.000000000 +0100 +++ new/lib/listen/silencer.rb 2016-05-18 04:21:28.000000000 +0200 @@ -15,7 +15,7 @@ )(/|$)}x # The default list of files that get ignored. - DEFAULT_IGNORED_EXTENSIONS = /(?: + DEFAULT_IGNORED_EXTENSIONS = %r{(?: # Kate's tmp\/swp files \..*\d+\.new | \.kate-swp @@ -50,7 +50,7 @@ | \.DS_Store | \.tmp | ~ - )$/x + )$}x attr_accessor :only_patterns, :ignore_patterns diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/listen/version.rb new/lib/listen/version.rb --- old/lib/listen/version.rb 2016-02-10 05:46:04.000000000 +0100 +++ new/lib/listen/version.rb 2016-05-18 04:21:28.000000000 +0200 @@ -1,3 +1,3 @@ module Listen - VERSION = '3.0.6' + VERSION = '3.1.5'.freeze end diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/listen.rb new/lib/listen.rb --- old/lib/listen.rb 2016-02-10 05:46:04.000000000 +0100 +++ new/lib/listen.rb 2016-05-18 04:21:28.000000000 +0200 @@ -4,6 +4,11 @@ require 'listen/internals/thread_pool' +# Show warnings about vulnerabilities, bugs and outdated Rubies, since previous +# versions aren't tested or officially supported. +require 'ruby_dep/warning' +RubyDep::Warning.new.show_warnings + # Always set up logging by default first time file is required # # NOTE: If you need to clear the logger completely, do so *after* @@ -45,10 +50,7 @@ @listeners ||= [] # TODO: should use a mutex for this - @listeners.each do |listener| - # call stop to halt the main loop - listener.stop - end + @listeners.each(&:stop) @listeners = nil end end diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/metadata new/metadata --- old/metadata 2016-02-10 05:46:04.000000000 +0100 +++ new/metadata 2016-05-18 04:21:28.000000000 +0200 @@ -1,33 +1,42 @@ --- !ruby/object:Gem::Specification name: listen version: !ruby/object:Gem::Version - version: 3.0.6 + version: 3.1.5 platform: ruby authors: - Thibaud Guillaume-Gentil autorequire: bindir: bin cert_chain: [] -date: 2016-02-10 00:00:00.000000000 Z +date: 2016-05-18 00:00:00.000000000 Z dependencies: - !ruby/object:Gem::Dependency name: rb-fsevent requirement: !ruby/object:Gem::Requirement requirements: + - - "~>" + - !ruby/object:Gem::Version + version: '0.9' - - ">=" - !ruby/object:Gem::Version - version: 0.9.3 + version: 0.9.4 type: :runtime prerelease: false version_requirements: !ruby/object:Gem::Requirement requirements: + - - "~>" + - !ruby/object:Gem::Version + version: '0.9' - - ">=" - !ruby/object:Gem::Version - version: 0.9.3 + version: 0.9.4 - !ruby/object:Gem::Dependency name: rb-inotify requirement: !ruby/object:Gem::Requirement requirements: + - - "~>" + - !ruby/object:Gem::Version + version: '0.9' - - ">=" - !ruby/object:Gem::Version version: 0.9.7 @@ -35,23 +44,40 @@ prerelease: false version_requirements: !ruby/object:Gem::Requirement requirements: + - - "~>" + - !ruby/object:Gem::Version + version: '0.9' - - ">=" - !ruby/object:Gem::Version version: 0.9.7 - !ruby/object:Gem::Dependency + name: ruby_dep + requirement: !ruby/object:Gem::Requirement + requirements: + - - "~>" + - !ruby/object:Gem::Version + version: '1.2' + type: :runtime + prerelease: false + version_requirements: !ruby/object:Gem::Requirement + requirements: + - - "~>" + - !ruby/object:Gem::Version + version: '1.2' +- !ruby/object:Gem::Dependency name: bundler requirement: !ruby/object:Gem::Requirement requirements: - - - ">=" + - - "~>" - !ruby/object:Gem::Version - version: 1.3.5 + version: '1.12' type: :development prerelease: false version_requirements: !ruby/object:Gem::Requirement requirements: - - - ">=" + - - "~>" - !ruby/object:Gem::Version - version: 1.3.5 + version: '1.12' description: The Listen gem listens to file modifications and notifies you about the changes. Works everywhere! email: [email protected] @@ -106,9 +132,12 @@ - lib required_ruby_version: !ruby/object:Gem::Requirement requirements: + - - "~>" + - !ruby/object:Gem::Version + version: '2.2' - - ">=" - !ruby/object:Gem::Version - version: 1.9.3 + version: 2.2.3 required_rubygems_version: !ruby/object:Gem::Requirement requirements: - - ">=" @@ -116,7 +145,7 @@ version: '0' requirements: [] rubyforge_project: -rubygems_version: 2.4.5 +rubygems_version: 2.5.1 signing_key: specification_version: 4 summary: Listen to file modifications
