/usr/lib/ruby/vendor_ruby/bundler/injector.rb is in ruby-bundler 1.13.6-2.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 | # frozen_string_literal: true
module Bundler
class Injector
def self.inject(new_deps, options = {})
injector = new(new_deps, options)
injector.inject(Bundler.default_gemfile, Bundler.default_lockfile)
end
def initialize(new_deps, options = {})
@new_deps = new_deps
@options = options
end
def inject(gemfile_path, lockfile_path)
if Bundler.settings[:frozen]
# ensure the lock and Gemfile are synced
Bundler.definition.ensure_equivalent_gemfile_and_lockfile(true)
# temporarily remove frozen while we inject
frozen = Bundler.settings.delete(:frozen)
end
# evaluate the Gemfile we have now
builder = Dsl.new
builder.eval_gemfile(gemfile_path)
# don't inject any gems that are already in the Gemfile
@new_deps -= builder.dependencies
# add new deps to the end of the in-memory Gemfile
builder.eval_gemfile("injected gems", new_gem_lines) if @new_deps.any?
# resolve to see if the new deps broke anything
definition = builder.to_definition(lockfile_path, {})
definition.resolve_remotely!
# since nothing broke, we can add those gems to the gemfile
append_to(gemfile_path) if @new_deps.any?
# since we resolved successfully, write out the lockfile
definition.lock(Bundler.default_lockfile)
# return an array of the deps that we added
return @new_deps
ensure
Bundler.settings[:frozen] = "1" if frozen
end
private
def new_gem_lines
@new_deps.map do |d|
name = "'#{d.name}'"
requirement = ", '#{d.requirement}'"
group = ", :group => #{d.groups.inspect}" if d.groups != Array(:default)
source = ", :source => '#{d.source}'" unless d.source.nil?
%(gem #{name}#{requirement}#{group}#{source})
end.join("\n")
end
def append_to(gemfile_path)
gemfile_path.open("a") do |f|
f.puts
if @options["timestamp"] || @options["timestamp"].nil?
f.puts "# Added at #{Time.now} by #{`whoami`.chomp}:"
end
f.puts new_gem_lines
end
end
end
end
|