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.

Files changed (126) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +105 -0
  3. data/.rubocop_todo.yml +120 -0
  4. data/.travis.yml +8 -23
  5. data/CHANGELOG.md +69 -0
  6. data/CODE_OF_CONDUCT.md +6 -4
  7. data/DEVELOPMENT.md +4 -5
  8. data/README.md +2 -2
  9. data/Rakefile +70 -87
  10. data/bin/rake +14 -0
  11. data/bin/rspec +10 -0
  12. data/bin/rubocop +11 -0
  13. data/bundler.gemspec +17 -15
  14. data/exe/bundle +20 -0
  15. data/{bin → exe}/bundle_ruby +6 -4
  16. data/exe/bundler +20 -0
  17. data/lib/bundler.rb +98 -119
  18. data/lib/bundler/capistrano.rb +2 -2
  19. data/lib/bundler/cli.rb +85 -74
  20. data/lib/bundler/cli/binstubs.rb +1 -2
  21. data/lib/bundler/cli/cache.rb +0 -1
  22. data/lib/bundler/cli/check.rb +7 -5
  23. data/lib/bundler/cli/clean.rb +0 -1
  24. data/lib/bundler/cli/common.rb +6 -7
  25. data/lib/bundler/cli/config.rb +69 -56
  26. data/lib/bundler/cli/console.rb +8 -8
  27. data/lib/bundler/cli/exec.rb +4 -3
  28. data/lib/bundler/cli/gem.rb +50 -39
  29. data/lib/bundler/cli/init.rb +5 -6
  30. data/lib/bundler/cli/inject.rb +1 -2
  31. data/lib/bundler/cli/install.rb +18 -21
  32. data/lib/bundler/cli/lock.rb +8 -3
  33. data/lib/bundler/cli/open.rb +4 -5
  34. data/lib/bundler/cli/outdated.rb +7 -8
  35. data/lib/bundler/cli/package.rb +1 -1
  36. data/lib/bundler/cli/platform.rb +2 -3
  37. data/lib/bundler/cli/show.rb +9 -9
  38. data/lib/bundler/cli/update.rb +2 -3
  39. data/lib/bundler/cli/viz.rb +1 -2
  40. data/lib/bundler/constants.rb +1 -1
  41. data/lib/bundler/current_ruby.rb +38 -3
  42. data/lib/bundler/definition.rb +83 -88
  43. data/lib/bundler/dep_proxy.rb +11 -9
  44. data/lib/bundler/dependency.rb +26 -11
  45. data/lib/bundler/deployment.rb +2 -2
  46. data/lib/bundler/deprecate.rb +3 -3
  47. data/lib/bundler/dsl.rb +63 -44
  48. data/lib/bundler/env.rb +19 -12
  49. data/lib/bundler/environment.rb +1 -2
  50. data/lib/bundler/errors.rb +82 -0
  51. data/lib/bundler/fetcher.rb +45 -39
  52. data/lib/bundler/fetcher/base.rb +20 -7
  53. data/lib/bundler/fetcher/dependency.rb +5 -5
  54. data/lib/bundler/fetcher/downloader.rb +1 -2
  55. data/lib/bundler/fetcher/index.rb +4 -7
  56. data/lib/bundler/friendly_errors.rb +15 -8
  57. data/lib/bundler/gem_helper.rb +44 -35
  58. data/lib/bundler/gem_helpers.rb +7 -8
  59. data/lib/bundler/gem_remote_fetcher.rb +41 -0
  60. data/lib/bundler/gem_tasks.rb +4 -1
  61. data/lib/bundler/graph.rb +25 -24
  62. data/lib/bundler/index.rb +21 -18
  63. data/lib/bundler/injector.rb +2 -4
  64. data/lib/bundler/inline.rb +3 -3
  65. data/lib/bundler/installer.rb +57 -144
  66. data/lib/bundler/installer/gem_installer.rb +76 -0
  67. data/lib/bundler/installer/parallel_installer.rb +22 -13
  68. data/lib/bundler/installer/standalone.rb +48 -0
  69. data/lib/bundler/lazy_specification.rb +3 -4
  70. data/lib/bundler/lockfile_parser.rb +21 -19
  71. data/lib/bundler/match_platform.rb +4 -4
  72. data/lib/bundler/psyched_yaml.rb +3 -3
  73. data/lib/bundler/remote_specification.rb +1 -1
  74. data/lib/bundler/resolver.rb +93 -88
  75. data/lib/bundler/retry.rb +9 -10
  76. data/lib/bundler/ruby_dsl.rb +1 -1
  77. data/lib/bundler/ruby_version.rb +7 -10
  78. data/lib/bundler/rubygems_ext.rb +32 -27
  79. data/lib/bundler/{gem_installer.rb → rubygems_gem_installer.rb} +2 -2
  80. data/lib/bundler/rubygems_integration.rb +85 -70
  81. data/lib/bundler/runtime.rb +57 -61
  82. data/lib/bundler/settings.rb +27 -26
  83. data/lib/bundler/setup.rb +3 -3
  84. data/lib/bundler/shared_helpers.rb +45 -20
  85. data/lib/bundler/similarity_detector.rb +19 -21
  86. data/lib/bundler/source.rb +4 -5
  87. data/lib/bundler/source/git.rb +29 -31
  88. data/lib/bundler/source/git/git_proxy.rb +52 -26
  89. data/lib/bundler/source/path.rb +25 -28
  90. data/lib/bundler/source/path/installer.rb +4 -4
  91. data/lib/bundler/source/rubygems.rb +62 -48
  92. data/lib/bundler/source/rubygems/remote.rb +3 -3
  93. data/lib/bundler/source_list.rb +4 -4
  94. data/lib/bundler/spec_set.rb +17 -15
  95. data/lib/bundler/ssl_certs/certificate_manager.rb +5 -6
  96. data/lib/bundler/stub_specification.rb +2 -2
  97. data/lib/bundler/templates/Executable +5 -5
  98. data/lib/bundler/templates/newgem/CODE_OF_CONDUCT.md.tt +42 -6
  99. data/lib/bundler/templates/newgem/README.md.tt +1 -1
  100. data/lib/bundler/templates/newgem/Rakefile.tt +4 -2
  101. data/lib/bundler/templates/newgem/bin/setup.tt +2 -1
  102. data/lib/bundler/templates/newgem/newgem.gemspec.tt +2 -2
  103. data/lib/bundler/ui.rb +3 -3
  104. data/lib/bundler/ui/rg_proxy.rb +2 -2
  105. data/lib/bundler/ui/shell.rb +10 -6
  106. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph.rb +82 -71
  107. data/lib/bundler/vendor/molinillo/lib/molinillo/gem_metadata.rb +1 -1
  108. data/lib/bundler/vendor/molinillo/lib/molinillo/modules/specification_provider.rb +9 -0
  109. data/lib/bundler/vendor/molinillo/lib/molinillo/resolution.rb +40 -21
  110. data/lib/bundler/vendor/molinillo/lib/molinillo/state.rb +8 -0
  111. data/lib/bundler/vendored_molinillo.rb +1 -1
  112. data/lib/bundler/vendored_persistent.rb +3 -3
  113. data/lib/bundler/vendored_thor.rb +2 -2
  114. data/lib/bundler/version.rb +1 -1
  115. data/lib/bundler/vlad.rb +1 -1
  116. data/lib/bundler/worker.rb +4 -5
  117. data/man/bundle-config.ronn +4 -2
  118. data/man/bundle-gem.ronn +77 -0
  119. data/man/bundle-install.ronn +13 -6
  120. data/man/bundle-lock.ronn +47 -0
  121. data/man/bundle.ronn +1 -1
  122. data/man/gemfile.5.ronn +8 -0
  123. data/man/index.txt +1 -0
  124. metadata +37 -8
  125. data/bin/bundle +0 -21
  126. data/bin/bundler +0 -21
