mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
Merge Bundler 2.1.0.pre.3
Features: - Add caller information to some deprecation messages to make them easier to fix [#7361](https://github.com/bundler/bundler/pull/7361) - Reconcile `bundle cache` vs `bundle package` everywhere. Now in docs, CLI help and everywhere else `bundle cache` is the preferred version and `bundle package` remains as an alias [#7389](https://github.com/bundler/bundler/pull/7389) - Display some basic `bundler` documentation together with ruby's RDoc based documentation [#7394](https://github.com/bundler/bundler/pull/7394) Bugfixes: - Fix typos deprecation message and upgrading docs [#7374](https://github.com/bundler/bundler/pull/7374) - Deprecation warnings about `taint` usage on ruby 2.7 [#7385](https://github.com/bundler/bundler/pull/7385) - Fix `--help` flag not correctly delegating to `man` when used with command aliases [#7388](https://github.com/bundler/bundler/pull/7388) - `bundle add` should cache newly added gems if an application cache exists [#7393](https://github.com/bundler/bundler/pull/7393) - Stop using an insecure folder as a "fallback home" when user home is not defined [#7416](https://github.com/bundler/bundler/pull/7416) - Fix `bundler/inline` warning about `Bundler.root` redefinition [#7417](https://github.com/bundler/bundler/pull/7417)
This commit is contained in:
parent
fd69f82675
commit
7585bc3187
Notes:
git
2019-11-11 18:56:53 +09:00
158 changed files with 1920 additions and 1521 deletions
111
lib/bundler.rb
111
lib/bundler.rb
|
@ -14,6 +14,25 @@ require_relative "bundler/constants"
|
||||||
require_relative "bundler/current_ruby"
|
require_relative "bundler/current_ruby"
|
||||||
require_relative "bundler/build_metadata"
|
require_relative "bundler/build_metadata"
|
||||||
|
|
||||||
|
# Bundler provides a consistent environment for Ruby projects by
|
||||||
|
# tracking and installing the exact gems and versions that are needed.
|
||||||
|
#
|
||||||
|
# Since Ruby 2.6, Bundler is a part of Ruby's standard library.
|
||||||
|
#
|
||||||
|
# Bunder is used by creating _gemfiles_ listing all the project dependencies
|
||||||
|
# and (optionally) their versions and then using
|
||||||
|
#
|
||||||
|
# require 'bundler/setup'
|
||||||
|
#
|
||||||
|
# or Bundler.setup to setup environment where only specified gems and their
|
||||||
|
# specified versions could be used.
|
||||||
|
#
|
||||||
|
# See {Bundler website}[https://bundler.io/docs.html] for extensive documentation
|
||||||
|
# on gemfiles creation and Bundler usage.
|
||||||
|
#
|
||||||
|
# As a standard library inside project, Bundler could be used for introspection
|
||||||
|
# of loaded and required modules.
|
||||||
|
#
|
||||||
module Bundler
|
module Bundler
|
||||||
environment_preserver = EnvironmentPreserver.new(ENV, EnvironmentPreserver::BUNDLER_KEYS)
|
environment_preserver = EnvironmentPreserver.new(ENV, EnvironmentPreserver::BUNDLER_KEYS)
|
||||||
ORIGINAL_ENV = environment_preserver.restore
|
ORIGINAL_ENV = environment_preserver.restore
|
||||||
|
@ -64,11 +83,11 @@ module Bundler
|
||||||
end
|
end
|
||||||
|
|
||||||
def ui
|
def ui
|
||||||
(defined?(@ui) && @ui) || (self.ui = UI::Silent.new)
|
(defined?(@ui) && @ui) || (self.ui = UI::Shell.new)
|
||||||
end
|
end
|
||||||
|
|
||||||
def ui=(ui)
|
def ui=(ui)
|
||||||
Bundler.rubygems.ui = ui ? UI::RGProxy.new(ui) : nil
|
Bundler.rubygems.ui = UI::RGProxy.new(ui)
|
||||||
@ui = ui
|
@ui = ui
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -91,6 +110,33 @@ module Bundler
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# Turns on the Bundler runtime. After +Bundler.setup+ call, all +load+ or
|
||||||
|
# +require+ of the gems would be allowed only if they are part of
|
||||||
|
# the Gemfile or Ruby's standard library. If the versions specified
|
||||||
|
# in Gemfile, only those versions would be loaded.
|
||||||
|
#
|
||||||
|
# Assuming Gemfile
|
||||||
|
#
|
||||||
|
# gem 'first_gem', '= 1.0'
|
||||||
|
# group :test do
|
||||||
|
# gem 'second_gem', '= 1.0'
|
||||||
|
# end
|
||||||
|
#
|
||||||
|
# The code using Bundler.setup works as follows:
|
||||||
|
#
|
||||||
|
# require 'third_gem' # allowed, required from global gems
|
||||||
|
# require 'first_gem' # allowed, loads the last installed version
|
||||||
|
# Bundler.setup
|
||||||
|
# require 'fourth_gem' # fails with LoadError
|
||||||
|
# require 'second_gem' # loads exactly version 1.0
|
||||||
|
#
|
||||||
|
# +Bundler.setup+ can be called only once, all subsequent calls are no-op.
|
||||||
|
#
|
||||||
|
# If _groups_ list is provided, only gems from specified groups would
|
||||||
|
# be allowed (gems specified outside groups belong to special +:default+ group).
|
||||||
|
#
|
||||||
|
# To require all gems from Gemfile (or only some groups), see Bundler.require.
|
||||||
|
#
|
||||||
def setup(*groups)
|
def setup(*groups)
|
||||||
# Return if all groups are already loaded
|
# Return if all groups are already loaded
|
||||||
return @setup if defined?(@setup) && @setup
|
return @setup if defined?(@setup) && @setup
|
||||||
|
@ -107,6 +153,24 @@ module Bundler
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# Setups Bundler environment (see Bundler.setup) if it is not already set,
|
||||||
|
# and loads all gems from groups specified. Unlike ::setup, can be called
|
||||||
|
# multiple times with different groups (if they were allowed by setup).
|
||||||
|
#
|
||||||
|
# Assuming Gemfile
|
||||||
|
#
|
||||||
|
# gem 'first_gem', '= 1.0'
|
||||||
|
# group :test do
|
||||||
|
# gem 'second_gem', '= 1.0'
|
||||||
|
# end
|
||||||
|
#
|
||||||
|
# The code will work as follows:
|
||||||
|
#
|
||||||
|
# Bundler.setup # allow all groups
|
||||||
|
# Bundler.require(:default) # requires only first_gem
|
||||||
|
# # ...later
|
||||||
|
# Bundler.require(:test) # requires second_gem
|
||||||
|
#
|
||||||
def require(*groups)
|
def require(*groups)
|
||||||
setup(*groups).require(*groups)
|
setup(*groups).require(*groups)
|
||||||
end
|
end
|
||||||
|
@ -116,7 +180,7 @@ module Bundler
|
||||||
end
|
end
|
||||||
|
|
||||||
def environment
|
def environment
|
||||||
SharedHelpers.major_deprecation 2, "Bundler.environment has been removed in favor of Bundler.load"
|
SharedHelpers.major_deprecation 2, "Bundler.environment has been removed in favor of Bundler.load", :print_caller_location => true
|
||||||
load
|
load
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -167,8 +231,7 @@ module Bundler
|
||||||
end
|
end
|
||||||
|
|
||||||
if warning
|
if warning
|
||||||
Kernel.send(:require, "etc")
|
user_home = tmp_home_path(warning)
|
||||||
user_home = tmp_home_path(Etc.getlogin, warning)
|
|
||||||
Bundler.ui.warn "#{warning}\nBundler will use `#{user_home}' as your home directory temporarily.\n"
|
Bundler.ui.warn "#{warning}\nBundler will use `#{user_home}' as your home directory temporarily.\n"
|
||||||
user_home
|
user_home
|
||||||
else
|
else
|
||||||
|
@ -177,21 +240,6 @@ module Bundler
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def tmp_home_path(login, warning)
|
|
||||||
login ||= "unknown"
|
|
||||||
Kernel.send(:require, "tmpdir")
|
|
||||||
path = Pathname.new(Dir.tmpdir).join("bundler", "home")
|
|
||||||
SharedHelpers.filesystem_access(path) do |tmp_home_path|
|
|
||||||
unless tmp_home_path.exist?
|
|
||||||
tmp_home_path.mkpath
|
|
||||||
tmp_home_path.chmod(0o777)
|
|
||||||
end
|
|
||||||
tmp_home_path.join(login).tap(&:mkpath)
|
|
||||||
end
|
|
||||||
rescue RuntimeError => e
|
|
||||||
raise e.exception("#{warning}\nBundler also failed to create a temporary home directory at `#{path}':\n#{e}")
|
|
||||||
end
|
|
||||||
|
|
||||||
def user_bundle_path(dir = "home")
|
def user_bundle_path(dir = "home")
|
||||||
env_var, fallback = case dir
|
env_var, fallback = case dir
|
||||||
when "home"
|
when "home"
|
||||||
|
@ -282,7 +330,8 @@ EOF
|
||||||
Bundler::SharedHelpers.major_deprecation(
|
Bundler::SharedHelpers.major_deprecation(
|
||||||
2,
|
2,
|
||||||
"`Bundler.clean_env` has been deprecated in favor of `Bundler.unbundled_env`. " \
|
"`Bundler.clean_env` has been deprecated in favor of `Bundler.unbundled_env`. " \
|
||||||
"If you instead want the environment before bundler was originally loaded, use `Bundler.original_env`"
|
"If you instead want the environment before bundler was originally loaded, use `Bundler.original_env`",
|
||||||
|
:print_caller_location => true
|
||||||
)
|
)
|
||||||
|
|
||||||
unbundled_env
|
unbundled_env
|
||||||
|
@ -321,7 +370,8 @@ EOF
|
||||||
Bundler::SharedHelpers.major_deprecation(
|
Bundler::SharedHelpers.major_deprecation(
|
||||||
2,
|
2,
|
||||||
"`Bundler.with_clean_env` has been deprecated in favor of `Bundler.with_unbundled_env`. " \
|
"`Bundler.with_clean_env` has been deprecated in favor of `Bundler.with_unbundled_env`. " \
|
||||||
"If you instead want the environment before bundler was originally loaded, use `Bundler.with_original_env`"
|
"If you instead want the environment before bundler was originally loaded, use `Bundler.with_original_env`",
|
||||||
|
:print_caller_location => true
|
||||||
)
|
)
|
||||||
|
|
||||||
with_env(unbundled_env) { yield }
|
with_env(unbundled_env) { yield }
|
||||||
|
@ -342,7 +392,8 @@ EOF
|
||||||
Bundler::SharedHelpers.major_deprecation(
|
Bundler::SharedHelpers.major_deprecation(
|
||||||
2,
|
2,
|
||||||
"`Bundler.clean_system` has been deprecated in favor of `Bundler.unbundled_system`. " \
|
"`Bundler.clean_system` has been deprecated in favor of `Bundler.unbundled_system`. " \
|
||||||
"If you instead want to run the command in the environment before bundler was originally loaded, use `Bundler.original_system`"
|
"If you instead want to run the command in the environment before bundler was originally loaded, use `Bundler.original_system`",
|
||||||
|
:print_caller_location => true
|
||||||
)
|
)
|
||||||
|
|
||||||
with_env(unbundled_env) { Kernel.system(*args) }
|
with_env(unbundled_env) { Kernel.system(*args) }
|
||||||
|
@ -363,7 +414,8 @@ EOF
|
||||||
Bundler::SharedHelpers.major_deprecation(
|
Bundler::SharedHelpers.major_deprecation(
|
||||||
2,
|
2,
|
||||||
"`Bundler.clean_exec` has been deprecated in favor of `Bundler.unbundled_exec`. " \
|
"`Bundler.clean_exec` has been deprecated in favor of `Bundler.unbundled_exec`. " \
|
||||||
"If you instead want to exec to a command in the environment before bundler was originally loaded, use `Bundler.original_exec`"
|
"If you instead want to exec to a command in the environment before bundler was originally loaded, use `Bundler.original_exec`",
|
||||||
|
:print_caller_location => true
|
||||||
)
|
)
|
||||||
|
|
||||||
with_env(unbundled_env) { Kernel.exec(*args) }
|
with_env(unbundled_env) { Kernel.exec(*args) }
|
||||||
|
@ -608,6 +660,17 @@ EOF
|
||||||
Bundler.rubygems.clear_paths
|
Bundler.rubygems.clear_paths
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def tmp_home_path(warning)
|
||||||
|
Kernel.send(:require, "tmpdir")
|
||||||
|
SharedHelpers.filesystem_access(Dir.tmpdir) do
|
||||||
|
path = Bundler.tmp
|
||||||
|
at_exit { Bundler.rm_rf(path) }
|
||||||
|
path
|
||||||
|
end
|
||||||
|
rescue RuntimeError => e
|
||||||
|
raise e.exception("#{warning}\nBundler also failed to create a temporary home directory':\n#{e}")
|
||||||
|
end
|
||||||
|
|
||||||
# @param env [Hash]
|
# @param env [Hash]
|
||||||
def with_env(env)
|
def with_env(env)
|
||||||
backup = ENV.to_hash
|
backup = ENV.to_hash
|
||||||
|
|
|
@ -9,15 +9,19 @@ module Bundler
|
||||||
package_name "Bundler"
|
package_name "Bundler"
|
||||||
|
|
||||||
AUTO_INSTALL_CMDS = %w[show binstubs outdated exec open console licenses clean].freeze
|
AUTO_INSTALL_CMDS = %w[show binstubs outdated exec open console licenses clean].freeze
|
||||||
PARSEABLE_COMMANDS = %w[
|
PARSEABLE_COMMANDS = %w[check config help exec platform show version].freeze
|
||||||
check config help exec platform show version
|
|
||||||
].freeze
|
COMMAND_ALIASES = {
|
||||||
|
"check" => "c",
|
||||||
|
"install" => "i",
|
||||||
|
"list" => "ls",
|
||||||
|
"exec" => ["e", "ex", "exe"],
|
||||||
|
"cache" => ["package", "pack"],
|
||||||
|
"version" => ["-v", "--version"],
|
||||||
|
}.freeze
|
||||||
|
|
||||||
def self.start(*)
|
def self.start(*)
|
||||||
super
|
super
|
||||||
rescue Exception => e # rubocop:disable Lint/RescueException
|
|
||||||
Bundler.ui = UI::Shell.new
|
|
||||||
raise e
|
|
||||||
ensure
|
ensure
|
||||||
Bundler::SharedHelpers.print_major_deprecations!
|
Bundler::SharedHelpers.print_major_deprecations!
|
||||||
end
|
end
|
||||||
|
@ -29,6 +33,24 @@ module Bundler
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def self.all_aliases
|
||||||
|
@all_aliases ||= begin
|
||||||
|
command_aliases = {}
|
||||||
|
|
||||||
|
COMMAND_ALIASES.each do |name, aliases|
|
||||||
|
Array(aliases).each do |one_alias|
|
||||||
|
command_aliases[one_alias] = name
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
command_aliases
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def self.aliases_for(command_name)
|
||||||
|
COMMAND_ALIASES.select {|k, _| k == command_name }.invert
|
||||||
|
end
|
||||||
|
|
||||||
def initialize(*args)
|
def initialize(*args)
|
||||||
super
|
super
|
||||||
|
|
||||||
|
@ -68,9 +90,7 @@ module Bundler
|
||||||
version
|
version
|
||||||
Bundler.ui.info "\n"
|
Bundler.ui.info "\n"
|
||||||
|
|
||||||
primary_commands = ["install", "update",
|
primary_commands = ["install", "update", "cache", "exec", "config", "help"]
|
||||||
Bundler.feature_flag.bundler_3_mode? ? "cache" : "package",
|
|
||||||
"exec", "config", "help"]
|
|
||||||
|
|
||||||
list = self.class.printable_commands(true)
|
list = self.class.printable_commands(true)
|
||||||
by_name = list.group_by {|name, _message| name.match(/^bundle (\w+)/)[1] }
|
by_name = list.group_by {|name, _message| name.match(/^bundle (\w+)/)[1] }
|
||||||
|
@ -154,7 +174,6 @@ module Bundler
|
||||||
"Use the specified gemfile instead of Gemfile"
|
"Use the specified gemfile instead of Gemfile"
|
||||||
method_option "path", :type => :string, :banner =>
|
method_option "path", :type => :string, :banner =>
|
||||||
"Specify a different path than the system default ($BUNDLE_PATH or $GEM_HOME).#{" Bundler will remember this value for future installs on this machine" unless Bundler.feature_flag.forget_cli_options?}"
|
"Specify a different path than the system default ($BUNDLE_PATH or $GEM_HOME).#{" Bundler will remember this value for future installs on this machine" unless Bundler.feature_flag.forget_cli_options?}"
|
||||||
map "c" => "check"
|
|
||||||
def check
|
def check
|
||||||
remembered_flag_deprecation("path")
|
remembered_flag_deprecation("path")
|
||||||
|
|
||||||
|
@ -162,6 +181,8 @@ module Bundler
|
||||||
Check.new(options).run
|
Check.new(options).run
|
||||||
end
|
end
|
||||||
|
|
||||||
|
map aliases_for("check")
|
||||||
|
|
||||||
desc "remove [GEM [GEM ...]]", "Removes gems from the Gemfile"
|
desc "remove [GEM [GEM ...]]", "Removes gems from the Gemfile"
|
||||||
long_desc <<-D
|
long_desc <<-D
|
||||||
Removes the given gems from the Gemfile while ensuring that the resulting Gemfile is still valid. If the gem is not found, Bundler prints a error message and if gem could not be removed due to any reason Bundler will display a warning.
|
Removes the given gems from the Gemfile while ensuring that the resulting Gemfile is still valid. If the gem is not found, Bundler prints a error message and if gem could not be removed due to any reason Bundler will display a warning.
|
||||||
|
@ -223,7 +244,6 @@ module Bundler
|
||||||
"Exclude gems that are part of the specified named group."
|
"Exclude gems that are part of the specified named group."
|
||||||
method_option "with", :type => :array, :banner =>
|
method_option "with", :type => :array, :banner =>
|
||||||
"Include gems that are part of the specified named group."
|
"Include gems that are part of the specified named group."
|
||||||
map "i" => "install"
|
|
||||||
def install
|
def install
|
||||||
SharedHelpers.major_deprecation(2, "The `--force` option has been renamed to `--redownload`") if ARGV.include?("--force")
|
SharedHelpers.major_deprecation(2, "The `--force` option has been renamed to `--redownload`") if ARGV.include?("--force")
|
||||||
|
|
||||||
|
@ -237,6 +257,8 @@ module Bundler
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
map aliases_for("install")
|
||||||
|
|
||||||
desc "update [OPTIONS]", "Update the current environment"
|
desc "update [OPTIONS]", "Update the current environment"
|
||||||
long_desc <<-D
|
long_desc <<-D
|
||||||
Update will install the newest versions of the gems listed in the Gemfile. Use
|
Update will install the newest versions of the gems listed in the Gemfile. Use
|
||||||
|
@ -328,7 +350,7 @@ module Bundler
|
||||||
List.new(options).run
|
List.new(options).run
|
||||||
end
|
end
|
||||||
|
|
||||||
map %w[ls] => "list"
|
map aliases_for("list")
|
||||||
|
|
||||||
desc "info GEM [OPTIONS]", "Show information for the given gem"
|
desc "info GEM [OPTIONS]", "Show information for the given gem"
|
||||||
method_option "path", :type => :boolean, :banner => "Print full path to gem"
|
method_option "path", :type => :boolean, :banner => "Print full path to gem"
|
||||||
|
@ -412,7 +434,7 @@ module Bundler
|
||||||
Outdated.new(options, gems).run
|
Outdated.new(options, gems).run
|
||||||
end
|
end
|
||||||
|
|
||||||
desc "#{Bundler.feature_flag.bundler_3_mode? ? :cache : :package} [OPTIONS]", "Locks and then caches all of the gems into vendor/cache"
|
desc "cache [OPTIONS]", "Locks and then caches all of the gems into vendor/cache"
|
||||||
unless Bundler.feature_flag.cache_all?
|
unless Bundler.feature_flag.cache_all?
|
||||||
method_option "all", :type => :boolean,
|
method_option "all", :type => :boolean,
|
||||||
:banner => "Include all sources (including path and git)."
|
:banner => "Include all sources (including path and git)."
|
||||||
|
@ -421,24 +443,25 @@ module Bundler
|
||||||
method_option "cache-path", :type => :string, :banner =>
|
method_option "cache-path", :type => :string, :banner =>
|
||||||
"Specify a different cache path than the default (vendor/cache)."
|
"Specify a different cache path than the default (vendor/cache)."
|
||||||
method_option "gemfile", :type => :string, :banner => "Use the specified gemfile instead of Gemfile"
|
method_option "gemfile", :type => :string, :banner => "Use the specified gemfile instead of Gemfile"
|
||||||
method_option "no-install", :type => :boolean, :banner => "Don't install the gems, only the package."
|
method_option "no-install", :type => :boolean, :banner => "Don't install the gems, only update the cache."
|
||||||
method_option "no-prune", :type => :boolean, :banner => "Don't remove stale gems from the cache."
|
method_option "no-prune", :type => :boolean, :banner => "Don't remove stale gems from the cache."
|
||||||
method_option "path", :type => :string, :banner =>
|
method_option "path", :type => :string, :banner =>
|
||||||
"Specify a different path than the system default ($BUNDLE_PATH or $GEM_HOME).#{" Bundler will remember this value for future installs on this machine" unless Bundler.feature_flag.forget_cli_options?}"
|
"Specify a different path than the system default ($BUNDLE_PATH or $GEM_HOME).#{" Bundler will remember this value for future installs on this machine" unless Bundler.feature_flag.forget_cli_options?}"
|
||||||
method_option "quiet", :type => :boolean, :banner => "Only output warnings and errors."
|
method_option "quiet", :type => :boolean, :banner => "Only output warnings and errors."
|
||||||
method_option "frozen", :type => :boolean, :banner =>
|
method_option "frozen", :type => :boolean, :banner =>
|
||||||
"Do not allow the Gemfile.lock to be updated after this package operation's install"
|
"Do not allow the Gemfile.lock to be updated after this bundle cache operation's install"
|
||||||
long_desc <<-D
|
long_desc <<-D
|
||||||
The package command will copy the .gem files for every gem in the bundle into the
|
The cache command will copy the .gem files for every gem in the bundle into the
|
||||||
directory ./vendor/cache. If you then check that directory into your source
|
directory ./vendor/cache. If you then check that directory into your source
|
||||||
control repository, others who check out your source will be able to install the
|
control repository, others who check out your source will be able to install the
|
||||||
bundle without having to download any additional gems.
|
bundle without having to download any additional gems.
|
||||||
D
|
D
|
||||||
def package
|
def cache
|
||||||
require_relative "cli/package"
|
require_relative "cli/cache"
|
||||||
Package.new(options).run
|
Cache.new(options).run
|
||||||
end
|
end
|
||||||
map %w[cache pack] => :package
|
|
||||||
|
map aliases_for("cache")
|
||||||
|
|
||||||
desc "exec [OPTIONS]", "Run the command in context of the bundle"
|
desc "exec [OPTIONS]", "Run the command in context of the bundle"
|
||||||
method_option :keep_file_descriptors, :type => :boolean, :default => false
|
method_option :keep_file_descriptors, :type => :boolean, :default => false
|
||||||
|
@ -448,12 +471,13 @@ module Bundler
|
||||||
bundle exec you can require and call the bundled gems as if they were installed
|
bundle exec you can require and call the bundled gems as if they were installed
|
||||||
into the system wide RubyGems repository.
|
into the system wide RubyGems repository.
|
||||||
D
|
D
|
||||||
map "e" => "exec"
|
|
||||||
def exec(*args)
|
def exec(*args)
|
||||||
require_relative "cli/exec"
|
require_relative "cli/exec"
|
||||||
Exec.new(options, args).run
|
Exec.new(options, args).run
|
||||||
end
|
end
|
||||||
|
|
||||||
|
map aliases_for("exec")
|
||||||
|
|
||||||
desc "config NAME [VALUE]", "Retrieve or set a configuration value"
|
desc "config NAME [VALUE]", "Retrieve or set a configuration value"
|
||||||
long_desc <<-D
|
long_desc <<-D
|
||||||
Retrieves or sets a configuration value. If only one parameter is provided, retrieve the value. If two parameters are provided, replace the
|
Retrieves or sets a configuration value. If only one parameter is provided, retrieve the value. If two parameters are provided, replace the
|
||||||
|
@ -496,7 +520,8 @@ module Bundler
|
||||||
Bundler.ui.info "Bundler version #{Bundler::VERSION}#{build_info}"
|
Bundler.ui.info "Bundler version #{Bundler::VERSION}#{build_info}"
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
map %w[-v --version] => :version
|
|
||||||
|
map aliases_for("version")
|
||||||
|
|
||||||
desc "licenses", "Prints the license of all gems in the bundle"
|
desc "licenses", "Prints the license of all gems in the bundle"
|
||||||
def licenses
|
def licenses
|
||||||
|
@ -680,12 +705,17 @@ module Bundler
|
||||||
# Reformat the arguments passed to bundle that include a --help flag
|
# Reformat the arguments passed to bundle that include a --help flag
|
||||||
# into the corresponding `bundle help #{command}` call
|
# into the corresponding `bundle help #{command}` call
|
||||||
def self.reformatted_help_args(args)
|
def self.reformatted_help_args(args)
|
||||||
bundler_commands = all_commands.keys
|
bundler_commands = (COMMAND_ALIASES.keys + COMMAND_ALIASES.values).flatten
|
||||||
|
|
||||||
help_flags = %w[--help -h]
|
help_flags = %w[--help -h]
|
||||||
exec_commands = %w[e ex exe exec]
|
exec_commands = ["exec"] + COMMAND_ALIASES["exec"]
|
||||||
|
|
||||||
help_used = args.index {|a| help_flags.include? a }
|
help_used = args.index {|a| help_flags.include? a }
|
||||||
exec_used = args.index {|a| exec_commands.include? a }
|
exec_used = args.index {|a| exec_commands.include? a }
|
||||||
|
|
||||||
command = args.find {|a| bundler_commands.include? a }
|
command = args.find {|a| bundler_commands.include? a }
|
||||||
|
command = all_aliases[command] if all_aliases[command]
|
||||||
|
|
||||||
if exec_used && help_used
|
if exec_used && help_used
|
||||||
if exec_used + help_used == 1
|
if exec_used + help_used == 1
|
||||||
%w[help exec]
|
%w[help exec]
|
||||||
|
@ -790,7 +820,7 @@ module Bundler
|
||||||
|
|
||||||
Bundler::SharedHelpers.major_deprecation 2,\
|
Bundler::SharedHelpers.major_deprecation 2,\
|
||||||
"The `#{flag_name}` flag is deprecated because it relies on being " \
|
"The `#{flag_name}` flag is deprecated because it relies on being " \
|
||||||
"remembered across bundler invokations, which bundler will no longer " \
|
"remembered across bundler invocations, which bundler will no longer " \
|
||||||
"do in future versions. Instead please use `bundle config set #{name} " \
|
"do in future versions. Instead please use `bundle config set #{name} " \
|
||||||
"'#{value}'`, and stop using this flag"
|
"'#{value}'`, and stop using this flag"
|
||||||
end
|
end
|
||||||
|
|
|
@ -21,6 +21,7 @@ module Bundler
|
||||||
|
|
||||||
def perform_bundle_install
|
def perform_bundle_install
|
||||||
Installer.install(Bundler.root, Bundler.definition)
|
Installer.install(Bundler.root, Bundler.definition)
|
||||||
|
Bundler.load.cache if Bundler.app_cache.exist?
|
||||||
end
|
end
|
||||||
|
|
||||||
def inject_dependencies
|
def inject_dependencies
|
||||||
|
|
48
lib/bundler/cli/cache.rb
Normal file
48
lib/bundler/cli/cache.rb
Normal file
|
@ -0,0 +1,48 @@
|
||||||
|
# frozen_string_literal: true
|
||||||
|
|
||||||
|
module Bundler
|
||||||
|
class CLI::Cache
|
||||||
|
attr_reader :options
|
||||||
|
|
||||||
|
def initialize(options)
|
||||||
|
@options = options
|
||||||
|
end
|
||||||
|
|
||||||
|
def run
|
||||||
|
Bundler.ui.level = "error" if options[:quiet]
|
||||||
|
Bundler.settings.set_command_option_if_given :path, options[:path]
|
||||||
|
Bundler.settings.set_command_option_if_given :cache_path, options["cache-path"]
|
||||||
|
|
||||||
|
setup_cache_all
|
||||||
|
install
|
||||||
|
|
||||||
|
# TODO: move cache contents here now that all bundles are locked
|
||||||
|
custom_path = Bundler.settings[:path] if options[:path]
|
||||||
|
|
||||||
|
Bundler.settings.temporary(:cache_all_platforms => options["all-platforms"]) do
|
||||||
|
Bundler.load.cache(custom_path)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
|
||||||
|
def install
|
||||||
|
require_relative "install"
|
||||||
|
options = self.options.dup
|
||||||
|
options["local"] = false if Bundler.settings[:cache_all_platforms]
|
||||||
|
Bundler::CLI::Install.new(options).run
|
||||||
|
end
|
||||||
|
|
||||||
|
def setup_cache_all
|
||||||
|
all = options.fetch(:all, Bundler.feature_flag.cache_all? || nil)
|
||||||
|
|
||||||
|
Bundler.settings.set_command_option_if_given :cache_all, all
|
||||||
|
|
||||||
|
if Bundler.definition.has_local_dependencies? && !Bundler.feature_flag.cache_all?
|
||||||
|
Bundler.ui.warn "Your Gemfile contains path and git dependencies. If you want " \
|
||||||
|
"to cache them as well, please pass the --all flag. This will be the default " \
|
||||||
|
"on Bundler 3.0."
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
|
@ -43,15 +43,11 @@ module Bundler
|
||||||
end
|
end
|
||||||
|
|
||||||
def kernel_exec(*args)
|
def kernel_exec(*args)
|
||||||
ui = Bundler.ui
|
|
||||||
Bundler.ui = nil
|
|
||||||
Kernel.exec(*args)
|
Kernel.exec(*args)
|
||||||
rescue Errno::EACCES, Errno::ENOEXEC
|
rescue Errno::EACCES, Errno::ENOEXEC
|
||||||
Bundler.ui = ui
|
|
||||||
Bundler.ui.error "bundler: not executable: #{cmd}"
|
Bundler.ui.error "bundler: not executable: #{cmd}"
|
||||||
exit 126
|
exit 126
|
||||||
rescue Errno::ENOENT
|
rescue Errno::ENOENT
|
||||||
Bundler.ui = ui
|
|
||||||
Bundler.ui.error "bundler: command not found: #{cmd}"
|
Bundler.ui.error "bundler: command not found: #{cmd}"
|
||||||
Bundler.ui.warn "Install missing gem executables with `bundle install`"
|
Bundler.ui.warn "Install missing gem executables with `bundle install`"
|
||||||
exit 127
|
exit 127
|
||||||
|
@ -62,15 +58,12 @@ module Bundler
|
||||||
ARGV.replace(args)
|
ARGV.replace(args)
|
||||||
$0 = file
|
$0 = file
|
||||||
Process.setproctitle(process_title(file, args)) if Process.respond_to?(:setproctitle)
|
Process.setproctitle(process_title(file, args)) if Process.respond_to?(:setproctitle)
|
||||||
ui = Bundler.ui
|
|
||||||
Bundler.ui = nil
|
|
||||||
require_relative "../setup"
|
require_relative "../setup"
|
||||||
TRAPPED_SIGNALS.each {|s| trap(s, "DEFAULT") }
|
TRAPPED_SIGNALS.each {|s| trap(s, "DEFAULT") }
|
||||||
Kernel.load(file)
|
Kernel.load(file)
|
||||||
rescue SystemExit, SignalException
|
rescue SystemExit, SignalException
|
||||||
raise
|
raise
|
||||||
rescue Exception => e # rubocop:disable Lint/RescueException
|
rescue Exception => e # rubocop:disable Lint/RescueException
|
||||||
Bundler.ui = ui
|
|
||||||
Bundler.ui.error "bundler: failed to load command: #{cmd} (#{file})"
|
Bundler.ui.error "bundler: failed to load command: #{cmd} (#{file})"
|
||||||
backtrace = e.backtrace ? e.backtrace.take_while {|bt| !bt.start_with?(__FILE__) } : []
|
backtrace = e.backtrace ? e.backtrace.take_while {|bt| !bt.start_with?(__FILE__) } : []
|
||||||
abort "#{e.class}: #{e.message}\n #{backtrace.join("\n ")}"
|
abort "#{e.class}: #{e.message}\n #{backtrace.join("\n ")}"
|
||||||
|
|
|
@ -44,7 +44,7 @@ module Bundler
|
||||||
@gemfile = expanded_gemfile_path
|
@gemfile = expanded_gemfile_path
|
||||||
@gemfiles << expanded_gemfile_path
|
@gemfiles << expanded_gemfile_path
|
||||||
contents ||= Bundler.read_file(@gemfile.to_s)
|
contents ||= Bundler.read_file(@gemfile.to_s)
|
||||||
instance_eval(contents.dup.untaint, gemfile.to_s, 1)
|
instance_eval(contents.dup.tap{|x| x.untaint if RUBY_VERSION < "2.7" }, gemfile.to_s, 1)
|
||||||
rescue Exception => e # rubocop:disable Lint/RescueException
|
rescue Exception => e # rubocop:disable Lint/RescueException
|
||||||
message = "There was an error " \
|
message = "There was an error " \
|
||||||
"#{e.is_a?(GemfileEvalError) ? "evaluating" : "parsing"} " \
|
"#{e.is_a?(GemfileEvalError) ? "evaluating" : "parsing"} " \
|
||||||
|
|
|
@ -16,7 +16,7 @@ module Bundler
|
||||||
Bundler.ui.error error.message
|
Bundler.ui.error error.message
|
||||||
when GemRequireError
|
when GemRequireError
|
||||||
Bundler.ui.error error.message
|
Bundler.ui.error error.message
|
||||||
Bundler.ui.trace error.orig_exception, nil, true
|
Bundler.ui.trace error.orig_exception
|
||||||
when BundlerError
|
when BundlerError
|
||||||
Bundler.ui.error error.message, :wrap => true
|
Bundler.ui.error error.message, :wrap => true
|
||||||
Bundler.ui.trace error
|
Bundler.ui.trace error
|
||||||
|
|
|
@ -26,7 +26,6 @@ module Bundler
|
||||||
attr_reader :spec_path, :base, :gemspec
|
attr_reader :spec_path, :base, :gemspec
|
||||||
|
|
||||||
def initialize(base = nil, name = nil)
|
def initialize(base = nil, name = nil)
|
||||||
Bundler.ui = UI::Shell.new
|
|
||||||
@base = (base ||= SharedHelpers.pwd)
|
@base = (base ||= SharedHelpers.pwd)
|
||||||
gemspecs = name ? [File.join(base, "#{name}.gemspec")] : Dir[File.join(base, "{,*}.gemspec")]
|
gemspecs = name ? [File.join(base, "#{name}.gemspec")] : Dir[File.join(base, "{,*}.gemspec")]
|
||||||
raise "Unable to determine name from existing gemspec. Use :name => 'gemname' in #install_tasks to manually set it." unless gemspecs.size == 1
|
raise "Unable to determine name from existing gemspec. Use :name => 'gemname' in #install_tasks to manually set it." unless gemspecs.size == 1
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
module Bundler
|
module Bundler
|
||||||
module GemHelpers
|
module GemHelpers
|
||||||
GENERIC_CACHE = { Gem::Platform::RUBY => Gem::Platform::RUBY } # rubocop:disable MutableConstant
|
GENERIC_CACHE = { Gem::Platform::RUBY => Gem::Platform::RUBY } # rubocop:disable Style/MutableConstant
|
||||||
GENERICS = [
|
GENERICS = [
|
||||||
[Gem::Platform.new("java"), Gem::Platform.new("java")],
|
[Gem::Platform.new("java"), Gem::Platform.new("java")],
|
||||||
[Gem::Platform.new("mswin32"), Gem::Platform.new("mswin32")],
|
[Gem::Platform.new("mswin32"), Gem::Platform.new("mswin32")],
|
||||||
|
|
|
@ -38,6 +38,8 @@ def gemfile(install = false, options = {}, &gemfile)
|
||||||
raise ArgumentError, "Unknown options: #{opts.keys.join(", ")}" unless opts.empty?
|
raise ArgumentError, "Unknown options: #{opts.keys.join(", ")}" unless opts.empty?
|
||||||
|
|
||||||
old_root = Bundler.method(:root)
|
old_root = Bundler.method(:root)
|
||||||
|
bundler_module = class << Bundler; self; end
|
||||||
|
bundler_module.send(:remove_method, :root)
|
||||||
def Bundler.root
|
def Bundler.root
|
||||||
Bundler::SharedHelpers.pwd.expand_path
|
Bundler::SharedHelpers.pwd.expand_path
|
||||||
end
|
end
|
||||||
|
@ -56,7 +58,7 @@ def gemfile(install = false, options = {}, &gemfile)
|
||||||
definition.missing_specs?
|
definition.missing_specs?
|
||||||
end
|
end
|
||||||
|
|
||||||
Bundler.ui = ui if install
|
Bundler.ui = install ? ui : Bundler::UI::Silent.new
|
||||||
if install || missing_specs.call
|
if install || missing_specs.call
|
||||||
Bundler.settings.temporary(:inline => true, :disable_platform_warnings => true) do
|
Bundler.settings.temporary(:inline => true, :disable_platform_warnings => true) do
|
||||||
installer = Bundler::Installer.install(Bundler.root, definition, :system => true)
|
installer = Bundler::Installer.install(Bundler.root, definition, :system => true)
|
||||||
|
@ -70,6 +72,8 @@ def gemfile(install = false, options = {}, &gemfile)
|
||||||
runtime.setup.require
|
runtime.setup.require
|
||||||
end
|
end
|
||||||
ensure
|
ensure
|
||||||
bundler_module = class << Bundler; self; end
|
if bundler_module
|
||||||
bundler_module.send(:define_method, :root, old_root) if old_root
|
bundler_module.send(:remove_method, :root)
|
||||||
|
bundler_module.send(:define_method, :root, old_root)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
# frozen_string_literal: true
|
# frozen_string_literal: true
|
||||||
|
|
||||||
|
#--
|
||||||
# Some versions of the Bundler 1.1 RC series introduced corrupted
|
# Some versions of the Bundler 1.1 RC series introduced corrupted
|
||||||
# lockfiles. There were two major problems:
|
# lockfiles. There were two major problems:
|
||||||
#
|
#
|
||||||
|
|
|
@ -29,7 +29,7 @@ module Gem
|
||||||
# gems at that time, this method could be called inside another require,
|
# gems at that time, this method could be called inside another require,
|
||||||
# thus raising with that constant being undefined. Better to check a method
|
# thus raising with that constant being undefined. Better to check a method
|
||||||
if source.respond_to?(:path) || (source.respond_to?(:bundler_plugin_api_source?) && source.bundler_plugin_api_source?)
|
if source.respond_to?(:path) || (source.respond_to?(:bundler_plugin_api_source?) && source.bundler_plugin_api_source?)
|
||||||
Pathname.new(loaded_from).dirname.expand_path(source.root).to_s.untaint
|
Pathname.new(loaded_from).dirname.expand_path(source.root).to_s.tap{|x| x.untaint if RUBY_VERSION < "2.7" }
|
||||||
else
|
else
|
||||||
rg_full_gem_path
|
rg_full_gem_path
|
||||||
end
|
end
|
||||||
|
|
|
@ -635,7 +635,6 @@ module Bundler
|
||||||
ENV["BUNDLE_GEMFILE"] ||= File.expand_path(gemfile)
|
ENV["BUNDLE_GEMFILE"] ||= File.expand_path(gemfile)
|
||||||
require_relative "gemdeps"
|
require_relative "gemdeps"
|
||||||
runtime = Bundler.setup
|
runtime = Bundler.setup
|
||||||
Bundler.ui = nil
|
|
||||||
activated_spec_names = runtime.requested_specs.map(&:to_spec).sort_by(&:name)
|
activated_spec_names = runtime.requested_specs.map(&:to_spec).sort_by(&:name)
|
||||||
[Gemdeps.new(runtime), activated_spec_names]
|
[Gemdeps.new(runtime), activated_spec_names]
|
||||||
end
|
end
|
||||||
|
|
|
@ -6,9 +6,8 @@ if Bundler::SharedHelpers.in_bundle?
|
||||||
require_relative "../bundler"
|
require_relative "../bundler"
|
||||||
|
|
||||||
if STDOUT.tty? || ENV["BUNDLER_FORCE_TTY"]
|
if STDOUT.tty? || ENV["BUNDLER_FORCE_TTY"]
|
||||||
Bundler.ui = Bundler::UI::Shell.new
|
|
||||||
begin
|
begin
|
||||||
Bundler.setup
|
Bundler.ui.silence { Bundler.setup }
|
||||||
rescue Bundler::BundlerError => e
|
rescue Bundler::BundlerError => e
|
||||||
Bundler.ui.warn "\e[31m#{e.message}\e[0m"
|
Bundler.ui.warn "\e[31m#{e.message}\e[0m"
|
||||||
Bundler.ui.warn e.backtrace.join("\n") if ENV["DEBUG"]
|
Bundler.ui.warn e.backtrace.join("\n") if ENV["DEBUG"]
|
||||||
|
@ -18,12 +17,6 @@ if Bundler::SharedHelpers.in_bundle?
|
||||||
exit e.status_code
|
exit e.status_code
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
Bundler.setup
|
Bundler.ui.silence { Bundler.setup }
|
||||||
end
|
end
|
||||||
|
|
||||||
# Add bundler to the load path after disabling system gems
|
|
||||||
bundler_lib = File.expand_path("../..", __FILE__)
|
|
||||||
$LOAD_PATH.unshift(bundler_lib) unless $LOAD_PATH.include?(bundler_lib)
|
|
||||||
|
|
||||||
Bundler.ui = nil
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -13,13 +13,13 @@ module Bundler
|
||||||
def root
|
def root
|
||||||
gemfile = find_gemfile
|
gemfile = find_gemfile
|
||||||
raise GemfileNotFound, "Could not locate Gemfile" unless gemfile
|
raise GemfileNotFound, "Could not locate Gemfile" unless gemfile
|
||||||
Pathname.new(gemfile).untaint.expand_path.parent
|
Pathname.new(gemfile).tap{|x| x.untaint if RUBY_VERSION < "2.7" }.expand_path.parent
|
||||||
end
|
end
|
||||||
|
|
||||||
def default_gemfile
|
def default_gemfile
|
||||||
gemfile = find_gemfile
|
gemfile = find_gemfile
|
||||||
raise GemfileNotFound, "Could not locate Gemfile" unless gemfile
|
raise GemfileNotFound, "Could not locate Gemfile" unless gemfile
|
||||||
Pathname.new(gemfile).untaint.expand_path
|
Pathname.new(gemfile).tap{|x| x.untaint if RUBY_VERSION < "2.7" }.expand_path
|
||||||
end
|
end
|
||||||
|
|
||||||
def default_lockfile
|
def default_lockfile
|
||||||
|
@ -28,7 +28,7 @@ module Bundler
|
||||||
case gemfile.basename.to_s
|
case gemfile.basename.to_s
|
||||||
when "gems.rb" then Pathname.new(gemfile.sub(/.rb$/, ".locked"))
|
when "gems.rb" then Pathname.new(gemfile.sub(/.rb$/, ".locked"))
|
||||||
else Pathname.new("#{gemfile}.lock")
|
else Pathname.new("#{gemfile}.lock")
|
||||||
end.untaint
|
end.tap{|x| x.untaint if RUBY_VERSION < "2.7" }
|
||||||
end
|
end
|
||||||
|
|
||||||
def default_bundle_dir
|
def default_bundle_dir
|
||||||
|
@ -100,7 +100,7 @@ module Bundler
|
||||||
#
|
#
|
||||||
# @see {Bundler::PermissionError}
|
# @see {Bundler::PermissionError}
|
||||||
def filesystem_access(path, action = :write, &block)
|
def filesystem_access(path, action = :write, &block)
|
||||||
yield(path.dup.untaint)
|
yield(path.dup.tap{|x| x.untaint if RUBY_VERSION < "2.7" })
|
||||||
rescue Errno::EACCES
|
rescue Errno::EACCES
|
||||||
raise PermissionError.new(path, action)
|
raise PermissionError.new(path, action)
|
||||||
rescue Errno::EAGAIN
|
rescue Errno::EAGAIN
|
||||||
|
@ -124,7 +124,12 @@ module Bundler
|
||||||
namespace.const_get(constant_name)
|
namespace.const_get(constant_name)
|
||||||
end
|
end
|
||||||
|
|
||||||
def major_deprecation(major_version, message)
|
def major_deprecation(major_version, message, print_caller_location: false)
|
||||||
|
if print_caller_location
|
||||||
|
caller_location = caller_locations(2, 2).first
|
||||||
|
message = "#{message} (called at #{caller_location.path}:#{caller_location.lineno})"
|
||||||
|
end
|
||||||
|
|
||||||
bundler_major_version = Bundler.bundler_major_version
|
bundler_major_version = Bundler.bundler_major_version
|
||||||
if bundler_major_version > major_version
|
if bundler_major_version > major_version
|
||||||
require_relative "errors"
|
require_relative "errors"
|
||||||
|
@ -132,10 +137,7 @@ module Bundler
|
||||||
end
|
end
|
||||||
|
|
||||||
return unless bundler_major_version >= major_version && prints_major_deprecations?
|
return unless bundler_major_version >= major_version && prints_major_deprecations?
|
||||||
@major_deprecation_ui ||= Bundler::UI::Shell.new("no-color" => true)
|
Bundler.ui.warn("[DEPRECATED] #{message}")
|
||||||
with_major_deprecation_ui do |ui|
|
|
||||||
ui.warn("[DEPRECATED] #{message}")
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def print_major_deprecations!
|
def print_major_deprecations!
|
||||||
|
@ -212,21 +214,6 @@ module Bundler
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
def with_major_deprecation_ui(&block)
|
|
||||||
ui = Bundler.ui
|
|
||||||
|
|
||||||
if ui.is_a?(@major_deprecation_ui.class)
|
|
||||||
yield ui
|
|
||||||
else
|
|
||||||
begin
|
|
||||||
Bundler.ui = @major_deprecation_ui
|
|
||||||
yield Bundler.ui
|
|
||||||
ensure
|
|
||||||
Bundler.ui = ui
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def validate_bundle_path
|
def validate_bundle_path
|
||||||
path_separator = Bundler.rubygems.path_separator
|
path_separator = Bundler.rubygems.path_separator
|
||||||
return unless Bundler.bundle_path.to_s.split(path_separator).size > 1
|
return unless Bundler.bundle_path.to_s.split(path_separator).size > 1
|
||||||
|
@ -263,7 +250,7 @@ module Bundler
|
||||||
|
|
||||||
def search_up(*names)
|
def search_up(*names)
|
||||||
previous = nil
|
previous = nil
|
||||||
current = File.expand_path(SharedHelpers.pwd).untaint
|
current = File.expand_path(SharedHelpers.pwd).tap{|x| x.untaint if RUBY_VERSION < "2.7" }
|
||||||
|
|
||||||
until !File.directory?(current) || current == previous
|
until !File.directory?(current) || current == previous
|
||||||
if ENV["BUNDLE_SPEC_RUN"]
|
if ENV["BUNDLE_SPEC_RUN"]
|
||||||
|
|
|
@ -316,7 +316,7 @@ module Bundler
|
||||||
|
|
||||||
def load_gemspec(file)
|
def load_gemspec(file)
|
||||||
stub = Gem::StubSpecification.gemspec_stub(file, install_path.parent, install_path.parent)
|
stub = Gem::StubSpecification.gemspec_stub(file, install_path.parent, install_path.parent)
|
||||||
stub.full_gem_path = Pathname.new(file).dirname.expand_path(root).to_s.untaint
|
stub.full_gem_path = Pathname.new(file).dirname.expand_path(root).to_s.tap{|x| x.untaint if RUBY_VERSION < "2.7" }
|
||||||
StubSpecification.from_stub(stub)
|
StubSpecification.from_stub(stub)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
require "open3"
|
require "open3"
|
||||||
require "shellwords"
|
require "shellwords"
|
||||||
require "tempfile"
|
|
||||||
module Bundler
|
module Bundler
|
||||||
class Source
|
class Source
|
||||||
class Git
|
class Git
|
||||||
|
|
239
lib/bundler/vendor/fileutils/lib/fileutils.rb
vendored
239
lib/bundler/vendor/fileutils/lib/fileutils.rb
vendored
|
@ -24,46 +24,56 @@ require_relative "fileutils/version"
|
||||||
#
|
#
|
||||||
# require 'bundler/vendor/fileutils/lib/fileutils'
|
# require 'bundler/vendor/fileutils/lib/fileutils'
|
||||||
#
|
#
|
||||||
# Bundler::FileUtils.cd(dir, options)
|
# Bundler::FileUtils.cd(dir, **options)
|
||||||
# Bundler::FileUtils.cd(dir, options) {|dir| block }
|
# Bundler::FileUtils.cd(dir, **options) {|dir| block }
|
||||||
# Bundler::FileUtils.pwd()
|
# Bundler::FileUtils.pwd()
|
||||||
# Bundler::FileUtils.mkdir(dir, options)
|
# Bundler::FileUtils.mkdir(dir, **options)
|
||||||
# Bundler::FileUtils.mkdir(list, options)
|
# Bundler::FileUtils.mkdir(list, **options)
|
||||||
# Bundler::FileUtils.mkdir_p(dir, options)
|
# Bundler::FileUtils.mkdir_p(dir, **options)
|
||||||
# Bundler::FileUtils.mkdir_p(list, options)
|
# Bundler::FileUtils.mkdir_p(list, **options)
|
||||||
# Bundler::FileUtils.rmdir(dir, options)
|
# Bundler::FileUtils.rmdir(dir, **options)
|
||||||
# Bundler::FileUtils.rmdir(list, options)
|
# Bundler::FileUtils.rmdir(list, **options)
|
||||||
# Bundler::FileUtils.ln(target, link, options)
|
# Bundler::FileUtils.ln(target, link, **options)
|
||||||
# Bundler::FileUtils.ln(targets, dir, options)
|
# Bundler::FileUtils.ln(targets, dir, **options)
|
||||||
# Bundler::FileUtils.ln_s(target, link, options)
|
# Bundler::FileUtils.ln_s(target, link, **options)
|
||||||
# Bundler::FileUtils.ln_s(targets, dir, options)
|
# Bundler::FileUtils.ln_s(targets, dir, **options)
|
||||||
# Bundler::FileUtils.ln_sf(target, link, options)
|
# Bundler::FileUtils.ln_sf(target, link, **options)
|
||||||
# Bundler::FileUtils.cp(src, dest, options)
|
# Bundler::FileUtils.cp(src, dest, **options)
|
||||||
# Bundler::FileUtils.cp(list, dir, options)
|
# Bundler::FileUtils.cp(list, dir, **options)
|
||||||
# Bundler::FileUtils.cp_r(src, dest, options)
|
# Bundler::FileUtils.cp_r(src, dest, **options)
|
||||||
# Bundler::FileUtils.cp_r(list, dir, options)
|
# Bundler::FileUtils.cp_r(list, dir, **options)
|
||||||
# Bundler::FileUtils.mv(src, dest, options)
|
# Bundler::FileUtils.mv(src, dest, **options)
|
||||||
# Bundler::FileUtils.mv(list, dir, options)
|
# Bundler::FileUtils.mv(list, dir, **options)
|
||||||
# Bundler::FileUtils.rm(list, options)
|
# Bundler::FileUtils.rm(list, **options)
|
||||||
# Bundler::FileUtils.rm_r(list, options)
|
# Bundler::FileUtils.rm_r(list, **options)
|
||||||
# Bundler::FileUtils.rm_rf(list, options)
|
# Bundler::FileUtils.rm_rf(list, **options)
|
||||||
# Bundler::FileUtils.install(src, dest, options)
|
# Bundler::FileUtils.install(src, dest, **options)
|
||||||
# Bundler::FileUtils.chmod(mode, list, options)
|
# Bundler::FileUtils.chmod(mode, list, **options)
|
||||||
# Bundler::FileUtils.chmod_R(mode, list, options)
|
# Bundler::FileUtils.chmod_R(mode, list, **options)
|
||||||
# Bundler::FileUtils.chown(user, group, list, options)
|
# Bundler::FileUtils.chown(user, group, list, **options)
|
||||||
# Bundler::FileUtils.chown_R(user, group, list, options)
|
# Bundler::FileUtils.chown_R(user, group, list, **options)
|
||||||
# Bundler::FileUtils.touch(list, options)
|
# Bundler::FileUtils.touch(list, **options)
|
||||||
#
|
#
|
||||||
# The <tt>options</tt> parameter is a hash of options, taken from the list
|
# Possible <tt>options</tt> are:
|
||||||
# <tt>:force</tt>, <tt>:noop</tt>, <tt>:preserve</tt>, and <tt>:verbose</tt>.
|
#
|
||||||
# <tt>:noop</tt> means that no changes are made. The other three are obvious.
|
# <tt>:force</tt> :: forced operation (rewrite files if exist, remove
|
||||||
# Each method documents the options that it honours.
|
# directories if not empty, etc.);
|
||||||
|
# <tt>:verbose</tt> :: print command to be run, in bash syntax, before
|
||||||
|
# performing it;
|
||||||
|
# <tt>:preserve</tt> :: preserve object's group, user and modification
|
||||||
|
# time on copying;
|
||||||
|
# <tt>:noop</tt> :: no changes are made (usable in combination with
|
||||||
|
# <tt>:verbose</tt> which will print the command to run)
|
||||||
|
#
|
||||||
|
# Each method documents the options that it honours. See also ::commands,
|
||||||
|
# ::options and ::options_of methods to introspect which command have which
|
||||||
|
# options.
|
||||||
#
|
#
|
||||||
# All methods that have the concept of a "source" file or directory can take
|
# All methods that have the concept of a "source" file or directory can take
|
||||||
# either one file or a list of files in that argument. See the method
|
# either one file or a list of files in that argument. See the method
|
||||||
# documentation for examples.
|
# documentation for examples.
|
||||||
#
|
#
|
||||||
# There are some `low level' methods, which do not accept any option:
|
# There are some `low level' methods, which do not accept keyword arguments:
|
||||||
#
|
#
|
||||||
# Bundler::FileUtils.copy_entry(src, dest, preserve = false, dereference_root = false, remove_destination = false)
|
# Bundler::FileUtils.copy_entry(src, dest, preserve = false, dereference_root = false, remove_destination = false)
|
||||||
# Bundler::FileUtils.copy_file(src, dest, preserve = false, dereference = true)
|
# Bundler::FileUtils.copy_file(src, dest, preserve = false, dereference = true)
|
||||||
|
@ -119,7 +129,7 @@ module Bundler::FileUtils
|
||||||
#
|
#
|
||||||
# Bundler::FileUtils.cd('/') # change directory
|
# Bundler::FileUtils.cd('/') # change directory
|
||||||
#
|
#
|
||||||
# Bundler::FileUtils.cd('/', :verbose => true) # change directory and report it
|
# Bundler::FileUtils.cd('/', verbose: true) # change directory and report it
|
||||||
#
|
#
|
||||||
# Bundler::FileUtils.cd('/') do # change directory
|
# Bundler::FileUtils.cd('/') do # change directory
|
||||||
# # ... # do something
|
# # ... # do something
|
||||||
|
@ -165,8 +175,8 @@ module Bundler::FileUtils
|
||||||
#
|
#
|
||||||
# Bundler::FileUtils.mkdir 'test'
|
# Bundler::FileUtils.mkdir 'test'
|
||||||
# Bundler::FileUtils.mkdir %w(tmp data)
|
# Bundler::FileUtils.mkdir %w(tmp data)
|
||||||
# Bundler::FileUtils.mkdir 'notexist', :noop => true # Does not really create.
|
# Bundler::FileUtils.mkdir 'notexist', noop: true # Does not really create.
|
||||||
# Bundler::FileUtils.mkdir 'tmp', :mode => 0700
|
# Bundler::FileUtils.mkdir 'tmp', mode: 0700
|
||||||
#
|
#
|
||||||
def mkdir(list, mode: nil, noop: nil, verbose: nil)
|
def mkdir(list, mode: nil, noop: nil, verbose: nil)
|
||||||
list = fu_list(list)
|
list = fu_list(list)
|
||||||
|
@ -185,7 +195,7 @@ module Bundler::FileUtils
|
||||||
#
|
#
|
||||||
# Bundler::FileUtils.mkdir_p '/usr/local/lib/ruby'
|
# Bundler::FileUtils.mkdir_p '/usr/local/lib/ruby'
|
||||||
#
|
#
|
||||||
# causes to make following directories, if it does not exist.
|
# causes to make following directories, if they do not exist.
|
||||||
#
|
#
|
||||||
# * /usr
|
# * /usr
|
||||||
# * /usr/local
|
# * /usr/local
|
||||||
|
@ -249,7 +259,7 @@ module Bundler::FileUtils
|
||||||
# Bundler::FileUtils.rmdir 'somedir'
|
# Bundler::FileUtils.rmdir 'somedir'
|
||||||
# Bundler::FileUtils.rmdir %w(somedir anydir otherdir)
|
# Bundler::FileUtils.rmdir %w(somedir anydir otherdir)
|
||||||
# # Does not really remove directory; outputs message.
|
# # Does not really remove directory; outputs message.
|
||||||
# Bundler::FileUtils.rmdir 'somedir', :verbose => true, :noop => true
|
# Bundler::FileUtils.rmdir 'somedir', verbose: true, noop: true
|
||||||
#
|
#
|
||||||
def rmdir(list, parents: nil, noop: nil, verbose: nil)
|
def rmdir(list, parents: nil, noop: nil, verbose: nil)
|
||||||
list = fu_list(list)
|
list = fu_list(list)
|
||||||
|
@ -278,7 +288,7 @@ module Bundler::FileUtils
|
||||||
#
|
#
|
||||||
# In the first form, creates a hard link +link+ which points to +target+.
|
# In the first form, creates a hard link +link+ which points to +target+.
|
||||||
# If +link+ already exists, raises Errno::EEXIST.
|
# If +link+ already exists, raises Errno::EEXIST.
|
||||||
# But if the :force option is set, overwrites +link+.
|
# But if the +force+ option is set, overwrites +link+.
|
||||||
#
|
#
|
||||||
# Bundler::FileUtils.ln 'gcc', 'cc', verbose: true
|
# Bundler::FileUtils.ln 'gcc', 'cc', verbose: true
|
||||||
# Bundler::FileUtils.ln '/usr/bin/emacs21', '/usr/bin/emacs'
|
# Bundler::FileUtils.ln '/usr/bin/emacs21', '/usr/bin/emacs'
|
||||||
|
@ -304,9 +314,6 @@ module Bundler::FileUtils
|
||||||
alias link ln
|
alias link ln
|
||||||
module_function :link
|
module_function :link
|
||||||
|
|
||||||
#
|
|
||||||
# :call-seq:
|
|
||||||
# Bundler::FileUtils.cp_lr(src, dest, noop: nil, verbose: nil, dereference_root: true, remove_destination: false)
|
|
||||||
#
|
#
|
||||||
# Hard link +src+ to +dest+. If +src+ is a directory, this method links
|
# Hard link +src+ to +dest+. If +src+ is a directory, this method links
|
||||||
# all its contents recursively. If +dest+ is a directory, links
|
# all its contents recursively. If +dest+ is a directory, links
|
||||||
|
@ -314,13 +321,16 @@ module Bundler::FileUtils
|
||||||
#
|
#
|
||||||
# +src+ can be a list of files.
|
# +src+ can be a list of files.
|
||||||
#
|
#
|
||||||
# # Installing the library "mylib" under the site_ruby directory.
|
# If +dereference_root+ is true, this method dereference tree root.
|
||||||
# Bundler::FileUtils.rm_r site_ruby + '/mylib', :force => true
|
#
|
||||||
|
# If +remove_destination+ is true, this method removes each destination file before copy.
|
||||||
|
#
|
||||||
|
# Bundler::FileUtils.rm_r site_ruby + '/mylib', force: true
|
||||||
# Bundler::FileUtils.cp_lr 'lib/', site_ruby + '/mylib'
|
# Bundler::FileUtils.cp_lr 'lib/', site_ruby + '/mylib'
|
||||||
#
|
#
|
||||||
# # Examples of linking several files to target directory.
|
# # Examples of linking several files to target directory.
|
||||||
# Bundler::FileUtils.cp_lr %w(mail.rb field.rb debug/), site_ruby + '/tmail'
|
# Bundler::FileUtils.cp_lr %w(mail.rb field.rb debug/), site_ruby + '/tmail'
|
||||||
# Bundler::FileUtils.cp_lr Dir.glob('*.rb'), '/home/aamine/lib/ruby', :noop => true, :verbose => true
|
# Bundler::FileUtils.cp_lr Dir.glob('*.rb'), '/home/aamine/lib/ruby', noop: true, verbose: true
|
||||||
#
|
#
|
||||||
# # If you want to link all contents of a directory instead of the
|
# # If you want to link all contents of a directory instead of the
|
||||||
# # directory itself, c.f. src/x -> dest/x, src/y -> dest/y,
|
# # directory itself, c.f. src/x -> dest/x, src/y -> dest/y,
|
||||||
|
@ -345,7 +355,7 @@ module Bundler::FileUtils
|
||||||
#
|
#
|
||||||
# In the first form, creates a symbolic link +link+ which points to +target+.
|
# In the first form, creates a symbolic link +link+ which points to +target+.
|
||||||
# If +link+ already exists, raises Errno::EEXIST.
|
# If +link+ already exists, raises Errno::EEXIST.
|
||||||
# But if the :force option is set, overwrites +link+.
|
# But if the <tt>force</tt> option is set, overwrites +link+.
|
||||||
#
|
#
|
||||||
# Bundler::FileUtils.ln_s '/usr/bin/ruby', '/usr/local/bin/ruby'
|
# Bundler::FileUtils.ln_s '/usr/bin/ruby', '/usr/local/bin/ruby'
|
||||||
# Bundler::FileUtils.ln_s 'verylongsourcefilename.c', 'c', force: true
|
# Bundler::FileUtils.ln_s 'verylongsourcefilename.c', 'c', force: true
|
||||||
|
@ -411,7 +421,7 @@ module Bundler::FileUtils
|
||||||
#
|
#
|
||||||
# Bundler::FileUtils.cp 'eval.c', 'eval.c.org'
|
# Bundler::FileUtils.cp 'eval.c', 'eval.c.org'
|
||||||
# Bundler::FileUtils.cp %w(cgi.rb complex.rb date.rb), '/usr/lib/ruby/1.6'
|
# Bundler::FileUtils.cp %w(cgi.rb complex.rb date.rb), '/usr/lib/ruby/1.6'
|
||||||
# Bundler::FileUtils.cp %w(cgi.rb complex.rb date.rb), '/usr/lib/ruby/1.6', :verbose => true
|
# Bundler::FileUtils.cp %w(cgi.rb complex.rb date.rb), '/usr/lib/ruby/1.6', verbose: true
|
||||||
# Bundler::FileUtils.cp 'symlink', 'dest' # copy content, "dest" is not a symlink
|
# Bundler::FileUtils.cp 'symlink', 'dest' # copy content, "dest" is not a symlink
|
||||||
#
|
#
|
||||||
def cp(src, dest, preserve: nil, noop: nil, verbose: nil)
|
def cp(src, dest, preserve: nil, noop: nil, verbose: nil)
|
||||||
|
@ -433,13 +443,17 @@ module Bundler::FileUtils
|
||||||
#
|
#
|
||||||
# +src+ can be a list of files.
|
# +src+ can be a list of files.
|
||||||
#
|
#
|
||||||
|
# If +dereference_root+ is true, this method dereference tree root.
|
||||||
|
#
|
||||||
|
# If +remove_destination+ is true, this method removes each destination file before copy.
|
||||||
|
#
|
||||||
# # Installing Ruby library "mylib" under the site_ruby
|
# # Installing Ruby library "mylib" under the site_ruby
|
||||||
# Bundler::FileUtils.rm_r site_ruby + '/mylib', :force
|
# Bundler::FileUtils.rm_r site_ruby + '/mylib', force: true
|
||||||
# Bundler::FileUtils.cp_r 'lib/', site_ruby + '/mylib'
|
# Bundler::FileUtils.cp_r 'lib/', site_ruby + '/mylib'
|
||||||
#
|
#
|
||||||
# # Examples of copying several files to target directory.
|
# # Examples of copying several files to target directory.
|
||||||
# Bundler::FileUtils.cp_r %w(mail.rb field.rb debug/), site_ruby + '/tmail'
|
# Bundler::FileUtils.cp_r %w(mail.rb field.rb debug/), site_ruby + '/tmail'
|
||||||
# Bundler::FileUtils.cp_r Dir.glob('*.rb'), '/home/foo/lib/ruby', :noop => true, :verbose => true
|
# Bundler::FileUtils.cp_r Dir.glob('*.rb'), '/home/foo/lib/ruby', noop: true, verbose: true
|
||||||
#
|
#
|
||||||
# # If you want to copy all contents of a directory instead of the
|
# # If you want to copy all contents of a directory instead of the
|
||||||
# # directory itself, c.f. src/x -> dest/x, src/y -> dest/y,
|
# # directory itself, c.f. src/x -> dest/x, src/y -> dest/y,
|
||||||
|
@ -474,7 +488,11 @@ module Bundler::FileUtils
|
||||||
# If +remove_destination+ is true, this method removes each destination file before copy.
|
# If +remove_destination+ is true, this method removes each destination file before copy.
|
||||||
#
|
#
|
||||||
def copy_entry(src, dest, preserve = false, dereference_root = false, remove_destination = false)
|
def copy_entry(src, dest, preserve = false, dereference_root = false, remove_destination = false)
|
||||||
Entry_.new(src, nil, dereference_root).wrap_traverse(proc do |ent|
|
if dereference_root
|
||||||
|
src = File.realpath(src)
|
||||||
|
end
|
||||||
|
|
||||||
|
Entry_.new(src, nil, false).wrap_traverse(proc do |ent|
|
||||||
destent = Entry_.new(dest, ent.rel, false)
|
destent = Entry_.new(dest, ent.rel, false)
|
||||||
File.unlink destent.path if remove_destination && (File.file?(destent.path) || File.symlink?(destent.path))
|
File.unlink destent.path if remove_destination && (File.file?(destent.path) || File.symlink?(destent.path))
|
||||||
ent.copy destent.path
|
ent.copy destent.path
|
||||||
|
@ -511,10 +529,10 @@ module Bundler::FileUtils
|
||||||
# disk partition, the file is copied then the original file is removed.
|
# disk partition, the file is copied then the original file is removed.
|
||||||
#
|
#
|
||||||
# Bundler::FileUtils.mv 'badname.rb', 'goodname.rb'
|
# Bundler::FileUtils.mv 'badname.rb', 'goodname.rb'
|
||||||
# Bundler::FileUtils.mv 'stuff.rb', '/notexist/lib/ruby', :force => true # no error
|
# Bundler::FileUtils.mv 'stuff.rb', '/notexist/lib/ruby', force: true # no error
|
||||||
#
|
#
|
||||||
# Bundler::FileUtils.mv %w(junk.txt dust.txt), '/home/foo/.trash/'
|
# Bundler::FileUtils.mv %w(junk.txt dust.txt), '/home/foo/.trash/'
|
||||||
# Bundler::FileUtils.mv Dir.glob('test*.rb'), 'test', :noop => true, :verbose => true
|
# Bundler::FileUtils.mv Dir.glob('test*.rb'), 'test', noop: true, verbose: true
|
||||||
#
|
#
|
||||||
def mv(src, dest, force: nil, noop: nil, verbose: nil, secure: nil)
|
def mv(src, dest, force: nil, noop: nil, verbose: nil, secure: nil)
|
||||||
fu_output_message "mv#{force ? ' -f' : ''} #{[src,dest].flatten.join ' '}" if verbose
|
fu_output_message "mv#{force ? ' -f' : ''} #{[src,dest].flatten.join ' '}" if verbose
|
||||||
|
@ -554,7 +572,7 @@ module Bundler::FileUtils
|
||||||
#
|
#
|
||||||
# Bundler::FileUtils.rm %w( junk.txt dust.txt )
|
# Bundler::FileUtils.rm %w( junk.txt dust.txt )
|
||||||
# Bundler::FileUtils.rm Dir.glob('*.so')
|
# Bundler::FileUtils.rm Dir.glob('*.so')
|
||||||
# Bundler::FileUtils.rm 'NotExistFile', :force => true # never raises exception
|
# Bundler::FileUtils.rm 'NotExistFile', force: true # never raises exception
|
||||||
#
|
#
|
||||||
def rm(list, force: nil, noop: nil, verbose: nil)
|
def rm(list, force: nil, noop: nil, verbose: nil)
|
||||||
list = fu_list(list)
|
list = fu_list(list)
|
||||||
|
@ -573,7 +591,7 @@ module Bundler::FileUtils
|
||||||
#
|
#
|
||||||
# Equivalent to
|
# Equivalent to
|
||||||
#
|
#
|
||||||
# Bundler::FileUtils.rm(list, :force => true)
|
# Bundler::FileUtils.rm(list, force: true)
|
||||||
#
|
#
|
||||||
def rm_f(list, noop: nil, verbose: nil)
|
def rm_f(list, noop: nil, verbose: nil)
|
||||||
rm list, force: true, noop: noop, verbose: verbose
|
rm list, force: true, noop: noop, verbose: verbose
|
||||||
|
@ -589,18 +607,18 @@ module Bundler::FileUtils
|
||||||
# StandardError when :force option is set.
|
# StandardError when :force option is set.
|
||||||
#
|
#
|
||||||
# Bundler::FileUtils.rm_r Dir.glob('/tmp/*')
|
# Bundler::FileUtils.rm_r Dir.glob('/tmp/*')
|
||||||
# Bundler::FileUtils.rm_r 'some_dir', :force => true
|
# Bundler::FileUtils.rm_r 'some_dir', force: true
|
||||||
#
|
#
|
||||||
# WARNING: This method causes local vulnerability
|
# WARNING: This method causes local vulnerability
|
||||||
# if one of parent directories or removing directory tree are world
|
# if one of parent directories or removing directory tree are world
|
||||||
# writable (including /tmp, whose permission is 1777), and the current
|
# writable (including /tmp, whose permission is 1777), and the current
|
||||||
# process has strong privilege such as Unix super user (root), and the
|
# process has strong privilege such as Unix super user (root), and the
|
||||||
# system has symbolic link. For secure removing, read the documentation
|
# system has symbolic link. For secure removing, read the documentation
|
||||||
# of #remove_entry_secure carefully, and set :secure option to true.
|
# of remove_entry_secure carefully, and set :secure option to true.
|
||||||
# Default is :secure=>false.
|
# Default is <tt>secure: false</tt>.
|
||||||
#
|
#
|
||||||
# NOTE: This method calls #remove_entry_secure if :secure option is set.
|
# NOTE: This method calls remove_entry_secure if :secure option is set.
|
||||||
# See also #remove_entry_secure.
|
# See also remove_entry_secure.
|
||||||
#
|
#
|
||||||
def rm_r(list, force: nil, noop: nil, verbose: nil, secure: nil)
|
def rm_r(list, force: nil, noop: nil, verbose: nil, secure: nil)
|
||||||
list = fu_list(list)
|
list = fu_list(list)
|
||||||
|
@ -619,10 +637,10 @@ module Bundler::FileUtils
|
||||||
#
|
#
|
||||||
# Equivalent to
|
# Equivalent to
|
||||||
#
|
#
|
||||||
# Bundler::FileUtils.rm_r(list, :force => true)
|
# Bundler::FileUtils.rm_r(list, force: true)
|
||||||
#
|
#
|
||||||
# WARNING: This method causes local vulnerability.
|
# WARNING: This method causes local vulnerability.
|
||||||
# Read the documentation of #rm_r first.
|
# Read the documentation of rm_r first.
|
||||||
#
|
#
|
||||||
def rm_rf(list, noop: nil, verbose: nil, secure: nil)
|
def rm_rf(list, noop: nil, verbose: nil, secure: nil)
|
||||||
rm_r list, force: true, noop: noop, verbose: verbose, secure: secure
|
rm_r list, force: true, noop: noop, verbose: verbose, secure: secure
|
||||||
|
@ -636,7 +654,7 @@ module Bundler::FileUtils
|
||||||
# This method removes a file system entry +path+. +path+ shall be a
|
# This method removes a file system entry +path+. +path+ shall be a
|
||||||
# regular file, a directory, or something. If +path+ is a directory,
|
# regular file, a directory, or something. If +path+ is a directory,
|
||||||
# remove it recursively. This method is required to avoid TOCTTOU
|
# remove it recursively. This method is required to avoid TOCTTOU
|
||||||
# (time-of-check-to-time-of-use) local security vulnerability of #rm_r.
|
# (time-of-check-to-time-of-use) local security vulnerability of rm_r.
|
||||||
# #rm_r causes security hole when:
|
# #rm_r causes security hole when:
|
||||||
#
|
#
|
||||||
# * Parent directory is world writable (including /tmp).
|
# * Parent directory is world writable (including /tmp).
|
||||||
|
@ -755,7 +773,7 @@ module Bundler::FileUtils
|
||||||
# +path+ might be a regular file, a directory, or something.
|
# +path+ might be a regular file, a directory, or something.
|
||||||
# If +path+ is a directory, remove it recursively.
|
# If +path+ is a directory, remove it recursively.
|
||||||
#
|
#
|
||||||
# See also #remove_entry_secure.
|
# See also remove_entry_secure.
|
||||||
#
|
#
|
||||||
def remove_entry(path, force = false)
|
def remove_entry(path, force = false)
|
||||||
Entry_.new(path).postorder_traverse do |ent|
|
Entry_.new(path).postorder_traverse do |ent|
|
||||||
|
@ -839,8 +857,8 @@ module Bundler::FileUtils
|
||||||
# mode to +mode+. If +dest+ is a directory, destination is +dest+/+src+.
|
# mode to +mode+. If +dest+ is a directory, destination is +dest+/+src+.
|
||||||
# This method removes destination before copy.
|
# This method removes destination before copy.
|
||||||
#
|
#
|
||||||
# Bundler::FileUtils.install 'ruby', '/usr/local/bin/ruby', :mode => 0755, :verbose => true
|
# Bundler::FileUtils.install 'ruby', '/usr/local/bin/ruby', mode: 0755, verbose: true
|
||||||
# Bundler::FileUtils.install 'lib.rb', '/usr/local/lib/ruby/site_ruby', :verbose => true
|
# Bundler::FileUtils.install 'lib.rb', '/usr/local/lib/ruby/site_ruby', verbose: true
|
||||||
#
|
#
|
||||||
def install(src, dest, mode: nil, owner: nil, group: nil, preserve: nil,
|
def install(src, dest, mode: nil, owner: nil, group: nil, preserve: nil,
|
||||||
noop: nil, verbose: nil)
|
noop: nil, verbose: nil)
|
||||||
|
@ -970,12 +988,12 @@ module Bundler::FileUtils
|
||||||
# Absolute mode is
|
# Absolute mode is
|
||||||
# Bundler::FileUtils.chmod 0755, 'somecommand'
|
# Bundler::FileUtils.chmod 0755, 'somecommand'
|
||||||
# Bundler::FileUtils.chmod 0644, %w(my.rb your.rb his.rb her.rb)
|
# Bundler::FileUtils.chmod 0644, %w(my.rb your.rb his.rb her.rb)
|
||||||
# Bundler::FileUtils.chmod 0755, '/usr/bin/ruby', :verbose => true
|
# Bundler::FileUtils.chmod 0755, '/usr/bin/ruby', verbose: true
|
||||||
#
|
#
|
||||||
# Symbolic mode is
|
# Symbolic mode is
|
||||||
# Bundler::FileUtils.chmod "u=wrx,go=rx", 'somecommand'
|
# Bundler::FileUtils.chmod "u=wrx,go=rx", 'somecommand'
|
||||||
# Bundler::FileUtils.chmod "u=wr,go=rr", %w(my.rb your.rb his.rb her.rb)
|
# Bundler::FileUtils.chmod "u=wr,go=rr", %w(my.rb your.rb his.rb her.rb)
|
||||||
# Bundler::FileUtils.chmod "u=wrx,go=rx", '/usr/bin/ruby', :verbose => true
|
# Bundler::FileUtils.chmod "u=wrx,go=rx", '/usr/bin/ruby', verbose: true
|
||||||
#
|
#
|
||||||
# "a" :: is user, group, other mask.
|
# "a" :: is user, group, other mask.
|
||||||
# "u" :: is user's mask.
|
# "u" :: is user's mask.
|
||||||
|
@ -1035,7 +1053,7 @@ module Bundler::FileUtils
|
||||||
# the attribute.
|
# the attribute.
|
||||||
#
|
#
|
||||||
# Bundler::FileUtils.chown 'root', 'staff', '/usr/local/bin/ruby'
|
# Bundler::FileUtils.chown 'root', 'staff', '/usr/local/bin/ruby'
|
||||||
# Bundler::FileUtils.chown nil, 'bin', Dir.glob('/usr/bin/*'), :verbose => true
|
# Bundler::FileUtils.chown nil, 'bin', Dir.glob('/usr/bin/*'), verbose: true
|
||||||
#
|
#
|
||||||
def chown(user, group, list, noop: nil, verbose: nil)
|
def chown(user, group, list, noop: nil, verbose: nil)
|
||||||
list = fu_list(list)
|
list = fu_list(list)
|
||||||
|
@ -1059,7 +1077,7 @@ module Bundler::FileUtils
|
||||||
# method does not change the attribute.
|
# method does not change the attribute.
|
||||||
#
|
#
|
||||||
# Bundler::FileUtils.chown_R 'www', 'www', '/var/www/htdocs'
|
# Bundler::FileUtils.chown_R 'www', 'www', '/var/www/htdocs'
|
||||||
# Bundler::FileUtils.chown_R 'cvs', 'cvs', '/var/cvs', :verbose => true
|
# Bundler::FileUtils.chown_R 'cvs', 'cvs', '/var/cvs', verbose: true
|
||||||
#
|
#
|
||||||
def chown_R(user, group, list, noop: nil, verbose: nil, force: nil)
|
def chown_R(user, group, list, noop: nil, verbose: nil, force: nil)
|
||||||
list = fu_list(list)
|
list = fu_list(list)
|
||||||
|
@ -1276,13 +1294,13 @@ module Bundler::FileUtils
|
||||||
opts[:encoding] = ::Encoding::UTF_8 if fu_windows?
|
opts[:encoding] = ::Encoding::UTF_8 if fu_windows?
|
||||||
|
|
||||||
files = if Dir.respond_to?(:children)
|
files = if Dir.respond_to?(:children)
|
||||||
Dir.children(path, opts)
|
Dir.children(path, **opts)
|
||||||
else
|
else
|
||||||
Dir.entries(path(), opts)
|
Dir.entries(path(), **opts)
|
||||||
.reject {|n| n == '.' or n == '..' }
|
.reject {|n| n == '.' or n == '..' }
|
||||||
end
|
end
|
||||||
|
|
||||||
files.map {|n| Entry_.new(prefix(), join(rel(), n.untaint)) }
|
files.map {|n| Entry_.new(prefix(), join(rel(), n.tap{|x| x.untaint if RUBY_VERSION < "2.7" })) }
|
||||||
end
|
end
|
||||||
|
|
||||||
def stat
|
def stat
|
||||||
|
@ -1369,18 +1387,21 @@ module Bundler::FileUtils
|
||||||
end
|
end
|
||||||
when symlink?
|
when symlink?
|
||||||
File.symlink File.readlink(path()), dest
|
File.symlink File.readlink(path()), dest
|
||||||
when chardev?
|
when chardev?, blockdev?
|
||||||
raise "cannot handle device file" unless File.respond_to?(:mknod)
|
raise "cannot handle device file"
|
||||||
mknod dest, ?c, 0666, lstat().rdev
|
|
||||||
when blockdev?
|
|
||||||
raise "cannot handle device file" unless File.respond_to?(:mknod)
|
|
||||||
mknod dest, ?b, 0666, lstat().rdev
|
|
||||||
when socket?
|
when socket?
|
||||||
raise "cannot handle socket" unless File.respond_to?(:mknod)
|
begin
|
||||||
mknod dest, nil, lstat().mode, 0
|
require 'socket'
|
||||||
|
rescue LoadError
|
||||||
|
raise "cannot handle socket"
|
||||||
|
else
|
||||||
|
raise "cannot handle socket" unless defined?(UNIXServer)
|
||||||
|
end
|
||||||
|
UNIXServer.new(dest).close
|
||||||
|
File.chmod lstat().mode, dest
|
||||||
when pipe?
|
when pipe?
|
||||||
raise "cannot handle FIFO" unless File.respond_to?(:mkfifo)
|
raise "cannot handle FIFO" unless File.respond_to?(:mkfifo)
|
||||||
mkfifo dest, 0666
|
File.mkfifo dest, lstat().mode
|
||||||
when door?
|
when door?
|
||||||
raise "cannot handle door: #{path()}"
|
raise "cannot handle door: #{path()}"
|
||||||
else
|
else
|
||||||
|
@ -1499,14 +1520,14 @@ module Bundler::FileUtils
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
$fileutils_rb_have_lchmod = nil
|
@@fileutils_rb_have_lchmod = nil
|
||||||
|
|
||||||
def have_lchmod?
|
def have_lchmod?
|
||||||
# This is not MT-safe, but it does not matter.
|
# This is not MT-safe, but it does not matter.
|
||||||
if $fileutils_rb_have_lchmod == nil
|
if @@fileutils_rb_have_lchmod == nil
|
||||||
$fileutils_rb_have_lchmod = check_have_lchmod?
|
@@fileutils_rb_have_lchmod = check_have_lchmod?
|
||||||
end
|
end
|
||||||
$fileutils_rb_have_lchmod
|
@@fileutils_rb_have_lchmod
|
||||||
end
|
end
|
||||||
|
|
||||||
def check_have_lchmod?
|
def check_have_lchmod?
|
||||||
|
@ -1517,14 +1538,14 @@ module Bundler::FileUtils
|
||||||
return false
|
return false
|
||||||
end
|
end
|
||||||
|
|
||||||
$fileutils_rb_have_lchown = nil
|
@@fileutils_rb_have_lchown = nil
|
||||||
|
|
||||||
def have_lchown?
|
def have_lchown?
|
||||||
# This is not MT-safe, but it does not matter.
|
# This is not MT-safe, but it does not matter.
|
||||||
if $fileutils_rb_have_lchown == nil
|
if @@fileutils_rb_have_lchown == nil
|
||||||
$fileutils_rb_have_lchown = check_have_lchown?
|
@@fileutils_rb_have_lchown = check_have_lchown?
|
||||||
end
|
end
|
||||||
$fileutils_rb_have_lchown
|
@@fileutils_rb_have_lchown
|
||||||
end
|
end
|
||||||
|
|
||||||
def check_have_lchown?
|
def check_have_lchown?
|
||||||
|
@ -1546,10 +1567,13 @@ module Bundler::FileUtils
|
||||||
else
|
else
|
||||||
DIRECTORY_TERM = "(?=/|\\z)"
|
DIRECTORY_TERM = "(?=/|\\z)"
|
||||||
end
|
end
|
||||||
SYSCASE = File::FNM_SYSCASE.nonzero? ? "-i" : ""
|
|
||||||
|
|
||||||
def descendant_directory?(descendant, ascendant)
|
def descendant_directory?(descendant, ascendant)
|
||||||
/\A(?#{SYSCASE}:#{Regexp.quote(ascendant)})#{DIRECTORY_TERM}/ =~ File.dirname(descendant)
|
if File::FNM_SYSCASE.nonzero?
|
||||||
|
File.expand_path(File.dirname(descendant)).casecmp(File.expand_path(ascendant)) == 0
|
||||||
|
else
|
||||||
|
File.expand_path(File.dirname(descendant)) == File.expand_path(ascendant)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end # class Entry_
|
end # class Entry_
|
||||||
|
|
||||||
|
@ -1588,13 +1612,13 @@ module Bundler::FileUtils
|
||||||
end
|
end
|
||||||
private_module_function :fu_same?
|
private_module_function :fu_same?
|
||||||
|
|
||||||
@fileutils_output = $stderr
|
|
||||||
@fileutils_label = ''
|
|
||||||
|
|
||||||
def fu_output_message(msg) #:nodoc:
|
def fu_output_message(msg) #:nodoc:
|
||||||
@fileutils_output ||= $stderr
|
output = @fileutils_output if defined?(@fileutils_output)
|
||||||
@fileutils_label ||= ''
|
output ||= $stderr
|
||||||
@fileutils_output.puts @fileutils_label + msg
|
if defined?(@fileutils_label)
|
||||||
|
msg = @fileutils_label + msg
|
||||||
|
end
|
||||||
|
output.puts msg
|
||||||
end
|
end
|
||||||
private_module_function :fu_output_message
|
private_module_function :fu_output_message
|
||||||
|
|
||||||
|
@ -1605,8 +1629,11 @@ module Bundler::FileUtils
|
||||||
tbl
|
tbl
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public
|
||||||
|
|
||||||
#
|
#
|
||||||
# Returns an Array of method names which have any options.
|
# Returns an Array of names of high-level methods that accept any keyword
|
||||||
|
# arguments.
|
||||||
#
|
#
|
||||||
# p Bundler::FileUtils.commands #=> ["chmod", "cp", "cp_r", "install", ...]
|
# p Bundler::FileUtils.commands #=> ["chmod", "cp", "cp_r", "install", ...]
|
||||||
#
|
#
|
||||||
|
@ -1645,7 +1672,7 @@ module Bundler::FileUtils
|
||||||
end
|
end
|
||||||
|
|
||||||
#
|
#
|
||||||
# Returns an Array of method names which have the option +opt+.
|
# Returns an Array of methods names which have the option +opt+.
|
||||||
#
|
#
|
||||||
# p Bundler::FileUtils.collect_method(:preserve) #=> ["cp", "cp_r", "copy", "install"]
|
# p Bundler::FileUtils.collect_method(:preserve) #=> ["cp", "cp_r", "copy", "install"]
|
||||||
#
|
#
|
||||||
|
@ -1653,14 +1680,16 @@ module Bundler::FileUtils
|
||||||
OPT_TABLE.keys.select {|m| OPT_TABLE[m].include?(opt) }
|
OPT_TABLE.keys.select {|m| OPT_TABLE[m].include?(opt) }
|
||||||
end
|
end
|
||||||
|
|
||||||
LOW_METHODS = singleton_methods(false) - collect_method(:noop).map(&:intern)
|
private
|
||||||
module LowMethods
|
|
||||||
|
LOW_METHODS = singleton_methods(false) - collect_method(:noop).map(&:intern) # :nodoc:
|
||||||
|
module LowMethods # :nodoc: internal use only
|
||||||
private
|
private
|
||||||
def _do_nothing(*)end
|
def _do_nothing(*)end
|
||||||
::Bundler::FileUtils::LOW_METHODS.map {|name| alias_method name, :_do_nothing}
|
::Bundler::FileUtils::LOW_METHODS.map {|name| alias_method name, :_do_nothing}
|
||||||
end
|
end
|
||||||
|
|
||||||
METHODS = singleton_methods() - [:private_module_function,
|
METHODS = singleton_methods() - [:private_module_function, # :nodoc:
|
||||||
:commands, :options, :have_option?, :options_of, :collect_method]
|
:commands, :options, :have_option?, :options_of, :collect_method]
|
||||||
|
|
||||||
#
|
#
|
||||||
|
@ -1670,8 +1699,6 @@ module Bundler::FileUtils
|
||||||
#
|
#
|
||||||
module Verbose
|
module Verbose
|
||||||
include Bundler::FileUtils
|
include Bundler::FileUtils
|
||||||
@fileutils_output = $stderr
|
|
||||||
@fileutils_label = ''
|
|
||||||
names = ::Bundler::FileUtils.collect_method(:verbose)
|
names = ::Bundler::FileUtils.collect_method(:verbose)
|
||||||
names.each do |name|
|
names.each do |name|
|
||||||
module_eval(<<-EOS, __FILE__, __LINE__ + 1)
|
module_eval(<<-EOS, __FILE__, __LINE__ + 1)
|
||||||
|
@ -1695,8 +1722,6 @@ module Bundler::FileUtils
|
||||||
module NoWrite
|
module NoWrite
|
||||||
include Bundler::FileUtils
|
include Bundler::FileUtils
|
||||||
include LowMethods
|
include LowMethods
|
||||||
@fileutils_output = $stderr
|
|
||||||
@fileutils_label = ''
|
|
||||||
names = ::Bundler::FileUtils.collect_method(:noop)
|
names = ::Bundler::FileUtils.collect_method(:noop)
|
||||||
names.each do |name|
|
names.each do |name|
|
||||||
module_eval(<<-EOS, __FILE__, __LINE__ + 1)
|
module_eval(<<-EOS, __FILE__, __LINE__ + 1)
|
||||||
|
@ -1721,8 +1746,6 @@ module Bundler::FileUtils
|
||||||
module DryRun
|
module DryRun
|
||||||
include Bundler::FileUtils
|
include Bundler::FileUtils
|
||||||
include LowMethods
|
include LowMethods
|
||||||
@fileutils_output = $stderr
|
|
||||||
@fileutils_label = ''
|
|
||||||
names = ::Bundler::FileUtils.collect_method(:noop)
|
names = ::Bundler::FileUtils.collect_method(:noop)
|
||||||
names.each do |name|
|
names.each do |name|
|
||||||
module_eval(<<-EOS, __FILE__, __LINE__ + 1)
|
module_eval(<<-EOS, __FILE__, __LINE__ + 1)
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
# frozen_string_literal: true
|
# frozen_string_literal: true
|
||||||
|
|
||||||
module Bundler::FileUtils
|
module Bundler::FileUtils
|
||||||
VERSION = "1.2.0"
|
VERSION = "1.3.0"
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
# frozen_string_literal: false
|
# frozen_string_literal: false
|
||||||
|
|
||||||
module Bundler
|
module Bundler
|
||||||
VERSION = "2.1.0.pre.2".freeze
|
VERSION = "2.1.0.pre.3".freeze
|
||||||
|
|
||||||
def self.bundler_major_version
|
def self.bundler_major_version
|
||||||
@bundler_major_version ||= VERSION.split(".").first.to_i
|
@bundler_major_version ||= VERSION.split(".").first.to_i
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
.\" generated with Ronn/v0.7.3
|
.\" generated with Ronn/v0.7.3
|
||||||
.\" http://github.com/rtomayko/ronn/tree/0.7.3
|
.\" http://github.com/rtomayko/ronn/tree/0.7.3
|
||||||
.
|
.
|
||||||
.TH "BUNDLE\-ADD" "1" "September 2019" "" ""
|
.TH "BUNDLE\-ADD" "1" "November 2019" "" ""
|
||||||
.
|
.
|
||||||
.SH "NAME"
|
.SH "NAME"
|
||||||
\fBbundle\-add\fR \- Add gem to the Gemfile and run bundle install
|
\fBbundle\-add\fR \- Add gem to the Gemfile and run bundle install
|
||||||
|
|
|
@ -55,4 +55,4 @@ OPTIONS
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
September 2019 BUNDLE-ADD(1)
|
November 2019 BUNDLE-ADD(1)
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
.\" generated with Ronn/v0.7.3
|
.\" generated with Ronn/v0.7.3
|
||||||
.\" http://github.com/rtomayko/ronn/tree/0.7.3
|
.\" http://github.com/rtomayko/ronn/tree/0.7.3
|
||||||
.
|
.
|
||||||
.TH "BUNDLE\-BINSTUBS" "1" "September 2019" "" ""
|
.TH "BUNDLE\-BINSTUBS" "1" "November 2019" "" ""
|
||||||
.
|
.
|
||||||
.SH "NAME"
|
.SH "NAME"
|
||||||
\fBbundle\-binstubs\fR \- Install the binstubs of the listed gems
|
\fBbundle\-binstubs\fR \- Install the binstubs of the listed gems
|
||||||
|
|
|
@ -45,4 +45,4 @@ BUNDLE INSTALL --BINSTUBS
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
September 2019 BUNDLE-BINSTUBS(1)
|
November 2019 BUNDLE-BINSTUBS(1)
|
||||||
|
|
55
man/bundle-cache.1
Normal file
55
man/bundle-cache.1
Normal file
|
@ -0,0 +1,55 @@
|
||||||
|
.\" generated with Ronn/v0.7.3
|
||||||
|
.\" http://github.com/rtomayko/ronn/tree/0.7.3
|
||||||
|
.
|
||||||
|
.TH "BUNDLE\-CACHE" "1" "November 2019" "" ""
|
||||||
|
.
|
||||||
|
.SH "NAME"
|
||||||
|
\fBbundle\-cache\fR \- Package your needed \fB\.gem\fR files into your application
|
||||||
|
.
|
||||||
|
.SH "SYNOPSIS"
|
||||||
|
\fBbundle cache\fR
|
||||||
|
.
|
||||||
|
.SH "DESCRIPTION"
|
||||||
|
Copy all of the \fB\.gem\fR files needed to run the application into the \fBvendor/cache\fR directory\. In the future, when running [bundle install(1)][bundle\-install], use the gems in the cache in preference to the ones on \fBrubygems\.org\fR\.
|
||||||
|
.
|
||||||
|
.SH "GIT AND PATH GEMS"
|
||||||
|
The \fBbundle cache\fR command can also package \fB:git\fR and \fB:path\fR dependencies besides \.gem files\. This needs to be explicitly enabled via the \fB\-\-all\fR option\. Once used, the \fB\-\-all\fR option will be remembered\.
|
||||||
|
.
|
||||||
|
.SH "SUPPORT FOR MULTIPLE PLATFORMS"
|
||||||
|
When using gems that have different packages for different platforms, Bundler supports caching of gems for other platforms where the Gemfile has been resolved (i\.e\. present in the lockfile) in \fBvendor/cache\fR\. This needs to be enabled via the \fB\-\-all\-platforms\fR option\. This setting will be remembered in your local bundler configuration\.
|
||||||
|
.
|
||||||
|
.SH "REMOTE FETCHING"
|
||||||
|
By default, if you run \fBbundle install(1)\fR](bundle\-install\.1\.html) after running bundle cache(1) \fIbundle\-cache\.1\.html\fR, bundler will still connect to \fBrubygems\.org\fR to check whether a platform\-specific gem exists for any of the gems in \fBvendor/cache\fR\.
|
||||||
|
.
|
||||||
|
.P
|
||||||
|
For instance, consider this Gemfile(5):
|
||||||
|
.
|
||||||
|
.IP "" 4
|
||||||
|
.
|
||||||
|
.nf
|
||||||
|
|
||||||
|
source "https://rubygems\.org"
|
||||||
|
|
||||||
|
gem "nokogiri"
|
||||||
|
.
|
||||||
|
.fi
|
||||||
|
.
|
||||||
|
.IP "" 0
|
||||||
|
.
|
||||||
|
.P
|
||||||
|
If you run \fBbundle cache\fR under C Ruby, bundler will retrieve the version of \fBnokogiri\fR for the \fB"ruby"\fR platform\. If you deploy to JRuby and run \fBbundle install\fR, bundler is forced to check to see whether a \fB"java"\fR platformed \fBnokogiri\fR exists\.
|
||||||
|
.
|
||||||
|
.P
|
||||||
|
Even though the \fBnokogiri\fR gem for the Ruby platform is \fItechnically\fR acceptable on JRuby, it has a C extension that does not run on JRuby\. As a result, bundler will, by default, still connect to \fBrubygems\.org\fR to check whether it has a version of one of your gems more specific to your platform\.
|
||||||
|
.
|
||||||
|
.P
|
||||||
|
This problem is also not limited to the \fB"java"\fR platform\. A similar (common) problem can happen when developing on Windows and deploying to Linux, or even when developing on OSX and deploying to Linux\.
|
||||||
|
.
|
||||||
|
.P
|
||||||
|
If you know for sure that the gems packaged in \fBvendor/cache\fR are appropriate for the platform you are on, you can run \fBbundle install \-\-local\fR to skip checking for more appropriate gems, and use the ones in \fBvendor/cache\fR\.
|
||||||
|
.
|
||||||
|
.P
|
||||||
|
One way to be sure that you have the right platformed versions of all your gems is to run \fBbundle cache\fR on an identical machine and check in the gems\. For instance, you can run \fBbundle cache\fR on an identical staging box during your staging process, and check in the \fBvendor/cache\fR before deploying to production\.
|
||||||
|
.
|
||||||
|
.P
|
||||||
|
By default, bundle cache(1) \fIbundle\-cache\.1\.html\fR fetches and also installs the gems to the default location\. To package the dependencies to \fBvendor/cache\fR without installing them to the local install location, you can run \fBbundle cache \-\-no\-install\fR\.
|
78
man/bundle-cache.1.txt
Normal file
78
man/bundle-cache.1.txt
Normal file
|
@ -0,0 +1,78 @@
|
||||||
|
BUNDLE-CACHE(1) BUNDLE-CACHE(1)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
NAME
|
||||||
|
bundle-cache - Package your needed .gem files into your application
|
||||||
|
|
||||||
|
SYNOPSIS
|
||||||
|
bundle cache
|
||||||
|
|
||||||
|
DESCRIPTION
|
||||||
|
Copy all of the .gem files needed to run the application into the ven-
|
||||||
|
dor/cache directory. In the future, when running [bundle
|
||||||
|
install(1)][bundle-install], use the gems in the cache in preference to
|
||||||
|
the ones on rubygems.org.
|
||||||
|
|
||||||
|
GIT AND PATH GEMS
|
||||||
|
The bundle cache command can also package :git and :path dependencies
|
||||||
|
besides .gem files. This needs to be explicitly enabled via the --all
|
||||||
|
option. Once used, the --all option will be remembered.
|
||||||
|
|
||||||
|
SUPPORT FOR MULTIPLE PLATFORMS
|
||||||
|
When using gems that have different packages for different platforms,
|
||||||
|
Bundler supports caching of gems for other platforms where the Gemfile
|
||||||
|
has been resolved (i.e. present in the lockfile) in vendor/cache. This
|
||||||
|
needs to be enabled via the --all-platforms option. This setting will
|
||||||
|
be remembered in your local bundler configuration.
|
||||||
|
|
||||||
|
REMOTE FETCHING
|
||||||
|
By default, if you run bundle install(1)](bundle-install.1.html) after
|
||||||
|
running bundle cache(1) bundle-cache.1.html, bundler will still connect
|
||||||
|
to rubygems.org to check whether a platform-specific gem exists for any
|
||||||
|
of the gems in vendor/cache.
|
||||||
|
|
||||||
|
For instance, consider this Gemfile(5):
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
source "https://rubygems.org"
|
||||||
|
|
||||||
|
gem "nokogiri"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
If you run bundle cache under C Ruby, bundler will retrieve the version
|
||||||
|
of nokogiri for the "ruby" platform. If you deploy to JRuby and run
|
||||||
|
bundle install, bundler is forced to check to see whether a "java"
|
||||||
|
platformed nokogiri exists.
|
||||||
|
|
||||||
|
Even though the nokogiri gem for the Ruby platform is technically
|
||||||
|
acceptable on JRuby, it has a C extension that does not run on JRuby.
|
||||||
|
As a result, bundler will, by default, still connect to rubygems.org to
|
||||||
|
check whether it has a version of one of your gems more specific to
|
||||||
|
your platform.
|
||||||
|
|
||||||
|
This problem is also not limited to the "java" platform. A similar
|
||||||
|
(common) problem can happen when developing on Windows and deploying to
|
||||||
|
Linux, or even when developing on OSX and deploying to Linux.
|
||||||
|
|
||||||
|
If you know for sure that the gems packaged in vendor/cache are appro-
|
||||||
|
priate for the platform you are on, you can run bundle install --local
|
||||||
|
to skip checking for more appropriate gems, and use the ones in ven-
|
||||||
|
dor/cache.
|
||||||
|
|
||||||
|
One way to be sure that you have the right platformed versions of all
|
||||||
|
your gems is to run bundle cache on an identical machine and check in
|
||||||
|
the gems. For instance, you can run bundle cache on an identical stag-
|
||||||
|
ing box during your staging process, and check in the vendor/cache
|
||||||
|
before deploying to production.
|
||||||
|
|
||||||
|
By default, bundle cache(1) bundle-cache.1.html fetches and also
|
||||||
|
installs the gems to the default location. To package the dependencies
|
||||||
|
to vendor/cache without installing them to the local install location,
|
||||||
|
you can run bundle cache --no-install.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
November 2019 BUNDLE-CACHE(1)
|
72
man/bundle-cache.ronn
Normal file
72
man/bundle-cache.ronn
Normal file
|
@ -0,0 +1,72 @@
|
||||||
|
bundle-cache(1) -- Package your needed `.gem` files into your application
|
||||||
|
===========================================================================
|
||||||
|
|
||||||
|
## SYNOPSIS
|
||||||
|
|
||||||
|
`bundle cache`
|
||||||
|
|
||||||
|
## DESCRIPTION
|
||||||
|
|
||||||
|
Copy all of the `.gem` files needed to run the application into the
|
||||||
|
`vendor/cache` directory. In the future, when running [bundle install(1)][bundle-install],
|
||||||
|
use the gems in the cache in preference to the ones on `rubygems.org`.
|
||||||
|
|
||||||
|
## GIT AND PATH GEMS
|
||||||
|
|
||||||
|
The `bundle cache` command can also package `:git` and `:path` dependencies
|
||||||
|
besides .gem files. This needs to be explicitly enabled via the `--all` option.
|
||||||
|
Once used, the `--all` option will be remembered.
|
||||||
|
|
||||||
|
## SUPPORT FOR MULTIPLE PLATFORMS
|
||||||
|
|
||||||
|
When using gems that have different packages for different platforms, Bundler
|
||||||
|
supports caching of gems for other platforms where the Gemfile has been resolved
|
||||||
|
(i.e. present in the lockfile) in `vendor/cache`. This needs to be enabled via
|
||||||
|
the `--all-platforms` option. This setting will be remembered in your local
|
||||||
|
bundler configuration.
|
||||||
|
|
||||||
|
## REMOTE FETCHING
|
||||||
|
|
||||||
|
By default, if you run `bundle install(1)`](bundle-install.1.html) after running
|
||||||
|
[bundle cache(1)](bundle-cache.1.html), bundler will still connect to `rubygems.org`
|
||||||
|
to check whether a platform-specific gem exists for any of the gems
|
||||||
|
in `vendor/cache`.
|
||||||
|
|
||||||
|
For instance, consider this Gemfile(5):
|
||||||
|
|
||||||
|
source "https://rubygems.org"
|
||||||
|
|
||||||
|
gem "nokogiri"
|
||||||
|
|
||||||
|
If you run `bundle cache` under C Ruby, bundler will retrieve
|
||||||
|
the version of `nokogiri` for the `"ruby"` platform. If you deploy
|
||||||
|
to JRuby and run `bundle install`, bundler is forced to check to
|
||||||
|
see whether a `"java"` platformed `nokogiri` exists.
|
||||||
|
|
||||||
|
Even though the `nokogiri` gem for the Ruby platform is
|
||||||
|
_technically_ acceptable on JRuby, it has a C extension
|
||||||
|
that does not run on JRuby. As a result, bundler will, by default,
|
||||||
|
still connect to `rubygems.org` to check whether it has a version
|
||||||
|
of one of your gems more specific to your platform.
|
||||||
|
|
||||||
|
This problem is also not limited to the `"java"` platform.
|
||||||
|
A similar (common) problem can happen when developing on Windows
|
||||||
|
and deploying to Linux, or even when developing on OSX and
|
||||||
|
deploying to Linux.
|
||||||
|
|
||||||
|
If you know for sure that the gems packaged in `vendor/cache`
|
||||||
|
are appropriate for the platform you are on, you can run
|
||||||
|
`bundle install --local` to skip checking for more appropriate
|
||||||
|
gems, and use the ones in `vendor/cache`.
|
||||||
|
|
||||||
|
One way to be sure that you have the right platformed versions
|
||||||
|
of all your gems is to run `bundle cache` on an identical
|
||||||
|
machine and check in the gems. For instance, you can run
|
||||||
|
`bundle cache` on an identical staging box during your
|
||||||
|
staging process, and check in the `vendor/cache` before
|
||||||
|
deploying to production.
|
||||||
|
|
||||||
|
By default, [bundle cache(1)](bundle-cache.1.html) fetches and also
|
||||||
|
installs the gems to the default location. To package the
|
||||||
|
dependencies to `vendor/cache` without installing them to the
|
||||||
|
local install location, you can run `bundle cache --no-install`.
|
|
@ -1,7 +1,7 @@
|
||||||
.\" generated with Ronn/v0.7.3
|
.\" generated with Ronn/v0.7.3
|
||||||
.\" http://github.com/rtomayko/ronn/tree/0.7.3
|
.\" http://github.com/rtomayko/ronn/tree/0.7.3
|
||||||
.
|
.
|
||||||
.TH "BUNDLE\-CHECK" "1" "September 2019" "" ""
|
.TH "BUNDLE\-CHECK" "1" "November 2019" "" ""
|
||||||
.
|
.
|
||||||
.SH "NAME"
|
.SH "NAME"
|
||||||
\fBbundle\-check\fR \- Verifies if dependencies are satisfied by installed gems
|
\fBbundle\-check\fR \- Verifies if dependencies are satisfied by installed gems
|
||||||
|
|
|
@ -30,4 +30,4 @@ OPTIONS
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
September 2019 BUNDLE-CHECK(1)
|
November 2019 BUNDLE-CHECK(1)
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
.\" generated with Ronn/v0.7.3
|
.\" generated with Ronn/v0.7.3
|
||||||
.\" http://github.com/rtomayko/ronn/tree/0.7.3
|
.\" http://github.com/rtomayko/ronn/tree/0.7.3
|
||||||
.
|
.
|
||||||
.TH "BUNDLE\-CLEAN" "1" "September 2019" "" ""
|
.TH "BUNDLE\-CLEAN" "1" "November 2019" "" ""
|
||||||
.
|
.
|
||||||
.SH "NAME"
|
.SH "NAME"
|
||||||
\fBbundle\-clean\fR \- Cleans up unused gems in your bundler directory
|
\fBbundle\-clean\fR \- Cleans up unused gems in your bundler directory
|
||||||
|
|
|
@ -23,4 +23,4 @@ OPTIONS
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
September 2019 BUNDLE-CLEAN(1)
|
November 2019 BUNDLE-CLEAN(1)
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
.\" generated with Ronn/v0.7.3
|
.\" generated with Ronn/v0.7.3
|
||||||
.\" http://github.com/rtomayko/ronn/tree/0.7.3
|
.\" http://github.com/rtomayko/ronn/tree/0.7.3
|
||||||
.
|
.
|
||||||
.TH "BUNDLE\-CONFIG" "1" "September 2019" "" ""
|
.TH "BUNDLE\-CONFIG" "1" "November 2019" "" ""
|
||||||
.
|
.
|
||||||
.SH "NAME"
|
.SH "NAME"
|
||||||
\fBbundle\-config\fR \- Set bundler configuration options
|
\fBbundle\-config\fR \- Set bundler configuration options
|
||||||
|
|
|
@ -525,4 +525,4 @@ CONFIGURE BUNDLER DIRECTORIES
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
September 2019 BUNDLE-CONFIG(1)
|
November 2019 BUNDLE-CONFIG(1)
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
.\" generated with Ronn/v0.7.3
|
.\" generated with Ronn/v0.7.3
|
||||||
.\" http://github.com/rtomayko/ronn/tree/0.7.3
|
.\" http://github.com/rtomayko/ronn/tree/0.7.3
|
||||||
.
|
.
|
||||||
.TH "BUNDLE\-DOCTOR" "1" "September 2019" "" ""
|
.TH "BUNDLE\-DOCTOR" "1" "November 2019" "" ""
|
||||||
.
|
.
|
||||||
.SH "NAME"
|
.SH "NAME"
|
||||||
\fBbundle\-doctor\fR \- Checks the bundle for common problems
|
\fBbundle\-doctor\fR \- Checks the bundle for common problems
|
||||||
|
|
|
@ -41,4 +41,4 @@ OPTIONS
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
September 2019 BUNDLE-DOCTOR(1)
|
November 2019 BUNDLE-DOCTOR(1)
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
.\" generated with Ronn/v0.7.3
|
.\" generated with Ronn/v0.7.3
|
||||||
.\" http://github.com/rtomayko/ronn/tree/0.7.3
|
.\" http://github.com/rtomayko/ronn/tree/0.7.3
|
||||||
.
|
.
|
||||||
.TH "BUNDLE\-EXEC" "1" "September 2019" "" ""
|
.TH "BUNDLE\-EXEC" "1" "November 2019" "" ""
|
||||||
.
|
.
|
||||||
.SH "NAME"
|
.SH "NAME"
|
||||||
\fBbundle\-exec\fR \- Execute a command in the context of the bundle
|
\fBbundle\-exec\fR \- Execute a command in the context of the bundle
|
||||||
|
|
|
@ -175,4 +175,4 @@ RUBYGEMS PLUGINS
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
September 2019 BUNDLE-EXEC(1)
|
November 2019 BUNDLE-EXEC(1)
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
.\" generated with Ronn/v0.7.3
|
.\" generated with Ronn/v0.7.3
|
||||||
.\" http://github.com/rtomayko/ronn/tree/0.7.3
|
.\" http://github.com/rtomayko/ronn/tree/0.7.3
|
||||||
.
|
.
|
||||||
.TH "BUNDLE\-GEM" "1" "September 2019" "" ""
|
.TH "BUNDLE\-GEM" "1" "November 2019" "" ""
|
||||||
.
|
.
|
||||||
.SH "NAME"
|
.SH "NAME"
|
||||||
\fBbundle\-gem\fR \- Generate a project skeleton for creating a rubygem
|
\fBbundle\-gem\fR \- Generate a project skeleton for creating a rubygem
|
||||||
|
|
|
@ -77,8 +77,8 @@ OPTIONS
|
||||||
|
|
||||||
-e, --edit[=EDITOR]
|
-e, --edit[=EDITOR]
|
||||||
Open the resulting GEM_NAME.gemspec in EDITOR, or the default
|
Open the resulting GEM_NAME.gemspec in EDITOR, or the default
|
||||||
editor if not specified. The default is $BUNDLER_EDITOR,
|
editor if not specified. The default is $BUNDLER_EDITOR, $VIS-
|
||||||
$VISUAL, or $EDITOR.
|
UAL, or $EDITOR.
|
||||||
|
|
||||||
SEE ALSO
|
SEE ALSO
|
||||||
o bundle config(1) bundle-config.1.html
|
o bundle config(1) bundle-config.1.html
|
||||||
|
@ -88,4 +88,4 @@ SEE ALSO
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
September 2019 BUNDLE-GEM(1)
|
November 2019 BUNDLE-GEM(1)
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
.\" generated with Ronn/v0.7.3
|
.\" generated with Ronn/v0.7.3
|
||||||
.\" http://github.com/rtomayko/ronn/tree/0.7.3
|
.\" http://github.com/rtomayko/ronn/tree/0.7.3
|
||||||
.
|
.
|
||||||
.TH "BUNDLE\-INFO" "1" "September 2019" "" ""
|
.TH "BUNDLE\-INFO" "1" "November 2019" "" ""
|
||||||
.
|
.
|
||||||
.SH "NAME"
|
.SH "NAME"
|
||||||
\fBbundle\-info\fR \- Show information for the given gem in your bundle
|
\fBbundle\-info\fR \- Show information for the given gem in your bundle
|
||||||
|
|
|
@ -18,4 +18,4 @@ OPTIONS
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
September 2019 BUNDLE-INFO(1)
|
November 2019 BUNDLE-INFO(1)
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
.\" generated with Ronn/v0.7.3
|
.\" generated with Ronn/v0.7.3
|
||||||
.\" http://github.com/rtomayko/ronn/tree/0.7.3
|
.\" http://github.com/rtomayko/ronn/tree/0.7.3
|
||||||
.
|
.
|
||||||
.TH "BUNDLE\-INIT" "1" "September 2019" "" ""
|
.TH "BUNDLE\-INIT" "1" "November 2019" "" ""
|
||||||
.
|
.
|
||||||
.SH "NAME"
|
.SH "NAME"
|
||||||
\fBbundle\-init\fR \- Generates a Gemfile into the current working directory
|
\fBbundle\-init\fR \- Generates a Gemfile into the current working directory
|
||||||
|
|
|
@ -31,4 +31,4 @@ SEE ALSO
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
September 2019 BUNDLE-INIT(1)
|
November 2019 BUNDLE-INIT(1)
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
.\" generated with Ronn/v0.7.3
|
.\" generated with Ronn/v0.7.3
|
||||||
.\" http://github.com/rtomayko/ronn/tree/0.7.3
|
.\" http://github.com/rtomayko/ronn/tree/0.7.3
|
||||||
.
|
.
|
||||||
.TH "BUNDLE\-INJECT" "1" "September 2019" "" ""
|
.TH "BUNDLE\-INJECT" "1" "November 2019" "" ""
|
||||||
.
|
.
|
||||||
.SH "NAME"
|
.SH "NAME"
|
||||||
\fBbundle\-inject\fR \- Add named gem(s) with version requirements to Gemfile
|
\fBbundle\-inject\fR \- Add named gem(s) with version requirements to Gemfile
|
||||||
|
|
|
@ -29,4 +29,4 @@ DESCRIPTION
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
September 2019 BUNDLE-INJECT(1)
|
November 2019 BUNDLE-INJECT(1)
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
.\" generated with Ronn/v0.7.3
|
.\" generated with Ronn/v0.7.3
|
||||||
.\" http://github.com/rtomayko/ronn/tree/0.7.3
|
.\" http://github.com/rtomayko/ronn/tree/0.7.3
|
||||||
.
|
.
|
||||||
.TH "BUNDLE\-INSTALL" "1" "September 2019" "" ""
|
.TH "BUNDLE\-INSTALL" "1" "November 2019" "" ""
|
||||||
.
|
.
|
||||||
.SH "NAME"
|
.SH "NAME"
|
||||||
\fBbundle\-install\fR \- Install the dependencies specified in your Gemfile
|
\fBbundle\-install\fR \- Install the dependencies specified in your Gemfile
|
||||||
|
|
|
@ -398,4 +398,4 @@ SEE ALSO
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
September 2019 BUNDLE-INSTALL(1)
|
November 2019 BUNDLE-INSTALL(1)
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
.\" generated with Ronn/v0.7.3
|
.\" generated with Ronn/v0.7.3
|
||||||
.\" http://github.com/rtomayko/ronn/tree/0.7.3
|
.\" http://github.com/rtomayko/ronn/tree/0.7.3
|
||||||
.
|
.
|
||||||
.TH "BUNDLE\-LIST" "1" "September 2019" "" ""
|
.TH "BUNDLE\-LIST" "1" "November 2019" "" ""
|
||||||
.
|
.
|
||||||
.SH "NAME"
|
.SH "NAME"
|
||||||
\fBbundle\-list\fR \- List all the gems in the bundle
|
\fBbundle\-list\fR \- List all the gems in the bundle
|
||||||
|
|
|
@ -40,4 +40,4 @@ OPTIONS
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
September 2019 BUNDLE-LIST(1)
|
November 2019 BUNDLE-LIST(1)
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
.\" generated with Ronn/v0.7.3
|
.\" generated with Ronn/v0.7.3
|
||||||
.\" http://github.com/rtomayko/ronn/tree/0.7.3
|
.\" http://github.com/rtomayko/ronn/tree/0.7.3
|
||||||
.
|
.
|
||||||
.TH "BUNDLE\-LOCK" "1" "September 2019" "" ""
|
.TH "BUNDLE\-LOCK" "1" "November 2019" "" ""
|
||||||
.
|
.
|
||||||
.SH "NAME"
|
.SH "NAME"
|
||||||
\fBbundle\-lock\fR \- Creates / Updates a lockfile without installing
|
\fBbundle\-lock\fR \- Creates / Updates a lockfile without installing
|
||||||
|
|
|
@ -90,4 +90,4 @@ PATCH LEVEL OPTIONS
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
September 2019 BUNDLE-LOCK(1)
|
November 2019 BUNDLE-LOCK(1)
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
.\" generated with Ronn/v0.7.3
|
.\" generated with Ronn/v0.7.3
|
||||||
.\" http://github.com/rtomayko/ronn/tree/0.7.3
|
.\" http://github.com/rtomayko/ronn/tree/0.7.3
|
||||||
.
|
.
|
||||||
.TH "BUNDLE\-OPEN" "1" "September 2019" "" ""
|
.TH "BUNDLE\-OPEN" "1" "November 2019" "" ""
|
||||||
.
|
.
|
||||||
.SH "NAME"
|
.SH "NAME"
|
||||||
\fBbundle\-open\fR \- Opens the source directory for a gem in your bundle
|
\fBbundle\-open\fR \- Opens the source directory for a gem in your bundle
|
||||||
|
|
|
@ -26,4 +26,4 @@ DESCRIPTION
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
September 2019 BUNDLE-OPEN(1)
|
November 2019 BUNDLE-OPEN(1)
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
.\" generated with Ronn/v0.7.3
|
.\" generated with Ronn/v0.7.3
|
||||||
.\" http://github.com/rtomayko/ronn/tree/0.7.3
|
.\" http://github.com/rtomayko/ronn/tree/0.7.3
|
||||||
.
|
.
|
||||||
.TH "BUNDLE\-OUTDATED" "1" "September 2019" "" ""
|
.TH "BUNDLE\-OUTDATED" "1" "November 2019" "" ""
|
||||||
.
|
.
|
||||||
.SH "NAME"
|
.SH "NAME"
|
||||||
\fBbundle\-outdated\fR \- List installed gems with newer versions available
|
\fBbundle\-outdated\fR \- List installed gems with newer versions available
|
||||||
|
|
|
@ -128,4 +128,4 @@ FILTERING OUTPUT
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
September 2019 BUNDLE-OUTDATED(1)
|
November 2019 BUNDLE-OUTDATED(1)
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
.\" generated with Ronn/v0.7.3
|
.\" generated with Ronn/v0.7.3
|
||||||
.\" http://github.com/rtomayko/ronn/tree/0.7.3
|
.\" http://github.com/rtomayko/ronn/tree/0.7.3
|
||||||
.
|
.
|
||||||
.TH "BUNDLE\-PLATFORM" "1" "September 2019" "" ""
|
.TH "BUNDLE\-PLATFORM" "1" "November 2019" "" ""
|
||||||
.
|
.
|
||||||
.SH "NAME"
|
.SH "NAME"
|
||||||
\fBbundle\-platform\fR \- Displays platform compatibility information
|
\fBbundle\-platform\fR \- Displays platform compatibility information
|
||||||
|
|
|
@ -54,4 +54,4 @@ OPTIONS
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
September 2019 BUNDLE-PLATFORM(1)
|
November 2019 BUNDLE-PLATFORM(1)
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
.\" generated with Ronn/v0.7.3
|
.\" generated with Ronn/v0.7.3
|
||||||
.\" http://github.com/rtomayko/ronn/tree/0.7.3
|
.\" http://github.com/rtomayko/ronn/tree/0.7.3
|
||||||
.
|
.
|
||||||
.TH "BUNDLE\-PRISTINE" "1" "September 2019" "" ""
|
.TH "BUNDLE\-PRISTINE" "1" "November 2019" "" ""
|
||||||
.
|
.
|
||||||
.SH "NAME"
|
.SH "NAME"
|
||||||
\fBbundle\-pristine\fR \- Restores installed gems to their pristine condition
|
\fBbundle\-pristine\fR \- Restores installed gems to their pristine condition
|
||||||
|
|
|
@ -41,4 +41,4 @@ DESCRIPTION
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
September 2019 BUNDLE-PRISTINE(1)
|
November 2019 BUNDLE-PRISTINE(1)
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
.\" generated with Ronn/v0.7.3
|
.\" generated with Ronn/v0.7.3
|
||||||
.\" http://github.com/rtomayko/ronn/tree/0.7.3
|
.\" http://github.com/rtomayko/ronn/tree/0.7.3
|
||||||
.
|
.
|
||||||
.TH "BUNDLE\-REMOVE" "1" "September 2019" "" ""
|
.TH "BUNDLE\-REMOVE" "1" "November 2019" "" ""
|
||||||
.
|
.
|
||||||
.SH "NAME"
|
.SH "NAME"
|
||||||
\fBbundle\-remove\fR \- Removes gems from the Gemfile
|
\fBbundle\-remove\fR \- Removes gems from the Gemfile
|
||||||
|
|
|
@ -31,4 +31,4 @@ OPTIONS
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
September 2019 BUNDLE-REMOVE(1)
|
November 2019 BUNDLE-REMOVE(1)
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
.\" generated with Ronn/v0.7.3
|
.\" generated with Ronn/v0.7.3
|
||||||
.\" http://github.com/rtomayko/ronn/tree/0.7.3
|
.\" http://github.com/rtomayko/ronn/tree/0.7.3
|
||||||
.
|
.
|
||||||
.TH "BUNDLE\-SHOW" "1" "September 2019" "" ""
|
.TH "BUNDLE\-SHOW" "1" "November 2019" "" ""
|
||||||
.
|
.
|
||||||
.SH "NAME"
|
.SH "NAME"
|
||||||
\fBbundle\-show\fR \- Shows all the gems in your bundle, or the path to a gem
|
\fBbundle\-show\fR \- Shows all the gems in your bundle, or the path to a gem
|
||||||
|
|
|
@ -24,4 +24,4 @@ OPTIONS
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
September 2019 BUNDLE-SHOW(1)
|
November 2019 BUNDLE-SHOW(1)
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
.\" generated with Ronn/v0.7.3
|
.\" generated with Ronn/v0.7.3
|
||||||
.\" http://github.com/rtomayko/ronn/tree/0.7.3
|
.\" http://github.com/rtomayko/ronn/tree/0.7.3
|
||||||
.
|
.
|
||||||
.TH "BUNDLE\-UPDATE" "1" "September 2019" "" ""
|
.TH "BUNDLE\-UPDATE" "1" "November 2019" "" ""
|
||||||
.
|
.
|
||||||
.SH "NAME"
|
.SH "NAME"
|
||||||
\fBbundle\-update\fR \- Update your gems to the latest available versions
|
\fBbundle\-update\fR \- Update your gems to the latest available versions
|
||||||
|
|
|
@ -387,4 +387,4 @@ RECOMMENDED WORKFLOW
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
September 2019 BUNDLE-UPDATE(1)
|
November 2019 BUNDLE-UPDATE(1)
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
.\" generated with Ronn/v0.7.3
|
.\" generated with Ronn/v0.7.3
|
||||||
.\" http://github.com/rtomayko/ronn/tree/0.7.3
|
.\" http://github.com/rtomayko/ronn/tree/0.7.3
|
||||||
.
|
.
|
||||||
.TH "BUNDLE\-VIZ" "1" "September 2019" "" ""
|
.TH "BUNDLE\-VIZ" "1" "November 2019" "" ""
|
||||||
.
|
.
|
||||||
.SH "NAME"
|
.SH "NAME"
|
||||||
\fBbundle\-viz\fR \- Generates a visual dependency graph for your Gemfile
|
\fBbundle\-viz\fR \- Generates a visual dependency graph for your Gemfile
|
||||||
|
|
|
@ -36,4 +36,4 @@ OPTIONS
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
September 2019 BUNDLE-VIZ(1)
|
November 2019 BUNDLE-VIZ(1)
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
.\" generated with Ronn/v0.7.3
|
.\" generated with Ronn/v0.7.3
|
||||||
.\" http://github.com/rtomayko/ronn/tree/0.7.3
|
.\" http://github.com/rtomayko/ronn/tree/0.7.3
|
||||||
.
|
.
|
||||||
.TH "BUNDLE" "1" "September 2019" "" ""
|
.TH "BUNDLE" "1" "November 2019" "" ""
|
||||||
.
|
.
|
||||||
.SH "NAME"
|
.SH "NAME"
|
||||||
\fBbundle\fR \- Ruby Dependency Management
|
\fBbundle\fR \- Ruby Dependency Management
|
||||||
|
|
|
@ -113,4 +113,4 @@ OBSOLETE
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
September 2019 BUNDLE(1)
|
November 2019 BUNDLE(1)
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
.\" generated with Ronn/v0.7.3
|
.\" generated with Ronn/v0.7.3
|
||||||
.\" http://github.com/rtomayko/ronn/tree/0.7.3
|
.\" http://github.com/rtomayko/ronn/tree/0.7.3
|
||||||
.
|
.
|
||||||
.TH "GEMFILE" "5" "September 2019" "" ""
|
.TH "GEMFILE" "5" "November 2019" "" ""
|
||||||
.
|
.
|
||||||
.SH "NAME"
|
.SH "NAME"
|
||||||
\fBGemfile\fR \- A format for describing gem dependencies for Ruby programs
|
\fBGemfile\fR \- A format for describing gem dependencies for Ruby programs
|
||||||
|
|
|
@ -646,4 +646,4 @@ SOURCE PRIORITY
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
September 2019 GEMFILE(5)
|
November 2019 GEMFILE(5)
|
||||||
|
|
|
@ -232,16 +232,13 @@ EOF
|
||||||
path = "/home/oggy"
|
path = "/home/oggy"
|
||||||
allow(Bundler.rubygems).to receive(:user_home).and_return(path)
|
allow(Bundler.rubygems).to receive(:user_home).and_return(path)
|
||||||
allow(File).to receive(:directory?).with(path).and_return false
|
allow(File).to receive(:directory?).with(path).and_return false
|
||||||
allow(Etc).to receive(:getlogin).and_return("USER")
|
allow(Bundler).to receive(:tmp).and_return(Pathname.new("/tmp/trulyrandom"))
|
||||||
allow(Dir).to receive(:tmpdir).and_return("/TMP")
|
|
||||||
allow(FileTest).to receive(:exist?).with("/TMP/bundler/home").and_return(true)
|
|
||||||
expect(FileUtils).to receive(:mkpath).with("/TMP/bundler/home/USER")
|
|
||||||
message = <<EOF
|
message = <<EOF
|
||||||
`/home/oggy` is not a directory.
|
`/home/oggy` is not a directory.
|
||||||
Bundler will use `/TMP/bundler/home/USER' as your home directory temporarily.
|
Bundler will use `/tmp/trulyrandom' as your home directory temporarily.
|
||||||
EOF
|
EOF
|
||||||
expect(Bundler.ui).to receive(:warn).with(message)
|
expect(Bundler.ui).to receive(:warn).with(message)
|
||||||
expect(Bundler.user_home).to eq(Pathname("/TMP/bundler/home/USER"))
|
expect(Bundler.user_home).to eq(Pathname("/tmp/trulyrandom"))
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -254,16 +251,13 @@ EOF
|
||||||
allow(File).to receive(:directory?).with(path).and_return true
|
allow(File).to receive(:directory?).with(path).and_return true
|
||||||
allow(File).to receive(:writable?).with(path).and_return false
|
allow(File).to receive(:writable?).with(path).and_return false
|
||||||
allow(File).to receive(:directory?).with(dotbundle).and_return false
|
allow(File).to receive(:directory?).with(dotbundle).and_return false
|
||||||
allow(Etc).to receive(:getlogin).and_return("USER")
|
allow(Bundler).to receive(:tmp).and_return(Pathname.new("/tmp/trulyrandom"))
|
||||||
allow(Dir).to receive(:tmpdir).and_return("/TMP")
|
|
||||||
allow(FileTest).to receive(:exist?).with("/TMP/bundler/home").and_return(true)
|
|
||||||
expect(FileUtils).to receive(:mkpath).with("/TMP/bundler/home/USER")
|
|
||||||
message = <<EOF
|
message = <<EOF
|
||||||
`/home/oggy` is not writable.
|
`/home/oggy` is not writable.
|
||||||
Bundler will use `/TMP/bundler/home/USER' as your home directory temporarily.
|
Bundler will use `/tmp/trulyrandom' as your home directory temporarily.
|
||||||
EOF
|
EOF
|
||||||
expect(Bundler.ui).to receive(:warn).with(message)
|
expect(Bundler.ui).to receive(:warn).with(message)
|
||||||
expect(Bundler.user_home).to eq(Pathname("/TMP/bundler/home/USER"))
|
expect(Bundler.user_home).to eq(Pathname("/tmp/trulyrandom"))
|
||||||
end
|
end
|
||||||
|
|
||||||
context ".bundle exists and have correct permissions" do
|
context ".bundle exists and have correct permissions" do
|
||||||
|
@ -282,31 +276,17 @@ EOF
|
||||||
context "home directory is not set" do
|
context "home directory is not set" do
|
||||||
it "should issue warning and return a temporary user home" do
|
it "should issue warning and return a temporary user home" do
|
||||||
allow(Bundler.rubygems).to receive(:user_home).and_return(nil)
|
allow(Bundler.rubygems).to receive(:user_home).and_return(nil)
|
||||||
allow(Etc).to receive(:getlogin).and_return("USER")
|
allow(Bundler).to receive(:tmp).and_return(Pathname.new("/tmp/trulyrandom"))
|
||||||
allow(Dir).to receive(:tmpdir).and_return("/TMP")
|
|
||||||
allow(FileTest).to receive(:exist?).with("/TMP/bundler/home").and_return(true)
|
|
||||||
expect(FileUtils).to receive(:mkpath).with("/TMP/bundler/home/USER")
|
|
||||||
message = <<EOF
|
message = <<EOF
|
||||||
Your home directory is not set.
|
Your home directory is not set.
|
||||||
Bundler will use `/TMP/bundler/home/USER' as your home directory temporarily.
|
Bundler will use `/tmp/trulyrandom' as your home directory temporarily.
|
||||||
EOF
|
EOF
|
||||||
expect(Bundler.ui).to receive(:warn).with(message)
|
expect(Bundler.ui).to receive(:warn).with(message)
|
||||||
expect(Bundler.user_home).to eq(Pathname("/TMP/bundler/home/USER"))
|
expect(Bundler.user_home).to eq(Pathname("/tmp/trulyrandom"))
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
describe "#tmp_home_path" do
|
|
||||||
it "should create temporary user home" do
|
|
||||||
allow(Dir).to receive(:tmpdir).and_return("/TMP")
|
|
||||||
allow(FileTest).to receive(:exist?).with("/TMP/bundler/home").and_return(false)
|
|
||||||
expect(FileUtils).to receive(:mkpath).once.ordered.with("/TMP/bundler/home")
|
|
||||||
expect(FileUtils).to receive(:mkpath).once.ordered.with("/TMP/bundler/home/USER")
|
|
||||||
expect(File).to receive(:chmod).with(0o777, "/TMP/bundler/home")
|
|
||||||
expect(Bundler.tmp_home_path("USER", "")).to eq(Pathname("/TMP/bundler/home/USER"))
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
describe "#requires_sudo?" do
|
describe "#requires_sudo?" do
|
||||||
let!(:tmpdir) { Dir.mktmpdir }
|
let!(:tmpdir) { Dir.mktmpdir }
|
||||||
let(:bundle_path) { Pathname("#{tmpdir}/bundle") }
|
let(:bundle_path) { Pathname("#{tmpdir}/bundle") }
|
||||||
|
|
|
@ -27,6 +27,56 @@ RSpec.describe "bundle executable" do
|
||||||
expect(out).to eq("Hello, world")
|
expect(out).to eq("Hello, world")
|
||||||
end
|
end
|
||||||
|
|
||||||
|
describe "aliases" do
|
||||||
|
it "aliases e to exec" do
|
||||||
|
bundle "e --help"
|
||||||
|
|
||||||
|
expect(out).to include("BUNDLE-EXEC")
|
||||||
|
end
|
||||||
|
|
||||||
|
it "aliases ex to exec" do
|
||||||
|
bundle "ex --help"
|
||||||
|
|
||||||
|
expect(out).to include("BUNDLE-EXEC")
|
||||||
|
end
|
||||||
|
|
||||||
|
it "aliases exe to exec" do
|
||||||
|
bundle "exe --help"
|
||||||
|
|
||||||
|
expect(out).to include("BUNDLE-EXEC")
|
||||||
|
end
|
||||||
|
|
||||||
|
it "aliases c to check" do
|
||||||
|
bundle "c --help"
|
||||||
|
|
||||||
|
expect(out).to include("BUNDLE-CHECK")
|
||||||
|
end
|
||||||
|
|
||||||
|
it "aliases i to install" do
|
||||||
|
bundle "i --help"
|
||||||
|
|
||||||
|
expect(out).to include("BUNDLE-INSTALL")
|
||||||
|
end
|
||||||
|
|
||||||
|
it "aliases ls to list" do
|
||||||
|
bundle "ls --help"
|
||||||
|
|
||||||
|
expect(out).to include("BUNDLE-LIST")
|
||||||
|
end
|
||||||
|
|
||||||
|
it "aliases package to cache" do
|
||||||
|
bundle "package --help"
|
||||||
|
|
||||||
|
expect(out).to include("BUNDLE-CACHE")
|
||||||
|
end
|
||||||
|
|
||||||
|
it "aliases pack to cache" do
|
||||||
|
bundle "pack --help"
|
||||||
|
|
||||||
|
expect(out).to include("BUNDLE-CACHE")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
context "with no arguments" do
|
context "with no arguments" do
|
||||||
it "prints a concise help message", :bundler => "3" do
|
it "prints a concise help message", :bundler => "3" do
|
||||||
bundle! ""
|
bundle! ""
|
||||||
|
|
|
@ -94,7 +94,7 @@ RSpec.describe Bundler, "friendly errors" do
|
||||||
end
|
end
|
||||||
|
|
||||||
it "writes to Bundler.ui.trace" do
|
it "writes to Bundler.ui.trace" do
|
||||||
expect(Bundler.ui).to receive(:trace).with(orig_error, nil, true)
|
expect(Bundler.ui).to receive(:trace).with(orig_error)
|
||||||
Bundler::FriendlyErrors.log_error(error)
|
Bundler::FriendlyErrors.log_error(error)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
# frozen_string_literal: true
|
# frozen_string_literal: true
|
||||||
|
|
||||||
|
require_relative "../support/streams"
|
||||||
|
|
||||||
RSpec.describe Bundler::Plugin do
|
RSpec.describe Bundler::Plugin do
|
||||||
Plugin = Bundler::Plugin
|
Plugin = Bundler::Plugin
|
||||||
|
|
||||||
|
|
|
@ -400,13 +400,21 @@ RSpec.describe "Bundler::RubyVersion and its subclasses" do
|
||||||
let(:bundler_system_ruby_version) { subject }
|
let(:bundler_system_ruby_version) { subject }
|
||||||
|
|
||||||
around do |example|
|
around do |example|
|
||||||
|
if Bundler::RubyVersion.instance_variable_defined?("@ruby_version")
|
||||||
begin
|
begin
|
||||||
old_ruby_version = Bundler::RubyVersion.instance_variable_get("@ruby_version")
|
old_ruby_version = Bundler::RubyVersion.instance_variable_get("@ruby_version")
|
||||||
Bundler::RubyVersion.instance_variable_set("@ruby_version", nil)
|
Bundler::RubyVersion.remove_instance_variable("@ruby_version")
|
||||||
example.run
|
example.run
|
||||||
ensure
|
ensure
|
||||||
Bundler::RubyVersion.instance_variable_set("@ruby_version", old_ruby_version)
|
Bundler::RubyVersion.instance_variable_set("@ruby_version", old_ruby_version)
|
||||||
end
|
end
|
||||||
|
else
|
||||||
|
begin
|
||||||
|
example.run
|
||||||
|
ensure
|
||||||
|
Bundler::RubyVersion.remove_instance_variable("@ruby_version")
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should return an instance of Bundler::RubyVersion" do
|
it "should return an instance of Bundler::RubyVersion" do
|
||||||
|
|
|
@ -67,7 +67,7 @@ that would suck --ehhh=oh geez it looks like i might have broken bundler somehow
|
||||||
context "when $TMPDIR is not writable" do
|
context "when $TMPDIR is not writable" do
|
||||||
it "does not raise" do
|
it "does not raise" do
|
||||||
expect(Bundler.rubygems).to receive(:user_home).twice.and_return(nil)
|
expect(Bundler.rubygems).to receive(:user_home).twice.and_return(nil)
|
||||||
expect(FileUtils).to receive(:mkpath).twice.with(File.join(Dir.tmpdir, "bundler", "home")).and_raise(Errno::EROFS, "Read-only file system @ dir_s_mkdir - /tmp/bundler")
|
expect(Bundler).to receive(:tmp).twice.and_raise(Errno::EROFS, "Read-only file system @ dir_s_mkdir - /tmp/bundler")
|
||||||
|
|
||||||
expect(subject.send(:global_config_file)).to be_nil
|
expect(subject.send(:global_config_file)).to be_nil
|
||||||
end
|
end
|
||||||
|
|
|
@ -236,7 +236,7 @@ RSpec.describe Bundler::SharedHelpers do
|
||||||
shared_examples_for "ENV['RUBYOPT'] gets set correctly" do
|
shared_examples_for "ENV['RUBYOPT'] gets set correctly" do
|
||||||
it "ensures -rbundler/setup is at the beginning of ENV['RUBYOPT']" do
|
it "ensures -rbundler/setup is at the beginning of ENV['RUBYOPT']" do
|
||||||
subject.set_bundle_environment
|
subject.set_bundle_environment
|
||||||
expect(ENV["RUBYOPT"].split(" ")).to start_with("-r#{lib}/bundler/setup")
|
expect(ENV["RUBYOPT"].split(" ")).to start_with("-r#{lib_dir}/bundler/setup")
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -59,7 +59,6 @@ RSpec.describe Bundler::Source do
|
||||||
context "with color", :no_color_tty do
|
context "with color", :no_color_tty do
|
||||||
before do
|
before do
|
||||||
allow($stdout).to receive(:tty?).and_return(true)
|
allow($stdout).to receive(:tty?).and_return(true)
|
||||||
Bundler.ui = Bundler::UI::Shell.new
|
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should return a string with the spec name and version and locked spec version" do
|
it "should return a string with the spec name and version and locked spec version" do
|
||||||
|
@ -68,7 +67,11 @@ RSpec.describe Bundler::Source do
|
||||||
end
|
end
|
||||||
|
|
||||||
context "without color" do
|
context "without color" do
|
||||||
before { Bundler.ui = Bundler::UI::Shell.new("no-color" => true) }
|
around do |example|
|
||||||
|
with_ui(Bundler::UI::Shell.new("no-color" => true)) do
|
||||||
|
example.run
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
it "should return a string with the spec name and version and locked spec version" do
|
it "should return a string with the spec name and version and locked spec version" do
|
||||||
expect(subject.version_message(spec)).to eq("nokogiri >= 1.6 (was < 1.5)")
|
expect(subject.version_message(spec)).to eq("nokogiri >= 1.6 (was < 1.5)")
|
||||||
|
@ -83,7 +86,6 @@ RSpec.describe Bundler::Source do
|
||||||
context "with color", :no_color_tty do
|
context "with color", :no_color_tty do
|
||||||
before do
|
before do
|
||||||
allow($stdout).to receive(:tty?).and_return(true)
|
allow($stdout).to receive(:tty?).and_return(true)
|
||||||
Bundler.ui = Bundler::UI::Shell.new
|
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should return a string with the locked spec version in yellow" do
|
it "should return a string with the locked spec version in yellow" do
|
||||||
|
@ -92,7 +94,11 @@ RSpec.describe Bundler::Source do
|
||||||
end
|
end
|
||||||
|
|
||||||
context "without color" do
|
context "without color" do
|
||||||
before { Bundler.ui = Bundler::UI::Shell.new("no-color" => true) }
|
around do |example|
|
||||||
|
with_ui(Bundler::UI::Shell.new("no-color" => true)) do
|
||||||
|
example.run
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
it "should return a string with the locked spec version in yellow" do
|
it "should return a string with the locked spec version in yellow" do
|
||||||
expect(subject.version_message(spec)).to eq("nokogiri 1.6.1 (was 1.7.0)")
|
expect(subject.version_message(spec)).to eq("nokogiri 1.6.1 (was 1.7.0)")
|
||||||
|
@ -107,7 +113,6 @@ RSpec.describe Bundler::Source do
|
||||||
context "with color", :no_color_tty do
|
context "with color", :no_color_tty do
|
||||||
before do
|
before do
|
||||||
allow($stdout).to receive(:tty?).and_return(true)
|
allow($stdout).to receive(:tty?).and_return(true)
|
||||||
Bundler.ui = Bundler::UI::Shell.new
|
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should return a string with the locked spec version in green" do
|
it "should return a string with the locked spec version in green" do
|
||||||
|
@ -116,7 +121,11 @@ RSpec.describe Bundler::Source do
|
||||||
end
|
end
|
||||||
|
|
||||||
context "without color" do
|
context "without color" do
|
||||||
before { Bundler.ui = Bundler::UI::Shell.new("no-color" => true) }
|
around do |example|
|
||||||
|
with_ui(Bundler::UI::Shell.new("no-color" => true)) do
|
||||||
|
example.run
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
it "should return a string with the locked spec version in yellow" do
|
it "should return a string with the locked spec version in yellow" do
|
||||||
expect(subject.version_message(spec)).to eq("nokogiri 1.7.1 (was 1.7.0)")
|
expect(subject.version_message(spec)).to eq("nokogiri 1.7.1 (was 1.7.0)")
|
||||||
|
@ -178,4 +187,14 @@ RSpec.describe Bundler::Source do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
|
||||||
|
def with_ui(ui)
|
||||||
|
old_ui = Bundler.ui
|
||||||
|
Bundler.ui = ui
|
||||||
|
yield
|
||||||
|
ensure
|
||||||
|
Bundler.ui = old_ui
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
# frozen_string_literal: true
|
# frozen_string_literal: true
|
||||||
|
|
||||||
|
require_relative "../../support/streams"
|
||||||
|
|
||||||
RSpec.describe Bundler::UI::Shell do
|
RSpec.describe Bundler::UI::Shell do
|
||||||
subject { described_class.new }
|
subject { described_class.new }
|
||||||
|
|
||||||
|
|
6
spec/bundler/cache/cache_path_spec.rb
vendored
6
spec/bundler/cache/cache_path_spec.rb
vendored
|
@ -10,7 +10,7 @@ RSpec.describe "bundle package" do
|
||||||
|
|
||||||
context "with --cache-path" do
|
context "with --cache-path" do
|
||||||
it "caches gems at given path" do
|
it "caches gems at given path" do
|
||||||
bundle :package, "cache-path" => "vendor/cache-foo"
|
bundle :cache, "cache-path" => "vendor/cache-foo"
|
||||||
expect(bundled_app("vendor/cache-foo/rack-1.0.0.gem")).to exist
|
expect(bundled_app("vendor/cache-foo/rack-1.0.0.gem")).to exist
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -18,14 +18,14 @@ RSpec.describe "bundle package" do
|
||||||
context "with config cache_path" do
|
context "with config cache_path" do
|
||||||
it "caches gems at given path" do
|
it "caches gems at given path" do
|
||||||
bundle "config set cache_path vendor/cache-foo"
|
bundle "config set cache_path vendor/cache-foo"
|
||||||
bundle :package
|
bundle :cache
|
||||||
expect(bundled_app("vendor/cache-foo/rack-1.0.0.gem")).to exist
|
expect(bundled_app("vendor/cache-foo/rack-1.0.0.gem")).to exist
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context "with absolute --cache-path" do
|
context "with absolute --cache-path" do
|
||||||
it "caches gems at given path" do
|
it "caches gems at given path" do
|
||||||
bundle :package, "cache-path" => "/tmp/cache-foo"
|
bundle :cache, "cache-path" => "/tmp/cache-foo"
|
||||||
expect(bundled_app("/tmp/cache-foo/rack-1.0.0.gem")).to exist
|
expect(bundled_app("/tmp/cache-foo/rack-1.0.0.gem")).to exist
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
34
spec/bundler/cache/git_spec.rb
vendored
34
spec/bundler/cache/git_spec.rb
vendored
|
@ -12,8 +12,7 @@ RSpec.describe "git base name" do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
%w[cache package].each do |cmd|
|
RSpec.describe "bundle cache with git" do
|
||||||
RSpec.describe "bundle #{cmd} with git" do
|
|
||||||
it "copies repository to vendor cache and uses it" do
|
it "copies repository to vendor cache and uses it" do
|
||||||
git = build_git "foo"
|
git = build_git "foo"
|
||||||
ref = git.ref_for("master", 11)
|
ref = git.ref_for("master", 11)
|
||||||
|
@ -23,7 +22,7 @@ end
|
||||||
G
|
G
|
||||||
|
|
||||||
bundle "config set cache_all true"
|
bundle "config set cache_all true"
|
||||||
bundle cmd
|
bundle :cache
|
||||||
expect(bundled_app("vendor/cache/foo-1.0-#{ref}")).to exist
|
expect(bundled_app("vendor/cache/foo-1.0-#{ref}")).to exist
|
||||||
expect(bundled_app("vendor/cache/foo-1.0-#{ref}/.git")).not_to exist
|
expect(bundled_app("vendor/cache/foo-1.0-#{ref}/.git")).not_to exist
|
||||||
expect(bundled_app("vendor/cache/foo-1.0-#{ref}/.bundlecache")).to be_file
|
expect(bundled_app("vendor/cache/foo-1.0-#{ref}/.bundlecache")).to be_file
|
||||||
|
@ -42,7 +41,7 @@ end
|
||||||
|
|
||||||
bundle "install --path vendor/bundle"
|
bundle "install --path vendor/bundle"
|
||||||
bundle "config set cache_all true"
|
bundle "config set cache_all true"
|
||||||
bundle cmd
|
bundle :cache
|
||||||
|
|
||||||
expect(bundled_app("vendor/cache/foo-1.0-#{ref}")).to exist
|
expect(bundled_app("vendor/cache/foo-1.0-#{ref}")).to exist
|
||||||
expect(bundled_app("vendor/cache/foo-1.0-#{ref}/.git")).not_to exist
|
expect(bundled_app("vendor/cache/foo-1.0-#{ref}/.git")).not_to exist
|
||||||
|
@ -59,8 +58,8 @@ end
|
||||||
G
|
G
|
||||||
|
|
||||||
bundle "config set cache_all true"
|
bundle "config set cache_all true"
|
||||||
bundle! cmd
|
bundle! :cache
|
||||||
bundle! cmd
|
bundle! :cache
|
||||||
|
|
||||||
expect(out).to include "Updating files in vendor/cache"
|
expect(out).to include "Updating files in vendor/cache"
|
||||||
FileUtils.rm_rf lib_path("foo-1.0")
|
FileUtils.rm_rf lib_path("foo-1.0")
|
||||||
|
@ -76,7 +75,7 @@ end
|
||||||
G
|
G
|
||||||
|
|
||||||
bundle "config set cache_all true"
|
bundle "config set cache_all true"
|
||||||
bundle cmd
|
bundle :cache
|
||||||
|
|
||||||
update_git "foo" do |s|
|
update_git "foo" do |s|
|
||||||
s.write "lib/foo.rb", "puts :CACHE"
|
s.write "lib/foo.rb", "puts :CACHE"
|
||||||
|
@ -87,7 +86,7 @@ end
|
||||||
|
|
||||||
bundle! "update", :all => true
|
bundle! "update", :all => true
|
||||||
bundle "config set cache_all true"
|
bundle "config set cache_all true"
|
||||||
bundle! cmd
|
bundle! :cache
|
||||||
|
|
||||||
expect(bundled_app("vendor/cache/foo-1.0-#{ref}")).to exist
|
expect(bundled_app("vendor/cache/foo-1.0-#{ref}")).to exist
|
||||||
expect(bundled_app("vendor/cache/foo-1.0-#{old_ref}")).not_to exist
|
expect(bundled_app("vendor/cache/foo-1.0-#{old_ref}")).not_to exist
|
||||||
|
@ -106,7 +105,7 @@ end
|
||||||
G
|
G
|
||||||
|
|
||||||
bundle "config set cache_all true"
|
bundle "config set cache_all true"
|
||||||
bundle! cmd
|
bundle! :cache
|
||||||
|
|
||||||
update_git "foo" do |s|
|
update_git "foo" do |s|
|
||||||
s.write "lib/foo.rb", "puts :CACHE"
|
s.write "lib/foo.rb", "puts :CACHE"
|
||||||
|
@ -136,7 +135,7 @@ end
|
||||||
bundle %(config set local.foo #{lib_path("foo-1.0")})
|
bundle %(config set local.foo #{lib_path("foo-1.0")})
|
||||||
bundle "install"
|
bundle "install"
|
||||||
bundle "config set cache_all true"
|
bundle "config set cache_all true"
|
||||||
bundle cmd
|
bundle :cache
|
||||||
|
|
||||||
expect(bundled_app("vendor/cache/foo-invalid-#{ref}")).to exist
|
expect(bundled_app("vendor/cache/foo-invalid-#{ref}")).to exist
|
||||||
|
|
||||||
|
@ -169,7 +168,7 @@ end
|
||||||
|
|
||||||
ref = git.ref_for("master", 11)
|
ref = git.ref_for("master", 11)
|
||||||
bundle "config set cache_all true"
|
bundle "config set cache_all true"
|
||||||
bundle cmd
|
bundle :cache
|
||||||
|
|
||||||
expect(bundled_app("vendor/cache/has_submodule-1.0-#{ref}")).to exist
|
expect(bundled_app("vendor/cache/has_submodule-1.0-#{ref}")).to exist
|
||||||
expect(bundled_app("vendor/cache/has_submodule-1.0-#{ref}/submodule-1.0")).to exist
|
expect(bundled_app("vendor/cache/has_submodule-1.0-#{ref}/submodule-1.0")).to exist
|
||||||
|
@ -183,7 +182,7 @@ end
|
||||||
gem "foo", :git => '#{lib_path("foo-1.0")}'
|
gem "foo", :git => '#{lib_path("foo-1.0")}'
|
||||||
G
|
G
|
||||||
|
|
||||||
bundle cmd
|
bundle :cache
|
||||||
|
|
||||||
expect(err).to include("Your Gemfile contains path and git dependencies.")
|
expect(err).to include("Your Gemfile contains path and git dependencies.")
|
||||||
end
|
end
|
||||||
|
@ -196,8 +195,8 @@ end
|
||||||
G
|
G
|
||||||
|
|
||||||
bundle "config set cache_all true"
|
bundle "config set cache_all true"
|
||||||
bundle cmd
|
bundle :cache
|
||||||
bundle cmd
|
bundle :cache
|
||||||
|
|
||||||
expect(err).not_to include("Your Gemfile contains path and git dependencies.")
|
expect(err).not_to include("Your Gemfile contains path and git dependencies.")
|
||||||
end
|
end
|
||||||
|
@ -214,21 +213,21 @@ end
|
||||||
gem "foo", :git => '#{lib_path("foo-1.0")}'
|
gem "foo", :git => '#{lib_path("foo-1.0")}'
|
||||||
G
|
G
|
||||||
bundle "config set cache_all true"
|
bundle "config set cache_all true"
|
||||||
bundle cmd
|
bundle :cache
|
||||||
|
|
||||||
ref = git.ref_for("master", 11)
|
ref = git.ref_for("master", 11)
|
||||||
gemspec = bundled_app("vendor/cache/foo-1.0-#{ref}/foo.gemspec").read
|
gemspec = bundled_app("vendor/cache/foo-1.0-#{ref}/foo.gemspec").read
|
||||||
expect(gemspec).to_not match("`echo bob`")
|
expect(gemspec).to_not match("`echo bob`")
|
||||||
end
|
end
|
||||||
|
|
||||||
it "can install after #{cmd} with git not installed" do
|
it "can install after bundle cache with git not installed" do
|
||||||
build_git "foo"
|
build_git "foo"
|
||||||
|
|
||||||
gemfile <<-G
|
gemfile <<-G
|
||||||
gem "foo", :git => '#{lib_path("foo-1.0")}'
|
gem "foo", :git => '#{lib_path("foo-1.0")}'
|
||||||
G
|
G
|
||||||
bundle! "config set cache_all true"
|
bundle! "config set cache_all true"
|
||||||
bundle! cmd, "all-platforms" => true, :install => false, :path => "./vendor/cache"
|
bundle! :cache, "all-platforms" => true, :install => false, :path => "./vendor/cache"
|
||||||
|
|
||||||
simulate_new_machine
|
simulate_new_machine
|
||||||
with_path_as "" do
|
with_path_as "" do
|
||||||
|
@ -238,4 +237,3 @@ end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
|
||||||
|
|
28
spec/bundler/cache/path_spec.rb
vendored
28
spec/bundler/cache/path_spec.rb
vendored
|
@ -1,7 +1,6 @@
|
||||||
# frozen_string_literal: true
|
# frozen_string_literal: true
|
||||||
|
|
||||||
%w[cache package].each do |cmd|
|
RSpec.describe "bundle cache with path" do
|
||||||
RSpec.describe "bundle #{cmd} with path" do
|
|
||||||
it "is no-op when the path is within the bundle" do
|
it "is no-op when the path is within the bundle" do
|
||||||
build_lib "foo", :path => bundled_app("lib/foo")
|
build_lib "foo", :path => bundled_app("lib/foo")
|
||||||
|
|
||||||
|
@ -10,7 +9,7 @@
|
||||||
G
|
G
|
||||||
|
|
||||||
bundle "config set cache_all true"
|
bundle "config set cache_all true"
|
||||||
bundle cmd
|
bundle :cache
|
||||||
expect(bundled_app("vendor/cache/foo-1.0")).not_to exist
|
expect(bundled_app("vendor/cache/foo-1.0")).not_to exist
|
||||||
expect(the_bundle).to include_gems "foo 1.0"
|
expect(the_bundle).to include_gems "foo 1.0"
|
||||||
end
|
end
|
||||||
|
@ -23,7 +22,7 @@
|
||||||
G
|
G
|
||||||
|
|
||||||
bundle "config set cache_all true"
|
bundle "config set cache_all true"
|
||||||
bundle cmd
|
bundle :cache
|
||||||
expect(bundled_app("vendor/cache/foo-1.0")).to exist
|
expect(bundled_app("vendor/cache/foo-1.0")).to exist
|
||||||
expect(bundled_app("vendor/cache/foo-1.0/.bundlecache")).to be_file
|
expect(bundled_app("vendor/cache/foo-1.0/.bundlecache")).to be_file
|
||||||
|
|
||||||
|
@ -42,7 +41,7 @@
|
||||||
G
|
G
|
||||||
|
|
||||||
bundle "config set cache_all true"
|
bundle "config set cache_all true"
|
||||||
bundle cmd
|
bundle :cache
|
||||||
expect(bundled_app("vendor/cache/#{libname}")).to exist
|
expect(bundled_app("vendor/cache/#{libname}")).to exist
|
||||||
expect(bundled_app("vendor/cache/#{libname}/.bundlecache")).to be_file
|
expect(bundled_app("vendor/cache/#{libname}/.bundlecache")).to be_file
|
||||||
|
|
||||||
|
@ -58,13 +57,13 @@
|
||||||
G
|
G
|
||||||
|
|
||||||
bundle "config set cache_all true"
|
bundle "config set cache_all true"
|
||||||
bundle cmd
|
bundle :cache
|
||||||
|
|
||||||
build_lib "foo" do |s|
|
build_lib "foo" do |s|
|
||||||
s.write "lib/foo.rb", "puts :CACHE"
|
s.write "lib/foo.rb", "puts :CACHE"
|
||||||
end
|
end
|
||||||
|
|
||||||
bundle cmd
|
bundle :cache
|
||||||
|
|
||||||
expect(bundled_app("vendor/cache/foo-1.0")).to exist
|
expect(bundled_app("vendor/cache/foo-1.0")).to exist
|
||||||
FileUtils.rm_rf lib_path("foo-1.0")
|
FileUtils.rm_rf lib_path("foo-1.0")
|
||||||
|
@ -81,13 +80,13 @@
|
||||||
G
|
G
|
||||||
|
|
||||||
bundle "config set cache_all true"
|
bundle "config set cache_all true"
|
||||||
bundle cmd
|
bundle :cache
|
||||||
|
|
||||||
install_gemfile <<-G
|
install_gemfile <<-G
|
||||||
gem "bar", :path => '#{lib_path("bar-1.0")}'
|
gem "bar", :path => '#{lib_path("bar-1.0")}'
|
||||||
G
|
G
|
||||||
|
|
||||||
bundle cmd
|
bundle :cache
|
||||||
expect(bundled_app("vendor/cache/bar-1.0")).not_to exist
|
expect(bundled_app("vendor/cache/bar-1.0")).not_to exist
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -98,7 +97,7 @@
|
||||||
gem "foo", :path => '#{lib_path("foo-1.0")}'
|
gem "foo", :path => '#{lib_path("foo-1.0")}'
|
||||||
G
|
G
|
||||||
|
|
||||||
bundle cmd
|
bundle :cache
|
||||||
expect(err).to match(/please pass the \-\-all flag/)
|
expect(err).to match(/please pass the \-\-all flag/)
|
||||||
expect(bundled_app("vendor/cache/foo-1.0")).not_to exist
|
expect(bundled_app("vendor/cache/foo-1.0")).not_to exist
|
||||||
end
|
end
|
||||||
|
@ -111,7 +110,7 @@
|
||||||
G
|
G
|
||||||
|
|
||||||
bundle "config set cache_all true"
|
bundle "config set cache_all true"
|
||||||
bundle cmd
|
bundle :cache
|
||||||
build_lib "bar"
|
build_lib "bar"
|
||||||
|
|
||||||
install_gemfile <<-G
|
install_gemfile <<-G
|
||||||
|
@ -119,7 +118,7 @@
|
||||||
gem "bar", :path => '#{lib_path("bar-1.0")}'
|
gem "bar", :path => '#{lib_path("bar-1.0")}'
|
||||||
G
|
G
|
||||||
|
|
||||||
bundle cmd
|
bundle :cache
|
||||||
expect(bundled_app("vendor/cache/bar-1.0")).to exist
|
expect(bundled_app("vendor/cache/bar-1.0")).to exist
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -131,7 +130,7 @@
|
||||||
G
|
G
|
||||||
|
|
||||||
bundle "config set cache_all true"
|
bundle "config set cache_all true"
|
||||||
bundle cmd
|
bundle :cache
|
||||||
build_lib "baz"
|
build_lib "baz"
|
||||||
|
|
||||||
gemfile <<-G
|
gemfile <<-G
|
||||||
|
@ -139,8 +138,7 @@
|
||||||
gem "baz", :path => '#{lib_path("baz-1.0")}'
|
gem "baz", :path => '#{lib_path("baz-1.0")}'
|
||||||
G
|
G
|
||||||
|
|
||||||
bundle "#{cmd} --no-all"
|
bundle "cache --no-all"
|
||||||
expect(bundled_app("vendor/cache/baz-1.0")).not_to exist
|
expect(bundled_app("vendor/cache/baz-1.0")).not_to exist
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
|
||||||
|
|
|
@ -239,4 +239,13 @@ RSpec.describe "bundle add" do
|
||||||
expect(err).not_to include("You may also need to change the version requirement specified in the Gemfile if it's too restrictive")
|
expect(err).not_to include("You may also need to change the version requirement specified in the Gemfile if it's too restrictive")
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
describe "when a gem is added and cache exists" do
|
||||||
|
it "caches all new dependencies added for the specified gem" do
|
||||||
|
bundle! :cache
|
||||||
|
|
||||||
|
bundle "add 'rack' --version=1.0.0"
|
||||||
|
expect(bundled_app("vendor/cache/rack-1.0.0.gem")).to exist
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
# frozen_string_literal: true
|
# frozen_string_literal: true
|
||||||
|
|
||||||
RSpec.describe "bundle package" do
|
RSpec.describe "bundle cache" do
|
||||||
context "with --gemfile" do
|
context "with --gemfile" do
|
||||||
it "finds the gemfile" do
|
it "finds the gemfile" do
|
||||||
gemfile bundled_app("NotGemfile"), <<-G
|
gemfile bundled_app("NotGemfile"), <<-G
|
||||||
|
@ -8,7 +8,7 @@ RSpec.describe "bundle package" do
|
||||||
gem 'rack'
|
gem 'rack'
|
||||||
G
|
G
|
||||||
|
|
||||||
bundle "package --gemfile=NotGemfile"
|
bundle "cache --gemfile=NotGemfile"
|
||||||
|
|
||||||
ENV["BUNDLE_GEMFILE"] = "NotGemfile"
|
ENV["BUNDLE_GEMFILE"] = "NotGemfile"
|
||||||
expect(the_bundle).to include_gems "rack 1.0.0"
|
expect(the_bundle).to include_gems "rack 1.0.0"
|
||||||
|
@ -25,7 +25,7 @@ RSpec.describe "bundle package" do
|
||||||
D
|
D
|
||||||
|
|
||||||
bundle "config set cache_all true"
|
bundle "config set cache_all true"
|
||||||
bundle :package
|
bundle :cache
|
||||||
|
|
||||||
expect(bundled_app("vendor/cache/rack-1.0.0.gem")).to exist
|
expect(bundled_app("vendor/cache/rack-1.0.0.gem")).to exist
|
||||||
expect(bundled_app("vendor/cache/bundler-0.9.gem")).to_not exist
|
expect(bundled_app("vendor/cache/bundler-0.9.gem")).to_not exist
|
||||||
|
@ -56,7 +56,7 @@ RSpec.describe "bundle package" do
|
||||||
D
|
D
|
||||||
|
|
||||||
bundle "config set cache_all true"
|
bundle "config set cache_all true"
|
||||||
bundle! :package
|
bundle! :cache
|
||||||
|
|
||||||
expect(bundled_app("vendor/cache/rack-1.0.0.gem")).to exist
|
expect(bundled_app("vendor/cache/rack-1.0.0.gem")).to exist
|
||||||
expect(bundled_app("vendor/cache/nokogiri-1.4.2.gem")).to exist
|
expect(bundled_app("vendor/cache/nokogiri-1.4.2.gem")).to exist
|
||||||
|
@ -88,7 +88,7 @@ RSpec.describe "bundle package" do
|
||||||
D
|
D
|
||||||
|
|
||||||
bundle "config set cache_all true"
|
bundle "config set cache_all true"
|
||||||
bundle! :package
|
bundle! :cache
|
||||||
|
|
||||||
expect(bundled_app("vendor/cache/rack-1.0.0.gem")).to exist
|
expect(bundled_app("vendor/cache/rack-1.0.0.gem")).to exist
|
||||||
expect(bundled_app("vendor/cache/nokogiri-1.4.2.gem")).to exist
|
expect(bundled_app("vendor/cache/nokogiri-1.4.2.gem")).to exist
|
||||||
|
@ -133,7 +133,7 @@ RSpec.describe "bundle package" do
|
||||||
D
|
D
|
||||||
|
|
||||||
bundle "config set cache_all true"
|
bundle "config set cache_all true"
|
||||||
bundle! :package
|
bundle! :cache
|
||||||
|
|
||||||
expect(bundled_app("vendor/cache/rack-1.0.0.gem")).to exist
|
expect(bundled_app("vendor/cache/rack-1.0.0.gem")).to exist
|
||||||
expect(bundled_app("vendor/cache/nokogiri-1.4.2.gem")).to exist
|
expect(bundled_app("vendor/cache/nokogiri-1.4.2.gem")).to exist
|
||||||
|
@ -152,7 +152,7 @@ RSpec.describe "bundle package" do
|
||||||
gem 'rack'
|
gem 'rack'
|
||||||
D
|
D
|
||||||
|
|
||||||
bundle! :package, forgotten_command_line_options(:path => bundled_app("test"))
|
bundle! :cache, forgotten_command_line_options(:path => bundled_app("test"))
|
||||||
|
|
||||||
expect(the_bundle).to include_gems "rack 1.0.0"
|
expect(the_bundle).to include_gems "rack 1.0.0"
|
||||||
expect(bundled_app("test/vendor/cache/")).to exist
|
expect(bundled_app("test/vendor/cache/")).to exist
|
||||||
|
@ -166,7 +166,7 @@ RSpec.describe "bundle package" do
|
||||||
gem 'rack'
|
gem 'rack'
|
||||||
D
|
D
|
||||||
|
|
||||||
bundle! "package --no-install"
|
bundle! "cache --no-install"
|
||||||
|
|
||||||
expect(the_bundle).not_to include_gems "rack 1.0.0"
|
expect(the_bundle).not_to include_gems "rack 1.0.0"
|
||||||
expect(bundled_app("vendor/cache/rack-1.0.0.gem")).to exist
|
expect(bundled_app("vendor/cache/rack-1.0.0.gem")).to exist
|
||||||
|
@ -178,7 +178,7 @@ RSpec.describe "bundle package" do
|
||||||
gem 'rack'
|
gem 'rack'
|
||||||
D
|
D
|
||||||
|
|
||||||
bundle! "package --no-install"
|
bundle! "cache --no-install"
|
||||||
bundle! "install"
|
bundle! "install"
|
||||||
|
|
||||||
expect(the_bundle).to include_gems "rack 1.0.0"
|
expect(the_bundle).to include_gems "rack 1.0.0"
|
||||||
|
@ -190,7 +190,7 @@ RSpec.describe "bundle package" do
|
||||||
gem "rack", "1.0.0"
|
gem "rack", "1.0.0"
|
||||||
D
|
D
|
||||||
|
|
||||||
bundle! "package --no-install"
|
bundle! "cache --no-install"
|
||||||
bundle! "update --all"
|
bundle! "update --all"
|
||||||
|
|
||||||
expect(the_bundle).to include_gems "rack 1.0.0"
|
expect(the_bundle).to include_gems "rack 1.0.0"
|
||||||
|
@ -204,7 +204,7 @@ RSpec.describe "bundle package" do
|
||||||
gem 'rack', :platforms => :ruby_19
|
gem 'rack', :platforms => :ruby_19
|
||||||
D
|
D
|
||||||
|
|
||||||
bundle "package --all-platforms"
|
bundle "cache --all-platforms"
|
||||||
expect(bundled_app("vendor/cache/rack-1.0.0.gem")).to exist
|
expect(bundled_app("vendor/cache/rack-1.0.0.gem")).to exist
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -226,7 +226,7 @@ RSpec.describe "bundle package" do
|
||||||
end
|
end
|
||||||
G
|
G
|
||||||
|
|
||||||
bundle! :package, "all-platforms" => true
|
bundle! :cache, "all-platforms" => true
|
||||||
expect(bundled_app("vendor/cache/weakling-0.0.3.gem")).to exist
|
expect(bundled_app("vendor/cache/weakling-0.0.3.gem")).to exist
|
||||||
expect(bundled_app("vendor/cache/uninstallable-2.0.gem")).to exist
|
expect(bundled_app("vendor/cache/uninstallable-2.0.gem")).to exist
|
||||||
expect(the_bundle).to include_gem "rack 1.0"
|
expect(the_bundle).to include_gem "rack 1.0"
|
||||||
|
@ -247,7 +247,7 @@ RSpec.describe "bundle package" do
|
||||||
bundle "install"
|
bundle "install"
|
||||||
end
|
end
|
||||||
|
|
||||||
subject { bundle :package, forgotten_command_line_options(:frozen => true) }
|
subject { bundle :cache, forgotten_command_line_options(:frozen => true) }
|
||||||
|
|
||||||
it "tries to install with frozen" do
|
it "tries to install with frozen" do
|
||||||
bundle! "config set deployment true"
|
bundle! "config set deployment true"
|
||||||
|
@ -276,7 +276,7 @@ RSpec.describe "bundle install with gem sources" do
|
||||||
gem "rack"
|
gem "rack"
|
||||||
G
|
G
|
||||||
|
|
||||||
bundle :pack
|
bundle :cache
|
||||||
simulate_new_machine
|
simulate_new_machine
|
||||||
FileUtils.rm_rf gem_repo2
|
FileUtils.rm_rf gem_repo2
|
||||||
|
|
||||||
|
@ -291,7 +291,7 @@ RSpec.describe "bundle install with gem sources" do
|
||||||
gem "rack"
|
gem "rack"
|
||||||
G
|
G
|
||||||
|
|
||||||
bundle! :pack
|
bundle! :cache
|
||||||
simulate_new_machine
|
simulate_new_machine
|
||||||
FileUtils.rm_rf gem_repo2
|
FileUtils.rm_rf gem_repo2
|
||||||
|
|
||||||
|
@ -304,7 +304,7 @@ RSpec.describe "bundle install with gem sources" do
|
||||||
source "#{file_uri_for(gem_repo1)}"
|
source "#{file_uri_for(gem_repo1)}"
|
||||||
gem "rack"
|
gem "rack"
|
||||||
G
|
G
|
||||||
bundle :pack
|
bundle :cache
|
||||||
|
|
||||||
build_gem "rack", "1.0.0", :path => bundled_app("vendor/cache") do |s|
|
build_gem "rack", "1.0.0", :path => bundled_app("vendor/cache") do |s|
|
||||||
s.write "lib/rack.rb", "raise 'omg'"
|
s.write "lib/rack.rb", "raise 'omg'"
|
||||||
|
@ -321,7 +321,7 @@ RSpec.describe "bundle install with gem sources" do
|
||||||
source "#{file_uri_for(gem_repo1)}"
|
source "#{file_uri_for(gem_repo1)}"
|
||||||
gem "platform_specific"
|
gem "platform_specific"
|
||||||
G
|
G
|
||||||
bundle :pack
|
bundle :cache
|
||||||
end
|
end
|
||||||
|
|
||||||
simulate_new_machine
|
simulate_new_machine
|
|
@ -89,7 +89,7 @@ RSpec.describe "bundle exec" do
|
||||||
else
|
else
|
||||||
require 'tempfile'
|
require 'tempfile'
|
||||||
io = Tempfile.new("io-test-fd")
|
io = Tempfile.new("io-test-fd")
|
||||||
args = %W[#{Gem.ruby} -I#{lib} #{bindir.join("bundle")} exec --keep-file-descriptors #{Gem.ruby} #{command.path} \#{io.to_i}]
|
args = %W[#{Gem.ruby} -I#{lib_dir} #{bindir.join("bundle")} exec --keep-file-descriptors #{Gem.ruby} #{command.path} \#{io.to_i}]
|
||||||
args << { io.to_i => io }
|
args << { io.to_i => io }
|
||||||
exec(*args)
|
exec(*args)
|
||||||
end
|
end
|
||||||
|
@ -279,7 +279,7 @@ RSpec.describe "bundle exec" do
|
||||||
G
|
G
|
||||||
|
|
||||||
rubyopt = ENV["RUBYOPT"]
|
rubyopt = ENV["RUBYOPT"]
|
||||||
rubyopt = "-r#{lib}/bundler/setup #{rubyopt}"
|
rubyopt = "-r#{lib_dir}/bundler/setup #{rubyopt}"
|
||||||
|
|
||||||
bundle "exec 'echo $RUBYOPT'"
|
bundle "exec 'echo $RUBYOPT'"
|
||||||
expect(out).to have_rubyopts(rubyopt)
|
expect(out).to have_rubyopts(rubyopt)
|
||||||
|
@ -294,7 +294,7 @@ RSpec.describe "bundle exec" do
|
||||||
G
|
G
|
||||||
|
|
||||||
rubylib = ENV["RUBYLIB"]
|
rubylib = ENV["RUBYLIB"]
|
||||||
rubylib = rubylib.to_s.split(File::PATH_SEPARATOR).unshift lib.to_s
|
rubylib = rubylib.to_s.split(File::PATH_SEPARATOR).unshift lib_dir.to_s
|
||||||
rubylib = rubylib.uniq.join(File::PATH_SEPARATOR)
|
rubylib = rubylib.uniq.join(File::PATH_SEPARATOR)
|
||||||
|
|
||||||
bundle "exec 'echo $RUBYLIB'"
|
bundle "exec 'echo $RUBYLIB'"
|
||||||
|
|
|
@ -1,22 +1,20 @@
|
||||||
# frozen_string_literal: true
|
# frozen_string_literal: true
|
||||||
|
|
||||||
RSpec.describe "bundle gem" do
|
RSpec.describe "bundle gem" do
|
||||||
def execute_bundle_gem(gem_name, flag = "")
|
def gem_skeleton_assertions
|
||||||
bundle! "gem #{gem_name} #{flag}"
|
|
||||||
# reset gemspec cache for each test because of commit 3d4163a
|
|
||||||
Bundler.clear_gemspec_cache
|
|
||||||
end
|
|
||||||
|
|
||||||
def gem_skeleton_assertions(gem_name)
|
|
||||||
expect(bundled_app("#{gem_name}/#{gem_name}.gemspec")).to exist
|
expect(bundled_app("#{gem_name}/#{gem_name}.gemspec")).to exist
|
||||||
expect(bundled_app("#{gem_name}/README.md")).to exist
|
expect(bundled_app("#{gem_name}/README.md")).to exist
|
||||||
expect(bundled_app("#{gem_name}/Gemfile")).to exist
|
expect(bundled_app("#{gem_name}/Gemfile")).to exist
|
||||||
expect(bundled_app("#{gem_name}/Rakefile")).to exist
|
expect(bundled_app("#{gem_name}/Rakefile")).to exist
|
||||||
expect(bundled_app("#{gem_name}/lib/test/gem.rb")).to exist
|
expect(bundled_app("#{gem_name}/lib/#{require_path}.rb")).to exist
|
||||||
expect(bundled_app("#{gem_name}/lib/test/gem/version.rb")).to exist
|
expect(bundled_app("#{gem_name}/lib/#{require_path}/version.rb")).to exist
|
||||||
end
|
end
|
||||||
|
|
||||||
let(:generated_gemspec) { Bundler::GemHelper.new(bundled_app(gem_name).to_s).gemspec }
|
let(:generated_gemspec) { Bundler.load_gemspec_uncached(bundled_app(gem_name).join("#{gem_name}.gemspec")) }
|
||||||
|
|
||||||
|
let(:gem_name) { "mygem" }
|
||||||
|
|
||||||
|
let(:require_path) { "mygem" }
|
||||||
|
|
||||||
before do
|
before do
|
||||||
global_config "BUNDLE_GEM__MIT" => "false", "BUNDLE_GEM__TEST" => "false", "BUNDLE_GEM__COC" => "false"
|
global_config "BUNDLE_GEM__MIT" => "false", "BUNDLE_GEM__TEST" => "false", "BUNDLE_GEM__COC" => "false"
|
||||||
|
@ -28,7 +26,7 @@ RSpec.describe "bundle gem" do
|
||||||
user = bundleuser
|
user = bundleuser
|
||||||
EOF
|
EOF
|
||||||
@git_config_location = ENV["GIT_CONFIG"]
|
@git_config_location = ENV["GIT_CONFIG"]
|
||||||
path = "#{File.expand_path(tmp, File.dirname(__FILE__))}/test_git_config.txt"
|
path = "#{tmp}/test_git_config.txt"
|
||||||
File.open(path, "w") {|f| f.write(git_config_content) }
|
File.open(path, "w") {|f| f.write(git_config_content) }
|
||||||
ENV["GIT_CONFIG"] = path
|
ENV["GIT_CONFIG"] = path
|
||||||
end
|
end
|
||||||
|
@ -61,15 +59,14 @@ RSpec.describe "bundle gem" do
|
||||||
end
|
end
|
||||||
|
|
||||||
describe "git repo initialization" do
|
describe "git repo initialization" do
|
||||||
let(:gem_name) { "test-gem" }
|
|
||||||
|
|
||||||
shared_examples_for "a gem with an initial git repo" do
|
shared_examples_for "a gem with an initial git repo" do
|
||||||
before do
|
before do
|
||||||
execute_bundle_gem(gem_name, flags)
|
bundle! "gem #{gem_name} #{flags}"
|
||||||
end
|
end
|
||||||
|
|
||||||
it "generates a gem skeleton with a .git folder" do
|
it "generates a gem skeleton with a .git folder" do
|
||||||
gem_skeleton_assertions(gem_name)
|
gem_skeleton_assertions
|
||||||
expect(bundled_app("test-gem/.git")).to exist
|
expect(bundled_app("#{gem_name}/.git")).to exist
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -87,111 +84,104 @@ RSpec.describe "bundle gem" do
|
||||||
|
|
||||||
context "when passing --no-git" do
|
context "when passing --no-git" do
|
||||||
before do
|
before do
|
||||||
execute_bundle_gem(gem_name, "--no-git")
|
bundle! "gem #{gem_name} --no-git"
|
||||||
end
|
end
|
||||||
it "generates a gem skeleton without a .git folder" do
|
it "generates a gem skeleton without a .git folder" do
|
||||||
gem_skeleton_assertions(gem_name)
|
gem_skeleton_assertions
|
||||||
expect(bundled_app("test-gem/.git")).not_to exist
|
expect(bundled_app("#{gem_name}/.git")).not_to exist
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
shared_examples_for "--mit flag" do
|
shared_examples_for "--mit flag" do
|
||||||
before do
|
before do
|
||||||
execute_bundle_gem(gem_name, "--mit")
|
bundle! "gem #{gem_name} --mit"
|
||||||
end
|
end
|
||||||
it "generates a gem skeleton with MIT license" do
|
it "generates a gem skeleton with MIT license" do
|
||||||
gem_skeleton_assertions(gem_name)
|
gem_skeleton_assertions
|
||||||
expect(bundled_app("test-gem/LICENSE.txt")).to exist
|
expect(bundled_app("#{gem_name}/LICENSE.txt")).to exist
|
||||||
skel = Bundler::GemHelper.new(bundled_app(gem_name).to_s)
|
expect(generated_gemspec.license).to eq("MIT")
|
||||||
expect(skel.gemspec.license).to eq("MIT")
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
shared_examples_for "--no-mit flag" do
|
shared_examples_for "--no-mit flag" do
|
||||||
before do
|
before do
|
||||||
execute_bundle_gem(gem_name, "--no-mit")
|
bundle! "gem #{gem_name} --no-mit"
|
||||||
end
|
end
|
||||||
it "generates a gem skeleton without MIT license" do
|
it "generates a gem skeleton without MIT license" do
|
||||||
gem_skeleton_assertions(gem_name)
|
gem_skeleton_assertions
|
||||||
expect(bundled_app("test-gem/LICENSE.txt")).to_not exist
|
expect(bundled_app("#{gem_name}/LICENSE.txt")).to_not exist
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
shared_examples_for "--coc flag" do
|
shared_examples_for "--coc flag" do
|
||||||
before do
|
before do
|
||||||
execute_bundle_gem(gem_name, "--coc")
|
bundle! "gem #{gem_name} --coc"
|
||||||
end
|
end
|
||||||
it "generates a gem skeleton with MIT license" do
|
it "generates a gem skeleton with MIT license" do
|
||||||
gem_skeleton_assertions(gem_name)
|
gem_skeleton_assertions
|
||||||
expect(bundled_app("test-gem/CODE_OF_CONDUCT.md")).to exist
|
expect(bundled_app("#{gem_name}/CODE_OF_CONDUCT.md")).to exist
|
||||||
end
|
end
|
||||||
|
|
||||||
describe "README additions" do
|
describe "README additions" do
|
||||||
it "generates the README with a section for the Code of Conduct" do
|
it "generates the README with a section for the Code of Conduct" do
|
||||||
expect(bundled_app("test-gem/README.md").read).to include("## Code of Conduct")
|
expect(bundled_app("#{gem_name}/README.md").read).to include("## Code of Conduct")
|
||||||
expect(bundled_app("test-gem/README.md").read).to include("https://github.com/bundleuser/#{gem_name}/blob/master/CODE_OF_CONDUCT.md")
|
expect(bundled_app("#{gem_name}/README.md").read).to include("https://github.com/bundleuser/#{gem_name}/blob/master/CODE_OF_CONDUCT.md")
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
shared_examples_for "--no-coc flag" do
|
shared_examples_for "--no-coc flag" do
|
||||||
before do
|
before do
|
||||||
execute_bundle_gem(gem_name, "--no-coc")
|
bundle! "gem #{gem_name} --no-coc"
|
||||||
end
|
end
|
||||||
it "generates a gem skeleton without Code of Conduct" do
|
it "generates a gem skeleton without Code of Conduct" do
|
||||||
gem_skeleton_assertions(gem_name)
|
gem_skeleton_assertions
|
||||||
expect(bundled_app("test-gem/CODE_OF_CONDUCT.md")).to_not exist
|
expect(bundled_app("#{gem_name}/CODE_OF_CONDUCT.md")).to_not exist
|
||||||
end
|
end
|
||||||
|
|
||||||
describe "README additions" do
|
describe "README additions" do
|
||||||
it "generates the README without a section for the Code of Conduct" do
|
it "generates the README without a section for the Code of Conduct" do
|
||||||
expect(bundled_app("test-gem/README.md").read).not_to include("## Code of Conduct")
|
expect(bundled_app("#{gem_name}/README.md").read).not_to include("## Code of Conduct")
|
||||||
expect(bundled_app("test-gem/README.md").read).not_to include("https://github.com/bundleuser/#{gem_name}/blob/master/CODE_OF_CONDUCT.md")
|
expect(bundled_app("#{gem_name}/README.md").read).not_to include("https://github.com/bundleuser/#{gem_name}/blob/master/CODE_OF_CONDUCT.md")
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context "README.md" do
|
context "README.md" do
|
||||||
let(:gem_name) { "test_gem" }
|
|
||||||
|
|
||||||
context "git config github.user present" do
|
context "git config github.user present" do
|
||||||
before do
|
before do
|
||||||
execute_bundle_gem(gem_name)
|
bundle! "gem #{gem_name}"
|
||||||
end
|
end
|
||||||
|
|
||||||
it "contribute URL set to git username" do
|
it "contribute URL set to git username" do
|
||||||
expect(bundled_app("test_gem/README.md").read).not_to include("[USERNAME]")
|
expect(bundled_app("#{gem_name}/README.md").read).not_to include("[USERNAME]")
|
||||||
expect(bundled_app("test_gem/README.md").read).to include("github.com/bundleuser")
|
expect(bundled_app("#{gem_name}/README.md").read).to include("github.com/bundleuser")
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context "git config github.user is absent" do
|
context "git config github.user is absent" do
|
||||||
before do
|
before do
|
||||||
sys_exec("git config --unset github.user")
|
sys_exec("git config --unset github.user")
|
||||||
in_app_root
|
|
||||||
bundle "gem #{gem_name}"
|
bundle "gem #{gem_name}"
|
||||||
end
|
end
|
||||||
|
|
||||||
it "contribute URL set to [USERNAME]" do
|
it "contribute URL set to [USERNAME]" do
|
||||||
expect(bundled_app("test_gem/README.md").read).to include("[USERNAME]")
|
expect(bundled_app("#{gem_name}/README.md").read).to include("[USERNAME]")
|
||||||
expect(bundled_app("test_gem/README.md").read).not_to include("github.com/bundleuser")
|
expect(bundled_app("#{gem_name}/README.md").read).not_to include("github.com/bundleuser")
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
it "creates a new git repository" do
|
it "creates a new git repository" do
|
||||||
in_app_root
|
bundle "gem #{gem_name}"
|
||||||
bundle "gem test_gem"
|
expect(bundled_app("#{gem_name}/.git")).to exist
|
||||||
expect(bundled_app("test_gem/.git")).to exist
|
|
||||||
end
|
end
|
||||||
|
|
||||||
context "when git is not available" do
|
context "when git is not available" do
|
||||||
let(:gem_name) { "test_gem" }
|
|
||||||
|
|
||||||
# This spec cannot have `git` available in the test env
|
# This spec cannot have `git` available in the test env
|
||||||
before do
|
before do
|
||||||
load_paths = [lib, spec]
|
load_paths = [lib_dir, spec_dir]
|
||||||
load_path_str = "-I#{load_paths.join(File::PATH_SEPARATOR)}"
|
load_path_str = "-I#{load_paths.join(File::PATH_SEPARATOR)}"
|
||||||
|
|
||||||
sys_exec "#{Gem.ruby} #{load_path_str} #{bindir.join("bundle")} gem #{gem_name}", "PATH" => ""
|
sys_exec "#{Gem.ruby} #{load_path_str} #{bindir.join("bundle")} gem #{gem_name}", "PATH" => ""
|
||||||
|
@ -211,7 +201,6 @@ RSpec.describe "bundle gem" do
|
||||||
end
|
end
|
||||||
|
|
||||||
it "generates a valid gemspec" do
|
it "generates a valid gemspec" do
|
||||||
in_app_root
|
|
||||||
bundle! "gem newgem --bin"
|
bundle! "gem newgem --bin"
|
||||||
|
|
||||||
prepare_gemspec(bundled_app("newgem", "newgem.gemspec"))
|
prepare_gemspec(bundled_app("newgem", "newgem.gemspec"))
|
||||||
|
@ -226,10 +215,6 @@ RSpec.describe "bundle gem" do
|
||||||
end
|
end
|
||||||
|
|
||||||
context "gem naming with relative paths" do
|
context "gem naming with relative paths" do
|
||||||
before do
|
|
||||||
in_app_root
|
|
||||||
end
|
|
||||||
|
|
||||||
it "resolves ." do
|
it "resolves ." do
|
||||||
create_temporary_dir("tmp")
|
create_temporary_dir("tmp")
|
||||||
|
|
||||||
|
@ -260,43 +245,41 @@ RSpec.describe "bundle gem" do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context "gem naming with underscore" do
|
shared_examples_for "generating a gem" do
|
||||||
let(:gem_name) { "test_gem" }
|
|
||||||
|
|
||||||
before do
|
|
||||||
execute_bundle_gem(gem_name)
|
|
||||||
end
|
|
||||||
|
|
||||||
it "generates a gem skeleton" do
|
it "generates a gem skeleton" do
|
||||||
expect(bundled_app("test_gem/test_gem.gemspec")).to exist
|
bundle! "gem #{gem_name}"
|
||||||
expect(bundled_app("test_gem/Gemfile")).to exist
|
|
||||||
expect(bundled_app("test_gem/Rakefile")).to exist
|
|
||||||
expect(bundled_app("test_gem/lib/test_gem.rb")).to exist
|
|
||||||
expect(bundled_app("test_gem/lib/test_gem/version.rb")).to exist
|
|
||||||
expect(bundled_app("test_gem/.gitignore")).to exist
|
|
||||||
|
|
||||||
expect(bundled_app("test_gem/bin/setup")).to exist
|
expect(bundled_app("#{gem_name}/#{gem_name}.gemspec")).to exist
|
||||||
expect(bundled_app("test_gem/bin/console")).to exist
|
expect(bundled_app("#{gem_name}/Gemfile")).to exist
|
||||||
expect(bundled_app("test_gem/bin/setup")).to be_executable
|
expect(bundled_app("#{gem_name}/Rakefile")).to exist
|
||||||
expect(bundled_app("test_gem/bin/console")).to be_executable
|
expect(bundled_app("#{gem_name}/lib/#{require_path}.rb")).to exist
|
||||||
|
expect(bundled_app("#{gem_name}/lib/#{require_path}/version.rb")).to exist
|
||||||
|
expect(bundled_app("#{gem_name}/.gitignore")).to exist
|
||||||
|
|
||||||
|
expect(bundled_app("#{gem_name}/bin/setup")).to exist
|
||||||
|
expect(bundled_app("#{gem_name}/bin/console")).to exist
|
||||||
|
expect(bundled_app("#{gem_name}/bin/setup")).to be_executable
|
||||||
|
expect(bundled_app("#{gem_name}/bin/console")).to be_executable
|
||||||
end
|
end
|
||||||
|
|
||||||
it "starts with version 0.1.0" do
|
it "starts with version 0.1.0" do
|
||||||
expect(bundled_app("test_gem/lib/test_gem/version.rb").read).to match(/VERSION = "0.1.0"/)
|
bundle! "gem #{gem_name}"
|
||||||
|
|
||||||
|
expect(bundled_app("#{gem_name}/lib/#{require_path}/version.rb").read).to match(/VERSION = "0.1.0"/)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "does not nest constants" do
|
context "git config user.{name,email} is set" do
|
||||||
expect(bundled_app("test_gem/lib/test_gem/version.rb").read).to match(/module TestGem/)
|
before do
|
||||||
expect(bundled_app("test_gem/lib/test_gem.rb").read).to match(/module TestGem/)
|
bundle! "gem #{gem_name}"
|
||||||
end
|
end
|
||||||
|
|
||||||
it_should_behave_like "git config is present"
|
it_should_behave_like "git config is present"
|
||||||
|
end
|
||||||
|
|
||||||
context "git config user.{name,email} is not set" do
|
context "git config user.{name,email} is not set" do
|
||||||
before do
|
before do
|
||||||
`git config --unset user.name`
|
`git config --unset user.name`
|
||||||
`git config --unset user.email`
|
`git config --unset user.email`
|
||||||
in_app_root
|
|
||||||
bundle "gem #{gem_name}"
|
bundle "gem #{gem_name}"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -304,25 +287,35 @@ RSpec.describe "bundle gem" do
|
||||||
end
|
end
|
||||||
|
|
||||||
it "sets gemspec metadata['allowed_push_host']" do
|
it "sets gemspec metadata['allowed_push_host']" do
|
||||||
|
bundle! "gem #{gem_name}"
|
||||||
|
|
||||||
expect(generated_gemspec.metadata["allowed_push_host"]).
|
expect(generated_gemspec.metadata["allowed_push_host"]).
|
||||||
to match(/mygemserver\.com/)
|
to match(/mygemserver\.com/)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "sets a minimum ruby version" do
|
it "sets a minimum ruby version" do
|
||||||
|
bundle! "gem #{gem_name}"
|
||||||
|
|
||||||
bundler_gemspec = Bundler::GemHelper.new(gemspec_dir).gemspec
|
bundler_gemspec = Bundler::GemHelper.new(gemspec_dir).gemspec
|
||||||
|
|
||||||
expect(bundler_gemspec.required_ruby_version).to eq(generated_gemspec.required_ruby_version)
|
expect(bundler_gemspec.required_ruby_version).to eq(generated_gemspec.required_ruby_version)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "requires the version file" do
|
it "requires the version file" do
|
||||||
expect(bundled_app("test_gem/lib/test_gem.rb").read).to match(%r{require "test_gem/version"})
|
bundle! "gem #{gem_name}"
|
||||||
|
|
||||||
|
expect(bundled_app("#{gem_name}/lib/#{require_path}.rb").read).to match(%r{require "#{require_path}/version"})
|
||||||
end
|
end
|
||||||
|
|
||||||
it "creates a base error class" do
|
it "creates a base error class" do
|
||||||
expect(bundled_app("test_gem/lib/test_gem.rb").read).to match(/class Error < StandardError; end$/)
|
bundle! "gem #{gem_name}"
|
||||||
|
|
||||||
|
expect(bundled_app("#{gem_name}/lib/#{require_path}.rb").read).to match(/class Error < StandardError; end$/)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "runs rake without problems" do
|
it "runs rake without problems" do
|
||||||
|
bundle! "gem #{gem_name}"
|
||||||
|
|
||||||
system_gems ["rake-12.3.2"]
|
system_gems ["rake-12.3.2"]
|
||||||
|
|
||||||
rakefile = strip_whitespace <<-RAKEFILE
|
rakefile = strip_whitespace <<-RAKEFILE
|
||||||
|
@ -330,7 +323,7 @@ RSpec.describe "bundle gem" do
|
||||||
puts 'SUCCESS'
|
puts 'SUCCESS'
|
||||||
end
|
end
|
||||||
RAKEFILE
|
RAKEFILE
|
||||||
File.open(bundled_app("test_gem/Rakefile"), "w") do |file|
|
File.open(bundled_app("#{gem_name}/Rakefile"), "w") do |file|
|
||||||
file.puts rakefile
|
file.puts rakefile
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -342,117 +335,110 @@ RSpec.describe "bundle gem" do
|
||||||
|
|
||||||
context "--exe parameter set" do
|
context "--exe parameter set" do
|
||||||
before do
|
before do
|
||||||
in_app_root
|
|
||||||
bundle "gem #{gem_name} --exe"
|
bundle "gem #{gem_name} --exe"
|
||||||
end
|
end
|
||||||
|
|
||||||
it "builds exe skeleton" do
|
it "builds exe skeleton" do
|
||||||
expect(bundled_app("test_gem/exe/test_gem")).to exist
|
expect(bundled_app("#{gem_name}/exe/#{gem_name}")).to exist
|
||||||
end
|
end
|
||||||
|
|
||||||
it "requires 'test-gem'" do
|
it "requires the main file" do
|
||||||
expect(bundled_app("test_gem/exe/test_gem").read).to match(/require "test_gem"/)
|
expect(bundled_app("#{gem_name}/exe/#{gem_name}").read).to match(/require "#{require_path}"/)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context "--bin parameter set" do
|
context "--bin parameter set" do
|
||||||
before do
|
before do
|
||||||
in_app_root
|
|
||||||
bundle "gem #{gem_name} --bin"
|
bundle "gem #{gem_name} --bin"
|
||||||
end
|
end
|
||||||
|
|
||||||
it "builds exe skeleton" do
|
it "builds exe skeleton" do
|
||||||
expect(bundled_app("test_gem/exe/test_gem")).to exist
|
expect(bundled_app("#{gem_name}/exe/#{gem_name}")).to exist
|
||||||
end
|
end
|
||||||
|
|
||||||
it "requires 'test-gem'" do
|
it "requires the main file" do
|
||||||
expect(bundled_app("test_gem/exe/test_gem").read).to match(/require "test_gem"/)
|
expect(bundled_app("#{gem_name}/exe/#{gem_name}").read).to match(/require "#{require_path}"/)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context "no --test parameter" do
|
context "no --test parameter" do
|
||||||
before do
|
before do
|
||||||
in_app_root
|
|
||||||
bundle "gem #{gem_name}"
|
bundle "gem #{gem_name}"
|
||||||
end
|
end
|
||||||
|
|
||||||
it "doesn't create any spec/test file" do
|
it "doesn't create any spec/test file" do
|
||||||
expect(bundled_app("test_gem/.rspec")).to_not exist
|
expect(bundled_app("#{gem_name}/.rspec")).to_not exist
|
||||||
expect(bundled_app("test_gem/spec/test_gem_spec.rb")).to_not exist
|
expect(bundled_app("#{gem_name}/spec/#{require_path}_spec.rb")).to_not exist
|
||||||
expect(bundled_app("test_gem/spec/spec_helper.rb")).to_not exist
|
expect(bundled_app("#{gem_name}/spec/spec_helper.rb")).to_not exist
|
||||||
expect(bundled_app("test_gem/test/test_test_gem.rb")).to_not exist
|
expect(bundled_app("#{gem_name}/test/#{require_path}.rb")).to_not exist
|
||||||
expect(bundled_app("test_gem/test/minitest_helper.rb")).to_not exist
|
expect(bundled_app("#{gem_name}/test/minitest_helper.rb")).to_not exist
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context "--test parameter set to rspec" do
|
context "--test parameter set to rspec" do
|
||||||
before do
|
before do
|
||||||
in_app_root
|
|
||||||
bundle "gem #{gem_name} --test=rspec"
|
bundle "gem #{gem_name} --test=rspec"
|
||||||
end
|
end
|
||||||
|
|
||||||
it "builds spec skeleton" do
|
it "builds spec skeleton" do
|
||||||
expect(bundled_app("test_gem/.rspec")).to exist
|
expect(bundled_app("#{gem_name}/.rspec")).to exist
|
||||||
expect(bundled_app("test_gem/spec/test_gem_spec.rb")).to exist
|
expect(bundled_app("#{gem_name}/spec/#{require_path}_spec.rb")).to exist
|
||||||
expect(bundled_app("test_gem/spec/spec_helper.rb")).to exist
|
expect(bundled_app("#{gem_name}/spec/spec_helper.rb")).to exist
|
||||||
end
|
end
|
||||||
|
|
||||||
it "depends on a specific version of rspec in generated Gemfile" do
|
it "depends on a specific version of rspec in generated Gemfile" do
|
||||||
Dir.chdir(bundled_app("test_gem")) do
|
Dir.chdir(bundled_app(gem_name)) do
|
||||||
builder = Bundler::Dsl.new
|
builder = Bundler::Dsl.new
|
||||||
builder.eval_gemfile(bundled_app("test_gem/Gemfile"))
|
builder.eval_gemfile(bundled_app("#{gem_name}/Gemfile"))
|
||||||
builder.dependencies
|
builder.dependencies
|
||||||
rspec_dep = builder.dependencies.find {|d| d.name == "rspec" }
|
rspec_dep = builder.dependencies.find {|d| d.name == "rspec" }
|
||||||
expect(rspec_dep).to be_specific
|
expect(rspec_dep).to be_specific
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
it "requires 'test-gem'" do
|
it "requires the main file" do
|
||||||
expect(bundled_app("test_gem/spec/spec_helper.rb").read).to include(%(require "test_gem"))
|
expect(bundled_app("#{gem_name}/spec/spec_helper.rb").read).to include(%(require "#{require_path}"))
|
||||||
end
|
end
|
||||||
|
|
||||||
it "creates a default test which fails" do
|
it "creates a default test which fails" do
|
||||||
expect(bundled_app("test_gem/spec/test_gem_spec.rb").read).to include("expect(false).to eq(true)")
|
expect(bundled_app("#{gem_name}/spec/#{require_path}_spec.rb").read).to include("expect(false).to eq(true)")
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context "gem.test setting set to rspec" do
|
context "gem.test setting set to rspec" do
|
||||||
before do
|
before do
|
||||||
in_app_root
|
|
||||||
bundle "config set gem.test rspec"
|
bundle "config set gem.test rspec"
|
||||||
bundle "gem #{gem_name}"
|
bundle "gem #{gem_name}"
|
||||||
end
|
end
|
||||||
|
|
||||||
it "builds spec skeleton" do
|
it "builds spec skeleton" do
|
||||||
expect(bundled_app("test_gem/.rspec")).to exist
|
expect(bundled_app("#{gem_name}/.rspec")).to exist
|
||||||
expect(bundled_app("test_gem/spec/test_gem_spec.rb")).to exist
|
expect(bundled_app("#{gem_name}/spec/#{require_path}_spec.rb")).to exist
|
||||||
expect(bundled_app("test_gem/spec/spec_helper.rb")).to exist
|
expect(bundled_app("#{gem_name}/spec/spec_helper.rb")).to exist
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context "gem.test setting set to rspec and --test is set to minitest" do
|
context "gem.test setting set to rspec and --test is set to minitest" do
|
||||||
before do
|
before do
|
||||||
in_app_root
|
|
||||||
bundle "config set gem.test rspec"
|
bundle "config set gem.test rspec"
|
||||||
bundle "gem #{gem_name} --test=minitest"
|
bundle "gem #{gem_name} --test=minitest"
|
||||||
end
|
end
|
||||||
|
|
||||||
it "builds spec skeleton" do
|
it "builds spec skeleton" do
|
||||||
expect(bundled_app("test_gem/test/test_gem_test.rb")).to exist
|
expect(bundled_app("#{gem_name}/test/#{require_path}_test.rb")).to exist
|
||||||
expect(bundled_app("test_gem/test/test_helper.rb")).to exist
|
expect(bundled_app("#{gem_name}/test/test_helper.rb")).to exist
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context "--test parameter set to minitest" do
|
context "--test parameter set to minitest" do
|
||||||
before do
|
before do
|
||||||
in_app_root
|
|
||||||
bundle "gem #{gem_name} --test=minitest"
|
bundle "gem #{gem_name} --test=minitest"
|
||||||
end
|
end
|
||||||
|
|
||||||
it "depends on a specific version of minitest" do
|
it "depends on a specific version of minitest" do
|
||||||
Dir.chdir(bundled_app("test_gem")) do
|
Dir.chdir(bundled_app(gem_name)) do
|
||||||
builder = Bundler::Dsl.new
|
builder = Bundler::Dsl.new
|
||||||
builder.eval_gemfile(bundled_app("test_gem/Gemfile"))
|
builder.eval_gemfile(bundled_app("#{gem_name}/Gemfile"))
|
||||||
builder.dependencies
|
builder.dependencies
|
||||||
minitest_dep = builder.dependencies.find {|d| d.name == "minitest" }
|
minitest_dep = builder.dependencies.find {|d| d.name == "minitest" }
|
||||||
expect(minitest_dep).to be_specific
|
expect(minitest_dep).to be_specific
|
||||||
|
@ -460,26 +446,25 @@ RSpec.describe "bundle gem" do
|
||||||
end
|
end
|
||||||
|
|
||||||
it "builds spec skeleton" do
|
it "builds spec skeleton" do
|
||||||
expect(bundled_app("test_gem/test/test_gem_test.rb")).to exist
|
expect(bundled_app("#{gem_name}/test/#{require_path}_test.rb")).to exist
|
||||||
expect(bundled_app("test_gem/test/test_helper.rb")).to exist
|
expect(bundled_app("#{gem_name}/test/test_helper.rb")).to exist
|
||||||
end
|
end
|
||||||
|
|
||||||
it "requires 'test-gem'" do
|
it "requires the main file" do
|
||||||
expect(bundled_app("test_gem/test/test_helper.rb").read).to include(%(require "test_gem"))
|
expect(bundled_app("#{gem_name}/test/test_helper.rb").read).to include(%(require "#{require_path}"))
|
||||||
end
|
end
|
||||||
|
|
||||||
it "requires 'minitest_helper'" do
|
it "requires 'minitest_helper'" do
|
||||||
expect(bundled_app("test_gem/test/test_gem_test.rb").read).to include(%(require "test_helper"))
|
expect(bundled_app("#{gem_name}/test/#{require_path}_test.rb").read).to include(%(require "test_helper"))
|
||||||
end
|
end
|
||||||
|
|
||||||
it "creates a default test which fails" do
|
it "creates a default test which fails" do
|
||||||
expect(bundled_app("test_gem/test/test_gem_test.rb").read).to include("assert false")
|
expect(bundled_app("#{gem_name}/test/#{require_path}_test.rb").read).to include("assert false")
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context "gem.test setting set to minitest" do
|
context "gem.test setting set to minitest" do
|
||||||
before do
|
before do
|
||||||
in_app_root
|
|
||||||
bundle "config set gem.test minitest"
|
bundle "config set gem.test minitest"
|
||||||
bundle "gem #{gem_name}"
|
bundle "gem #{gem_name}"
|
||||||
end
|
end
|
||||||
|
@ -498,29 +483,27 @@ RSpec.describe "bundle gem" do
|
||||||
task :default => :test
|
task :default => :test
|
||||||
RAKEFILE
|
RAKEFILE
|
||||||
|
|
||||||
expect(bundled_app("test_gem/Rakefile").read).to eq(rakefile)
|
expect(bundled_app("#{gem_name}/Rakefile").read).to eq(rakefile)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context "--test with no arguments" do
|
context "--test with no arguments" do
|
||||||
before do
|
before do
|
||||||
in_app_root
|
|
||||||
bundle "gem #{gem_name} --test"
|
bundle "gem #{gem_name} --test"
|
||||||
end
|
end
|
||||||
|
|
||||||
it "defaults to rspec" do
|
it "defaults to rspec" do
|
||||||
expect(bundled_app("test_gem/spec/spec_helper.rb")).to exist
|
expect(bundled_app("#{gem_name}/spec/spec_helper.rb")).to exist
|
||||||
expect(bundled_app("test_gem/test/minitest_helper.rb")).to_not exist
|
expect(bundled_app("#{gem_name}/test/minitest_helper.rb")).to_not exist
|
||||||
end
|
end
|
||||||
|
|
||||||
it "creates a .travis.yml file to test the library against the current Ruby version on Travis CI" do
|
it "creates a .travis.yml file to test the library against the current Ruby version on Travis CI" do
|
||||||
expect(bundled_app("test_gem/.travis.yml").read).to match(/- #{RUBY_VERSION}/)
|
expect(bundled_app("#{gem_name}/.travis.yml").read).to match(/- #{RUBY_VERSION}/)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context "--edit option" do
|
context "--edit option" do
|
||||||
it "opens the generated gemspec in the user's text editor" do
|
it "opens the generated gemspec in the user's text editor" do
|
||||||
in_app_root
|
|
||||||
output = bundle "gem #{gem_name} --edit=echo"
|
output = bundle "gem #{gem_name} --edit=echo"
|
||||||
gemspec_path = File.join(Dir.pwd, gem_name, "#{gem_name}.gemspec")
|
gemspec_path = File.join(Dir.pwd, gem_name, "#{gem_name}.gemspec")
|
||||||
expect(output).to include("echo \"#{gemspec_path}\"")
|
expect(output).to include("echo \"#{gemspec_path}\"")
|
||||||
|
@ -531,6 +514,8 @@ RSpec.describe "bundle gem" do
|
||||||
context "testing --mit and --coc options against bundle config settings" do
|
context "testing --mit and --coc options against bundle config settings" do
|
||||||
let(:gem_name) { "test-gem" }
|
let(:gem_name) { "test-gem" }
|
||||||
|
|
||||||
|
let(:require_path) { "test/gem" }
|
||||||
|
|
||||||
context "with mit option in bundle config settings set to true" do
|
context "with mit option in bundle config settings set to true" do
|
||||||
before do
|
before do
|
||||||
global_config "BUNDLE_GEM__MIT" => "true", "BUNDLE_GEM__TEST" => "false", "BUNDLE_GEM__COC" => "false"
|
global_config "BUNDLE_GEM__MIT" => "true", "BUNDLE_GEM__TEST" => "false", "BUNDLE_GEM__COC" => "false"
|
||||||
|
@ -558,196 +543,35 @@ RSpec.describe "bundle gem" do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context "gem naming with dashed" do
|
context "gem naming with underscore" do
|
||||||
let(:gem_name) { "test-gem" }
|
let(:gem_name) { "test_gem" }
|
||||||
|
|
||||||
|
let(:require_path) { "test_gem" }
|
||||||
|
|
||||||
|
let(:flags) { nil }
|
||||||
|
|
||||||
before do
|
before do
|
||||||
execute_bundle_gem(gem_name)
|
bundle! ["gem", gem_name, flags].compact.join(" ")
|
||||||
end
|
end
|
||||||
|
|
||||||
it "generates a gem skeleton" do
|
it "does not nest constants" do
|
||||||
expect(bundled_app("test-gem/test-gem.gemspec")).to exist
|
expect(bundled_app("#{gem_name}/lib/#{require_path}/version.rb").read).to match(/module TestGem/)
|
||||||
expect(bundled_app("test-gem/Gemfile")).to exist
|
expect(bundled_app("#{gem_name}/lib/#{require_path}.rb").read).to match(/module TestGem/)
|
||||||
expect(bundled_app("test-gem/Rakefile")).to exist
|
|
||||||
expect(bundled_app("test-gem/lib/test/gem.rb")).to exist
|
|
||||||
expect(bundled_app("test-gem/lib/test/gem/version.rb")).to exist
|
|
||||||
end
|
end
|
||||||
|
|
||||||
it "starts with version 0.1.0" do
|
include_examples "generating a gem"
|
||||||
expect(bundled_app("test-gem/lib/test/gem/version.rb").read).to match(/VERSION = "0.1.0"/)
|
|
||||||
end
|
|
||||||
|
|
||||||
it "nests constants so they work" do
|
|
||||||
expect(bundled_app("test-gem/lib/test/gem/version.rb").read).to match(/module Test\n module Gem/)
|
|
||||||
expect(bundled_app("test-gem/lib/test/gem.rb").read).to match(/module Test\n module Gem/)
|
|
||||||
end
|
|
||||||
|
|
||||||
it_should_behave_like "git config is present"
|
|
||||||
|
|
||||||
context "git config user.{name,email} is not set" do
|
|
||||||
before do
|
|
||||||
`git config --unset user.name`
|
|
||||||
`git config --unset user.email`
|
|
||||||
in_app_root
|
|
||||||
bundle "gem #{gem_name}"
|
|
||||||
end
|
|
||||||
|
|
||||||
it_should_behave_like "git config is absent"
|
|
||||||
end
|
|
||||||
|
|
||||||
it "requires the version file" do
|
|
||||||
expect(bundled_app("test-gem/lib/test/gem.rb").read).to match(%r{require "test/gem/version"})
|
|
||||||
end
|
|
||||||
|
|
||||||
it "runs rake without problems" do
|
|
||||||
system_gems ["rake-12.3.2"]
|
|
||||||
|
|
||||||
rakefile = strip_whitespace <<-RAKEFILE
|
|
||||||
task :default do
|
|
||||||
puts 'SUCCESS'
|
|
||||||
end
|
|
||||||
RAKEFILE
|
|
||||||
File.open(bundled_app("test-gem/Rakefile"), "w") do |file|
|
|
||||||
file.puts rakefile
|
|
||||||
end
|
|
||||||
|
|
||||||
Dir.chdir(bundled_app(gem_name)) do
|
|
||||||
sys_exec(rake)
|
|
||||||
expect(out).to include("SUCCESS")
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
context "--bin parameter set" do
|
|
||||||
before do
|
|
||||||
in_app_root
|
|
||||||
bundle "gem #{gem_name} --bin"
|
|
||||||
end
|
|
||||||
|
|
||||||
it "builds bin skeleton" do
|
|
||||||
expect(bundled_app("test-gem/exe/test-gem")).to exist
|
|
||||||
end
|
|
||||||
|
|
||||||
it "requires 'test/gem'" do
|
|
||||||
expect(bundled_app("test-gem/exe/test-gem").read).to match(%r{require "test/gem"})
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
context "no --test parameter" do
|
|
||||||
before do
|
|
||||||
in_app_root
|
|
||||||
bundle "gem #{gem_name}"
|
|
||||||
end
|
|
||||||
|
|
||||||
it "doesn't create any spec/test file" do
|
|
||||||
expect(bundled_app("test-gem/.rspec")).to_not exist
|
|
||||||
expect(bundled_app("test-gem/spec/test/gem_spec.rb")).to_not exist
|
|
||||||
expect(bundled_app("test-gem/spec/spec_helper.rb")).to_not exist
|
|
||||||
expect(bundled_app("test-gem/test/test_test/gem.rb")).to_not exist
|
|
||||||
expect(bundled_app("test-gem/test/minitest_helper.rb")).to_not exist
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
context "--test parameter set to rspec" do
|
|
||||||
before do
|
|
||||||
in_app_root
|
|
||||||
bundle "gem #{gem_name} --test=rspec"
|
|
||||||
end
|
|
||||||
|
|
||||||
it "builds spec skeleton" do
|
|
||||||
expect(bundled_app("test-gem/.rspec")).to exist
|
|
||||||
expect(bundled_app("test-gem/spec/test/gem_spec.rb")).to exist
|
|
||||||
expect(bundled_app("test-gem/spec/spec_helper.rb")).to exist
|
|
||||||
end
|
|
||||||
|
|
||||||
it "requires 'test/gem'" do
|
|
||||||
expect(bundled_app("test-gem/spec/spec_helper.rb").read).to include(%(require "test/gem"))
|
|
||||||
end
|
|
||||||
|
|
||||||
it "creates a default test which fails" do
|
|
||||||
expect(bundled_app("test-gem/spec/test/gem_spec.rb").read).to include("expect(false).to eq(true)")
|
|
||||||
end
|
|
||||||
|
|
||||||
it "creates a default rake task to run the specs" do
|
|
||||||
rakefile = strip_whitespace <<-RAKEFILE
|
|
||||||
require "bundler/gem_tasks"
|
|
||||||
require "rspec/core/rake_task"
|
|
||||||
|
|
||||||
RSpec::Core::RakeTask.new(:spec)
|
|
||||||
|
|
||||||
task :default => :spec
|
|
||||||
RAKEFILE
|
|
||||||
|
|
||||||
expect(bundled_app("test-gem/Rakefile").read).to eq(rakefile)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
context "--test parameter set to minitest" do
|
|
||||||
before do
|
|
||||||
in_app_root
|
|
||||||
bundle "gem #{gem_name} --test=minitest"
|
|
||||||
end
|
|
||||||
|
|
||||||
it "builds spec skeleton" do
|
|
||||||
expect(bundled_app("test-gem/test/test/gem_test.rb")).to exist
|
|
||||||
expect(bundled_app("test-gem/test/test_helper.rb")).to exist
|
|
||||||
end
|
|
||||||
|
|
||||||
it "requires 'test/gem'" do
|
|
||||||
expect(bundled_app("test-gem/test/test_helper.rb").read).to match(%r{require "test/gem"})
|
|
||||||
end
|
|
||||||
|
|
||||||
it "requires 'test_helper'" do
|
|
||||||
expect(bundled_app("test-gem/test/test/gem_test.rb").read).to match(/require "test_helper"/)
|
|
||||||
end
|
|
||||||
|
|
||||||
it "creates a default test which fails" do
|
|
||||||
expect(bundled_app("test-gem/test/test/gem_test.rb").read).to match(/assert false/)
|
|
||||||
end
|
|
||||||
|
|
||||||
it "creates a default rake task to run the test suite" do
|
|
||||||
rakefile = strip_whitespace <<-RAKEFILE
|
|
||||||
require "bundler/gem_tasks"
|
|
||||||
require "rake/testtask"
|
|
||||||
|
|
||||||
Rake::TestTask.new(:test) do |t|
|
|
||||||
t.libs << "test"
|
|
||||||
t.libs << "lib"
|
|
||||||
t.test_files = FileList["test/**/*_test.rb"]
|
|
||||||
end
|
|
||||||
|
|
||||||
task :default => :test
|
|
||||||
RAKEFILE
|
|
||||||
|
|
||||||
expect(bundled_app("test-gem/Rakefile").read).to eq(rakefile)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
context "--test with no arguments" do
|
|
||||||
before do
|
|
||||||
in_app_root
|
|
||||||
bundle "gem #{gem_name} --test"
|
|
||||||
end
|
|
||||||
|
|
||||||
it "defaults to rspec" do
|
|
||||||
expect(bundled_app("test-gem/spec/spec_helper.rb")).to exist
|
|
||||||
expect(bundled_app("test-gem/test/minitest_helper.rb")).to_not exist
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
context "--ext parameter set" do
|
context "--ext parameter set" do
|
||||||
before do
|
let(:flags) { "--ext" }
|
||||||
in_app_root
|
|
||||||
bundle "gem test_gem --ext"
|
|
||||||
end
|
|
||||||
|
|
||||||
it "builds ext skeleton" do
|
it "builds ext skeleton" do
|
||||||
expect(bundled_app("test_gem/ext/test_gem/extconf.rb")).to exist
|
expect(bundled_app("#{gem_name}/ext/#{gem_name}/extconf.rb")).to exist
|
||||||
expect(bundled_app("test_gem/ext/test_gem/test_gem.h")).to exist
|
expect(bundled_app("#{gem_name}/ext/#{gem_name}/#{gem_name}.h")).to exist
|
||||||
expect(bundled_app("test_gem/ext/test_gem/test_gem.c")).to exist
|
expect(bundled_app("#{gem_name}/ext/#{gem_name}/#{gem_name}.c")).to exist
|
||||||
end
|
end
|
||||||
|
|
||||||
it "includes rake-compiler" do
|
it "includes rake-compiler" do
|
||||||
expect(bundled_app("test_gem/Gemfile").read).to include('gem "rake-compiler"')
|
expect(bundled_app("#{gem_name}/Gemfile").read).to include('gem "rake-compiler"')
|
||||||
end
|
end
|
||||||
|
|
||||||
it "depends on compile task for build" do
|
it "depends on compile task for build" do
|
||||||
|
@ -757,21 +581,38 @@ RSpec.describe "bundle gem" do
|
||||||
|
|
||||||
task :build => :compile
|
task :build => :compile
|
||||||
|
|
||||||
Rake::ExtensionTask.new("test_gem") do |ext|
|
Rake::ExtensionTask.new("#{gem_name}") do |ext|
|
||||||
ext.lib_dir = "lib/test_gem"
|
ext.lib_dir = "lib/#{gem_name}"
|
||||||
end
|
end
|
||||||
|
|
||||||
task :default => [:clobber, :compile, :spec]
|
task :default => [:clobber, :compile, :spec]
|
||||||
RAKEFILE
|
RAKEFILE
|
||||||
|
|
||||||
expect(bundled_app("test_gem/Rakefile").read).to eq(rakefile)
|
expect(bundled_app("#{gem_name}/Rakefile").read).to eq(rakefile)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
context "gem naming with dashed" do
|
||||||
|
let(:gem_name) { "test-gem" }
|
||||||
|
|
||||||
|
let(:require_path) { "test/gem" }
|
||||||
|
|
||||||
|
before do
|
||||||
|
bundle! "gem #{gem_name}"
|
||||||
|
end
|
||||||
|
|
||||||
|
it "nests constants so they work" do
|
||||||
|
expect(bundled_app("#{gem_name}/lib/#{require_path}/version.rb").read).to match(/module Test\n module Gem/)
|
||||||
|
expect(bundled_app("#{gem_name}/lib/#{require_path}.rb").read).to match(/module Test\n module Gem/)
|
||||||
|
end
|
||||||
|
|
||||||
|
include_examples "generating a gem"
|
||||||
|
end
|
||||||
|
|
||||||
describe "uncommon gem names" do
|
describe "uncommon gem names" do
|
||||||
it "can deal with two dashes" do
|
it "can deal with two dashes" do
|
||||||
execute_bundle_gem("a--a")
|
bundle! "gem a--a"
|
||||||
|
|
||||||
expect(bundled_app("a--a/a--a.gemspec")).to exist
|
expect(bundled_app("a--a/a--a.gemspec")).to exist
|
||||||
end
|
end
|
||||||
|
@ -804,9 +645,6 @@ Usage: "bundle gem NAME [OPTIONS]"
|
||||||
before do
|
before do
|
||||||
bundle "gem #{subject}"
|
bundle "gem #{subject}"
|
||||||
end
|
end
|
||||||
after do
|
|
||||||
Bundler.clear_gemspec_cache
|
|
||||||
end
|
|
||||||
|
|
||||||
context "with an existing const name" do
|
context "with an existing const name" do
|
||||||
subject { "gem" }
|
subject { "gem" }
|
||||||
|
@ -830,10 +668,6 @@ Usage: "bundle gem NAME [OPTIONS]"
|
||||||
end
|
end
|
||||||
|
|
||||||
context "on first run" do
|
context "on first run" do
|
||||||
before do
|
|
||||||
in_app_root
|
|
||||||
end
|
|
||||||
|
|
||||||
it "asks about test framework" do
|
it "asks about test framework" do
|
||||||
global_config "BUNDLE_GEM__MIT" => "false", "BUNDLE_GEM__COC" => "false"
|
global_config "BUNDLE_GEM__MIT" => "false", "BUNDLE_GEM__COC" => "false"
|
||||||
|
|
||||||
|
@ -880,9 +714,7 @@ Usage: "bundle gem NAME [OPTIONS]"
|
||||||
|
|
||||||
context "on conflicts with a previously created file" do
|
context "on conflicts with a previously created file" do
|
||||||
it "should fail gracefully" do
|
it "should fail gracefully" do
|
||||||
in_app_root do
|
|
||||||
FileUtils.touch("conflict-foobar")
|
FileUtils.touch("conflict-foobar")
|
||||||
end
|
|
||||||
bundle "gem conflict-foobar"
|
bundle "gem conflict-foobar"
|
||||||
expect(err).to include("Errno::ENOTDIR")
|
expect(err).to include("Errno::ENOTDIR")
|
||||||
expect(exitstatus).to eql(32) if exitstatus
|
expect(exitstatus).to eql(32) if exitstatus
|
||||||
|
@ -891,9 +723,7 @@ Usage: "bundle gem NAME [OPTIONS]"
|
||||||
|
|
||||||
context "on conflicts with a previously created directory" do
|
context "on conflicts with a previously created directory" do
|
||||||
it "should succeed" do
|
it "should succeed" do
|
||||||
in_app_root do
|
|
||||||
FileUtils.mkdir_p("conflict-foobar/Gemfile")
|
FileUtils.mkdir_p("conflict-foobar/Gemfile")
|
||||||
end
|
|
||||||
bundle! "gem conflict-foobar"
|
bundle! "gem conflict-foobar"
|
||||||
expect(out).to include("file_clash conflict-foobar/Gemfile").
|
expect(out).to include("file_clash conflict-foobar/Gemfile").
|
||||||
and include "Initializing git repo in #{bundled_app("conflict-foobar")}"
|
and include "Initializing git repo in #{bundled_app("conflict-foobar")}"
|
||||||
|
|
|
@ -390,7 +390,7 @@ You have deleted from the Gemfile:
|
||||||
expect(the_bundle).to include_gems "foo 1.0"
|
expect(the_bundle).to include_gems "foo 1.0"
|
||||||
|
|
||||||
bundle "config set cache_all true"
|
bundle "config set cache_all true"
|
||||||
bundle! :package
|
bundle! :cache
|
||||||
expect(bundled_app("vendor/cache/foo")).to be_directory
|
expect(bundled_app("vendor/cache/foo")).to be_directory
|
||||||
|
|
||||||
bundle! "install --local"
|
bundle! "install --local"
|
||||||
|
|
|
@ -1056,7 +1056,7 @@ RSpec.describe "bundle install with git sources" do
|
||||||
|
|
||||||
File.open(lib_path("install_hooks.rb"), "w") do |h|
|
File.open(lib_path("install_hooks.rb"), "w") do |h|
|
||||||
h.write <<-H
|
h.write <<-H
|
||||||
require 'rubygems'
|
require '#{spec_dir}/support/rubygems'
|
||||||
Gem.pre_install_hooks << lambda do |inst|
|
Gem.pre_install_hooks << lambda do |inst|
|
||||||
STDERR.puts "Ran pre-install hook: \#{inst.spec.full_name}"
|
STDERR.puts "Ran pre-install hook: \#{inst.spec.full_name}"
|
||||||
end
|
end
|
||||||
|
@ -1076,7 +1076,7 @@ RSpec.describe "bundle install with git sources" do
|
||||||
|
|
||||||
File.open(lib_path("install_hooks.rb"), "w") do |h|
|
File.open(lib_path("install_hooks.rb"), "w") do |h|
|
||||||
h.write <<-H
|
h.write <<-H
|
||||||
require 'rubygems'
|
require '#{spec_dir}/support/rubygems'
|
||||||
Gem.post_install_hooks << lambda do |inst|
|
Gem.post_install_hooks << lambda do |inst|
|
||||||
STDERR.puts "Ran post-install hook: \#{inst.spec.full_name}"
|
STDERR.puts "Ran post-install hook: \#{inst.spec.full_name}"
|
||||||
end
|
end
|
||||||
|
@ -1096,7 +1096,7 @@ RSpec.describe "bundle install with git sources" do
|
||||||
|
|
||||||
File.open(lib_path("install_hooks.rb"), "w") do |h|
|
File.open(lib_path("install_hooks.rb"), "w") do |h|
|
||||||
h.write <<-H
|
h.write <<-H
|
||||||
require 'rubygems'
|
require '#{spec_dir}/support/rubygems'
|
||||||
Gem.pre_install_hooks << lambda do |inst|
|
Gem.pre_install_hooks << lambda do |inst|
|
||||||
false
|
false
|
||||||
end
|
end
|
||||||
|
@ -1391,7 +1391,7 @@ In Gemfile:
|
||||||
end
|
end
|
||||||
G
|
G
|
||||||
bundle "config set cache_all true"
|
bundle "config set cache_all true"
|
||||||
bundle :package
|
bundle :cache
|
||||||
simulate_new_machine
|
simulate_new_machine
|
||||||
|
|
||||||
bundle! "install", :env => { "PATH" => "" }
|
bundle! "install", :env => { "PATH" => "" }
|
||||||
|
|
|
@ -333,7 +333,7 @@ RSpec.describe "bundle install with groups" do
|
||||||
G
|
G
|
||||||
|
|
||||||
ruby <<-R
|
ruby <<-R
|
||||||
require "#{lib}/bundler"
|
require "#{lib_dir}/bundler"
|
||||||
Bundler.setup :default
|
Bundler.setup :default
|
||||||
Bundler.require :default
|
Bundler.require :default
|
||||||
puts RACK
|
puts RACK
|
||||||
|
|
|
@ -672,7 +672,7 @@ RSpec.describe "bundle install with explicit source paths" do
|
||||||
|
|
||||||
File.open(lib_path("install_hooks.rb"), "w") do |h|
|
File.open(lib_path("install_hooks.rb"), "w") do |h|
|
||||||
h.write <<-H
|
h.write <<-H
|
||||||
require 'rubygems'
|
require '#{spec_dir}/support/rubygems'
|
||||||
Gem.pre_install_hooks << lambda do |inst|
|
Gem.pre_install_hooks << lambda do |inst|
|
||||||
STDERR.puts "Ran pre-install hook: \#{inst.spec.full_name}"
|
STDERR.puts "Ran pre-install hook: \#{inst.spec.full_name}"
|
||||||
end
|
end
|
||||||
|
@ -692,7 +692,7 @@ RSpec.describe "bundle install with explicit source paths" do
|
||||||
|
|
||||||
File.open(lib_path("install_hooks.rb"), "w") do |h|
|
File.open(lib_path("install_hooks.rb"), "w") do |h|
|
||||||
h.write <<-H
|
h.write <<-H
|
||||||
require 'rubygems'
|
require '#{spec_dir}/support/rubygems'
|
||||||
Gem.post_install_hooks << lambda do |inst|
|
Gem.post_install_hooks << lambda do |inst|
|
||||||
STDERR.puts "Ran post-install hook: \#{inst.spec.full_name}"
|
STDERR.puts "Ran post-install hook: \#{inst.spec.full_name}"
|
||||||
end
|
end
|
||||||
|
@ -712,7 +712,7 @@ RSpec.describe "bundle install with explicit source paths" do
|
||||||
|
|
||||||
File.open(lib_path("install_hooks.rb"), "w") do |h|
|
File.open(lib_path("install_hooks.rb"), "w") do |h|
|
||||||
h.write <<-H
|
h.write <<-H
|
||||||
require 'rubygems'
|
require '#{spec_dir}/support/rubygems'
|
||||||
Gem.pre_install_hooks << lambda do |inst|
|
Gem.pre_install_hooks << lambda do |inst|
|
||||||
false
|
false
|
||||||
end
|
end
|
||||||
|
|
|
@ -102,7 +102,7 @@ RSpec.describe "bundle install with gems on multiple sources" do
|
||||||
end
|
end
|
||||||
|
|
||||||
it "can cache and deploy" do
|
it "can cache and deploy" do
|
||||||
bundle! :package
|
bundle! :cache
|
||||||
|
|
||||||
expect(bundled_app("vendor/cache/rack-1.0.0.gem")).to exist
|
expect(bundled_app("vendor/cache/rack-1.0.0.gem")).to exist
|
||||||
expect(bundled_app("vendor/cache/rack-obama-1.0.gem")).to exist
|
expect(bundled_app("vendor/cache/rack-obama-1.0.gem")).to exist
|
||||||
|
|
|
@ -621,7 +621,7 @@ RSpec.describe "the lockfile format" do
|
||||||
G
|
G
|
||||||
|
|
||||||
bundle "config set cache_all true"
|
bundle "config set cache_all true"
|
||||||
bundle! :package
|
bundle! :cache
|
||||||
bundle! :install, :local => true
|
bundle! :install, :local => true
|
||||||
|
|
||||||
lockfile_should_be <<-G
|
lockfile_should_be <<-G
|
||||||
|
|
|
@ -20,7 +20,8 @@ RSpec.describe "major deprecations" do
|
||||||
it "is deprecated in favor of .unbundled_env", :bundler => "2" do
|
it "is deprecated in favor of .unbundled_env", :bundler => "2" do
|
||||||
expect(deprecations).to include \
|
expect(deprecations).to include \
|
||||||
"`Bundler.clean_env` has been deprecated in favor of `Bundler.unbundled_env`. " \
|
"`Bundler.clean_env` has been deprecated in favor of `Bundler.unbundled_env`. " \
|
||||||
"If you instead want the environment before bundler was originally loaded, use `Bundler.original_env`"
|
"If you instead want the environment before bundler was originally loaded, use `Bundler.original_env` " \
|
||||||
|
"(called at -e:1)"
|
||||||
end
|
end
|
||||||
|
|
||||||
pending "is removed and shows a helpful error message about it", :bundler => "3"
|
pending "is removed and shows a helpful error message about it", :bundler => "3"
|
||||||
|
@ -35,7 +36,8 @@ RSpec.describe "major deprecations" do
|
||||||
it "is deprecated in favor of .unbundled_env", :bundler => "2" do
|
it "is deprecated in favor of .unbundled_env", :bundler => "2" do
|
||||||
expect(deprecations).to include(
|
expect(deprecations).to include(
|
||||||
"`Bundler.with_clean_env` has been deprecated in favor of `Bundler.with_unbundled_env`. " \
|
"`Bundler.with_clean_env` has been deprecated in favor of `Bundler.with_unbundled_env`. " \
|
||||||
"If you instead want the environment before bundler was originally loaded, use `Bundler.with_original_env`"
|
"If you instead want the environment before bundler was originally loaded, use `Bundler.with_original_env` " \
|
||||||
|
"(called at -e:1)"
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -51,7 +53,8 @@ RSpec.describe "major deprecations" do
|
||||||
it "is deprecated in favor of .unbundled_system", :bundler => "2" do
|
it "is deprecated in favor of .unbundled_system", :bundler => "2" do
|
||||||
expect(deprecations).to include(
|
expect(deprecations).to include(
|
||||||
"`Bundler.clean_system` has been deprecated in favor of `Bundler.unbundled_system`. " \
|
"`Bundler.clean_system` has been deprecated in favor of `Bundler.unbundled_system`. " \
|
||||||
"If you instead want to run the command in the environment before bundler was originally loaded, use `Bundler.original_system`"
|
"If you instead want to run the command in the environment before bundler was originally loaded, use `Bundler.original_system` " \
|
||||||
|
"(called at -e:1)"
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -67,7 +70,8 @@ RSpec.describe "major deprecations" do
|
||||||
it "is deprecated in favor of .unbundled_exec", :bundler => "2" do
|
it "is deprecated in favor of .unbundled_exec", :bundler => "2" do
|
||||||
expect(deprecations).to include(
|
expect(deprecations).to include(
|
||||||
"`Bundler.clean_exec` has been deprecated in favor of `Bundler.unbundled_exec`. " \
|
"`Bundler.clean_exec` has been deprecated in favor of `Bundler.unbundled_exec`. " \
|
||||||
"If you instead want to exec to a command in the environment before bundler was originally loaded, use `Bundler.original_exec`"
|
"If you instead want to exec to a command in the environment before bundler was originally loaded, use `Bundler.original_exec` " \
|
||||||
|
"(called at -e:1)"
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -81,7 +85,7 @@ RSpec.describe "major deprecations" do
|
||||||
end
|
end
|
||||||
|
|
||||||
it "is deprecated in favor of .load", :bundler => "2" do
|
it "is deprecated in favor of .load", :bundler => "2" do
|
||||||
expect(deprecations).to include "Bundler.environment has been removed in favor of Bundler.load"
|
expect(deprecations).to include "Bundler.environment has been removed in favor of Bundler.load (called at -e:1)"
|
||||||
end
|
end
|
||||||
|
|
||||||
pending "is removed and shows a helpful error message about it", :bundler => "3"
|
pending "is removed and shows a helpful error message about it", :bundler => "3"
|
||||||
|
@ -108,7 +112,7 @@ RSpec.describe "major deprecations" do
|
||||||
it "should print a deprecation warning", :bundler => "2" do
|
it "should print a deprecation warning", :bundler => "2" do
|
||||||
expect(deprecations).to include(
|
expect(deprecations).to include(
|
||||||
"The `--path` flag is deprecated because it relies on being " \
|
"The `--path` flag is deprecated because it relies on being " \
|
||||||
"remembered across bundler invokations, which bundler will no " \
|
"remembered across bundler invocations, which bundler will no " \
|
||||||
"longer do in future versions. Instead please use `bundle config set " \
|
"longer do in future versions. Instead please use `bundle config set " \
|
||||||
"path 'vendor/bundle'`, and stop using this flag"
|
"path 'vendor/bundle'`, and stop using this flag"
|
||||||
)
|
)
|
||||||
|
@ -310,7 +314,7 @@ RSpec.describe "major deprecations" do
|
||||||
it "should print a deprecation warning", :bundler => "2" do
|
it "should print a deprecation warning", :bundler => "2" do
|
||||||
expect(deprecations).to include(
|
expect(deprecations).to include(
|
||||||
"The `#{flag_name}` flag is deprecated because it relies on " \
|
"The `#{flag_name}` flag is deprecated because it relies on " \
|
||||||
"being remembered across bundler invokations, which bundler " \
|
"being remembered across bundler invocations, which bundler " \
|
||||||
"will no longer do in future versions. Instead please use " \
|
"will no longer do in future versions. Instead please use " \
|
||||||
"`bundle config set #{name} '#{value}'`, and stop using this flag"
|
"`bundle config set #{name} '#{value}'`, and stop using this flag"
|
||||||
)
|
)
|
||||||
|
@ -356,7 +360,6 @@ RSpec.describe "major deprecations" do
|
||||||
require 'bundler'
|
require 'bundler'
|
||||||
require 'bundler/vendored_thor'
|
require 'bundler/vendored_thor'
|
||||||
|
|
||||||
Bundler.ui = Bundler::UI::Shell.new
|
|
||||||
Bundler.setup
|
Bundler.setup
|
||||||
Bundler.setup
|
Bundler.setup
|
||||||
RUBY
|
RUBY
|
||||||
|
|
|
@ -781,7 +781,7 @@ G
|
||||||
#{ruby_version_correct}
|
#{ruby_version_correct}
|
||||||
G
|
G
|
||||||
|
|
||||||
bundle :pack
|
bundle :cache
|
||||||
expect(bundled_app("vendor/cache/rack-1.0.0.gem")).to exist
|
expect(bundled_app("vendor/cache/rack-1.0.0.gem")).to exist
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -794,7 +794,7 @@ G
|
||||||
#{ruby_version_correct_engineless}
|
#{ruby_version_correct_engineless}
|
||||||
G
|
G
|
||||||
|
|
||||||
bundle :pack
|
bundle :cache
|
||||||
expect(bundled_app("vendor/cache/rack-1.0.0.gem")).to exist
|
expect(bundled_app("vendor/cache/rack-1.0.0.gem")).to exist
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -806,7 +806,7 @@ G
|
||||||
#{ruby_version_incorrect}
|
#{ruby_version_incorrect}
|
||||||
G
|
G
|
||||||
|
|
||||||
bundle :pack
|
bundle :cache
|
||||||
should_be_ruby_version_incorrect
|
should_be_ruby_version_incorrect
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -817,7 +817,7 @@ G
|
||||||
#{engine_incorrect}
|
#{engine_incorrect}
|
||||||
G
|
G
|
||||||
|
|
||||||
bundle :pack
|
bundle :cache
|
||||||
should_be_engine_incorrect
|
should_be_engine_incorrect
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -829,7 +829,7 @@ G
|
||||||
#{engine_version_incorrect}
|
#{engine_version_incorrect}
|
||||||
G
|
G
|
||||||
|
|
||||||
bundle :pack
|
bundle :cache
|
||||||
should_be_engine_version_incorrect
|
should_be_engine_version_incorrect
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -842,7 +842,7 @@ G
|
||||||
#{patchlevel_incorrect}
|
#{patchlevel_incorrect}
|
||||||
G
|
G
|
||||||
|
|
||||||
bundle :pack
|
bundle :cache
|
||||||
should_be_patchlevel_incorrect
|
should_be_patchlevel_incorrect
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -169,7 +169,7 @@ RSpec.describe "real source plugins" do
|
||||||
it "bundler package copies repository to vendor cache" do
|
it "bundler package copies repository to vendor cache" do
|
||||||
bundle! :install, forgotten_command_line_options(:path => "vendor/bundle")
|
bundle! :install, forgotten_command_line_options(:path => "vendor/bundle")
|
||||||
bundle "config set cache_all true"
|
bundle "config set cache_all true"
|
||||||
bundle! :package
|
bundle! :cache
|
||||||
|
|
||||||
expect(bundled_app("vendor/cache/a-path-gem-1.0-#{uri_hash}")).to exist
|
expect(bundled_app("vendor/cache/a-path-gem-1.0-#{uri_hash}")).to exist
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
# frozen_string_literal: true
|
# frozen_string_literal: true
|
||||||
|
|
||||||
|
require_relative "../support/silent_logger"
|
||||||
|
|
||||||
RSpec.describe "gemcutter's dependency API", :realworld => true do
|
RSpec.describe "gemcutter's dependency API", :realworld => true do
|
||||||
context "when Gemcutter API takes too long to respond" do
|
context "when Gemcutter API takes too long to respond" do
|
||||||
before do
|
before do
|
||||||
|
@ -8,7 +10,7 @@ RSpec.describe "gemcutter's dependency API", :realworld => true do
|
||||||
port = find_unused_port
|
port = find_unused_port
|
||||||
@server_uri = "http://127.0.0.1:#{port}"
|
@server_uri = "http://127.0.0.1:#{port}"
|
||||||
|
|
||||||
require File.expand_path("../../support/artifice/endpoint_timeout", __FILE__)
|
require_relative "../support/artifice/endpoint_timeout"
|
||||||
|
|
||||||
@t = Thread.new do
|
@t = Thread.new do
|
||||||
server = Rack::Server.start(:app => EndpointTimeout,
|
server = Rack::Server.start(:app => EndpointTimeout,
|
||||||
|
|
|
@ -25,9 +25,9 @@ RSpec.describe "double checking sources", :realworld => true, :sometimes => true
|
||||||
RUBY
|
RUBY
|
||||||
|
|
||||||
cmd = <<-RUBY
|
cmd = <<-RUBY
|
||||||
require "#{lib}/bundler"
|
require "#{lib_dir}/bundler"
|
||||||
require #{File.expand_path("../../support/artifice/vcr.rb", __FILE__).dump}
|
require "#{spec_dir}/support/artifice/vcr"
|
||||||
require "#{lib}/bundler/inline"
|
require "#{lib_dir}/bundler/inline"
|
||||||
gemfile(true) do
|
gemfile(true) do
|
||||||
source "https://rubygems.org"
|
source "https://rubygems.org"
|
||||||
gem "rails", path: "."
|
gem "rails", path: "."
|
||||||
|
|
|
@ -3,19 +3,21 @@
|
||||||
RSpec.describe "real world edgecases", :realworld => true, :sometimes => true do
|
RSpec.describe "real world edgecases", :realworld => true, :sometimes => true do
|
||||||
def rubygems_version(name, requirement)
|
def rubygems_version(name, requirement)
|
||||||
ruby! <<-RUBY
|
ruby! <<-RUBY
|
||||||
require #{File.expand_path("../../support/artifice/vcr.rb", __FILE__).dump}
|
require "#{spec_dir}/support/artifice/vcr"
|
||||||
require "bundler"
|
require "#{lib_dir}/bundler"
|
||||||
require "bundler/source/rubygems/remote"
|
require "#{lib_dir}/bundler/source/rubygems/remote"
|
||||||
require "bundler/fetcher"
|
require "#{lib_dir}/bundler/fetcher"
|
||||||
|
rubygem = Bundler.ui.silence do
|
||||||
source = Bundler::Source::Rubygems::Remote.new(URI("https://rubygems.org"))
|
source = Bundler::Source::Rubygems::Remote.new(URI("https://rubygems.org"))
|
||||||
fetcher = Bundler::Fetcher.new(source)
|
fetcher = Bundler::Fetcher.new(source)
|
||||||
index = fetcher.specs([#{name.dump}], nil)
|
index = fetcher.specs([#{name.dump}], nil)
|
||||||
rubygem = index.search(Gem::Dependency.new(#{name.dump}, #{requirement.dump})).last
|
index.search(Gem::Dependency.new(#{name.dump}, #{requirement.dump})).last
|
||||||
|
end
|
||||||
if rubygem.nil?
|
if rubygem.nil?
|
||||||
raise "Could not find #{name} (#{requirement}) on rubygems.org!\n" \
|
raise "Could not find #{name} (#{requirement}) on rubygems.org!\n" \
|
||||||
"Found specs:\n\#{index.send(:specs).inspect}"
|
"Found specs:\n\#{index.send(:specs).inspect}"
|
||||||
end
|
end
|
||||||
"#{name} (\#{rubygem.version})"
|
puts "#{name} (\#{rubygem.version})"
|
||||||
RUBY
|
RUBY
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
# frozen_string_literal: true
|
# frozen_string_literal: true
|
||||||
|
|
||||||
|
require_relative "../support/silent_logger"
|
||||||
|
|
||||||
RSpec.describe "fetching dependencies with a mirrored source", :realworld => true do
|
RSpec.describe "fetching dependencies with a mirrored source", :realworld => true do
|
||||||
let(:mirror) { "https://server.example.org" }
|
let(:mirror) { "https://server.example.org" }
|
||||||
let(:original) { "http://127.0.0.1:#{@port}" }
|
let(:original) { "http://127.0.0.1:#{@port}" }
|
||||||
|
@ -35,7 +37,7 @@ private
|
||||||
@port = find_unused_port
|
@port = find_unused_port
|
||||||
@server_uri = "http://127.0.0.1:#{@port}"
|
@server_uri = "http://127.0.0.1:#{@port}"
|
||||||
|
|
||||||
require File.expand_path("../../support/artifice/endpoint_mirror_source", __FILE__)
|
require_relative "../support/artifice/endpoint_mirror_source"
|
||||||
|
|
||||||
@t = Thread.new do
|
@t = Thread.new do
|
||||||
Rack::Server.start(:app => EndpointMirrorSource,
|
Rack::Server.start(:app => EndpointMirrorSource,
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue