Hello community,

here is the log from the commit of package rubygem-rb-fsevent for 
openSUSE:Factory checked in at 2017-08-21 11:36:53
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/rubygem-rb-fsevent (Old)
 and      /work/SRC/openSUSE:Factory/.rubygem-rb-fsevent.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "rubygem-rb-fsevent"

Mon Aug 21 11:36:53 2017 rev:6 rq:515058 version:0.10.2

Changes:
--------
--- /work/SRC/openSUSE:Factory/rubygem-rb-fsevent/rubygem-rb-fsevent.changes    
2016-11-07 12:23:23.000000000 +0100
+++ 
/work/SRC/openSUSE:Factory/.rubygem-rb-fsevent.new/rubygem-rb-fsevent.changes   
    2017-08-21 11:36:58.762708299 +0200
@@ -1,0 +2,6 @@
+Thu Aug  3 19:36:27 UTC 2017 - co...@suse.com
+
+- updated to version 0.10.2
+  no changelog found
+
+-------------------------------------------------------------------

Old:
----
  rb-fsevent-0.9.8.gem

New:
----
  rb-fsevent-0.10.2.gem

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ rubygem-rb-fsevent.spec ++++++
--- /var/tmp/diff_new_pack.y402EL/_old  2017-08-21 11:37:00.022531117 +0200
+++ /var/tmp/diff_new_pack.y402EL/_new  2017-08-21 11:37:00.046527742 +0200
@@ -1,7 +1,7 @@
 #
 # spec file for package rubygem-rb-fsevent
 #
-# Copyright (c) 2016 SUSE LINUX GmbH, Nuernberg, Germany.
+# Copyright (c) 2017 SUSE LINUX GmbH, Nuernberg, Germany.
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -24,7 +24,7 @@
 #
 
 Name:           rubygem-rb-fsevent
-Version:        0.9.8
+Version:        0.10.2
 Release:        0
 %define mod_name rb-fsevent
 %define mod_full_name %{mod_name}-%{version}

++++++ rb-fsevent-0.9.8.gem -> rb-fsevent-0.10.2.gem ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Gemfile new/Gemfile
--- old/Gemfile 2016-10-24 20:23:48.000000000 +0200
+++ new/Gemfile 2017-07-01 05:41:18.000000000 +0200
@@ -1,6 +1,3 @@
 source "https://rubygems.org";
 
 gemspec
-
-gem 'rake'
-
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/README.md new/README.md
--- old/README.md       2016-10-24 20:23:48.000000000 +0200
+++ new/README.md       2017-07-01 05:41:18.000000000 +0200
@@ -7,8 +7,8 @@
 
 * RubyCocoa not required!
 * Signals are working (really)
-* Tested on MRI 2.1, RBX 2.5, JRuby
-* Tested on 10.10
+* Tested on MRI 2.4.1, RBX 3.72, JRuby 1.7.26 and 9.1.8.0
+* Tested on 10.8
 
 ## HFS+ filename corruption bug
 
