Hello community, here is the log from the commit of package rubygem-bindex for openSUSE:Factory checked in at 2019-06-19 20:59:18 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/rubygem-bindex (Old) and /work/SRC/openSUSE:Factory/.rubygem-bindex.new.4811 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "rubygem-bindex" Wed Jun 19 20:59:18 2019 rev:2 rq:705978 version:0.7.0 Changes: -------- --- /work/SRC/openSUSE:Factory/rubygem-bindex/rubygem-bindex.changes 2017-06-04 01:56:48.461810744 +0200 +++ /work/SRC/openSUSE:Factory/.rubygem-bindex.new.4811/rubygem-bindex.changes 2019-06-19 20:59:18.974030311 +0200 @@ -1,0 +2,6 @@ +Sun May 5 09:19:35 UTC 2019 - Stephan Kulow <[email protected]> + +- updated to version 0.7.0 + no changelog found + +------------------------------------------------------------------- Old: ---- bindex-0.5.0.gem New: ---- bindex-0.7.0.gem ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ rubygem-bindex.spec ++++++ --- /var/tmp/diff_new_pack.QZfLvb/_old 2019-06-19 20:59:19.526030805 +0200 +++ /var/tmp/diff_new_pack.QZfLvb/_new 2019-06-19 20:59:19.530030808 +0200 @@ -1,7 +1,7 @@ # # spec file for package rubygem-bindex # -# Copyright (c) 2017 SUSE LINUX GmbH, Nuernberg, Germany. +# Copyright (c) 2019 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 @@ -12,7 +12,7 @@ # license that conforms to the Open Source Definition (Version 1.9) # published by the Open Source Initiative. -# Please submit bugfixes or comments via http://bugs.opensuse.org/ +# Please submit bugfixes or comments via https://bugs.opensuse.org/ # @@ -24,14 +24,14 @@ # Name: rubygem-bindex -Version: 0.5.0 +Version: 0.7.0 Release: 0 %define mod_name bindex %define mod_full_name %{mod_name}-%{version} BuildRoot: %{_tmppath}/%{name}-%{version}-build -BuildRequires: ruby-macros >= 5 BuildRequires: %{rubydevel >= 2.0.0} BuildRequires: %{rubygem gem2rpm} +BuildRequires: ruby-macros >= 5 Url: https://github.com/gsamokovarov/bindex Source: https://rubygems.org/gems/%{mod_full_name}.gem Source1: gem2rpm.yml ++++++ bindex-0.5.0.gem -> bindex-0.7.0.gem ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/.travis.yml new/.travis.yml --- old/.travis.yml 2017-03-20 12:22:18.000000000 +0100 +++ new/.travis.yml 2019-04-08 22:09:35.000000000 +0200 @@ -1,10 +1,6 @@ language: ruby rvm: - - ruby-2.0.0-p648 - - ruby-2.1.10 - - ruby-2.1.0 - - ruby-2.2.6 - ruby-2.3.3 - ruby-2.4.0 - ruby-head diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/CONTRIBUTING.md new/CONTRIBUTING.md --- old/CONTRIBUTING.md 2017-03-20 12:22:18.000000000 +0100 +++ new/CONTRIBUTING.md 2019-04-08 22:09:35.000000000 +0200 @@ -1,6 +1,6 @@ # Contributing -1. Fork it ( https://github.com/gsamokovarov/bindex/fork ) +1. Fork it ( https://github.com/gsamokovarov/skiptrace/fork ) 2. Create your feature branch (`git checkout -b my-new-feature`) 3. Commit your changes (`git commit -am 'Add some feature'`) 4. Push to the branch (`git push origin my-new-feature`) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Gemfile new/Gemfile --- old/Gemfile 2017-03-20 12:22:18.000000000 +0100 +++ new/Gemfile 2019-04-08 22:09:35.000000000 +0200 @@ -1,6 +1,6 @@ source 'https://rubygems.org' -gemspec +gemspec name: 'skiptrace' # Rubinius 2.2.2 travis tests complain about this one. platforms :rbx do diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/README.md new/README.md --- old/README.md 2017-03-20 12:22:18.000000000 +0100 +++ new/README.md 2019-04-08 22:09:35.000000000 +0200 @@ -1,7 +1,7 @@ -# Bindex [](https://travis-ci.org/gsamokovarov/bindex) +# Skiptrace [](https://travis-ci.org/gsamokovarov/bindex) When Ruby raises an exception, it leaves you a backtrace to help you figure out -where did the exception originated in. Bindex gives you the bindings as well. +where did the exception originated in. Skiptrace gives you the bindings as well. This can help you introspect the state of the Ruby program when at the point the exception occurred. @@ -12,13 +12,13 @@ ### API -Bindex defines the following API: +Skiptrace defines the following API: #### Exception#bindings Returns all the bindings up to the one in which the exception originated in. -#### Bindex.current_bindings +#### Skiptrace.current_bindings Returns all of the current Ruby execution state bindings. The first one is the current one, the second is the caller one, the third is the caller of the diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Rakefile new/Rakefile --- old/Rakefile 2017-03-20 12:22:18.000000000 +0100 +++ new/Rakefile 2019-04-08 22:09:35.000000000 +0200 @@ -1,5 +1,9 @@ -require 'bundler/gem_tasks' require 'rake/testtask' +require "rake/clean" + +CLOBBER.include "pkg" + +Bundler::GemHelper.install_tasks name: ENV.fetch('GEM_NAME', 'skiptrace') Rake::TestTask.new do |t| t.libs << 'test' @@ -11,18 +15,20 @@ when 'ruby' require 'rake/extensiontask' - Rake::ExtensionTask.new('bindex') do |ext| + Rake::ExtensionTask.new('skiptrace') do |ext| ext.name = 'cruby' - ext.lib_dir = 'lib/bindex' + ext.lib_dir = 'lib/skiptrace' end task default: [:clean, :compile, :test] when 'jruby' require 'rake/javaextensiontask' - Rake::JavaExtensionTask.new('bindex') do |ext| + Rake::JavaExtensionTask.new('skiptrace') do |ext| ext.name = 'jruby_internals' - ext.lib_dir = 'lib/bindex' + ext.lib_dir = 'lib/skiptrace' + ext.source_version = '1.8' + ext.target_version = '1.8' end task default: [:clean, :compile, :test] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/bindex.gemspec new/bindex.gemspec --- old/bindex.gemspec 2017-03-20 12:22:18.000000000 +0100 +++ new/bindex.gemspec 2019-04-08 22:09:35.000000000 +0200 @@ -1,13 +1,13 @@ $LOAD_PATH << File.expand_path('../lib', __FILE__) -require 'bindex/version' +require 'skiptrace/version' Gem::Specification.new do |spec| spec.name = "bindex" - spec.version = Bindex::VERSION + spec.version = Skiptrace::VERSION spec.authors = ["Genadi Samokovarov"] spec.email = ["[email protected]"] - spec.extensions = ["ext/bindex/extconf.rb"] + spec.extensions = ["ext/skiptrace/extconf.rb"] spec.summary = "Bindings for your Ruby exceptions" spec.homepage = "https://github.com/gsamokovarov/bindex" spec.license = "MIT" @@ -18,7 +18,7 @@ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) } spec.test_files = spec.files.grep(%r{^(test|spec|features)/}) spec.require_paths = ["lib"] - spec.extensions = ["ext/bindex/extconf.rb"] + spec.extensions = ["ext/skiptrace/extconf.rb"] spec.add_development_dependency "minitest", "~> 5.4" spec.add_development_dependency "bundler" Binary files old/checksums.yaml.gz and new/checksums.yaml.gz differ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ext/bindex/com/gsamokovarov/bindex/BindingBuilder.java new/ext/bindex/com/gsamokovarov/bindex/BindingBuilder.java --- old/ext/bindex/com/gsamokovarov/bindex/BindingBuilder.java 2017-03-20 12:22:18.000000000 +0100 +++ new/ext/bindex/com/gsamokovarov/bindex/BindingBuilder.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,13 +0,0 @@ -package com.gsamokovarov.bindex; - -import org.jruby.runtime.DynamicScope; -import org.jruby.runtime.Binding; -import org.jruby.runtime.Frame; -import org.jruby.runtime.DynamicScope; -import org.jruby.runtime.backtrace.BacktraceElement; - -class BindingBuilder { - public static Binding build(Frame frame, DynamicScope scope, BacktraceElement element) { - return new Binding(frame, scope, element.method, element.filename, element.line); - } -} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ext/bindex/com/gsamokovarov/bindex/CurrentBindingsIterator.java new/ext/bindex/com/gsamokovarov/bindex/CurrentBindingsIterator.java --- old/ext/bindex/com/gsamokovarov/bindex/CurrentBindingsIterator.java 2017-03-20 12:22:18.000000000 +0100 +++ new/ext/bindex/com/gsamokovarov/bindex/CurrentBindingsIterator.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,54 +0,0 @@ -package com.gsamokovarov.bindex; - -import org.jruby.runtime.ThreadContext; -import org.jruby.runtime.DynamicScope; -import org.jruby.runtime.Binding; -import org.jruby.runtime.Frame; -import org.jruby.runtime.DynamicScope; -import org.jruby.runtime.backtrace.BacktraceElement; -import java.util.Iterator; -import java.util.NoSuchElementException; - -class CurrentBindingsIterator implements Iterator<Binding> { - private Frame[] frameStack; - private int frameIndex; - - private DynamicScope[] scopeStack; - private int scopeIndex; - - private BacktraceElement[] backtrace; - private int backtraceIndex; - - CurrentBindingsIterator(ThreadContext context) { - ThreadContextInternals contextInternals = new ThreadContextInternals(context); - - this.frameStack = contextInternals.getFrameStack(); - this.frameIndex = contextInternals.getFrameIndex(); - - this.scopeStack = contextInternals.getScopeStack(); - this.scopeIndex = contextInternals.getScopeIndex(); - - this.backtrace = contextInternals.getBacktrace(); - this.backtraceIndex = contextInternals.getBacktraceIndex(); - } - - public boolean hasNext() { - return frameIndex >= 0 && scopeIndex >= 0 && backtraceIndex >= 0; - } - - public Binding next() { - if (!hasNext()) { - throw new NoSuchElementException(); - } - - Frame frame = frameStack[frameIndex--]; - DynamicScope scope = scopeStack[scopeIndex--]; - BacktraceElement element = backtrace[backtraceIndex--]; - - return BindingBuilder.build(frame, scope, element); - } - - public void remove() { - throw new UnsupportedOperationException(); - } -} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ext/bindex/com/gsamokovarov/bindex/JRubyIntegration.java new/ext/bindex/com/gsamokovarov/bindex/JRubyIntegration.java --- old/ext/bindex/com/gsamokovarov/bindex/JRubyIntegration.java 2017-03-20 12:22:18.000000000 +0100 +++ new/ext/bindex/com/gsamokovarov/bindex/JRubyIntegration.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,49 +0,0 @@ -package com.gsamokovarov.bindex; - -import org.jruby.Ruby; -import org.jruby.RubyArray; -import org.jruby.RubyModule; -import org.jruby.RubyClass; -import org.jruby.runtime.ThreadContext; -import org.jruby.runtime.builtin.IRubyObject; -import org.jruby.runtime.builtin.InstanceVariables; -import org.jruby.anno.JRubyMethod; - -public class JRubyIntegration { - public static void setup(Ruby runtime) { - RubyModule bindex = runtime.defineModule("Bindex"); - bindex.defineAnnotatedMethods(BindexMethods.class); - - RubyClass exception = runtime.getException(); - exception.defineAnnotatedMethods(ExceptionExtensionMethods.class); - - IRubyObject verbose = runtime.getVerbose(); - try { - runtime.setVerbose(runtime.getNil()); - runtime.addEventHook(new SetExceptionBindingsEventHook()); - } finally { - runtime.setVerbose(verbose); - } - } - - public static class BindexMethods { - @JRubyMethod(name = "current_bindings", meta = true) - public static IRubyObject currentBindings(ThreadContext context, IRubyObject self) { - return RubyBindingsCollector.collectCurrentFor(context); - } - } - - public static class ExceptionExtensionMethods { - @JRubyMethod - public static IRubyObject bindings(ThreadContext context, IRubyObject self) { - InstanceVariables instanceVariables = self.getInstanceVariables(); - - IRubyObject bindings = instanceVariables.getInstanceVariable("@bindings"); - if (bindings != null && !bindings.isNil()) { - return bindings; - } - - return RubyArray.newArray(context.getRuntime()); - } - } -} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ext/bindex/com/gsamokovarov/bindex/RubyBindingsCollector.java new/ext/bindex/com/gsamokovarov/bindex/RubyBindingsCollector.java --- old/ext/bindex/com/gsamokovarov/bindex/RubyBindingsCollector.java 2017-03-20 12:22:18.000000000 +0100 +++ new/ext/bindex/com/gsamokovarov/bindex/RubyBindingsCollector.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,34 +0,0 @@ -package com.gsamokovarov.bindex; - -import org.jruby.runtime.ThreadContext; -import org.jruby.runtime.Binding; -import org.jruby.runtime.DynamicScope; -import org.jruby.runtime.builtin.IRubyObject; -import org.jruby.RubyBinding; -import org.jruby.RubyArray; -import org.jruby.Ruby; -import java.util.Iterator; - -public class RubyBindingsCollector { - private final Ruby runtime; - private Iterator<Binding> iterator; - - public static RubyArray collectCurrentFor(ThreadContext context) { - return new RubyBindingsCollector(context).collectCurrent(); - } - - private RubyBindingsCollector(ThreadContext context) { - this.iterator = new CurrentBindingsIterator(context); - this.runtime = context.getRuntime(); - } - - private RubyArray collectCurrent() { - RubyArray bindings = RubyArray.newArray(runtime); - - while (iterator.hasNext()) { - bindings.append(((IRubyObject) RubyBinding.newBinding(runtime, iterator.next()))); - } - - return bindings; - } -} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ext/bindex/com/gsamokovarov/bindex/SetExceptionBindingsEventHook.java new/ext/bindex/com/gsamokovarov/bindex/SetExceptionBindingsEventHook.java --- old/ext/bindex/com/gsamokovarov/bindex/SetExceptionBindingsEventHook.java 2017-03-20 12:22:18.000000000 +0100 +++ new/ext/bindex/com/gsamokovarov/bindex/SetExceptionBindingsEventHook.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,24 +0,0 @@ -package com.gsamokovarov.bindex; - -import org.jruby.runtime.EventHook; -import org.jruby.runtime.RubyEvent; -import org.jruby.runtime.ThreadContext; -import org.jruby.runtime.builtin.IRubyObject; -import org.jruby.RubyArray; -import org.jruby.RubyException; - -public class SetExceptionBindingsEventHook extends EventHook { - public boolean isInterestedInEvent(RubyEvent event) { - return event == RubyEvent.RAISE; - } - - public void eventHandler(ThreadContext context, String eventName, String file, int line, String name, IRubyObject type) { - RubyArray bindings = RubyBindingsCollector.collectCurrentFor(context); - RubyException exception = (RubyException) context.runtime.getGlobalVariables().get("$!"); - - IRubyObject exceptionBindings = exception.getInstanceVariable("@bindings"); - if (exceptionBindings == null || exceptionBindings.isNil()) { - exception.setInstanceVariable("@bindings", bindings); - } - } -} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ext/bindex/com/gsamokovarov/bindex/ThreadContextInterfaceException.java new/ext/bindex/com/gsamokovarov/bindex/ThreadContextInterfaceException.java --- old/ext/bindex/com/gsamokovarov/bindex/ThreadContextInterfaceException.java 2017-03-20 12:22:18.000000000 +0100 +++ new/ext/bindex/com/gsamokovarov/bindex/ThreadContextInterfaceException.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,14 +0,0 @@ -package com.gsamokovarov.bindex; - -class ThreadContextInterfaceException extends RuntimeException { - private static final String MESSAGE_TEMPLATE = - "Expected private field %s in ThreadContext is missing"; - - ThreadContextInterfaceException(String fieldName) { - super(String.format(MESSAGE_TEMPLATE, fieldName)); - } - - ThreadContextInterfaceException(String fieldName, Throwable cause) { - super(String.format(MESSAGE_TEMPLATE, fieldName), cause); - } -} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ext/bindex/com/gsamokovarov/bindex/ThreadContextInternals.java new/ext/bindex/com/gsamokovarov/bindex/ThreadContextInternals.java --- old/ext/bindex/com/gsamokovarov/bindex/ThreadContextInternals.java 2017-03-20 12:22:18.000000000 +0100 +++ new/ext/bindex/com/gsamokovarov/bindex/ThreadContextInternals.java 1970-01-01 01:00:00.000000000 +0100 @@ -1,54 +0,0 @@ -package com.gsamokovarov.bindex; - -import java.lang.reflect.Field; -import org.jruby.runtime.ThreadContext; -import org.jruby.runtime.DynamicScope; -import org.jruby.runtime.Frame; -import org.jruby.runtime.backtrace.BacktraceElement; -import org.jruby.runtime.builtin.IRubyObject; - -public class ThreadContextInternals { - private ThreadContext context; - - public ThreadContextInternals(ThreadContext context) { - this.context = context; - } - - public Frame[] getFrameStack() { - return (Frame[]) getPrivateField("frameStack"); - } - - public int getFrameIndex() { - return (Integer) getPrivateField("frameIndex"); - } - - public DynamicScope[] getScopeStack() { - return (DynamicScope[]) getPrivateField("scopeStack"); - } - - public int getScopeIndex() { - return (Integer) getPrivateField("scopeIndex"); - } - - public BacktraceElement[] getBacktrace() { - return (BacktraceElement[]) getPrivateField("backtrace"); - } - - public int getBacktraceIndex() { - return (Integer) getPrivateField("backtraceIndex"); - } - - private Object getPrivateField(String fieldName) { - try { - Field field = ThreadContext.class.getDeclaredField(fieldName); - - field.setAccessible(true); - - return field.get(context); - } catch (NoSuchFieldException exc) { - throw new ThreadContextInterfaceException(fieldName, exc); - } catch (IllegalAccessException exc) { - throw new ThreadContextInterfaceException(fieldName, exc); - } - } -} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ext/bindex/cruby.c new/ext/bindex/cruby.c --- old/ext/bindex/cruby.c 2017-03-20 12:22:18.000000000 +0100 +++ new/ext/bindex/cruby.c 1970-01-01 01:00:00.000000000 +0100 @@ -1,80 +0,0 @@ -#include <ruby.h> -#include <ruby/debug.h> - -VALUE bx_mBindex; -static ID id_bindings; - -static VALUE -current_bindings_callback(const rb_debug_inspector_t *context, void *data) -{ - VALUE locations = rb_debug_inspector_backtrace_locations(context); - VALUE binding, bindings = rb_ary_new(); - long i, length = RARRAY_LEN(locations); - - for (i = 0; i < length; i++) { - binding = rb_debug_inspector_frame_binding_get(context, i); - - if (!NIL_P(binding)) { - rb_ary_push(bindings, binding); - } - } - - return bindings; -} - -VALUE -current_bindings(void) -{ - return rb_debug_inspector_open(current_bindings_callback, NULL); -} - -static void -set_exception_bindings_callback(VALUE tpval, void *data) -{ - rb_trace_arg_t *trace_arg = rb_tracearg_from_tracepoint(tpval); - VALUE exception = rb_tracearg_raised_exception(trace_arg); - VALUE bindings = rb_attr_get(exception, id_bindings); - - /* Set the bindings, only if they haven't been set already. This may reset - * the binding during reraise. */ - if (NIL_P(bindings)) { - rb_ivar_set(exception, id_bindings, current_bindings()); - } -} - -void -set_exception_bindings_on_raise(void) -{ - VALUE tpval = rb_tracepoint_new(0, RUBY_EVENT_RAISE, set_exception_bindings_callback, 0); - rb_tracepoint_enable(tpval); -} - -static VALUE -bx_current_bindings(VALUE self) -{ - return current_bindings(); -} - -static VALUE -bx_exc_bindings(VALUE self) -{ - VALUE bindings = rb_attr_get(self, id_bindings); - - if (NIL_P(bindings)) { - bindings = rb_ary_new(); - } - - return bindings; -} - -void -Init_cruby(void) -{ - bx_mBindex = rb_define_module("Bindex"); - id_bindings = rb_intern("bindings"); - - rb_define_singleton_method(bx_mBindex, "current_bindings", bx_current_bindings, 0); - rb_define_method(rb_eException, "bindings", bx_exc_bindings, 0); - - set_exception_bindings_on_raise(); -} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ext/bindex/extconf.rb new/ext/bindex/extconf.rb --- old/ext/bindex/extconf.rb 2017-03-20 12:22:18.000000000 +0100 +++ new/ext/bindex/extconf.rb 1970-01-01 01:00:00.000000000 +0100 @@ -1,15 +0,0 @@ -case RUBY_ENGINE -when "ruby" - require "mkmf" - - $CFLAGS << " -Wall" - $CFLAGS << " -g3 -O0" if ENV["DEBUG"] - - create_makefile("bindex/cruby") -else - IO.write(File.expand_path("../Makefile", __FILE__), <<-END) - all install static install-so install-rb: Makefile - .PHONY: all install static install-so install-rb - .PHONY: clean clean-so clean-static clean-rb - END -end diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ext/skiptrace/com/gsamokovarov/skiptrace/BindingBuilder.java new/ext/skiptrace/com/gsamokovarov/skiptrace/BindingBuilder.java --- old/ext/skiptrace/com/gsamokovarov/skiptrace/BindingBuilder.java 1970-01-01 01:00:00.000000000 +0100 +++ new/ext/skiptrace/com/gsamokovarov/skiptrace/BindingBuilder.java 2019-04-08 22:09:35.000000000 +0200 @@ -0,0 +1,13 @@ +package com.gsamokovarov.skiptrace; + +import org.jruby.runtime.DynamicScope; +import org.jruby.runtime.Binding; +import org.jruby.runtime.Frame; +import org.jruby.runtime.DynamicScope; +import org.jruby.runtime.backtrace.BacktraceElement; + +class BindingBuilder { + public static Binding build(Frame frame, DynamicScope scope, BacktraceElement element) { + return new Binding(frame, scope, element.method, element.filename, element.line); + } +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ext/skiptrace/com/gsamokovarov/skiptrace/CurrentBindingsIterator.java new/ext/skiptrace/com/gsamokovarov/skiptrace/CurrentBindingsIterator.java --- old/ext/skiptrace/com/gsamokovarov/skiptrace/CurrentBindingsIterator.java 1970-01-01 01:00:00.000000000 +0100 +++ new/ext/skiptrace/com/gsamokovarov/skiptrace/CurrentBindingsIterator.java 2019-04-08 22:09:35.000000000 +0200 @@ -0,0 +1,54 @@ +package com.gsamokovarov.skiptrace; + +import org.jruby.runtime.ThreadContext; +import org.jruby.runtime.DynamicScope; +import org.jruby.runtime.Binding; +import org.jruby.runtime.Frame; +import org.jruby.runtime.DynamicScope; +import org.jruby.runtime.backtrace.BacktraceElement; +import java.util.Iterator; +import java.util.NoSuchElementException; + +class CurrentBindingsIterator implements Iterator<Binding> { + private Frame[] frameStack; + private int frameIndex; + + private DynamicScope[] scopeStack; + private int scopeIndex; + + private BacktraceElement[] backtrace; + private int backtraceIndex; + + CurrentBindingsIterator(ThreadContext context) { + ThreadContextInternals contextInternals = new ThreadContextInternals(context); + + this.frameStack = contextInternals.getFrameStack(); + this.frameIndex = contextInternals.getFrameIndex(); + + this.scopeStack = contextInternals.getScopeStack(); + this.scopeIndex = contextInternals.getScopeIndex(); + + this.backtrace = contextInternals.getBacktrace(); + this.backtraceIndex = contextInternals.getBacktraceIndex(); + } + + public boolean hasNext() { + return frameIndex >= 0 && scopeIndex >= 0 && backtraceIndex >= 0; + } + + public Binding next() { + if (!hasNext()) { + throw new NoSuchElementException(); + } + + Frame frame = frameStack[frameIndex--]; + DynamicScope scope = scopeStack[scopeIndex--]; + BacktraceElement element = backtrace[backtraceIndex--]; + + return BindingBuilder.build(frame, scope, element); + } + + public void remove() { + throw new UnsupportedOperationException(); + } +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ext/skiptrace/com/gsamokovarov/skiptrace/JRubyIntegration.java new/ext/skiptrace/com/gsamokovarov/skiptrace/JRubyIntegration.java --- old/ext/skiptrace/com/gsamokovarov/skiptrace/JRubyIntegration.java 1970-01-01 01:00:00.000000000 +0100 +++ new/ext/skiptrace/com/gsamokovarov/skiptrace/JRubyIntegration.java 2019-04-08 22:09:35.000000000 +0200 @@ -0,0 +1,49 @@ +package com.gsamokovarov.skiptrace; + +import org.jruby.Ruby; +import org.jruby.RubyArray; +import org.jruby.RubyModule; +import org.jruby.RubyClass; +import org.jruby.runtime.ThreadContext; +import org.jruby.runtime.builtin.IRubyObject; +import org.jruby.runtime.builtin.InstanceVariables; +import org.jruby.anno.JRubyMethod; + +public class JRubyIntegration { + public static void setup(Ruby runtime) { + RubyModule skiptrace = runtime.defineModule("Skiptrace"); + skiptrace.defineAnnotatedMethods(SkiptraceMethods.class); + + RubyClass exception = runtime.getException(); + exception.defineAnnotatedMethods(ExceptionExtensionMethods.class); + + IRubyObject verbose = runtime.getVerbose(); + try { + runtime.setVerbose(runtime.getNil()); + runtime.addEventHook(new SetExceptionBindingsEventHook()); + } finally { + runtime.setVerbose(verbose); + } + } + + public static class SkiptraceMethods { + @JRubyMethod(name = "current_bindings", meta = true) + public static IRubyObject currentBindings(ThreadContext context, IRubyObject self) { + return RubyBindingsCollector.collectCurrentFor(context); + } + } + + public static class ExceptionExtensionMethods { + @JRubyMethod + public static IRubyObject bindings(ThreadContext context, IRubyObject self) { + InstanceVariables instanceVariables = self.getInstanceVariables(); + + IRubyObject bindings = instanceVariables.getInstanceVariable("@bindings"); + if (bindings != null && !bindings.isNil()) { + return bindings; + } + + return RubyArray.newArray(context.getRuntime()); + } + } +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ext/skiptrace/com/gsamokovarov/skiptrace/RubyBindingsCollector.java new/ext/skiptrace/com/gsamokovarov/skiptrace/RubyBindingsCollector.java --- old/ext/skiptrace/com/gsamokovarov/skiptrace/RubyBindingsCollector.java 1970-01-01 01:00:00.000000000 +0100 +++ new/ext/skiptrace/com/gsamokovarov/skiptrace/RubyBindingsCollector.java 2019-04-08 22:09:35.000000000 +0200 @@ -0,0 +1,34 @@ +package com.gsamokovarov.skiptrace; + +import org.jruby.runtime.ThreadContext; +import org.jruby.runtime.Binding; +import org.jruby.runtime.DynamicScope; +import org.jruby.runtime.builtin.IRubyObject; +import org.jruby.RubyBinding; +import org.jruby.RubyArray; +import org.jruby.Ruby; +import java.util.Iterator; + +public class RubyBindingsCollector { + private final Ruby runtime; + private Iterator<Binding> iterator; + + public static RubyArray collectCurrentFor(ThreadContext context) { + return new RubyBindingsCollector(context).collectCurrent(); + } + + private RubyBindingsCollector(ThreadContext context) { + this.iterator = new CurrentBindingsIterator(context); + this.runtime = context.getRuntime(); + } + + private RubyArray collectCurrent() { + RubyArray bindings = RubyArray.newArray(runtime); + + while (iterator.hasNext()) { + bindings.append(((IRubyObject) RubyBinding.newBinding(runtime, iterator.next()))); + } + + return bindings; + } +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ext/skiptrace/com/gsamokovarov/skiptrace/SetExceptionBindingsEventHook.java new/ext/skiptrace/com/gsamokovarov/skiptrace/SetExceptionBindingsEventHook.java --- old/ext/skiptrace/com/gsamokovarov/skiptrace/SetExceptionBindingsEventHook.java 1970-01-01 01:00:00.000000000 +0100 +++ new/ext/skiptrace/com/gsamokovarov/skiptrace/SetExceptionBindingsEventHook.java 2019-04-08 22:09:35.000000000 +0200 @@ -0,0 +1,24 @@ +package com.gsamokovarov.skiptrace; + +import org.jruby.runtime.EventHook; +import org.jruby.runtime.RubyEvent; +import org.jruby.runtime.ThreadContext; +import org.jruby.runtime.builtin.IRubyObject; +import org.jruby.RubyArray; +import org.jruby.RubyException; + +public class SetExceptionBindingsEventHook extends EventHook { + public boolean isInterestedInEvent(RubyEvent event) { + return event == RubyEvent.RAISE; + } + + public void eventHandler(ThreadContext context, String eventName, String file, int line, String name, IRubyObject type) { + RubyArray bindings = RubyBindingsCollector.collectCurrentFor(context); + RubyException exception = (RubyException) context.runtime.getGlobalVariables().get("$!"); + + IRubyObject exceptionBindings = exception.getInstanceVariable("@bindings"); + if (exceptionBindings == null || exceptionBindings.isNil()) { + exception.setInstanceVariable("@bindings", bindings); + } + } +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ext/skiptrace/com/gsamokovarov/skiptrace/ThreadContextInterfaceException.java new/ext/skiptrace/com/gsamokovarov/skiptrace/ThreadContextInterfaceException.java --- old/ext/skiptrace/com/gsamokovarov/skiptrace/ThreadContextInterfaceException.java 1970-01-01 01:00:00.000000000 +0100 +++ new/ext/skiptrace/com/gsamokovarov/skiptrace/ThreadContextInterfaceException.java 2019-04-08 22:09:35.000000000 +0200 @@ -0,0 +1,14 @@ +package com.gsamokovarov.skiptrace; + +class ThreadContextInterfaceException extends RuntimeException { + private static final String MESSAGE_TEMPLATE = + "Expected private field %s in ThreadContext is missing"; + + ThreadContextInterfaceException(String fieldName) { + super(String.format(MESSAGE_TEMPLATE, fieldName)); + } + + ThreadContextInterfaceException(String fieldName, Throwable cause) { + super(String.format(MESSAGE_TEMPLATE, fieldName), cause); + } +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ext/skiptrace/com/gsamokovarov/skiptrace/ThreadContextInternals.java new/ext/skiptrace/com/gsamokovarov/skiptrace/ThreadContextInternals.java --- old/ext/skiptrace/com/gsamokovarov/skiptrace/ThreadContextInternals.java 1970-01-01 01:00:00.000000000 +0100 +++ new/ext/skiptrace/com/gsamokovarov/skiptrace/ThreadContextInternals.java 2019-04-08 22:09:35.000000000 +0200 @@ -0,0 +1,54 @@ +package com.gsamokovarov.skiptrace; + +import java.lang.reflect.Field; +import org.jruby.runtime.ThreadContext; +import org.jruby.runtime.DynamicScope; +import org.jruby.runtime.Frame; +import org.jruby.runtime.backtrace.BacktraceElement; +import org.jruby.runtime.builtin.IRubyObject; + +public class ThreadContextInternals { + private ThreadContext context; + + public ThreadContextInternals(ThreadContext context) { + this.context = context; + } + + public Frame[] getFrameStack() { + return (Frame[]) getPrivateField("frameStack"); + } + + public int getFrameIndex() { + return (Integer) getPrivateField("frameIndex"); + } + + public DynamicScope[] getScopeStack() { + return (DynamicScope[]) getPrivateField("scopeStack"); + } + + public int getScopeIndex() { + return (Integer) getPrivateField("scopeIndex"); + } + + public BacktraceElement[] getBacktrace() { + return (BacktraceElement[]) getPrivateField("backtrace"); + } + + public int getBacktraceIndex() { + return (Integer) getPrivateField("backtraceIndex"); + } + + private Object getPrivateField(String fieldName) { + try { + Field field = ThreadContext.class.getDeclaredField(fieldName); + + field.setAccessible(true); + + return field.get(context); + } catch (NoSuchFieldException exc) { + throw new ThreadContextInterfaceException(fieldName, exc); + } catch (IllegalAccessException exc) { + throw new ThreadContextInterfaceException(fieldName, exc); + } + } +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ext/skiptrace/cruby.c new/ext/skiptrace/cruby.c --- old/ext/skiptrace/cruby.c 1970-01-01 01:00:00.000000000 +0100 +++ new/ext/skiptrace/cruby.c 2019-04-08 22:09:35.000000000 +0200 @@ -0,0 +1,80 @@ +#include <ruby.h> +#include <ruby/debug.h> + +static VALUE st_mSkiptrace; +static ID id_bindings; + +static VALUE +current_bindings_callback(const rb_debug_inspector_t *context, void *data) +{ + VALUE locations = rb_debug_inspector_backtrace_locations(context); + VALUE binding, bindings = rb_ary_new(); + long i, length = RARRAY_LEN(locations); + + for (i = 0; i < length; i++) { + binding = rb_debug_inspector_frame_binding_get(context, i); + + if (!NIL_P(binding)) { + rb_ary_push(bindings, binding); + } + } + + return bindings; +} + +static VALUE +current_bindings(void) +{ + return rb_debug_inspector_open(current_bindings_callback, NULL); +} + +static void +set_exception_bindings_callback(VALUE tpval, void *data) +{ + rb_trace_arg_t *trace_arg = rb_tracearg_from_tracepoint(tpval); + VALUE exception = rb_tracearg_raised_exception(trace_arg); + VALUE bindings = rb_attr_get(exception, id_bindings); + + /* Set the bindings, only if they haven't been set already. This may reset + * the binding during reraise. */ + if (NIL_P(bindings)) { + rb_ivar_set(exception, id_bindings, current_bindings()); + } +} + +static void +set_exception_bindings_on_raise(void) +{ + VALUE tpval = rb_tracepoint_new(0, RUBY_EVENT_RAISE, set_exception_bindings_callback, 0); + rb_tracepoint_enable(tpval); +} + +static VALUE +st_current_bindings(VALUE self) +{ + return current_bindings(); +} + +static VALUE +st_exc_bindings(VALUE self) +{ + VALUE bindings = rb_attr_get(self, id_bindings); + + if (NIL_P(bindings)) { + bindings = rb_ary_new(); + } + + return bindings; +} + +void +Init_cruby(void) +{ + st_mSkiptrace = rb_define_module("Skiptrace"); + id_bindings = rb_intern("bindings"); + + rb_define_singleton_method(st_mSkiptrace, "current_bindings", st_current_bindings, 0); + rb_define_method(rb_eException, "bindings", st_exc_bindings, 0); + + set_exception_bindings_on_raise(); +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ext/skiptrace/extconf.rb new/ext/skiptrace/extconf.rb --- old/ext/skiptrace/extconf.rb 1970-01-01 01:00:00.000000000 +0100 +++ new/ext/skiptrace/extconf.rb 2019-04-08 22:09:35.000000000 +0200 @@ -0,0 +1,15 @@ +case RUBY_ENGINE +when "ruby" + require "mkmf" + + $CFLAGS << " -Wall" + $CFLAGS << " -g3 -O0" if ENV["DEBUG"] + + create_makefile("skiptrace/cruby") +else + IO.write(File.expand_path("../Makefile", __FILE__), <<-END) + all install static install-so install-rb: Makefile + .PHONY: all install static install-so install-rb + .PHONY: clean clean-so clean-static clean-rb + END +end diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/bindex/jruby.rb new/lib/bindex/jruby.rb --- old/lib/bindex/jruby.rb 2017-03-20 12:22:18.000000000 +0100 +++ new/lib/bindex/jruby.rb 1970-01-01 01:00:00.000000000 +0100 @@ -1,5 +0,0 @@ -require 'bindex/jruby_internals' - -java_import com.gsamokovarov.bindex.JRubyIntegration - -JRubyIntegration.setup(JRuby.runtime) Binary files old/lib/bindex/jruby_internals.jar and new/lib/bindex/jruby_internals.jar differ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/bindex/rubinius.rb new/lib/bindex/rubinius.rb --- old/lib/bindex/rubinius.rb 2017-03-20 12:22:18.000000000 +0100 +++ new/lib/bindex/rubinius.rb 1970-01-01 01:00:00.000000000 +0100 @@ -1,66 +0,0 @@ -module Bindex - module Rubinius - # Filters internal Rubinius locations. - # - # There are a couple of reasons why we wanna filter out the locations. - # - # * ::Kernel.raise, is implemented in Ruby for Rubinius. We don't wanna - # have the frame for it to align with the CRuby and JRuby implementations. - # - # * For internal methods location variables can be nil. We can't create a - # bindings for them. - # - # * Bindings from the current file are considered internal and ignored. - # - # We do that all that so we can align the bindings with the backtraces - # entries. - class InternalLocationFilter - def initialize(locations) - @locations = locations - end - - def filter - @locations.reject do |location| - location.file.start_with?('kernel/delta/kernel.rb') || - location.file == __FILE__ || - location.variables.nil? - end - end - end - end -end - -# Gets the current bindings for all available Ruby frames. -# -# Filters the internal Rubinius and Bindex frames. -def Bindex.current_bindings - locations = ::Rubinius::VM.backtrace(1, true) - - Bindex::Rubinius::InternalLocationFilter.new(locations).filter.map do |location| - Binding.setup( - location.variables, - location.variables.method, - location.constant_scope, - location.variables.self, - location - ) - end -end - -::Exception.class_eval do - def bindings - @bindings || [] - end -end - -::Rubinius.singleton_class.class_eval do - raise_exception = instance_method(:raise_exception) - - define_method(:raise_exception) do |exc| - if exc.bindings.empty? - exc.instance_variable_set(:@bindings, Bindex.current_bindings) - end - - raise_exception.bind(self).call(exc) - end -end diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/bindex/version.rb new/lib/bindex/version.rb --- old/lib/bindex/version.rb 2017-03-20 12:22:18.000000000 +0100 +++ new/lib/bindex/version.rb 1970-01-01 01:00:00.000000000 +0100 @@ -1,3 +0,0 @@ -module Bindex - VERSION = "0.5.0" -end diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/bindex.rb new/lib/bindex.rb --- old/lib/bindex.rb 2017-03-20 12:22:18.000000000 +0100 +++ new/lib/bindex.rb 2019-04-08 22:09:35.000000000 +0200 @@ -1,10 +1,4 @@ -case RUBY_ENGINE -when 'rbx' - require 'bindex/rubinius' -when 'jruby' - require 'bindex/jruby' -when 'ruby' - require 'bindex/cruby' -end +require_relative "skiptrace" -require "bindex/version" +# Keep backwards compatibility with the previous name. +Bindex = Skiptrace diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/skiptrace/jruby.rb new/lib/skiptrace/jruby.rb --- old/lib/skiptrace/jruby.rb 1970-01-01 01:00:00.000000000 +0100 +++ new/lib/skiptrace/jruby.rb 2019-04-08 22:09:35.000000000 +0200 @@ -0,0 +1,5 @@ +require 'skiptrace/jruby_internals' + +java_import com.gsamokovarov.skiptrace.JRubyIntegration + +JRubyIntegration.setup(JRuby.runtime) Binary files old/lib/skiptrace/jruby_internals.jar and new/lib/skiptrace/jruby_internals.jar differ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/skiptrace/rubinius.rb new/lib/skiptrace/rubinius.rb --- old/lib/skiptrace/rubinius.rb 1970-01-01 01:00:00.000000000 +0100 +++ new/lib/skiptrace/rubinius.rb 2019-04-08 22:09:35.000000000 +0200 @@ -0,0 +1,66 @@ +module Skiptrace + module Rubinius + # Filters internal Rubinius locations. + # + # There are a couple of reasons why we wanna filter out the locations. + # + # * ::Kernel.raise, is implemented in Ruby for Rubinius. We don't wanna + # have the frame for it to align with the CRuby and JRuby implementations. + # + # * For internal methods location variables can be nil. We can't create a + # bindings for them. + # + # * Bindings from the current file are considered internal and ignored. + # + # We do that all that so we can align the bindings with the backtraces + # entries. + class InternalLocationFilter + def initialize(locations) + @locations = locations + end + + def filter + @locations.reject do |location| + location.file.start_with?('kernel/delta/kernel.rb') || + location.file == __FILE__ || + location.variables.nil? + end + end + end + end +end + +# Gets the current bindings for all available Ruby frames. +# +# Filters the internal Rubinius and Skiptrace frames. +def Skiptrace.current_bindings + locations = ::Rubinius::VM.backtrace(1, true) + + Skiptrace::Rubinius::InternalLocationFilter.new(locations).filter.map do |location| + Binding.setup( + location.variables, + location.variables.method, + location.constant_scope, + location.variables.self, + location + ) + end +end + +::Exception.class_eval do + def bindings + @bindings || [] + end +end + +::Rubinius.singleton_class.class_eval do + raise_exception = instance_method(:raise_exception) + + define_method(:raise_exception) do |exc| + if exc.bindings.empty? + exc.instance_variable_set(:@bindings, Skiptrace.current_bindings) + end + + raise_exception.bind(self).call(exc) + end +end diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/skiptrace/version.rb new/lib/skiptrace/version.rb --- old/lib/skiptrace/version.rb 1970-01-01 01:00:00.000000000 +0100 +++ new/lib/skiptrace/version.rb 2019-04-08 22:09:35.000000000 +0200 @@ -0,0 +1,3 @@ +module Skiptrace + VERSION = "0.7.0" +end diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/skiptrace.rb new/lib/skiptrace.rb --- old/lib/skiptrace.rb 1970-01-01 01:00:00.000000000 +0100 +++ new/lib/skiptrace.rb 2019-04-08 22:09:35.000000000 +0200 @@ -0,0 +1,11 @@ +case RUBY_ENGINE +when 'rbx' + require 'skiptrace/rubinius' +when 'jruby' + require 'skiptrace/jruby' +when 'ruby' + require 'skiptrace/cruby' +end + +require "skiptrace/version" + diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/metadata new/metadata --- old/metadata 2017-03-20 12:22:18.000000000 +0100 +++ new/metadata 2019-04-08 22:09:35.000000000 +0200 @@ -1,77 +1,77 @@ --- !ruby/object:Gem::Specification name: bindex version: !ruby/object:Gem::Version - version: 0.5.0 + version: 0.7.0 platform: ruby authors: - Genadi Samokovarov -autorequire: +autorequire: bindir: bin cert_chain: [] -date: 2017-03-20 00:00:00.000000000 Z +date: 2019-04-08 00:00:00.000000000 Z dependencies: - !ruby/object:Gem::Dependency + name: minitest requirement: !ruby/object:Gem::Requirement requirements: - - "~>" - !ruby/object:Gem::Version version: '5.4' - name: minitest - prerelease: false type: :development + prerelease: false version_requirements: !ruby/object:Gem::Requirement requirements: - - "~>" - !ruby/object:Gem::Version version: '5.4' - !ruby/object:Gem::Dependency + name: bundler requirement: !ruby/object:Gem::Requirement requirements: - - ">=" - !ruby/object:Gem::Version version: '0' - name: bundler - prerelease: false type: :development + prerelease: false version_requirements: !ruby/object:Gem::Requirement requirements: - - ">=" - !ruby/object:Gem::Version version: '0' - !ruby/object:Gem::Dependency + name: rake requirement: !ruby/object:Gem::Requirement requirements: - - ">=" - !ruby/object:Gem::Version version: '0' - name: rake - prerelease: false type: :development + prerelease: false version_requirements: !ruby/object:Gem::Requirement requirements: - - ">=" - !ruby/object:Gem::Version version: '0' - !ruby/object:Gem::Dependency + name: rake-compiler requirement: !ruby/object:Gem::Requirement requirements: - - ">=" - !ruby/object:Gem::Version version: '0' - name: rake-compiler - prerelease: false type: :development + prerelease: false version_requirements: !ruby/object:Gem::Requirement requirements: - - ">=" - !ruby/object:Gem::Version version: '0' -description: +description: email: - [email protected] executables: [] extensions: -- ext/bindex/extconf.rb +- ext/skiptrace/extconf.rb extra_rdoc_files: [] files: - ".gitignore" @@ -82,20 +82,22 @@ - README.md - Rakefile - bindex.gemspec -- ext/bindex/com/gsamokovarov/bindex/BindingBuilder.java -- ext/bindex/com/gsamokovarov/bindex/CurrentBindingsIterator.java -- ext/bindex/com/gsamokovarov/bindex/JRubyIntegration.java -- ext/bindex/com/gsamokovarov/bindex/RubyBindingsCollector.java -- ext/bindex/com/gsamokovarov/bindex/SetExceptionBindingsEventHook.java -- ext/bindex/com/gsamokovarov/bindex/ThreadContextInterfaceException.java -- ext/bindex/com/gsamokovarov/bindex/ThreadContextInternals.java -- ext/bindex/cruby.c -- ext/bindex/extconf.rb +- ext/skiptrace/com/gsamokovarov/skiptrace/BindingBuilder.java +- ext/skiptrace/com/gsamokovarov/skiptrace/CurrentBindingsIterator.java +- ext/skiptrace/com/gsamokovarov/skiptrace/JRubyIntegration.java +- ext/skiptrace/com/gsamokovarov/skiptrace/RubyBindingsCollector.java +- ext/skiptrace/com/gsamokovarov/skiptrace/SetExceptionBindingsEventHook.java +- ext/skiptrace/com/gsamokovarov/skiptrace/ThreadContextInterfaceException.java +- ext/skiptrace/com/gsamokovarov/skiptrace/ThreadContextInternals.java +- ext/skiptrace/cruby.c +- ext/skiptrace/extconf.rb - lib/bindex.rb -- lib/bindex/jruby.rb -- lib/bindex/jruby_internals.jar -- lib/bindex/rubinius.rb -- lib/bindex/version.rb +- lib/skiptrace.rb +- lib/skiptrace/jruby.rb +- lib/skiptrace/jruby_internals.jar +- lib/skiptrace/rubinius.rb +- lib/skiptrace/version.rb +- skiptrace.gemspec - test/current_bindings_test.rb - test/exception_test.rb - test/fixtures/basic_nested_fixture.rb @@ -108,7 +110,7 @@ licenses: - MIT metadata: {} -post_install_message: +post_install_message: rdoc_options: [] require_paths: - lib @@ -123,9 +125,8 @@ - !ruby/object:Gem::Version version: '0' requirements: [] -rubyforge_project: -rubygems_version: 2.6.8 -signing_key: +rubygems_version: 3.0.3 +signing_key: specification_version: 4 summary: Bindings for your Ruby exceptions test_files: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/skiptrace.gemspec new/skiptrace.gemspec --- old/skiptrace.gemspec 1970-01-01 01:00:00.000000000 +0100 +++ new/skiptrace.gemspec 2019-04-08 22:09:35.000000000 +0200 @@ -0,0 +1,27 @@ +$LOAD_PATH << File.expand_path('../lib', __FILE__) + +require 'skiptrace/version' + +Gem::Specification.new do |spec| + spec.name = "skiptrace" + spec.version = Skiptrace::VERSION + spec.authors = ["Genadi Samokovarov"] + spec.email = ["[email protected]"] + spec.extensions = ["ext/skiptrace/extconf.rb"] + spec.summary = "Bindings for your Ruby exceptions" + spec.homepage = "https://github.com/gsamokovarov/skiptrace" + spec.license = "MIT" + + spec.required_ruby_version = ">= 2.0.0" + + spec.files = `git ls-files -z`.split("\x0") + spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) } + spec.test_files = spec.files.grep(%r{^(test|spec|features)/}) + spec.require_paths = ["lib"] + spec.extensions = ["ext/skiptrace/extconf.rb"] + + spec.add_development_dependency "minitest", "~> 5.4" + spec.add_development_dependency "bundler" + spec.add_development_dependency "rake" + spec.add_development_dependency "rake-compiler" +end diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/test/current_bindings_test.rb new/test/current_bindings_test.rb --- old/test/current_bindings_test.rb 2017-03-20 12:22:18.000000000 +0100 +++ new/test/current_bindings_test.rb 2019-04-08 22:09:35.000000000 +0200 @@ -2,6 +2,6 @@ class CurrentBindingsTest < BaseTest test 'first binding returned is the current one' do - assert_equal __LINE__, Bindex.current_bindings.first.eval('__LINE__') + assert_equal __LINE__, Skiptrace.current_bindings.first.eval('__LINE__') end end diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/test/test_helper.rb new/test/test_helper.rb --- old/test/test_helper.rb 2017-03-20 12:22:18.000000000 +0100 +++ new/test/test_helper.rb 2019-04-08 22:09:35.000000000 +0200 @@ -1,7 +1,7 @@ $LOAD_PATH << File.expand_path('../lib', __FILE__) require 'minitest/autorun' -require 'bindex' +require 'skiptrace' current_directory = File.dirname(File.expand_path(__FILE__))
