Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package rubygem-bootsnap for
openSUSE:Factory checked in at 2021-10-11 15:31:32
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/rubygem-bootsnap (Old)
and /work/SRC/openSUSE:Factory/.rubygem-bootsnap.new.2443 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "rubygem-bootsnap"
Mon Oct 11 15:31:32 2021 rev:14 rq:924364 version:1.9.1
Changes:
--------
--- /work/SRC/openSUSE:Factory/rubygem-bootsnap/rubygem-bootsnap.changes
2021-08-25 20:59:38.377048440 +0200
+++
/work/SRC/openSUSE:Factory/.rubygem-bootsnap.new.2443/rubygem-bootsnap.changes
2021-10-11 15:32:31.178931772 +0200
@@ -1,0 +2,7 @@
+Sat Oct 9 09:04:24 UTC 2021 - Manuel Schnitzer <[email protected]>
+
+- updated to version 1.9.1
+
+ * Removed a forgotten debug statement in JSON precompilation
+
+-------------------------------------------------------------------
Old:
----
bootsnap-1.7.7.gem
New:
----
bootsnap-1.9.1.gem
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ rubygem-bootsnap.spec ++++++
--- /var/tmp/diff_new_pack.Sus3yL/_old 2021-10-11 15:32:31.602932452 +0200
+++ /var/tmp/diff_new_pack.Sus3yL/_new 2021-10-11 15:32:31.606932458 +0200
@@ -24,7 +24,7 @@
#
Name: rubygem-bootsnap
-Version: 1.7.7
+Version: 1.9.1
Release: 0
%define mod_name bootsnap
%define mod_full_name %{mod_name}-%{version}
++++++ bootsnap-1.7.7.gem -> bootsnap-1.9.1.gem ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/CHANGELOG.md new/CHANGELOG.md
--- old/CHANGELOG.md 2021-08-02 12:15:53.000000000 +0200
+++ new/CHANGELOG.md 2021-09-20 12:01:17.000000000 +0200
@@ -1,5 +1,21 @@
# Unreleased
+# 1.9.1
+
+* Removed a forgotten debug statement in JSON precompilation.
+
+# 1.9.0
+
+* Added a compilation cache for `JSON.load_file`. (#370)
+
+# 1.8.1
+
+* Fixed support for older Psych. (#369)
+
+# 1.8.0
+
+* Improve support for Pysch 4. (#368)
+
# 1.7.7
* Fix `require_relative` in evaled code on latest ruby 3.1.0-dev. (#366)
Binary files old/checksums.yaml.gz and new/checksums.yaml.gz differ
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/lib/bootsnap/cli.rb new/lib/bootsnap/cli.rb
--- old/lib/bootsnap/cli.rb 2021-08-02 12:15:53.000000000 +0200
+++ new/lib/bootsnap/cli.rb 2021-09-20 12:01:17.000000000 +0200
@@ -21,7 +21,7 @@
attr_reader :cache_dir, :argv
- attr_accessor :compile_gemfile, :exclude, :verbose, :iseq, :yaml, :jobs
+ attr_accessor :compile_gemfile, :exclude, :verbose, :iseq, :yaml, :json,
:jobs
def initialize(argv)
@argv = argv
@@ -32,37 +32,44 @@
self.jobs = Etc.nprocessors
self.iseq = true
self.yaml = true
+ self.json = true
end
def precompile_command(*sources)
require 'bootsnap/compile_cache/iseq'
require 'bootsnap/compile_cache/yaml'
+ require 'bootsnap/compile_cache/json'
fix_default_encoding do
Bootsnap::CompileCache::ISeq.cache_dir = self.cache_dir
Bootsnap::CompileCache::YAML.init!
Bootsnap::CompileCache::YAML.cache_dir = self.cache_dir
+ Bootsnap::CompileCache::JSON.init!
+ Bootsnap::CompileCache::JSON.cache_dir = self.cache_dir
@work_pool = WorkerPool.create(size: jobs, jobs: {
ruby: method(:precompile_ruby),
yaml: method(:precompile_yaml),
+ json: method(:precompile_json),
})
@work_pool.spawn
main_sources = sources.map { |d| File.expand_path(d) }
precompile_ruby_files(main_sources)
precompile_yaml_files(main_sources)
+ precompile_json_files(main_sources)
if compile_gemfile
# Some gems embed their tests, they're very unlikely to be loaded,
so not worth precompiling.
gem_exclude = Regexp.union([exclude, '/spec/', '/test/'].compact)
precompile_ruby_files($LOAD_PATH.map { |d| File.expand_path(d) },
exclude: gem_exclude)
- # Gems that include YAML files usually don't put them in `lib/`.
+ # Gems that include JSON or YAML files usually don't put them in
`lib/`.
# So we look at the gem root.
gem_pattern =
%r{^#{Regexp.escape(Bundler.bundle_path.to_s)}/?(?:bundler/)?gems\/[^/]+}
gem_paths = $LOAD_PATH.map { |p| p[gem_pattern] }.compact.uniq
precompile_yaml_files(gem_paths, exclude: gem_exclude)
+ precompile_json_files(gem_paths, exclude: gem_exclude)
end
if exitstatus = @work_pool.shutdown
@@ -137,6 +144,29 @@
end
end
+ def precompile_json_files(load_paths, exclude: self.exclude)
+ return unless json
+
+ load_paths.each do |path|
+ if !exclude || !exclude.match?(path)
+ list_files(path, '**/*.json').each do |json_file|
+ # We ignore hidden files to not match the various .config.json
files
+ if !File.basename(json_file).start_with?('.') && (!exclude ||
!exclude.match?(json_file))
+ @work_pool.push(:json, json_file)
+ end
+ end
+ end
+ end
+ end
+
+ def precompile_json(*json_files)
+ Array(json_files).each do |json_file|
+ if CompileCache::JSON.precompile(json_file, cache_dir: cache_dir)
+ STDERR.puts(json_file) if verbose
+ end
+ end
+ end
+
def precompile_ruby_files(load_paths, exclude: self.exclude)
return unless iseq
@@ -240,6 +270,11 @@
Disable YAML precompilation.
EOS
opts.on('--no-yaml', help) { self.yaml = false }
+
+ help = <<~EOS
+ Disable JSON precompilation.
+ EOS
+ opts.on('--no-json', help) { self.json = false }
end
end
end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/lib/bootsnap/compile_cache/json.rb
new/lib/bootsnap/compile_cache/json.rb
--- old/lib/bootsnap/compile_cache/json.rb 1970-01-01 01:00:00.000000000
+0100
+++ new/lib/bootsnap/compile_cache/json.rb 2021-09-20 12:01:17.000000000
+0200
@@ -0,0 +1,79 @@
+# frozen_string_literal: true
+require('bootsnap/bootsnap')
+
+module Bootsnap
+ module CompileCache
+ module JSON
+ class << self
+ attr_accessor(:msgpack_factory, :cache_dir, :supported_options)
+
+ def input_to_storage(payload, _)
+ obj = ::JSON.parse(payload)
+ msgpack_factory.dump(obj)
+ end
+
+ def storage_to_output(data, kwargs)
+ if kwargs && kwargs.key?(:symbolize_names)
+ kwargs[:symbolize_keys] = kwargs.delete(:symbolize_names)
+ end
+ msgpack_factory.load(data, kwargs)
+ end
+
+ def input_to_output(data, kwargs)
+ ::JSON.parse(data, **(kwargs || {}))
+ end
+
+ def precompile(path, cache_dir: self.cache_dir)
+ Bootsnap::CompileCache::Native.precompile(
+ cache_dir,
+ path.to_s,
+ self,
+ )
+ end
+
+ def install!(cache_dir)
+ self.cache_dir = cache_dir
+ init!
+ if ::JSON.respond_to?(:load_file)
+ ::JSON.singleton_class.prepend(Patch)
+ end
+ end
+
+ def init!
+ require('json')
+ require('msgpack')
+
+ self.msgpack_factory = MessagePack::Factory.new
+ self.supported_options = [:symbolize_names]
+ if ::JSON.parse('["foo"]', freeze: true).first.frozen?
+ self.supported_options = [:freeze]
+ end
+ self.supported_options.freeze
+ end
+ end
+
+ module Patch
+ def load_file(path, *args)
+ return super if args.size > 1
+ if kwargs = args.first
+ return super unless kwargs.is_a?(Hash)
+ return super unless (kwargs.keys -
::Bootsnap::CompileCache::JSON.supported_options).empty?
+ end
+
+ begin
+ ::Bootsnap::CompileCache::Native.fetch(
+ Bootsnap::CompileCache::JSON.cache_dir,
+ File.realpath(path),
+ ::Bootsnap::CompileCache::JSON,
+ kwargs,
+ )
+ rescue Errno::EACCES
+ ::Bootsnap::CompileCache.permission_error(path)
+ end
+ end
+
+ ruby2_keywords :load_file if respond_to?(:ruby2_keywords, true)
+ end
+ end
+ end
+end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/lib/bootsnap/compile_cache/yaml.rb
new/lib/bootsnap/compile_cache/yaml.rb
--- old/lib/bootsnap/compile_cache/yaml.rb 2021-08-02 12:15:53.000000000
+0200
+++ new/lib/bootsnap/compile_cache/yaml.rb 2021-09-20 12:01:17.000000000
+0200
@@ -23,7 +23,11 @@
end
def input_to_output(data, kwargs)
- ::YAML.load(data, **(kwargs || {}))
+ if ::YAML.respond_to?(:unsafe_load)
+ ::YAML.unsafe_load(data, **(kwargs || {}))
+ else
+ ::YAML.load(data, **(kwargs || {}))
+ end
end
def strict_load(payload, *args)
@@ -52,6 +56,13 @@
require('msgpack')
require('date')
+ if Patch.method_defined?(:unsafe_load_file) &&
!::YAML.respond_to?(:unsafe_load_file)
+ Patch.send(:remove_method, :unsafe_load_file)
+ end
+ if Patch.method_defined?(:load_file) && ::YAML::VERSION >= '4'
+ Patch.send(:remove_method, :load_file)
+ end
+
# MessagePack serializes symbols as strings by default.
# We want them to roundtrip cleanly, so we use a custom factory.
# see: https://github.com/msgpack/msgpack-ruby/pull/122
@@ -126,6 +137,27 @@
end
ruby2_keywords :load_file if respond_to?(:ruby2_keywords, true)
+
+ def unsafe_load_file(path, *args)
+ return super if args.size > 1
+ if kwargs = args.first
+ return super unless kwargs.is_a?(Hash)
+ return super unless (kwargs.keys -
::Bootsnap::CompileCache::YAML.supported_options).empty?
+ end
+
+ begin
+ ::Bootsnap::CompileCache::Native.fetch(
+ Bootsnap::CompileCache::YAML.cache_dir,
+ File.realpath(path),
+ ::Bootsnap::CompileCache::YAML,
+ kwargs,
+ )
+ rescue Errno::EACCES
+ ::Bootsnap::CompileCache.permission_error(path)
+ end
+ end
+
+ ruby2_keywords :unsafe_load_file if respond_to?(:ruby2_keywords, true)
end
end
end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/lib/bootsnap/compile_cache.rb
new/lib/bootsnap/compile_cache.rb
--- old/lib/bootsnap/compile_cache.rb 2021-08-02 12:15:53.000000000 +0200
+++ new/lib/bootsnap/compile_cache.rb 2021-09-20 12:01:17.000000000 +0200
@@ -4,7 +4,7 @@
Error = Class.new(StandardError)
PermissionError = Class.new(Error)
- def self.setup(cache_dir:, iseq:, yaml:)
+ def self.setup(cache_dir:, iseq:, yaml:, json:)
if iseq
if supported?
require_relative('compile_cache/iseq')
@@ -22,6 +22,15 @@
warn("[bootsnap/setup] YAML parsing caching is not supported on this
implementation of Ruby")
end
end
+
+ if json
+ if supported?
+ require_relative('compile_cache/json')
+ Bootsnap::CompileCache::JSON.install!(cache_dir)
+ elsif $VERBOSE
+ warn("[bootsnap/setup] JSON parsing caching is not supported on this
implementation of Ruby")
+ end
+ end
end
def self.permission_error(path)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/lib/bootsnap/version.rb new/lib/bootsnap/version.rb
--- old/lib/bootsnap/version.rb 2021-08-02 12:15:53.000000000 +0200
+++ new/lib/bootsnap/version.rb 2021-09-20 12:01:17.000000000 +0200
@@ -1,4 +1,4 @@
# frozen_string_literal: true
module Bootsnap
- VERSION = "1.7.7"
+ VERSION = "1.9.1"
end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/lib/bootsnap.rb new/lib/bootsnap.rb
--- old/lib/bootsnap.rb 2021-08-02 12:15:53.000000000 +0200
+++ new/lib/bootsnap.rb 2021-09-20 12:01:17.000000000 +0200
@@ -43,7 +43,8 @@
autoload_paths_cache: nil,
disable_trace: nil,
compile_cache_iseq: true,
- compile_cache_yaml: true
+ compile_cache_yaml: true,
+ compile_cache_json: true
)
unless autoload_paths_cache.nil?
warn "[DEPRECATED] Bootsnap's `autoload_paths_cache:` option is
deprecated and will be removed. " \
@@ -69,7 +70,8 @@
Bootsnap::CompileCache.setup(
cache_dir: cache_dir + '/bootsnap/compile-cache',
iseq: compile_cache_iseq,
- yaml: compile_cache_yaml
+ yaml: compile_cache_yaml,
+ json: compile_cache_json,
)
end
@@ -113,6 +115,7 @@
load_path_cache: !ENV['DISABLE_BOOTSNAP_LOAD_PATH_CACHE'],
compile_cache_iseq: !ENV['DISABLE_BOOTSNAP_COMPILE_CACHE'] &&
iseq_cache_supported?,
compile_cache_yaml: !ENV['DISABLE_BOOTSNAP_COMPILE_CACHE'],
+ compile_cache_json: !ENV['DISABLE_BOOTSNAP_COMPILE_CACHE'],
)
if ENV['BOOTSNAP_LOG']
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/metadata new/metadata
--- old/metadata 2021-08-02 12:15:53.000000000 +0200
+++ new/metadata 2021-09-20 12:01:17.000000000 +0200
@@ -1,14 +1,14 @@
--- !ruby/object:Gem::Specification
name: bootsnap
version: !ruby/object:Gem::Version
- version: 1.7.7
+ version: 1.9.1
platform: ruby
authors:
- Burke Libbey
autorequire:
bindir: exe
cert_chain: []
-date: 2021-08-02 00:00:00.000000000 Z
+date: 2021-09-20 00:00:00.000000000 Z
dependencies:
- !ruby/object:Gem::Dependency
name: bundler
@@ -116,6 +116,7 @@
- lib/bootsnap/cli/worker_pool.rb
- lib/bootsnap/compile_cache.rb
- lib/bootsnap/compile_cache/iseq.rb
+- lib/bootsnap/compile_cache/json.rb
- lib/bootsnap/compile_cache/yaml.rb
- lib/bootsnap/explicit_require.rb
- lib/bootsnap/load_path_cache.rb