@@ -131,6 +131,23 @@
 fsevent.run
 ```
 
+### Using _full_ event information
+
+```ruby
+require 'rb-fsevent'
+fsevent = FSEvent.new
+fsevent.watch Dir.pwd do |paths, event_meta|
+  event_meta.events.each do |event|
+    puts "event ID: #{event.id}"
+    puts "path: #{event.path}"
+    puts "c flags: #{event.cflags}"
+    puts "named flags: #{event.flags.join(', ')}"
+    # named flags will include strings such as `ItemInodeMetaMod` or `OwnEvent`
+  end
+end
+fsevent.run
+```
+
 ## Options
 
 When defining options using a hash or hash-like object, it gets checked for 
validity and converted to the appropriate fsevent\_watch commandline arguments 
array when the FSEvent class is instantiated. This is obviously the safest and 
preferred method of passing in options.
@@ -233,7 +250,7 @@
 
 The list of tested targets is currently:
 
-    %w[2.2.2 2.3.0-dev rbx-2.5.5 jruby-1.7.9]
+    %w[2.4.1 rbx-3.72 jruby-1.7.26 jruby-9.1.8.0]
 
 ## Authors
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Rakefile new/Rakefile
--- old/Rakefile        2016-10-24 20:23:48.000000000 +0200
+++ new/Rakefile        2017-07-01 05:41:18.000000000 +0200
@@ -9,7 +9,7 @@
 namespace(:spec) do
   desc "Run all specs on multiple ruby versions"
   task(:portability) do
-    versions = %w[2.2.2 2.3.0-dev rbx-2.5.5 jruby-1.7.9]
+    versions = %w[2.4.1 rbx-3.72 jruby-1.7.26 jruby-9.1.8.0]
     versions.each do |version|
       # system <<-BASH
       #   bash -c 'source ~/.rvm/scripts/rvm;
@@ -24,6 +24,7 @@
                  [[ ! -a $HOME/.rbenv/versions/#{version} ]] && rbenv install 
#{version};
                  rbenv shell #{version};
                  rbenv which bundle 2> /dev/null || gem install bundler;
+                 rm Gemfile.lock;
                  bundle install;
                  rake spec;'
       BASH
Binary files old/bin/fsevent_watch and new/bin/fsevent_watch differ
Binary files old/checksums.yaml.gz and new/checksums.yaml.gz differ
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ext/fsevent_watch/cli.c new/ext/fsevent_watch/cli.c
--- old/ext/fsevent_watch/cli.c 2016-10-24 20:23:48.000000000 +0200
+++ new/ext/fsevent_watch/cli.c 2017-07-01 05:41:18.000000000 +0200
@@ -27,7 +27,7 @@
   args_info->ignore_self_flag   = false;
   args_info->file_events_flag   = false;
   args_info->mark_self_flag     = false;
-  args_info->format_arg         = kFSEventWatchOutputFormatClassic;
+  args_info->format_arg         = kFSEventWatchOutputFormatOTNetstring;
 }
 
 static void cli_parser_release (struct cli_info* args_info)
@@ -199,4 +199,3 @@
 
   return EXIT_SUCCESS;
 }
-
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ext/fsevent_watch/compat.c 
new/ext/fsevent_watch/compat.c
--- old/ext/fsevent_watch/compat.c      2016-10-24 20:23:48.000000000 +0200
+++ new/ext/fsevent_watch/compat.c      2017-07-01 05:41:18.000000000 +0200
@@ -1,10 +1,13 @@
 #include "compat.h"
 
-#if MAC_OS_X_VERSION_MAX_ALLOWED < 1060
+
+#if (defined(MAC_OS_X_VERSION_MAX_ALLOWED) && MAC_OS_X_VERSION_MAX_ALLOWED < 
__MAC_10_6) || \
+    (defined(__IPHONE_OS_VERSION_MAX_ALLOWED) && 
__IPHONE_OS_VERSION_MAX_ALLOWED < __IPHONE_6_0)
 FSEventStreamCreateFlags  kFSEventStreamCreateFlagIgnoreSelf        = 
0x00000008;
 #endif
 
-#if MAC_OS_X_VERSION_MAX_ALLOWED < 1070
+#if (defined(MAC_OS_X_VERSION_MAX_ALLOWED) && MAC_OS_X_VERSION_MAX_ALLOWED < 
__MAC_10_7) || \
+    (defined(__IPHONE_OS_VERSION_MAX_ALLOWED) && 
__IPHONE_OS_VERSION_MAX_ALLOWED < __IPHONE_6_0)
 FSEventStreamCreateFlags  kFSEventStreamCreateFlagFileEvents        = 
0x00000010;
 FSEventStreamEventFlags   kFSEventStreamEventFlagItemCreated        = 
0x00000100;
 FSEventStreamEventFlags   kFSEventStreamEventFlagItemRemoved        = 
0x00000200;
@@ -19,7 +22,20 @@
 FSEventStreamEventFlags   kFSEventStreamEventFlagItemIsSymlink      = 
0x00040000;
 #endif
 
-#if MAC_OS_X_VERSION_MAX_ALLOWED < 1090
+#if (defined(MAC_OS_X_VERSION_MAX_ALLOWED) && MAC_OS_X_VERSION_MAX_ALLOWED < 
__MAC_10_9) || \
+    (defined(__IPHONE_OS_VERSION_MAX_ALLOWED) && 
__IPHONE_OS_VERSION_MAX_ALLOWED < __IPHONE_7_0)
 FSEventStreamCreateFlags  kFSEventStreamCreateFlagMarkSelf          = 
0x00000020;
 FSEventStreamEventFlags   kFSEventStreamEventFlagOwnEvent           = 
0x00080000;
 #endif
+
+#if (defined(MAC_OS_X_VERSION_MAX_ALLOWED) && MAC_OS_X_VERSION_MAX_ALLOWED < 
__MAC_10_10) || \
+    (defined(__IPHONE_OS_VERSION_MAX_ALLOWED) && 
__IPHONE_OS_VERSION_MAX_ALLOWED < __IPHONE_9_0)
+FSEventStreamEventFlags   kFSEventStreamEventFlagItemIsHardlink     = 
0x00100000;
+FSEventStreamEventFlags   kFSEventStreamEventFlagItemIsLastHardlink = 
0x00200000;
+#endif
+
+#if (defined(MAC_OS_X_VERSION_MAX_ALLOWED) && MAC_OS_X_VERSION_MAX_ALLOWED < 
__MAC_10_13) || \
+    (defined(__IPHONE_OS_VERSION_MAX_ALLOWED) && 
__IPHONE_OS_VERSION_MAX_ALLOWED < __IPHONE_11_0)
+FSEventStreamCreateFlags  kFSEventStreamCreateFlagUseExtendedData   = 
0x00000040;
+FSEventStreamEventFlags   kFSEventStreamEventFlagItemCloned         = 
0x00400000;
+#endif
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ext/fsevent_watch/compat.h 
new/ext/fsevent_watch/compat.h
--- old/ext/fsevent_watch/compat.h      2016-10-24 20:23:48.000000000 +0200
+++ new/ext/fsevent_watch/compat.h      2017-07-01 05:41:18.000000000 +0200
@@ -9,20 +9,57 @@
  */
 
 
-#ifndef fsevent_watch_compat_h
-#define fsevent_watch_compat_h
+#ifndef listen_fsevents_compat_h
+#define listen_fsevents_compat_h
 
 #ifndef __CORESERVICES__
 #include <CoreServices/CoreServices.h>
 #endif // __CORESERVICES__
 
-#if MAC_OS_X_VERSION_MAX_ALLOWED < 1060
-// ignoring events originating from the current process introduced in 10.6
+#ifndef __AVAILABILITY__
+#include <Availability.h>
+#endif // __AVAILABILITY__
+
+#ifndef __MAC_10_6
+#define __MAC_10_6            1060
+#endif
+#ifndef __MAC_10_7
+#define __MAC_10_7            1070
+#endif
+#ifndef __MAC_10_9
+#define __MAC_10_9            1090
+#endif
+#ifndef __MAC_10_10
+#define __MAC_10_10         101000
+#endif
+#ifndef __MAC_10_13
+#define __MAC_10_13         101300
+#endif
+#ifndef __IPHONE_6_0
+#define __IPHONE_6_0         60000
+#endif
+#ifndef __IPHONE_7_0
+#define __IPHONE_7_0         70000
+#endif
+#ifndef __IPHONE_9_0
+#define __IPHONE_9_0         90000
+#endif
+#ifndef __IPHONE_11_0
+#define __IPHONE_11_0       110000
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+#if (defined(MAC_OS_X_VERSION_MAX_ALLOWED) && MAC_OS_X_VERSION_MAX_ALLOWED < 
__MAC_10_6) || \
+    (defined(__IPHONE_OS_VERSION_MAX_ALLOWED) && 
__IPHONE_OS_VERSION_MAX_ALLOWED < __IPHONE_6_0)
 extern FSEventStreamCreateFlags kFSEventStreamCreateFlagIgnoreSelf;
 #endif
 
-#if MAC_OS_X_VERSION_MAX_ALLOWED < 1070
-// file-level events introduced in 10.7
+#if (defined(MAC_OS_X_VERSION_MAX_ALLOWED) && MAC_OS_X_VERSION_MAX_ALLOWED < 
__MAC_10_7) || \
+    (defined(__IPHONE_OS_VERSION_MAX_ALLOWED) && 
__IPHONE_OS_VERSION_MAX_ALLOWED < __IPHONE_6_0)
 extern FSEventStreamCreateFlags kFSEventStreamCreateFlagFileEvents;
 extern FSEventStreamEventFlags  kFSEventStreamEventFlagItemCreated,
                                 kFSEventStreamEventFlagItemRemoved,
@@ -37,11 +74,27 @@
                                 kFSEventStreamEventFlagItemIsSymlink;
 #endif
 
-#if MAC_OS_X_VERSION_MAX_ALLOWED < 1090
-// marking, rather than ignoring, events originating from the current process 
introduced in 10.9
+#if (defined(MAC_OS_X_VERSION_MAX_ALLOWED) && MAC_OS_X_VERSION_MAX_ALLOWED < 
__MAC_10_9) || \
+    (defined(__IPHONE_OS_VERSION_MAX_ALLOWED) && 
__IPHONE_OS_VERSION_MAX_ALLOWED < __IPHONE_7_0)
 extern FSEventStreamCreateFlags kFSEventStreamCreateFlagMarkSelf;
 extern FSEventStreamEventFlags  kFSEventStreamEventFlagOwnEvent;
 #endif
 
+#if (defined(MAC_OS_X_VERSION_MAX_ALLOWED) && MAC_OS_X_VERSION_MAX_ALLOWED < 
__MAC_10_10) || \
+    (defined(__IPHONE_OS_VERSION_MAX_ALLOWED) && 
__IPHONE_OS_VERSION_MAX_ALLOWED < __IPHONE_9_0)
+extern FSEventStreamEventFlags  kFSEventStreamEventFlagItemIsHardlink,
+                                kFSEventStreamEventFlagItemIsLastHardlink;
+#endif
+
+#if (defined(MAC_OS_X_VERSION_MAX_ALLOWED) && MAC_OS_X_VERSION_MAX_ALLOWED < 
__MAC_10_13) || \
+    (defined(__IPHONE_OS_VERSION_MAX_ALLOWED) && 
__IPHONE_OS_VERSION_MAX_ALLOWED < __IPHONE_11_0)
+extern FSEventStreamCreateFlags kFSEventStreamCreateFlagUseExtendedData;
+extern FSEventStreamEventFlags  kFSEventStreamEventFlagItemCloned;
+#endif
+
+
+#ifdef __cplusplus
+}
+#endif
 
-#endif // fsevent_watch_compat_h
+#endif // listen_fsevents_compat_h
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ext/fsevent_watch/main.c new/ext/fsevent_watch/main.c
--- old/ext/fsevent_watch/main.c        2016-10-24 20:23:48.000000000 +0200
+++ new/ext/fsevent_watch/main.c        2017-07-01 05:41:18.000000000 +0200
@@ -24,7 +24,7 @@
   (double) 0.3,
   (CFOptionFlags) kFSEventStreamCreateFlagNone,
   NULL,
-  kFSEventWatchOutputFormatClassic
+  kFSEventWatchOutputFormatOTNetstring
 };
 
 // Prototypes
@@ -350,18 +350,54 @@
                        false);
     CFDictionarySetValue(event, CFSTR("path"), path);
 
-    CFNumberRef flags = CFNumberCreate(kCFAllocatorDefault, kCFNumberIntType, 
&eventFlags[i]);
-    CFDictionarySetValue(event, CFSTR("flags"), flags);
-
     CFNumberRef ident = CFNumberCreate(kCFAllocatorDefault, 
kCFNumberLongLongType, &eventIds[i]);
     CFDictionarySetValue(event, CFSTR("id"), ident);
 
+    CFNumberRef cflags = CFNumberCreate(kCFAllocatorDefault, kCFNumberIntType, 
&eventFlags[i]);
+    CFDictionarySetValue(event, CFSTR("cflags"), cflags);
+
+    CFMutableArrayRef flags = CFArrayCreateMutable(kCFAllocatorDefault,
+                              0, &kCFTypeArrayCallBacks);
+
+#define FLAG_ADD_NAME(flagsnum, flagnum, flagname, flagarray)   \
+  do {                                                          \
+    if (FLAG_CHECK(flagsnum, flagnum)) {                        \
+      CFArrayAppendValue(flagarray, CFSTR(flagname)); } }       \
+  while(0)
+
+    FLAG_ADD_NAME(eventFlags[i], kFSEventStreamEventFlagMustScanSubDirs,     
"MustScanSubDirs", flags);
+    FLAG_ADD_NAME(eventFlags[i], kFSEventStreamEventFlagUserDropped,         
"UserDropped", flags);
+    FLAG_ADD_NAME(eventFlags[i], kFSEventStreamEventFlagKernelDropped,       
"KernelDropped", flags);
+    FLAG_ADD_NAME(eventFlags[i], kFSEventStreamEventFlagEventIdsWrapped,     
"EventIdsWrapped", flags);
+    FLAG_ADD_NAME(eventFlags[i], kFSEventStreamEventFlagHistoryDone,         
"HistoryDone", flags);
+    FLAG_ADD_NAME(eventFlags[i], kFSEventStreamEventFlagRootChanged,         
"RootChanged", flags);
+    FLAG_ADD_NAME(eventFlags[i], kFSEventStreamEventFlagMount,               
"Mount", flags);
+    FLAG_ADD_NAME(eventFlags[i], kFSEventStreamEventFlagUnmount,             
"Unmount", flags);
+    FLAG_ADD_NAME(eventFlags[i], kFSEventStreamEventFlagItemCreated,         
"ItemCreated", flags);
+    FLAG_ADD_NAME(eventFlags[i], kFSEventStreamEventFlagItemRemoved,         
"ItemRemoved", flags);
+    FLAG_ADD_NAME(eventFlags[i], kFSEventStreamEventFlagItemInodeMetaMod,    
"ItemInodeMetaMod", flags);
+    FLAG_ADD_NAME(eventFlags[i], kFSEventStreamEventFlagItemRenamed,         
"ItemRenamed", flags);
+    FLAG_ADD_NAME(eventFlags[i], kFSEventStreamEventFlagItemModified,        
"ItemModified", flags);
+    FLAG_ADD_NAME(eventFlags[i], kFSEventStreamEventFlagItemFinderInfoMod,   
"ItemFinderInfoMod", flags);
+    FLAG_ADD_NAME(eventFlags[i], kFSEventStreamEventFlagItemChangeOwner,     
"ItemChangeOwner", flags);
+    FLAG_ADD_NAME(eventFlags[i], kFSEventStreamEventFlagItemXattrMod,        
"ItemXattrMod", flags);
+    FLAG_ADD_NAME(eventFlags[i], kFSEventStreamEventFlagItemIsFile,          
"ItemIsFile", flags);
+    FLAG_ADD_NAME(eventFlags[i], kFSEventStreamEventFlagItemIsDir,           
"ItemIsDir", flags);
+    FLAG_ADD_NAME(eventFlags[i], kFSEventStreamEventFlagItemIsSymlink,       
"ItemIsSymlink", flags);
+    FLAG_ADD_NAME(eventFlags[i], kFSEventStreamEventFlagOwnEvent,            
"OwnEvent", flags);
+    FLAG_ADD_NAME(eventFlags[i], kFSEventStreamEventFlagItemIsHardlink,      
"ItemIsHardLink", flags);
+    FLAG_ADD_NAME(eventFlags[i], kFSEventStreamEventFlagItemIsLastHardlink,  
"ItemIsLastHardLink", flags);
+
+    CFDictionarySetValue(event, CFSTR("flags"), flags);
+
+
     CFArrayAppendValue(events, event);
 
     CFRelease(event);
     CFRelease(path);
-    CFRelease(flags);
     CFRelease(ident);
+    CFRelease(cflags);
+    CFRelease(flags);
   }
 
   CFMutableDictionaryRef meta = CFDictionaryCreateMutable(kCFAllocatorDefault,
@@ -446,7 +482,10 @@
                       "    Item is a directory");
     FLAG_CHECK_STDERR(eventFlags[i], kFSEventStreamEventFlagItemIsSymlink,
                       "    Item is a symbolic link");
-
+    FLAG_CHECK_STDERR(eventFlags[i], kFSEventStreamEventFlagItemIsHardlink,
+                      "    Item is a hard link");
+    FLAG_CHECK_STDERR(eventFlags[i], kFSEventStreamEventFlagItemIsLastHardlink,
+                      "    Item is the last hard link");
     fprintf(stderr, "  event path: %s\n", paths[i]);
     fprintf(stderr, "\n");
   }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ext/rakefile.rb new/ext/rakefile.rb
--- old/ext/rakefile.rb 2016-10-24 20:23:48.000000000 +0200
+++ new/ext/rakefile.rb 2017-07-01 05:41:18.000000000 +0200
@@ -8,7 +8,7 @@
 raise "unable to find xcodebuild" unless system('which', 'xcodebuild')
 
 
-FSEVENT_WATCH_EXE_VERSION = '0.1.4'
+FSEVENT_WATCH_EXE_VERSION = '0.1.5'
 
 $this_dir = Pathname.new(__FILE__).dirname.expand_path
 $final_exe = $this_dir.parent.join('bin/fsevent_watch')
@@ -148,7 +148,7 @@
     key['CFBundleDisplayName']
     string['FSEvent Watch CLI']
     key['NSHumanReadableCopyright']
-    string['Copyright (C) 2011-2015 Travis Tilley']
+    string['Copyright (C) 2011-2017 Travis Tilley']
 
     key['CFBundleVersion']
     string["#{FSEVENT_WATCH_EXE_VERSION}"]
@@ -216,8 +216,10 @@
   sh "codesign -s '#{$CODE_SIGN_IDENTITY}' #{$obj_dir.join('fsevent_watch')}"
 end
 
+directory $this_dir.parent.join('bin')
+
 desc 'replace bundled fsevent_watch binary with build/fsevent_watch'
-task :replace_exe => :build do
+task :replace_exe => [$this_dir.parent.join('bin'), :build] do
   sh "mv #{$obj_dir.join('fsevent_watch')} #{$final_exe}"
 end
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/otnetstring.rb new/lib/otnetstring.rb
--- old/lib/otnetstring.rb      1970-01-01 01:00:00.000000000 +0100
+++ new/lib/otnetstring.rb      2017-07-01 05:41:18.000000000 +0200
@@ -0,0 +1,85 @@
+# Copyright (c) 2011 Konstantin Haase
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+
+require 'stringio'
+
+module OTNetstring
+  class Error < StandardError; end
+
+  class << self
+    def parse(io, encoding = 'internal', fallback_encoding = nil)
+      fallback_encoding = io.encoding if io.respond_to? :encoding
+      io = StringIO.new(io) if io.respond_to? :to_str
+      length, byte = "", nil
+
+      while byte.nil? || byte =~ /\d/
+        length << byte if byte
+        byte = io.read(1)
+      end
+
+      if length.size > 9
+        raise Error, "#{length} is longer than 9 digits"
+      elsif length !~ /\d+/
+        raise Error, "Expected '#{byte}' to be a digit"
+      end
+      length = Integer(length)
+
+      case byte
+      when '#' then Integer io.read(length)
+      when ',' then with_encoding io.read(length), encoding, fallback_encoding
+      when '~' then
+        raise Error, "nil has length of 0, #{length} given" unless length == 0
+      when '!' then io.read(length) == 'true'
+      when '[', '{'
+        array = []
+        start = io.pos
+        array << parse(io, encoding, fallback_encoding) while io.pos - start < 
length
+        raise Error, 'Nested element longer than container' if io.pos - start 
!= length
+        byte == "{" ? Hash[*array] : array
+      else
+        raise Error, "Unknown type '#{byte}'"
+      end
+    end
+
+    def encode(obj, string_sep = ',')
+      case obj
+      when String   then with_encoding "#{obj.bytesize}#{string_sep}#{obj}", 
"binary"
+      when Integer  then encode(obj.inspect, '#')
+      when NilClass then "0~"
+      when Array    then encode(obj.map { |e| encode(e) }.join, '[')
+      when Hash     then encode(obj.map { |a,b| encode(a)+encode(b) }.join, 
'{')
+      when FalseClass, TrueClass then encode(obj.inspect, '!')
+      else raise Error, 'cannot encode %p' % obj
+      end
+    end
+
+    private
+
+    def with_encoding(str, encoding, fallback = nil)
+      return str unless str.respond_to? :encode
+      encoding = Encoding.find encoding if encoding.respond_to? :to_str
+      encoding ||= fallback
+      encoding ? str.encode(encoding) : str
+    rescue EncodingError
+      str.force_encoding(encoding)
+    end
+  end
+end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/rb-fsevent/fsevent.rb 
new/lib/rb-fsevent/fsevent.rb
--- old/lib/rb-fsevent/fsevent.rb       2016-10-24 20:23:48.000000000 +0200
+++ new/lib/rb-fsevent/fsevent.rb       2017-07-01 05:41:19.000000000 +0200
@@ -1,5 +1,7 @@
 # -*- encoding: utf-8 -*-
 
+require 'otnetstring'
+
 class FSEvent
   class << self
     class_eval <<-END
@@ -40,9 +42,41 @@
     # please note the use of IO::select() here, as it is used specifically to
     # preserve correct signal handling behavior in ruby 1.8.
     while @running && IO::select([@pipe], nil, nil, nil)
-      if line = @pipe.readline
-        modified_dir_paths = line.split(':').select { |dir| dir != "\n" }
-        callback.call(modified_dir_paths)
+      # managing the IO ourselves allows us to be careful and never pass an
+      # incomplete message to OTNetstring.parse()
+      message = ""
+      length = ""
+      byte = nil
+
+      reading_length = true
+      found_length = false
+
+      while reading_length
+        byte = @pipe.read(1)
+        if "#{byte}" =~ /\d/
+          length << byte
+          found_length = true
+        elsif found_length == false
+          next
+        else
+          reading_length = false
+        end
+      end
+      length = Integer(length, 10)
+      type = byte
+
+      message << "#{length}#{type}"
+      message << @pipe.read(length)
+
+      decoded = OTNetstring.parse(message)
+      modified_paths = decoded["events"].map {|event| event["path"]}
+      # passing the full info as a second block param feels icky, but such is
+      # the trap of backward compatibility.
+      case callback.arity
+        when 1
+          callback.call(modified_paths)
+        when 2
+          callback.call(modified_paths, decoded)
       end
     end
   rescue Interrupt, IOError, Errno::EBADF
@@ -110,7 +144,7 @@
   private
 
   def parse_options(options={})
-    opts = []
+    opts = ['--format=otnetstring']
     opts.concat(['--since-when', options[:since_when]]) if options[:since_when]
     opts.concat(['--latency', options[:latency]]) if options[:latency]
     opts.push('--no-defer') if options[:no_defer]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/rb-fsevent/version.rb 
new/lib/rb-fsevent/version.rb
--- old/lib/rb-fsevent/version.rb       2016-10-24 20:23:48.000000000 +0200
+++ new/lib/rb-fsevent/version.rb       2017-07-01 05:41:19.000000000 +0200
@@ -1,5 +1,5 @@
 # -*- encoding: utf-8 -*-
 
 class FSEvent
-  VERSION = '0.9.8'
+  VERSION = '0.10.2'
 end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/metadata new/metadata
--- old/metadata        2016-10-24 20:23:48.000000000 +0200
+++ new/metadata        2017-07-01 05:41:18.000000000 +0200
@@ -1,7 +1,7 @@
 --- !ruby/object:Gem::Specification
 name: rb-fsevent
 version: !ruby/object:Gem::Version
-  version: 0.9.8
+  version: 0.10.2
 platform: ruby
 authors:
 - Thibaud Guillaume-Gentil
@@ -9,7 +9,7 @@
 autorequire: 
 bindir: bin
 cert_chain: []
-date: 2016-10-24 00:00:00.000000000 Z
+date: 2017-07-01 00:00:00.000000000 Z
 dependencies:
 - !ruby/object:Gem::Dependency
   name: bundler
@@ -31,14 +31,14 @@
     requirements:
     - - "~>"
       - !ruby/object:Gem::Version
-        version: '2.11'
+        version: '3.6'
   type: :development
   prerelease: false
   version_requirements: !ruby/object:Gem::Requirement
     requirements:
     - - "~>"
       - !ruby/object:Gem::Version
-        version: '2.11'
+        version: '3.6'
 - !ruby/object:Gem::Dependency
   name: guard-rspec
   requirement: !ruby/object:Gem::Requirement
@@ -53,6 +53,20 @@
     - - "~>"
       - !ruby/object:Gem::Version
         version: '4.2'
+- !ruby/object:Gem::Dependency
+  name: rake
+  requirement: !ruby/object:Gem::Requirement
+    requirements:
+    - - "~>"
+      - !ruby/object:Gem::Version
+        version: '12.0'
+  type: :development
+  prerelease: false
+  version_requirements: !ruby/object:Gem::Requirement
+    requirements:
+    - - "~>"
+      - !ruby/object:Gem::Version
+        version: '12.0'
 description: FSEvents API with Signals catching (without RubyCocoa)
 email:
 - thib...@thibaud.gg
@@ -83,6 +97,7 @@
 - ext/fsevent_watch/signal_handlers.c
 - ext/fsevent_watch/signal_handlers.h
 - ext/rakefile.rb
+- lib/otnetstring.rb
 - lib/rb-fsevent.rb
 - lib/rb-fsevent/fsevent.rb
 - lib/rb-fsevent/version.rb
@@ -90,7 +105,8 @@
 homepage: http://rubygems.org/gems/rb-fsevent
 licenses:
 - MIT
-metadata: {}
+metadata:
+  source_code_uri: https://github.com/thibaudgg/rb-fsevent
 post_install_message: 
 rdoc_options: []
 require_paths:
@@ -107,7 +123,7 @@
       version: '0'
 requirements: []
 rubyforge_project: 
-rubygems_version: 2.4.5.1
+rubygems_version: 2.6.11
 signing_key: 
 specification_version: 4
 summary: Very simple & usable FSEvents API
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/rb-fsevent.gemspec new/rb-fsevent.gemspec
--- old/rb-fsevent.gemspec      2016-10-24 20:23:48.000000000 +0200
+++ new/rb-fsevent.gemspec      2017-07-01 05:41:19.000000000 +0200
@@ -13,10 +13,15 @@
   s.description = 'FSEvents API with Signals catching (without RubyCocoa)'
   s.license     = 'MIT'
 
+  s.metadata = {
+    'source_code_uri' => 'https://github.com/thibaudgg/rb-fsevent'
+  }
+
   s.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^spec/}) }
   s.require_path = 'lib'
 
   s.add_development_dependency 'bundler',     '~> 1.0'
-  s.add_development_dependency 'rspec',       '~> 2.11'
+  s.add_development_dependency 'rspec',       '~> 3.6'
   s.add_development_dependency 'guard-rspec', '~> 4.2'
+  s.add_development_dependency 'rake',        '~> 12.0'
 end


Reply via email to