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 - [email protected]
+
+- 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:
- [email protected]
@@ -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