@@ -1,3 +1,3 @@
1
1
  module Bundler::Molinillo
2
- VERSION = '0.2.3'
2
+ VERSION = '0.4.0'
3
3
  end
@@ -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
- states.push(initial_state)
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.send(member, *args, &block)
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.add_root_vertex(name_for(r), nil).tap { |v| v.explicit_requirements << r } }
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(*edge.requirements) }
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).requirements.map { |r| requirement_tree_for(r) }
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| activated.add_child_vertex name_for(d), nil, [name_for(activated_spec)], 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, activated, conflicts)
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
- states.push DependencyState.new(
404
- new_requirement ? name_for(new_requirement) : '',
405
- new_requirements,
406
- activated.dup,
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 'bundler/vendor/molinillo/lib/molinillo'
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 'openssl'
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('../vendor', __FILE__)
9
+ vendor = File.expand_path("../vendor", __FILE__)
10
10
  $:.unshift(vendor) unless $:.include?(vendor)
11
- require 'net/http/persistent'
11
+ require "net/http/persistent"
@@ -1,3 +1,3 @@
1
1
  module Bundler; end
2
- require 'bundler/vendor/thor/lib/thor'
3
- require 'bundler/vendor/thor/lib/thor/actions'
2
+ require "bundler/vendor/thor/lib/thor"
3
+ require "bundler/vendor/thor/lib/thor/actions"
@@ -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.10.6" unless defined?(::Bundler::VERSION)
5
+ VERSION = "1.11.0.pre.1" unless defined?(::Bundler::VERSION)
6
6
  end
@@ -2,7 +2,7 @@
2
2
  #
3
3
  # Just add "require 'bundler/vlad'" in your Vlad deploy.rb, and
4
4
  # include the vlad:bundle:install task in your vlad:deploy task.
5
- require 'bundler/deployment'
5
+ require "bundler/deployment"
6
6
 
7
7
  include Rake::DSL if defined? Rake::DSL
8
8
 
@@ -1,4 +1,4 @@
1
- require 'thread'
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 { |i| Thread.start { process_queue(i) } }
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 { |thread| thread.join }
64
+ @threads.each(&:join)
65
65
  end
66
66
 
67
67
  def abort_threads
68
- @threads.each {|i| i.exit }
68
+ @threads.each(&:exit)
69
69
  exit 1
70
70
  end
71
-
72
71
  end
73
72
  end
@@ -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 to install gems. Defaults to `$GEM_HOME` in development
88
- and `vendor/bundle` when `--deployment` is used
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.
@@ -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)
@@ -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
- Install gems by starting <number> of workers parallely.
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
- `production` use. Please check carefully if you want to have this option
81
- enabled in `development` or `test` environments.
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` flag.
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`.
@@ -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
- * `bundle gem(1)`:
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]: