def generate_bundler_executable_stubs(spec, options = {})
if options[:binstubs_cmd] && spec.executables.empty?
options = {}
spec.runtime_dependencies.each do |dep|
bins = @definition.specs[dep].first.executables
options[dep.name] = bins unless bins.empty?
end
if options.any?
Bundler.ui.warn "#{spec.name} has no executables, but you may want " +
"one from a gem it depends on."
options.each{|name,bins| Bundler.ui.warn " #{name} has: #{bins.join(', ')}" }
else
Bundler.ui.warn "There are no executables for the gem #{spec.name}."
end
return
end
bin_path = bin_path = Bundler.bin_path
template = template = File.read(File.expand_path('../templates/Executable', __FILE__))
relative_gemfile_path = relative_gemfile_path = Bundler.default_gemfile.relative_path_from(bin_path)
ruby_command = ruby_command = Thor::Util.ruby_command
exists = []
spec.executables.each do |executable|
next if executable == "bundle"
binstub_path = "#{bin_path}/#{executable}"
if File.exists?(binstub_path) && !options[:force]
exists << executable
next
end
File.open(binstub_path, 'w', 0777 & ~File.umask) do |f|
f.puts ERB.new(template, nil, '-').result(binding)
end
end
if options[:binstubs_cmd] && exists.any?
case exists.size
when 1
Bundler.ui.warn "Skipped #{exists[0]} since it already exists."
when 2
Bundler.ui.warn "Skipped #{exists.join(' and ')} since they already exist."
else
items = exists[0...-1].empty? ? nil : exists[0...-1].join(', ')
skipped = [items, exists[-1]].compact.join(' and ')
Bundler.ui.warn "Skipped #{skipped} since they already exist."
end
Bundler.ui.warn "If you want to overwrite skipped stubs, use --force."
end
end