bundler 1.10.6 → 1.11.0.pre.1
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of bundler might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/.rubocop.yml +105 -0
- data/.rubocop_todo.yml +120 -0
- data/.travis.yml +8 -23
- data/CHANGELOG.md +69 -0
- data/CODE_OF_CONDUCT.md +6 -4
- data/DEVELOPMENT.md +4 -5
- data/README.md +2 -2
- data/Rakefile +70 -87
- data/bin/rake +14 -0
- data/bin/rspec +10 -0
- data/bin/rubocop +11 -0
- data/bundler.gemspec +17 -15
- data/exe/bundle +20 -0
- data/{bin → exe}/bundle_ruby +6 -4
- data/exe/bundler +20 -0
- data/lib/bundler.rb +98 -119
- data/lib/bundler/capistrano.rb +2 -2
- data/lib/bundler/cli.rb +85 -74
- data/lib/bundler/cli/binstubs.rb +1 -2
- data/lib/bundler/cli/cache.rb +0 -1
- data/lib/bundler/cli/check.rb +7 -5
- data/lib/bundler/cli/clean.rb +0 -1
- data/lib/bundler/cli/common.rb +6 -7
- data/lib/bundler/cli/config.rb +69 -56
- data/lib/bundler/cli/console.rb +8 -8
- data/lib/bundler/cli/exec.rb +4 -3
- data/lib/bundler/cli/gem.rb +50 -39
- data/lib/bundler/cli/init.rb +5 -6
- data/lib/bundler/cli/inject.rb +1 -2
- data/lib/bundler/cli/install.rb +18 -21
- data/lib/bundler/cli/lock.rb +8 -3
- data/lib/bundler/cli/open.rb +4 -5
- data/lib/bundler/cli/outdated.rb +7 -8
- data/lib/bundler/cli/package.rb +1 -1
- data/lib/bundler/cli/platform.rb +2 -3
- data/lib/bundler/cli/show.rb +9 -9
- data/lib/bundler/cli/update.rb +2 -3
- data/lib/bundler/cli/viz.rb +1 -2
- data/lib/bundler/constants.rb +1 -1
- data/lib/bundler/current_ruby.rb +38 -3
- data/lib/bundler/definition.rb +83 -88
- data/lib/bundler/dep_proxy.rb +11 -9
- data/lib/bundler/dependency.rb +26 -11
- data/lib/bundler/deployment.rb +2 -2
- data/lib/bundler/deprecate.rb +3 -3
- data/lib/bundler/dsl.rb +63 -44
- data/lib/bundler/env.rb +19 -12
- data/lib/bundler/environment.rb +1 -2
- data/lib/bundler/errors.rb +82 -0
- data/lib/bundler/fetcher.rb +45 -39
- data/lib/bundler/fetcher/base.rb +20 -7
- data/lib/bundler/fetcher/dependency.rb +5 -5
- data/lib/bundler/fetcher/downloader.rb +1 -2
- data/lib/bundler/fetcher/index.rb +4 -7
- data/lib/bundler/friendly_errors.rb +15 -8
- data/lib/bundler/gem_helper.rb +44 -35
- data/lib/bundler/gem_helpers.rb +7 -8
- data/lib/bundler/gem_remote_fetcher.rb +41 -0
- data/lib/bundler/gem_tasks.rb +4 -1
- data/lib/bundler/graph.rb +25 -24
- data/lib/bundler/index.rb +21 -18
- data/lib/bundler/injector.rb +2 -4
- data/lib/bundler/inline.rb +3 -3
- data/lib/bundler/installer.rb +57 -144
- data/lib/bundler/installer/gem_installer.rb +76 -0
- data/lib/bundler/installer/parallel_installer.rb +22 -13
- data/lib/bundler/installer/standalone.rb +48 -0
- data/lib/bundler/lazy_specification.rb +3 -4
- data/lib/bundler/lockfile_parser.rb +21 -19
- data/lib/bundler/match_platform.rb +4 -4
- data/lib/bundler/psyched_yaml.rb +3 -3
- data/lib/bundler/remote_specification.rb +1 -1
- data/lib/bundler/resolver.rb +93 -88
- data/lib/bundler/retry.rb +9 -10
- data/lib/bundler/ruby_dsl.rb +1 -1
- data/lib/bundler/ruby_version.rb +7 -10
- data/lib/bundler/rubygems_ext.rb +32 -27
- data/lib/bundler/{gem_installer.rb → rubygems_gem_installer.rb} +2 -2
- data/lib/bundler/rubygems_integration.rb +85 -70
- data/lib/bundler/runtime.rb +57 -61
- data/lib/bundler/settings.rb +27 -26
- data/lib/bundler/setup.rb +3 -3
- data/lib/bundler/shared_helpers.rb +45 -20
- data/lib/bundler/similarity_detector.rb +19 -21
- data/lib/bundler/source.rb +4 -5
- data/lib/bundler/source/git.rb +29 -31
- data/lib/bundler/source/git/git_proxy.rb +52 -26
- data/lib/bundler/source/path.rb +25 -28
- data/lib/bundler/source/path/installer.rb +4 -4
- data/lib/bundler/source/rubygems.rb +62 -48
- data/lib/bundler/source/rubygems/remote.rb +3 -3
- data/lib/bundler/source_list.rb +4 -4
- data/lib/bundler/spec_set.rb +17 -15
- data/lib/bundler/ssl_certs/certificate_manager.rb +5 -6
- data/lib/bundler/stub_specification.rb +2 -2
- data/lib/bundler/templates/Executable +5 -5
- data/lib/bundler/templates/newgem/CODE_OF_CONDUCT.md.tt +42 -6
- data/lib/bundler/templates/newgem/README.md.tt +1 -1
- data/lib/bundler/templates/newgem/Rakefile.tt +4 -2
- data/lib/bundler/templates/newgem/bin/setup.tt +2 -1
- data/lib/bundler/templates/newgem/newgem.gemspec.tt +2 -2
- data/lib/bundler/ui.rb +3 -3
- data/lib/bundler/ui/rg_proxy.rb +2 -2
- data/lib/bundler/ui/shell.rb +10 -6
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph.rb +82 -71
- data/lib/bundler/vendor/molinillo/lib/molinillo/gem_metadata.rb +1 -1
- data/lib/bundler/vendor/molinillo/lib/molinillo/modules/specification_provider.rb +9 -0
- data/lib/bundler/vendor/molinillo/lib/molinillo/resolution.rb +40 -21
- data/lib/bundler/vendor/molinillo/lib/molinillo/state.rb +8 -0
- data/lib/bundler/vendored_molinillo.rb +1 -1
- data/lib/bundler/vendored_persistent.rb +3 -3
- data/lib/bundler/vendored_thor.rb +2 -2
- data/lib/bundler/version.rb +1 -1
- data/lib/bundler/vlad.rb +1 -1
- data/lib/bundler/worker.rb +4 -5
- data/man/bundle-config.ronn +4 -2
- data/man/bundle-gem.ronn +77 -0
- data/man/bundle-install.ronn +13 -6
- data/man/bundle-lock.ronn +47 -0
- data/man/bundle.ronn +1 -1
- data/man/gemfile.5.ronn +8 -0
- data/man/index.txt +1 -0
- metadata +37 -8
- data/bin/bundle +0 -21
- data/bin/bundler +0 -21
@@ -86,5 +86,14 @@ module Bundler::Molinillo
|
|
86
86
|
]
|
87
87
|
end
|
88
88
|
end
|
89
|
+
|
90
|
+
# Returns whether this dependency, which has no possible matching
|
91
|
+
# specifications, can safely be ignored.
|
92
|
+
#
|
93
|
+
# @param [Object] dependency
|
94
|
+
# @return [Boolean] whether this dependency can safely be skipped.
|
95
|
+
def allow_missing?(dependency)
|
96
|
+
false
|
97
|
+
end
|
89
98
|
end
|
90
99
|
end
|
@@ -12,13 +12,15 @@ module Bundler::Molinillo
|
|
12
12
|
# @attr [Object] locked_requirement the relevant locking requirement.
|
13
13
|
# @attr [Array<Array<Object>>] requirement_trees the different requirement
|
14
14
|
# trees that led to every requirement for the conflicting name.
|
15
|
+
# @attr [{String=>Object}] activated_by_name the already-activated specs.
|
15
16
|
Conflict = Struct.new(
|
16
17
|
:requirement,
|
17
18
|
:requirements,
|
18
19
|
:existing,
|
19
20
|
:possibility,
|
20
21
|
:locked_requirement,
|
21
|
-
:requirement_trees
|
22
|
+
:requirement_trees,
|
23
|
+
:activated_by_name
|
22
24
|
)
|
23
25
|
|
24
26
|
# @return [SpecificationProvider] the provider that knows about
|
@@ -93,7 +95,7 @@ module Bundler::Molinillo
|
|
93
95
|
def start_resolution
|
94
96
|
@started_at = Time.now
|
95
97
|
|
96
|
-
|
98
|
+
handle_missing_or_push_dependency_state(initial_state)
|
97
99
|
|
98
100
|
debug { "Starting resolution (#{@started_at})" }
|
99
101
|
resolver_ui.before_resolution
|
@@ -116,7 +118,8 @@ module Bundler::Molinillo
|
|
116
118
|
|
117
119
|
ResolutionState.new.members.each do |member|
|
118
120
|
define_method member do |*args, &block|
|
119
|
-
state
|
121
|
+
current_state = state || ResolutionState.empty
|
122
|
+
current_state.send(member, *args, &block)
|
120
123
|
end
|
121
124
|
end
|
122
125
|
|
@@ -163,7 +166,7 @@ module Bundler::Molinillo
|
|
163
166
|
# @return [DependencyState] the initial state for the resolution
|
164
167
|
def initial_state
|
165
168
|
graph = DependencyGraph.new.tap do |dg|
|
166
|
-
original_requested.each { |r| dg.
|
169
|
+
original_requested.each { |r| dg.add_vertex(name_for(r), nil, true).tap { |v| v.explicit_requirements << r } }
|
167
170
|
end
|
168
171
|
|
169
172
|
requirements = sort_dependencies(original_requested, graph, {})
|
@@ -215,7 +218,7 @@ module Bundler::Molinillo
|
|
215
218
|
return nil unless requirement
|
216
219
|
seen = false
|
217
220
|
state = states.reverse_each.find do |s|
|
218
|
-
seen ||= s.requirement == requirement
|
221
|
+
seen ||= s.requirement == requirement || s.requirements.include?(requirement)
|
219
222
|
seen && s.requirement != requirement && !s.requirements.include?(requirement)
|
220
223
|
end
|
221
224
|
state && state.requirement
|
@@ -249,21 +252,23 @@ module Bundler::Molinillo
|
|
249
252
|
name_for_explicit_dependency_source => vertex.explicit_requirements,
|
250
253
|
name_for_locking_dependency_source => Array(locked_requirement_named(name)),
|
251
254
|
}
|
252
|
-
vertex.incoming_edges.each { |edge| (requirements[edge.origin.payload] ||= []).unshift(
|
255
|
+
vertex.incoming_edges.each { |edge| (requirements[edge.origin.payload] ||= []).unshift(edge.requirement) }
|
253
256
|
conflicts[name] = Conflict.new(
|
254
257
|
requirement,
|
255
258
|
Hash[requirements.select { |_, r| !r.empty? }],
|
256
259
|
vertex.payload,
|
257
260
|
possibility,
|
258
261
|
locked_requirement_named(name),
|
259
|
-
requirement_trees
|
262
|
+
requirement_trees,
|
263
|
+
Hash[activated.map { |v| [v.name, v.payload] }.select(&:last)]
|
260
264
|
)
|
261
265
|
end
|
262
266
|
|
263
267
|
# @return [Array<Array<Object>>] The different requirement
|
264
268
|
# trees that led to every requirement for the current spec.
|
265
269
|
def requirement_trees
|
266
|
-
activated.vertex_named(name)
|
270
|
+
vertex = activated.vertex_named(name)
|
271
|
+
vertex.requirements.map { |r| requirement_tree_for(r) }
|
267
272
|
end
|
268
273
|
|
269
274
|
# @return [Array<Object>] the list of requirements that led to
|
@@ -321,7 +326,7 @@ module Bundler::Molinillo
|
|
321
326
|
existing_spec = existing_node.payload
|
322
327
|
if requirement_satisfied_by?(requirement, activated, existing_spec)
|
323
328
|
new_requirements = requirements.dup
|
324
|
-
push_state_for_requirements(new_requirements)
|
329
|
+
push_state_for_requirements(new_requirements, false)
|
325
330
|
else
|
326
331
|
return if attempt_to_swap_possibility
|
327
332
|
create_conflict
|
@@ -388,28 +393,42 @@ module Bundler::Molinillo
|
|
388
393
|
def require_nested_dependencies_for(activated_spec)
|
389
394
|
nested_dependencies = dependencies_for(activated_spec)
|
390
395
|
debug(depth) { "Requiring nested dependencies (#{nested_dependencies.map(&:to_s).join(', ')})" }
|
391
|
-
nested_dependencies.each { |d|
|
396
|
+
nested_dependencies.each { |d| activated.add_child_vertex(name_for(d), nil, [name_for(activated_spec)], d) }
|
392
397
|
|
393
|
-
push_state_for_requirements(requirements + nested_dependencies)
|
398
|
+
push_state_for_requirements(requirements + nested_dependencies, nested_dependencies.size > 0)
|
394
399
|
end
|
395
400
|
|
396
401
|
# Pushes a new {DependencyState} that encapsulates both existing and new
|
397
402
|
# requirements
|
398
403
|
# @param [Array] new_requirements
|
399
404
|
# @return [void]
|
400
|
-
def push_state_for_requirements(new_requirements)
|
401
|
-
new_requirements = sort_dependencies(new_requirements.uniq,
|
405
|
+
def push_state_for_requirements(new_requirements, requires_sort = true, new_activated = activated.dup)
|
406
|
+
new_requirements = sort_dependencies(new_requirements.uniq, new_activated, conflicts) if requires_sort
|
402
407
|
new_requirement = new_requirements.shift
|
403
|
-
|
404
|
-
|
405
|
-
|
406
|
-
|
407
|
-
new_requirement,
|
408
|
-
new_requirement ? search_for(new_requirement) : [],
|
409
|
-
depth,
|
410
|
-
conflicts.dup
|
408
|
+
new_name = new_requirement ? name_for(new_requirement) : ''
|
409
|
+
possibilities = new_requirement ? search_for(new_requirement) : []
|
410
|
+
handle_missing_or_push_dependency_state DependencyState.new(
|
411
|
+
new_name, new_requirements, new_activated,
|
412
|
+
new_requirement, possibilities, depth, conflicts.dup
|
411
413
|
)
|
412
414
|
end
|
415
|
+
|
416
|
+
# Pushes a new {DependencyState}.
|
417
|
+
# If the {#specification_provider} says to
|
418
|
+
# {SpecificationProvider#allow_missing?} that particular requirement, and
|
419
|
+
# there are no possibilities for that requirement, then `state` is not
|
420
|
+
# pushed, and the node in {#activated} is removed, and we continue
|
421
|
+
# resolving the remaining requirements.
|
422
|
+
# @param [DependencyState] state
|
423
|
+
# @return [void]
|
424
|
+
def handle_missing_or_push_dependency_state(state)
|
425
|
+
if state.requirement && state.possibilities.empty? && allow_missing?(state.requirement)
|
426
|
+
state.activated.detach_vertex_named(state.name)
|
427
|
+
push_state_for_requirements(state.requirements.dup, false, state.activated)
|
428
|
+
else
|
429
|
+
states.push state
|
430
|
+
end
|
431
|
+
end
|
413
432
|
end
|
414
433
|
end
|
415
434
|
end
|
@@ -17,6 +17,14 @@ module Bundler::Molinillo
|
|
17
17
|
:conflicts
|
18
18
|
)
|
19
19
|
|
20
|
+
class ResolutionState
|
21
|
+
# Returns an empty resolution state
|
22
|
+
# @return [ResolutionState] an empty state
|
23
|
+
def self.empty
|
24
|
+
new(nil, [], DependencyGraph.new, nil, nil, 0, Set.new)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
20
28
|
# A state that encapsulates a set of {#requirements} with an {Array} of
|
21
29
|
# possibilities
|
22
30
|
class DependencyState < ResolutionState
|
@@ -1,2 +1,2 @@
|
|
1
1
|
module Bundler; end
|
2
|
-
require
|
2
|
+
require "bundler/vendor/molinillo/lib/molinillo"
|
@@ -1,11 +1,11 @@
|
|
1
1
|
# We forcibly require OpenSSL, because net/http/persistent will only autoload
|
2
2
|
# it. On some Rubies, autoload fails but explicit require succeeds.
|
3
3
|
begin
|
4
|
-
require
|
4
|
+
require "openssl"
|
5
5
|
rescue LoadError
|
6
6
|
# some Ruby builds don't have OpenSSL
|
7
7
|
end
|
8
8
|
|
9
|
-
vendor = File.expand_path(
|
9
|
+
vendor = File.expand_path("../vendor", __FILE__)
|
10
10
|
$:.unshift(vendor) unless $:.include?(vendor)
|
11
|
-
require
|
11
|
+
require "net/http/persistent"
|
@@ -1,3 +1,3 @@
|
|
1
1
|
module Bundler; end
|
2
|
-
require
|
3
|
-
require
|
2
|
+
require "bundler/vendor/thor/lib/thor"
|
3
|
+
require "bundler/vendor/thor/lib/thor/actions"
|
data/lib/bundler/version.rb
CHANGED
@@ -2,5 +2,5 @@ module Bundler
|
|
2
2
|
# We're doing this because we might write tests that deal
|
3
3
|
# with other versions of bundler and we are unsure how to
|
4
4
|
# handle this better.
|
5
|
-
VERSION = "1.
|
5
|
+
VERSION = "1.11.0.pre.1" unless defined?(::Bundler::VERSION)
|
6
6
|
end
|
data/lib/bundler/vlad.rb
CHANGED
data/lib/bundler/worker.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
require
|
1
|
+
require "thread"
|
2
2
|
|
3
3
|
module Bundler
|
4
4
|
class Worker
|
@@ -19,7 +19,7 @@ module Bundler
|
|
19
19
|
@request_queue = Queue.new
|
20
20
|
@response_queue = Queue.new
|
21
21
|
@func = func
|
22
|
-
@threads = size.times.map {
|
22
|
+
@threads = size.times.map {|i| Thread.start { process_queue(i) } }
|
23
23
|
trap("INT") { abort_threads }
|
24
24
|
end
|
25
25
|
|
@@ -61,13 +61,12 @@ module Bundler
|
|
61
61
|
# so as worker threads after retrieving it, shut themselves down
|
62
62
|
def stop_threads
|
63
63
|
@threads.each { @request_queue.enq POISON }
|
64
|
-
@threads.each
|
64
|
+
@threads.each(&:join)
|
65
65
|
end
|
66
66
|
|
67
67
|
def abort_threads
|
68
|
-
@threads.each
|
68
|
+
@threads.each(&:exit)
|
69
69
|
exit 1
|
70
70
|
end
|
71
|
-
|
72
71
|
end
|
73
72
|
end
|
data/man/bundle-config.ronn
CHANGED
@@ -84,8 +84,10 @@ The following is a list of all configuration keys and their purpose. You can
|
|
84
84
|
learn more about their operation in [bundle install(1)][bundle-install].
|
85
85
|
|
86
86
|
* `path` (`BUNDLE_PATH`):
|
87
|
-
The location on disk
|
88
|
-
|
87
|
+
The location on disk where all gems in your bundle will be located regardless
|
88
|
+
of `$GEM_HOME` or `$GEM_PATH` values. Bundle gems not found in this location
|
89
|
+
will be installed by `bundle install`. Defaults to `Gem.dir`. When --deployment is
|
90
|
+
used, defaults to vendor/bundle.
|
89
91
|
* `frozen` (`BUNDLE_FROZEN`):
|
90
92
|
Disallow changes to the `Gemfile`. Defaults to `true` when `--deployment`
|
91
93
|
is used.
|
data/man/bundle-gem.ronn
ADDED
@@ -0,0 +1,77 @@
|
|
1
|
+
bundle-gem(1) -- Generate a project skeleton for creating a rubygem
|
2
|
+
====================================================================
|
3
|
+
|
4
|
+
## SYNOPSIS
|
5
|
+
|
6
|
+
`bundle gem` <GEM_NAME> [OPTIONS]
|
7
|
+
|
8
|
+
## DESCRIPTION
|
9
|
+
|
10
|
+
Generates a directory named `GEM_NAME` with a `Rakefile`, `GEM_NAME.gemspec`,
|
11
|
+
and other supporting files and directories that can be used to develop a
|
12
|
+
rubygem with that name.
|
13
|
+
|
14
|
+
Run `rake -T` in the resulting project for a list of Rake tasks that can used
|
15
|
+
to test and publish the gem to rubygems.org.
|
16
|
+
|
17
|
+
The generated project skeleton can be customized with OPTIONS, as explained
|
18
|
+
below. Note that these options can also be specified via Bundler's global
|
19
|
+
configuration file using the following names:
|
20
|
+
|
21
|
+
* `gem.coc`
|
22
|
+
* `gem.mit`
|
23
|
+
* `gem.test`
|
24
|
+
|
25
|
+
## OPTIONS
|
26
|
+
|
27
|
+
* `-b` or `--bin`:
|
28
|
+
Specify that Bundler should create a binary (as `exe/GEM_NAME`) in the
|
29
|
+
generated rubygem project. This binary will also be added to the
|
30
|
+
`GEM_NAME.gemspec` manifest. This behavior is disabled by default.
|
31
|
+
|
32
|
+
* `--no-bin`:
|
33
|
+
Do not create a binary (overrides `--bin` specified in the global config).
|
34
|
+
|
35
|
+
* `--coc`:
|
36
|
+
Add a `CODE_OF_CONDUCT.md` file to the root of the generated project. If
|
37
|
+
this option is unspecified, an interactive prompt will be displayed and the
|
38
|
+
answer will be saved in Bundler's global config for future `bundle gem` use.
|
39
|
+
|
40
|
+
* `--no-coc`:
|
41
|
+
Do not create a `CODE_OF_CONDUCT.md` (overrides `--coc` specified in the
|
42
|
+
global config).
|
43
|
+
|
44
|
+
* `--ext`:
|
45
|
+
Add boilerplate for C extension code to the generated project. This behavior
|
46
|
+
is disabled by default.
|
47
|
+
|
48
|
+
* `--no-ext`:
|
49
|
+
Do not add C extension code (overrides `--ext` specified in the global
|
50
|
+
config).
|
51
|
+
|
52
|
+
* `--mit`:
|
53
|
+
Add an MIT license to a `LICENSE.txt` file in the root of the generated
|
54
|
+
project. Your name from the global git config is used for the copyright
|
55
|
+
statement. If this option is unspecified, an interactive prompt will be
|
56
|
+
displayed and the answer will be saved in Bundler's global config for future
|
57
|
+
`bundle gem` use.
|
58
|
+
|
59
|
+
* `--no-mit`:
|
60
|
+
Do not create a `LICENSE.txt` (overrides `--mit` specified in the global
|
61
|
+
config).
|
62
|
+
|
63
|
+
* `-t`, `--test=minitest`, `--test=rspec`:
|
64
|
+
Specify the test framework that Bundler should use when generating the
|
65
|
+
project. Acceptable values are `minitest` and `rspec`. The `GEM_NAME.gemspec`
|
66
|
+
will be configured and a skeleton test/spec directory will be created based
|
67
|
+
on this option. If this option is unspecified, an interactive prompt will be
|
68
|
+
displayed and the answer will be saved in Bundler's global config for future
|
69
|
+
`bundle gem` use.
|
70
|
+
|
71
|
+
* `-e`, `--edit[=EDITOR]`:
|
72
|
+
Open the resulting GEM_NAME.gemspec in EDITOR, or the default editor if not
|
73
|
+
specified. The default is `$BUNDLER_EDITOR`, `$VISUAL`, or `$EDITOR`.
|
74
|
+
|
75
|
+
## SEE ALSO
|
76
|
+
|
77
|
+
* bundle-config(1)
|
data/man/bundle-install.ronn
CHANGED
@@ -10,6 +10,7 @@ bundle-install(1) -- Install the dependencies specified in your Gemfile
|
|
10
10
|
[--jobs=NUMBER]
|
11
11
|
[--local]
|
12
12
|
[--deployment]
|
13
|
+
[--force]
|
13
14
|
[--no-cache]
|
14
15
|
[--no-prune]
|
15
16
|
[--path PATH]
|
@@ -67,7 +68,8 @@ update process below under [CONSERVATIVE UPDATING][].
|
|
67
68
|
to this location.
|
68
69
|
|
69
70
|
* `--jobs=[<number>]`:
|
70
|
-
|
71
|
+
The maximum number of parallel download and install jobs. The default
|
72
|
+
is `1`.
|
71
73
|
|
72
74
|
* `--local`:
|
73
75
|
Do not attempt to connect to `rubygems.org`. Instead, Bundler will use the
|
@@ -77,8 +79,12 @@ update process below under [CONSERVATIVE UPDATING][].
|
|
77
79
|
|
78
80
|
* `--deployment`:
|
79
81
|
In [deployment mode][DEPLOYMENT MODE], Bundler will 'roll-out' the bundle for
|
80
|
-
|
81
|
-
enabled in
|
82
|
+
production or CI use. Please check carefully if you want to have this option
|
83
|
+
enabled in your development environment.
|
84
|
+
|
85
|
+
* `--force`:
|
86
|
+
Force download every gem, even if the required versions are already available
|
87
|
+
locally.
|
82
88
|
|
83
89
|
* `--system`:
|
84
90
|
Installs the gems specified in the bundle to the system's Rubygems location.
|
@@ -118,7 +124,8 @@ update process below under [CONSERVATIVE UPDATING][].
|
|
118
124
|
runtime. A space separated list of groups to install has to be specified.
|
119
125
|
Bundler creates a directory named `bundle` and installs the bundle there. It
|
120
126
|
also generates a `bundle/bundler/setup.rb` file to replace Bundler's own setup
|
121
|
-
in the manner required.
|
127
|
+
in the manner required. Using this option implicitly sets `path`, which is a
|
128
|
+
[remembered option][REMEMBERED OPTIONS].
|
122
129
|
|
123
130
|
* `--trust-policy=[<policy>]`:
|
124
131
|
Apply the Rubygems security policy <policy>, where policy is one of
|
@@ -142,8 +149,8 @@ update process below under [CONSERVATIVE UPDATING][].
|
|
142
149
|
## DEPLOYMENT MODE
|
143
150
|
|
144
151
|
Bundler's defaults are optimized for development. To switch to
|
145
|
-
defaults optimized for deployment, use the `--deployment`
|
146
|
-
Do not activate deployment mode on development machines, as it
|
152
|
+
defaults optimized for deployment and for CI, use the `--deployment`
|
153
|
+
flag. Do not activate deployment mode on development machines, as it
|
147
154
|
will cause an error when the Gemfile(5) is modified.
|
148
155
|
|
149
156
|
1. A `Gemfile.lock` is required.
|
@@ -0,0 +1,47 @@
|
|
1
|
+
bundle-lock(1) -- Creates / Updates a lockfile without installing
|
2
|
+
=================================================================
|
3
|
+
|
4
|
+
## SYNOPSIS
|
5
|
+
|
6
|
+
`bundle lock` [--update]
|
7
|
+
[--local]
|
8
|
+
[--print]
|
9
|
+
[--lockfile=PATH]
|
10
|
+
|
11
|
+
## DESCRIPTION
|
12
|
+
|
13
|
+
Lock the gems specified in Gemfile.
|
14
|
+
|
15
|
+
## OPTIONS
|
16
|
+
|
17
|
+
* `--update=<*gems>`:
|
18
|
+
Ignores the existing lockfile. Resolve then updates lockfile. Taking a list
|
19
|
+
of gems or updating all gems if no list is given.
|
20
|
+
|
21
|
+
* `--local`:
|
22
|
+
Do not attempt to connect to `rubygems.org`. Instead, Bundler will use the
|
23
|
+
gems already present in Rubygems' cache or in `vendor/cache`. Note that if a
|
24
|
+
appropriate platform-specific gem exists on `rubygems.org` it will not be
|
25
|
+
found.
|
26
|
+
|
27
|
+
* `--print`:
|
28
|
+
Prints the lockfile to STDOUT instead of writing to the file system.
|
29
|
+
|
30
|
+
* `--lockfile=<path>`:
|
31
|
+
The path where the lockfile should be written to.
|
32
|
+
|
33
|
+
## UPDATING ALL GEMS
|
34
|
+
|
35
|
+
If you run `bundle lock` with `--update` option without list of gems, bundler will
|
36
|
+
ignore any previously installed gems and resolve all dependencies again based
|
37
|
+
on the latest versions of all gems available in the sources.
|
38
|
+
|
39
|
+
## UPDATING A LIST OF GEMS
|
40
|
+
|
41
|
+
Sometimes, you want to update a single gem in the Gemfile(5), and leave the rest of
|
42
|
+
the gems that you specified locked to the versions in the `Gemfile.lock`.
|
43
|
+
|
44
|
+
For instance, you only want to update `nokogiri`, run `bundle lock --update nokogiri`.
|
45
|
+
|
46
|
+
Bundler will update `nokogiri` and any of its dependencies, but leave the rest of the
|
47
|
+
gems that you specified locked to the versions in the `Gemfile.lock`.
|
data/man/bundle.ronn
CHANGED
@@ -76,7 +76,7 @@ We divide `bundle` subcommands into primary commands and utilities.
|
|
76
76
|
* `bundle init(1)`:
|
77
77
|
Generate a simple `Gemfile`, placed in the current directory
|
78
78
|
|
79
|
-
*
|
79
|
+
* [bundle gem(1)][bundle-gem]:
|
80
80
|
Create a simple gem, suitable for development with bundler
|
81
81
|
|
82
82
|
* [bundle platform(1)][bundle-platform]:
|