mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
bc6c1e0e25
This allows the file to be created without copying permissions from Bundler's installation source. The previous behaviour was noticed after installing Ruby through brew, and using bundle init, which yielded a read-only Gemfile. https://github.com/rubygems/rubygems/commit/839a06851d
51 lines
1.3 KiB
Ruby
51 lines
1.3 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
module Bundler
|
|
class CLI::Init
|
|
attr_reader :options
|
|
def initialize(options)
|
|
@options = options
|
|
end
|
|
|
|
def run
|
|
if File.exist?(gemfile)
|
|
Bundler.ui.error "#{gemfile} already exists at #{File.expand_path(gemfile)}"
|
|
exit 1
|
|
end
|
|
|
|
unless File.writable?(Dir.pwd)
|
|
Bundler.ui.error "Can not create #{gemfile} as the current directory is not writable."
|
|
exit 1
|
|
end
|
|
|
|
if options[:gemspec]
|
|
gemspec = File.expand_path(options[:gemspec])
|
|
unless File.exist?(gemspec)
|
|
Bundler.ui.error "Gem specification #{gemspec} doesn't exist"
|
|
exit 1
|
|
end
|
|
|
|
spec = Bundler.load_gemspec_uncached(gemspec)
|
|
|
|
File.open(gemfile, "wb") do |file|
|
|
file << "# Generated from #{gemspec}\n"
|
|
file << spec.to_gemfile
|
|
end
|
|
else
|
|
File.open(File.expand_path("../templates/#{gemfile}", __dir__), "r") do |template|
|
|
File.open(gemfile, "wb") do |destination|
|
|
IO.copy_stream(template, destination)
|
|
end
|
|
end
|
|
end
|
|
|
|
puts "Writing new #{gemfile} to #{SharedHelpers.pwd}/#{gemfile}"
|
|
end
|
|
|
|
private
|
|
|
|
def gemfile
|
|
@gemfile ||= Bundler.preferred_gemfile_name
|
|
end
|
|
end
|
|
end
|