rubygems-update 3.2.32 → 3.3.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (177) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +154 -4
  3. data/CONTRIBUTING.md +40 -10
  4. data/Manifest.txt +11 -5
  5. data/POLICIES.md +22 -8
  6. data/README.md +9 -7
  7. data/UPGRADING.md +5 -81
  8. data/bin/gem +1 -6
  9. data/bundler/CHANGELOG.md +70 -0
  10. data/bundler/exe/bundle +7 -8
  11. data/bundler/lib/bundler/.document +1 -0
  12. data/bundler/lib/bundler/build_metadata.rb +2 -2
  13. data/bundler/lib/bundler/cli/doctor.rb +3 -2
  14. data/bundler/lib/bundler/cli/gem.rb +2 -1
  15. data/bundler/lib/bundler/cli/info.rb +6 -1
  16. data/bundler/lib/bundler/cli/install.rb +2 -0
  17. data/bundler/lib/bundler/cli/update.rb +2 -2
  18. data/bundler/lib/bundler/cli.rb +6 -0
  19. data/bundler/lib/bundler/compact_index_client/updater.rb +0 -5
  20. data/bundler/lib/bundler/definition.rb +29 -53
  21. data/bundler/lib/bundler/dependency.rb +5 -7
  22. data/bundler/lib/bundler/dsl.rb +18 -30
  23. data/bundler/lib/bundler/endpoint_specification.rb +0 -8
  24. data/bundler/lib/bundler/environment_preserver.rb +4 -1
  25. data/bundler/lib/bundler/fetcher/compact_index.rb +9 -4
  26. data/bundler/lib/bundler/fetcher.rb +2 -5
  27. data/bundler/lib/bundler/injector.rb +10 -1
  28. data/bundler/lib/bundler/installer/gem_installer.rb +1 -6
  29. data/bundler/lib/bundler/installer.rb +1 -4
  30. data/bundler/lib/bundler/lazy_specification.rb +17 -1
  31. data/bundler/lib/bundler/lockfile_parser.rb +10 -13
  32. data/bundler/lib/bundler/man/bundle-add.1 +10 -2
  33. data/bundler/lib/bundler/man/bundle-add.1.ronn +7 -1
  34. data/bundler/lib/bundler/man/bundle-binstubs.1 +1 -1
  35. data/bundler/lib/bundler/man/bundle-cache.1 +1 -1
  36. data/bundler/lib/bundler/man/bundle-check.1 +1 -1
  37. data/bundler/lib/bundler/man/bundle-clean.1 +1 -1
  38. data/bundler/lib/bundler/man/bundle-config.1 +3 -3
  39. data/bundler/lib/bundler/man/bundle-config.1.ronn +3 -3
  40. data/bundler/lib/bundler/man/bundle-doctor.1 +1 -1
  41. data/bundler/lib/bundler/man/bundle-exec.1 +1 -1
  42. data/bundler/lib/bundler/man/bundle-gem.1 +1 -1
  43. data/bundler/lib/bundler/man/bundle-info.1 +1 -1
  44. data/bundler/lib/bundler/man/bundle-init.1 +1 -1
  45. data/bundler/lib/bundler/man/bundle-inject.1 +1 -1
  46. data/bundler/lib/bundler/man/bundle-install.1 +2 -2
  47. data/bundler/lib/bundler/man/bundle-install.1.ronn +2 -2
  48. data/bundler/lib/bundler/man/bundle-list.1 +1 -1
  49. data/bundler/lib/bundler/man/bundle-lock.1 +1 -1
  50. data/bundler/lib/bundler/man/bundle-open.1 +1 -1
  51. data/bundler/lib/bundler/man/bundle-outdated.1 +1 -1
  52. data/bundler/lib/bundler/man/bundle-platform.1 +1 -1
  53. data/bundler/lib/bundler/man/bundle-pristine.1 +1 -1
  54. data/bundler/lib/bundler/man/bundle-remove.1 +1 -1
  55. data/bundler/lib/bundler/man/bundle-show.1 +1 -1
  56. data/bundler/lib/bundler/man/bundle-update.1 +2 -2
  57. data/bundler/lib/bundler/man/bundle-update.1.ronn +2 -1
  58. data/bundler/lib/bundler/man/bundle-viz.1 +1 -1
  59. data/bundler/lib/bundler/man/bundle.1 +1 -1
  60. data/bundler/lib/bundler/man/gemfile.5 +28 -2
  61. data/bundler/lib/bundler/man/gemfile.5.ronn +9 -1
  62. data/bundler/lib/bundler/plugin/api/source.rb +1 -0
  63. data/bundler/lib/bundler/plugin/installer.rb +1 -1
  64. data/bundler/lib/bundler/process_lock.rb +1 -1
  65. data/bundler/lib/bundler/psyched_yaml.rb +1 -13
  66. data/bundler/lib/bundler/resolver.rb +34 -31
  67. data/bundler/lib/bundler/rubygems_ext.rb +2 -0
  68. data/bundler/lib/bundler/rubygems_gem_installer.rb +1 -1
  69. data/bundler/lib/bundler/rubygems_integration.rb +11 -48
  70. data/bundler/lib/bundler/self_manager.rb +76 -0
  71. data/bundler/lib/bundler/shared_helpers.rb +4 -12
  72. data/bundler/lib/bundler/source/git/git_proxy.rb +2 -2
  73. data/bundler/lib/bundler/source/metadata.rb +1 -1
  74. data/bundler/lib/bundler/source/rubygems.rb +16 -12
  75. data/bundler/lib/bundler/source/rubygems_aggregate.rb +1 -1
  76. data/bundler/lib/bundler/source.rb +1 -1
  77. data/bundler/lib/bundler/source_list.rb +7 -29
  78. data/bundler/lib/bundler/templates/Executable.bundler +1 -1
  79. data/bundler/lib/bundler/templates/Gemfile +0 -2
  80. data/bundler/lib/bundler/templates/gems.rb +0 -3
  81. data/bundler/lib/bundler/templates/newgem/Rakefile.tt +10 -1
  82. data/bundler/lib/bundler/templates/newgem/github/workflows/main.yml.tt +2 -2
  83. data/bundler/lib/bundler/templates/newgem/newgem.gemspec.tt +1 -1
  84. data/bundler/lib/bundler/templates/newgem/sig/newgem.rbs.tt +8 -0
  85. data/bundler/lib/bundler/templates/newgem/test/minitest/{newgem_test.rb.tt → test_newgem.rb.tt} +1 -1
  86. data/bundler/lib/bundler/ui/shell.rb +1 -1
  87. data/bundler/lib/bundler/vendor/.document +1 -0
  88. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/file_manipulation.rb +6 -6
  89. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/inject_into_file.rb +5 -3
  90. data/bundler/lib/bundler/vendor/thor/lib/thor/actions.rb +6 -2
  91. data/bundler/lib/bundler/vendor/thor/lib/thor/core_ext/hash_with_indifferent_access.rb +6 -0
  92. data/bundler/lib/bundler/vendor/thor/lib/thor/error.rb +9 -4
  93. data/bundler/lib/bundler/vendor/thor/lib/thor/parser/options.rb +19 -1
  94. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/basic.rb +22 -4
  95. data/bundler/lib/bundler/vendor/thor/lib/thor/shell.rb +1 -1
  96. data/bundler/lib/bundler/vendor/thor/lib/thor/util.rb +1 -1
  97. data/bundler/lib/bundler/vendor/uri/lib/uri/common.rb +17 -80
  98. data/bundler/lib/bundler/vendor/uri/lib/uri/ftp.rb +0 -1
  99. data/bundler/lib/bundler/vendor/uri/lib/uri/generic.rb +5 -6
  100. data/bundler/lib/bundler/vendor/uri/lib/uri/http.rb +0 -1
  101. data/bundler/lib/bundler/vendor/uri/lib/uri/https.rb +0 -1
  102. data/bundler/lib/bundler/vendor/uri/lib/uri/ldap.rb +1 -1
  103. data/bundler/lib/bundler/vendor/uri/lib/uri/mailto.rb +0 -1
  104. data/bundler/lib/bundler/vendor/uri/lib/uri/rfc2396_parser.rb +1 -14
  105. data/bundler/lib/bundler/vendor/uri/lib/uri/rfc3986_parser.rb +1 -12
  106. data/bundler/lib/bundler/vendor/uri/lib/uri/version.rb +1 -1
  107. data/bundler/lib/bundler/vendor/uri/lib/uri/ws.rb +84 -0
  108. data/bundler/lib/bundler/vendor/uri/lib/uri/wss.rb +22 -0
  109. data/bundler/lib/bundler/vendor/uri/lib/uri.rb +0 -1
  110. data/bundler/lib/bundler/version.rb +1 -1
  111. data/bundler/lib/bundler.rb +9 -3
  112. data/hide_lib_for_update/note.txt +0 -4
  113. data/lib/rubygems/bundler_version_finder.rb +10 -42
  114. data/lib/rubygems/command_manager.rb +4 -2
  115. data/lib/rubygems/commands/install_command.rb +5 -2
  116. data/lib/rubygems/commands/pristine_command.rb +8 -2
  117. data/lib/rubygems/commands/server_command.rb +14 -77
  118. data/lib/rubygems/commands/setup_command.rb +21 -22
  119. data/lib/rubygems/commands/update_command.rb +9 -4
  120. data/lib/rubygems/defaults.rb +2 -20
  121. data/lib/rubygems/dependency.rb +7 -7
  122. data/lib/rubygems/deprecate.rb +53 -6
  123. data/lib/rubygems/errors.rb +0 -3
  124. data/lib/rubygems/exceptions.rb +31 -1
  125. data/lib/rubygems/ext/builder.rb +5 -3
  126. data/lib/rubygems/install_update_options.rb +11 -2
  127. data/lib/rubygems/installer.rb +14 -12
  128. data/lib/rubygems/name_tuple.rb +2 -3
  129. data/lib/rubygems/optparse/.document +1 -0
  130. data/lib/rubygems/path_support.rb +1 -6
  131. data/lib/rubygems/platform.rb +4 -0
  132. data/lib/rubygems/remote_fetcher.rb +1 -1
  133. data/lib/rubygems/requirement.rb +1 -1
  134. data/lib/rubygems/resolver/installer_set.rb +1 -1
  135. data/lib/rubygems/security/policy.rb +1 -3
  136. data/lib/rubygems/security.rb +14 -7
  137. data/lib/rubygems/source.rb +3 -1
  138. data/lib/rubygems/spec_fetcher.rb +1 -1
  139. data/lib/rubygems/specification.rb +21 -21
  140. data/lib/rubygems/stub_specification.rb +1 -1
  141. data/lib/rubygems/text.rb +21 -20
  142. data/lib/rubygems/tsort/.document +1 -0
  143. data/lib/rubygems/uninstaller.rb +4 -1
  144. data/lib/rubygems/unknown_command_spell_checker.rb +21 -0
  145. data/lib/rubygems/version.rb +2 -0
  146. data/lib/rubygems.rb +48 -56
  147. data/rubygems-update.gemspec +1 -1
  148. data/setup.rb +1 -6
  149. data/test/rubygems/helper.rb +20 -6
  150. data/test/rubygems/test_config.rb +2 -2
  151. data/test/rubygems/test_exit.rb +11 -0
  152. data/test/rubygems/test_gem.rb +46 -76
  153. data/test/rubygems/test_gem_bundler_version_finder.rb +22 -43
  154. data/test/rubygems/test_gem_command_manager.rb +28 -2
  155. data/test/rubygems/test_gem_commands_install_command.rb +33 -0
  156. data/test/rubygems/test_gem_commands_open_command.rb +1 -1
  157. data/test/rubygems/test_gem_commands_server_command.rb +4 -46
  158. data/test/rubygems/test_gem_commands_setup_command.rb +17 -0
  159. data/test/rubygems/test_gem_commands_update_command.rb +2 -2
  160. data/test/rubygems/test_gem_dependency.rb +4 -8
  161. data/test/rubygems/test_gem_installer.rb +10 -5
  162. data/test/rubygems/test_gem_path_support.rb +2 -6
  163. data/test/rubygems/test_gem_remote_fetcher.rb +15 -0
  164. data/test/rubygems/test_gem_requirement.rb +0 -1
  165. data/test/rubygems/test_gem_security.rb +1 -1
  166. data/test/rubygems/test_gem_specification.rb +16 -25
  167. data/test/rubygems/test_gem_stream_ui.rb +1 -1
  168. data/test/rubygems/test_gem_text.rb +6 -0
  169. data/test/rubygems/test_kernel.rb +1 -13
  170. data/test/rubygems/test_project_sanity.rb +1 -1
  171. data/test/rubygems/test_require.rb +4 -58
  172. data/test/rubygems/test_rubygems.rb +23 -0
  173. metadata +14 -8
  174. data/bundler/lib/bundler/gemdeps.rb +0 -29
  175. data/lib/rubygems/server.rb +0 -882
  176. data/test/rubygems/bogussources.rb +0 -9
  177. data/test/rubygems/test_gem_server.rb +0 -608
data/UPGRADING.md CHANGED
@@ -1,91 +1,15 @@
1
1
  # How to upgrade/downgrade Rubygems:
2
2
 
3
- ## For RubyGems 1.5.0 and 1.5.1:
4
-
5
- RubyGems 1.5.0 and 1.5.1 shipped with a broken `gem update --system`. You will
6
- need to use the Manual Upgrade Recipe below.
7
-
8
- ## On Ruby 1.9.x:
9
-
10
- ### From stock ruby shipping with 1.9:
11
-
12
- Use the Normal Upgrade Method below. (finally!)
13
-
14
- ## On Ruby 1.8.x:
15
-
16
- ### From rubygems 1.3.x:
17
-
18
- Use the Normal Upgrade Recipe below.
19
-
20
- ### From rubygems 1-1.x through 1.2.x:
21
-
22
- RubyGems 1.1 and 1.2 have problems upgrading when there is no rubygems-update
23
- installed. You will need to use the following instructions if you see "Nothing
24
- to update".
25
-
26
- Use the Manual Upgrade Recipe below.
27
-
28
- ### From rubygems < 1.1.x:
29
-
30
- Use the Normal Upgrade Recipe below.
31
-
32
3
  ## Downgrade Recipe
33
4
 
34
- ### Normal Downgrade
35
-
36
- #### With rubygems 1.5.2 and higher:
37
-
38
- $ gem update --system 1.3.7
39
-
40
- #### With rubygems 1.5.1 and lower:
5
+ $ gem update --system 3.1.4
41
6
 
42
- Use sudo/su as appropriate:
43
-
44
- $ gem install rubygems-update -v 1.3.7
45
- $ update_rubygems _1.3.7_
46
-
47
- Replace 1.3.7 with whatever version you want to downgrade to. This recipe can
48
- also be used to upgrade to a specific version instead of the latest.
49
-
50
- Do make sure that you don't have any other versions of rubygems-update
51
- installed when you run the second command.
52
-
53
- ### 1.9.2 Downgrade from Rubygems 1.4.x+ to stock 1.9 rubygems:
54
-
55
- Use sudo/su as appropriate:
56
-
57
- $ ruby --disable-gems -S gem which rubygems
58
- ~/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/site_ruby/1.9.1/rubygems.rb
59
- $ rm ~/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/site_ruby/1.9.1/rubygems.rb
60
- $ rm -rf ~/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/site_ruby/1.9.1/rubygems
61
- $ gem -v
62
- 1.3.7
63
-
64
- ## Upgrade Recipes
65
-
66
- ### Normal Upgrade
67
-
68
- Use sudo/su as appropriate:
7
+ ## Upgrade Recipe
69
8
 
70
9
  $ gem update --system
71
10
 
72
- ### Manual Upgrade
73
-
74
- If you have an older version of RubyGems installed, then you can still do it
75
- in two steps:
76
-
77
- Use sudo/su as appropriate:
78
-
79
- $ gem install rubygems-update
80
- $ update_rubygems
81
-
82
- ### Manual Install
83
-
84
- If you don't have any RubyGems install, there is still the pre-gem approach to
85
- getting software, doing it manually:
86
-
87
- Use sudo/su as appropriate:
11
+ ## Install from source
88
12
 
89
13
  * Download from: https://rubygems.org/pages/download
90
- * Unpack into a directory and cd there
91
- * Install with: ruby setup.rb
14
+ * Unpack into a directory and `cd` there
15
+ * Install with: `ruby setup.rb`
data/bin/gem CHANGED
@@ -7,12 +7,7 @@
7
7
 
8
8
  require 'rubygems'
9
9
  require 'rubygems/gem_runner'
10
- require 'rubygems/exceptions'
11
10
 
12
11
  args = ARGV.clone
13
12
 
14
- begin
15
- Gem::GemRunner.new.run args
16
- rescue Gem::SystemExitException => e
17
- exit e.exit_code
18
- end
13
+ Gem::GemRunner.new.run args
data/bundler/CHANGELOG.md CHANGED
@@ -1,3 +1,73 @@
1
+ # 2.3.2 (December 23, 2021)
2
+
3
+ ## Enhancements:
4
+
5
+ - Remove unnecessary lockfile upgrade warning [#5209](https://github.com/rubygems/rubygems/pull/5209)
6
+
7
+ # 2.3.1 (December 22, 2021)
8
+
9
+ ## Enhancements:
10
+
11
+ - Vendor latest `thor` with fixes for latest `did_you_mean` deprecations [#5202](https://github.com/rubygems/rubygems/pull/5202)
12
+ - Avoid unnecessary `shellwords` require on newer rubygems [#5195](https://github.com/rubygems/rubygems/pull/5195)
13
+ - Re-exec prepending command with `Gem.ruby` if `$PROGRAM_NAME` is not executable [#5193](https://github.com/rubygems/rubygems/pull/5193)
14
+
15
+ # 2.3.0 (December 21, 2021)
16
+
17
+ ## Features:
18
+
19
+ - Change `bundle install` with a lockfile to respect the `BUNDLED WITH` bundler version [#4076](https://github.com/rubygems/rubygems/pull/4076)
20
+
21
+ ## Enhancements:
22
+
23
+ - Print warning when running Bundler on potentially problematic RubyGems & Ruby combinations [#5177](https://github.com/rubygems/rubygems/pull/5177)
24
+ - Error tracing should be printed to stderr [#5179](https://github.com/rubygems/rubygems/pull/5179)
25
+ - Add `github` and `ref` options to `bundle add` [#5159](https://github.com/rubygems/rubygems/pull/5159)
26
+ - Add require parameter to `bundle add` [#5021](https://github.com/rubygems/rubygems/pull/5021)
27
+ - Enable parallel installation on Windows by default [#4822](https://github.com/rubygems/rubygems/pull/4822)
28
+ - More logging when compact index is not used and we fallback to other APIs [#4546](https://github.com/rubygems/rubygems/pull/4546)
29
+ - `bundle gem` generated MiniTest file and class now start with 'test' [#3893](https://github.com/rubygems/rubygems/pull/3893)
30
+ - Add `Bundler::Definition.no_lock` accessor for skipping lock file creation/update [#3401](https://github.com/rubygems/rubygems/pull/3401)
31
+
32
+ ## Bug fixes:
33
+
34
+ - Fix crash when when no platform specific matches exist and show a proper error [#5168](https://github.com/rubygems/rubygems/pull/5168)
35
+ - Ignore dependencies not actually locked from frozen check [#5152](https://github.com/rubygems/rubygems/pull/5152)
36
+ - Fix `bundle cache --all-platforms` on Windows [#4552](https://github.com/rubygems/rubygems/pull/4552)
37
+
38
+ ## Documentation:
39
+
40
+ - Fix gemspec template typo [#4545](https://github.com/rubygems/rubygems/pull/4545)
41
+
42
+ # 2.2.33 (December 7, 2021)
43
+
44
+ ## Security fixes:
45
+
46
+ - Pass "--" to git commands to separate positional and optional args [#5142](https://github.com/rubygems/rubygems/pull/5142)
47
+
48
+ ## Enhancements:
49
+
50
+ - Accept pull request URLs as github source [#5126](https://github.com/rubygems/rubygems/pull/5126)
51
+ - Add `--version` parameter to `bundle info` command [#5137](https://github.com/rubygems/rubygems/pull/5137)
52
+ - Let original `Errno::EACCES` error be raised in compact index updater [#5110](https://github.com/rubygems/rubygems/pull/5110)
53
+ - Improve gemfile-lockfile source equivalence errors [#5120](https://github.com/rubygems/rubygems/pull/5120)
54
+ - Avoid float-to-string loss of characters in GitHub Actions configuration labels in new gem template [#5089](https://github.com/rubygems/rubygems/pull/5089)
55
+ - Add an initial rbs template to `bundle gem` skeleton [#5041](https://github.com/rubygems/rubygems/pull/5041)
56
+ - Avoid shared libraries not getting environment passed right after argv in memory when `bundle exec` is used [#4815](https://github.com/rubygems/rubygems/pull/4815)
57
+
58
+ ## Bug fixes:
59
+
60
+ - Don't cleanup paths from gems already activated from `$LOAD_PATH` [#5111](https://github.com/rubygems/rubygems/pull/5111)
61
+ - Fix handling prereleases of 0 versions, like 0.0.0.dev or 0.0.0.SNAPSHOT [#5116](https://github.com/rubygems/rubygems/pull/5116)
62
+ - Fix escape of filenames in `bundle doctor` [#5102](https://github.com/rubygems/rubygems/pull/5102)
63
+ - Don't unlock dependencies when running `bundle install` after changing global source [#5090](https://github.com/rubygems/rubygems/pull/5090)
64
+ - Fix missing locked specs when depended on another platform [#5092](https://github.com/rubygems/rubygems/pull/5092)
65
+ - Fix `bundle info` sometimes claiming that bundler has been deleted [#5097](https://github.com/rubygems/rubygems/pull/5097)
66
+
67
+ ## Documentation:
68
+
69
+ - Ignore to generate the documentation from vendored libraries [#5118](https://github.com/rubygems/rubygems/pull/5118)
70
+
1
71
  # 2.2.32 (November 23, 2021)
2
72
 
3
73
  ## Enhancements:
data/bundler/exe/bundle CHANGED
@@ -18,14 +18,13 @@ end
18
18
  # Workaround for non-activated bundler spec due to missing https://github.com/rubygems/rubygems/commit/4e306d7bcdee924b8d80ca9db6125aa59ee4e5a3
19
19
  gem "bundler", Bundler::VERSION if Gem.rubygems_version < Gem::Version.new("2.6.2")
20
20
 
21
- # Check if an older version of bundler is installed
22
- $LOAD_PATH.each do |path|
23
- next unless path =~ %r{/bundler-0\.(\d+)} && $1.to_i < 9
24
- err = String.new
25
- err << "Looks like you have a version of bundler that's older than 0.9.\n"
26
- err << "Please remove your old versions.\n"
27
- err << "An easy way to do this is by running `gem cleanup bundler`."
28
- abort(err)
21
+ if Gem.rubygems_version < Gem::Version.new("3.2.3") && Gem.ruby_version < Gem::Version.new("2.6.a") && !ENV["BUNDLER_NO_OLD_RUBYGEMS_WARNING"]
22
+ Bundler.ui.warn \
23
+ "Your RubyGems version (#{Gem::VERSION})) has a bug that prevents " \
24
+ "`required_ruby_version` from working for Bundler. Any scripts that use " \
25
+ "`gem install bundler` will break as soon as Bundler drops support for " \
26
+ "your Ruby version. Please upgrade RubyGems to avoid future breakage " \
27
+ "and silence this warning by running `gem update --system 3.2.3`"
29
28
  end
30
29
 
31
30
  if File.exist?(base_path)
@@ -0,0 +1 @@
1
+ # not in RDoc
@@ -4,8 +4,8 @@ module Bundler
4
4
  # Represents metadata from when the Bundler gem was built.
5
5
  module BuildMetadata
6
6
  # begin ivars
7
- @built_at = "2021-11-23".freeze
8
- @git_commit_sha = "20d4957649".freeze
7
+ @built_at = "2021-12-24".freeze
8
+ @git_commit_sha = "c3c71e7434".freeze
9
9
  @release = true
10
10
  # end ivars
11
11
 
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require "rbconfig"
4
+ require "shellwords"
4
5
 
5
6
  module Bundler
6
7
  class CLI::Doctor
@@ -22,14 +23,14 @@ module Bundler
22
23
  end
23
24
 
24
25
  def dylibs_darwin(path)
25
- output = `/usr/bin/otool -L "#{path}"`.chomp
26
+ output = `/usr/bin/otool -L #{path.shellescape}`.chomp
26
27
  dylibs = output.split("\n")[1..-1].map {|l| l.match(DARWIN_REGEX).captures[0] }.uniq
27
28
  # ignore @rpath and friends
28
29
  dylibs.reject {|dylib| dylib.start_with? "@" }
29
30
  end
30
31
 
31
32
  def dylibs_ldd(path)
32
- output = `/usr/bin/ldd "#{path}"`.chomp
33
+ output = `/usr/bin/ldd #{path.shellescape}`.chomp
33
34
  output.split("\n").map do |l|
34
35
  match = l.match(LDD_REGEX)
35
36
  next if match.nil?
@@ -76,6 +76,7 @@ module Bundler
76
76
  "#{Bundler.preferred_gemfile_name}.tt" => Bundler.preferred_gemfile_name,
77
77
  "lib/newgem.rb.tt" => "lib/#{namespaced_path}.rb",
78
78
  "lib/newgem/version.rb.tt" => "lib/#{namespaced_path}/version.rb",
79
+ "sig/newgem.rbs.tt" => "sig/#{namespaced_path}.rbs",
79
80
  "newgem.gemspec.tt" => "#{name}.gemspec",
80
81
  "Rakefile.tt" => "Rakefile",
81
82
  "README.md.tt" => "README.md",
@@ -105,7 +106,7 @@ module Bundler
105
106
  when "minitest"
106
107
  templates.merge!(
107
108
  "test/minitest/test_helper.rb.tt" => "test/test_helper.rb",
108
- "test/minitest/newgem_test.rb.tt" => "test/#{namespaced_path}_test.rb"
109
+ "test/minitest/test_newgem.rb.tt" => "test/test_#{namespaced_path}.rb"
109
110
  )
110
111
  config[:test_task] = :test
111
112
  when "test-unit"
@@ -18,6 +18,7 @@ module Bundler
18
18
 
19
19
  if spec
20
20
  return print_gem_path(spec) if @options[:path]
21
+ return print_gem_version(spec) if @options[:version]
21
22
  print_gem_info(spec)
22
23
  end
23
24
  end
@@ -39,6 +40,10 @@ module Bundler
39
40
  raise GemNotFound, Bundler::CLI::Common.gem_not_found_message(gem_name, Bundler.definition.dependencies)
40
41
  end
41
42
 
43
+ def print_gem_version(spec)
44
+ Bundler.ui.info spec.version.to_s
45
+ end
46
+
42
47
  def print_gem_path(spec)
43
48
  name = spec.name
44
49
  if name == "bundler"
@@ -70,7 +75,7 @@ module Bundler
70
75
  gem_info << "\tPath: #{spec.full_gem_path}\n"
71
76
  gem_info << "\tDefault Gem: yes" if spec.respond_to?(:default_gem?) && spec.default_gem?
72
77
 
73
- if spec.deleted_gem?
78
+ if name != "bundler" && spec.deleted_gem?
74
79
  return Bundler.ui.warn "The gem #{name} has been deleted. Gemspec information is still available though:\n#{gem_info}"
75
80
  end
76
81
 
@@ -12,6 +12,8 @@ module Bundler
12
12
 
13
13
  warn_if_root
14
14
 
15
+ Bundler.self_manager.install_locked_bundler_and_restart_with_it_if_needed
16
+
15
17
  Bundler::SharedHelpers.set_env "RB_USER_INSTALL", "1" if Bundler::FREEBSD
16
18
 
17
19
  # Disable color in deployment mode
@@ -66,7 +66,7 @@ module Bundler
66
66
 
67
67
  if locked_gems = Bundler.definition.locked_gems
68
68
  previous_locked_info = locked_gems.specs.reduce({}) do |h, s|
69
- h[s.name] = { :spec => s, :version => s.version, :source => s.source.to_s }
69
+ h[s.name] = { :spec => s, :version => s.version, :source => s.source.identifier }
70
70
  h
71
71
  end
72
72
  end
@@ -95,7 +95,7 @@ module Bundler
95
95
  end
96
96
 
97
97
  locked_source = locked_info[:source]
98
- new_source = new_spec.source.to_s
98
+ new_source = new_spec.source.identifier
99
99
  next if locked_source != new_source
100
100
 
101
101
  new_version = new_spec.version
@@ -61,6 +61,8 @@ module Bundler
61
61
  Bundler.reset_settings_and_root!
62
62
  end
63
63
 
64
+ Bundler.self_manager.restart_with_locked_bundler_if_needed
65
+
64
66
  Bundler.settings.set_command_option_if_given :retry, options[:retry]
65
67
 
66
68
  current_cmd = args.last[:current_command].name
@@ -331,6 +333,7 @@ module Bundler
331
333
 
332
334
  desc "info GEM [OPTIONS]", "Show information for the given gem"
333
335
  method_option "path", :type => :boolean, :banner => "Print full path to gem"
336
+ method_option "version", :type => :boolean, :banner => "Print gem version"
334
337
  def info(gem_name)
335
338
  require_relative "cli/info"
336
339
  Info.new(options, gem_name).run
@@ -366,8 +369,11 @@ module Bundler
366
369
  method_option "version", :aliases => "-v", :type => :string
367
370
  method_option "group", :aliases => "-g", :type => :string
368
371
  method_option "source", :aliases => "-s", :type => :string
372
+ method_option "require", :aliases => "-r", :type => :string, :banner => "Adds require path to gem. Provide false, or a path as a string."
369
373
  method_option "git", :type => :string
374
+ method_option "github", :type => :string
370
375
  method_option "branch", :type => :string
376
+ method_option "ref", :type => :string
371
377
  method_option "skip-install", :type => :boolean, :banner =>
372
378
  "Adds gem to the Gemfile but does not install it"
373
379
  method_option "optimistic", :type => :boolean, :banner => "Adds optimistic declaration of version to gem"
@@ -76,11 +76,6 @@ module Bundler
76
76
 
77
77
  update(local_path, remote_path, :retrying)
78
78
  end
79
- rescue Errno::EACCES
80
- raise Bundler::PermissionError,
81
- "Bundler does not have write access to create a temp directory " \
82
- "within #{Dir.tmpdir}. Bundler must have write access to your " \
83
- "systems temp directory to function properly. "
84
79
  rescue Zlib::GzipFile::Error
85
80
  raise Bundler::HTTPError
86
81
  end
@@ -6,6 +6,11 @@ module Bundler
6
6
  class Definition
7
7
  include GemHelpers
8
8
 
9
+ class << self
10
+ # Do not create or modify a lockfile (Makes #lock a noop)
11
+ attr_accessor :no_lock
12
+ end
13
+
9
14
  attr_reader(
10
15
  :dependencies,
11
16
  :locked_deps,
@@ -158,10 +163,6 @@ module Bundler
158
163
  end
159
164
  end
160
165
 
161
- def multisource_allowed?
162
- @multisource_allowed
163
- end
164
-
165
166
  def resolve_only_locally!
166
167
  @remote = false
167
168
  sources.local_only!
@@ -279,6 +280,8 @@ module Bundler
279
280
  end
280
281
 
281
282
  def lock(file, preserve_unknown_sections = false)
283
+ return if Definition.no_lock
284
+
282
285
  contents = to_lock
283
286
 
284
287
  # Convert to \r\n if the existing lock has them
@@ -289,10 +292,7 @@ module Bundler
289
292
  locked_major = @locked_bundler_version.segments.first
290
293
  current_major = Gem::Version.create(Bundler::VERSION).segments.first
291
294
 
292
- if updating_major = locked_major < current_major
293
- Bundler.ui.warn "Warning: the lockfile is being updated to Bundler #{current_major}, " \
294
- "after which you will be unable to return to Bundler #{@locked_bundler_version.segments.first}."
295
- end
295
+ updating_major = locked_major < current_major
296
296
  end
297
297
 
298
298
  preserve_unknown_sections ||= !updating_major && (Bundler.frozen_bundle? || !(unlocking? || @unlocking_bundler))
@@ -368,44 +368,31 @@ module Bundler
368
368
  added.concat new_platforms.map {|p| "* platform: #{p}" }
369
369
  deleted.concat deleted_platforms.map {|p| "* platform: #{p}" }
370
370
 
371
- gemfile_sources = sources.lock_sources
372
-
373
- new_sources = gemfile_sources - @locked_sources
374
- deleted_sources = @locked_sources - gemfile_sources
375
-
376
371
  new_deps = @dependencies - locked_dependencies
377
372
  deleted_deps = locked_dependencies - @dependencies
378
373
 
379
- # Check if it is possible that the source is only changed thing
380
- if (new_deps.empty? && deleted_deps.empty?) && (!new_sources.empty? && !deleted_sources.empty?)
381
- new_sources.reject! {|source| (source.path? && source.path.exist?) || equivalent_rubygems_remotes?(source) }
382
- deleted_sources.reject! {|source| (source.path? && source.path.exist?) || equivalent_rubygems_remotes?(source) }
383
- end
374
+ added.concat new_deps.map {|d| "* #{pretty_dep(d)}" } if new_deps.any?
375
+ deleted.concat deleted_deps.map {|d| "* #{pretty_dep(d)}" } if deleted_deps.any?
384
376
 
385
- if @locked_sources != gemfile_sources
386
- if new_sources.any?
387
- added.concat new_sources.map {|source| "* source: #{source}" }
388
- end
377
+ both_sources = Hash.new {|h, k| h[k] = [] }
378
+ @dependencies.each {|d| both_sources[d.name][0] = d }
389
379
 
390
- if deleted_sources.any?
391
- deleted.concat deleted_sources.map {|source| "* source: #{source}" }
392
- end
393
- end
380
+ locked_dependencies.each do |d|
381
+ next if !Bundler.feature_flag.bundler_3_mode? && @locked_specs[d.name].empty?
394
382
 
395
- added.concat new_deps.map {|d| "* #{pretty_dep(d)}" } if new_deps.any?
396
- if deleted_deps.any?
397
- deleted.concat deleted_deps.map {|d| "* #{pretty_dep(d)}" }
383
+ both_sources[d.name][1] = d
398
384
  end
399
385
 
400
- both_sources = Hash.new {|h, k| h[k] = [] }
401
- @dependencies.each {|d| both_sources[d.name][0] = d }
402
- @locked_deps.each {|name, d| both_sources[name][1] = d.source }
386
+ both_sources.each do |name, (dep, lock_dep)|
387
+ next if dep.nil? || lock_dep.nil?
388
+
389
+ gemfile_source = dep.source || sources.default_source
390
+ lock_source = lock_dep.source || sources.default_source
391
+ next if lock_source.include?(gemfile_source)
403
392
 
404
- both_sources.each do |name, (dep, lock_source)|
405
- next if lock_source.nil? || (dep && lock_source.can_lock?(dep))
406
- gemfile_source_name = (dep && dep.source) || "no specified source"
407
- lockfile_source_name = lock_source
408
- changed << "* #{name} from `#{gemfile_source_name}` to `#{lockfile_source_name}`"
393
+ gemfile_source_name = dep.source ? gemfile_source.identifier : "no specified source"
394
+ lockfile_source_name = lock_dep.source ? lock_source.identifier : "no specified source"
395
+ changed << "* #{name} from `#{lockfile_source_name}` to `#{gemfile_source_name}`"
409
396
  end
410
397
 
411
398
  reason = change_reason
@@ -649,15 +636,13 @@ module Bundler
649
636
  end
650
637
 
651
638
  def converge_dependencies
652
- (@dependencies + locked_dependencies).each do |dep|
639
+ changes = false
640
+
641
+ @dependencies.each do |dep|
653
642
  if dep.source
654
643
  dep.source = sources.get(dep.source)
655
644
  end
656
- end
657
-
658
- changes = false
659
645
 
660
- @dependencies.each do |dep|
661
646
  unless locked_dep = @locked_deps[dep.name]
662
647
  changes = true
663
648
  next
@@ -711,11 +696,8 @@ module Bundler
711
696
  deps << dep
712
697
  end
713
698
 
714
- s.source = (dep && dep.source) || sources.get(s.source) unless multisource_allowed?
699
+ s.source = (dep && dep.source) || sources.get(s.source) || sources.default_source unless Bundler.frozen_bundle?
715
700
 
716
- # Don't add a spec to the list if its source is expired. For example,
717
- # if you change a Git gem to RubyGems.
718
- next if s.source.nil?
719
701
  next if @unlock[:sources].include?(s.source.name)
720
702
 
721
703
  # If the spec is from a path source and it doesn't exist anymore
@@ -744,7 +726,7 @@ module Bundler
744
726
  s.dependencies.replace(new_spec.dependencies)
745
727
  end
746
728
 
747
- if dep.nil? && @dependencies.find {|d| s.name == d.name }
729
+ if dep.nil? && requested_dependencies.find {|d| s.name == d.name }
748
730
  @unlock[:gems] << s.name
749
731
  else
750
732
  converged << s
@@ -852,12 +834,6 @@ module Bundler
852
834
  end
853
835
  end
854
836
 
855
- def equivalent_rubygems_remotes?(source)
856
- return false unless source.is_a?(Source::Rubygems)
857
-
858
- Bundler.settings[:allow_deployment_source_credential_changes] && source.equivalent_remotes?(sources.rubygems_remotes)
859
- end
860
-
861
837
  def source_map
862
838
  @source_map ||= SourceMap.new(sources, dependencies)
863
839
  end
@@ -7,7 +7,7 @@ require_relative "rubygems_ext"
7
7
  module Bundler
8
8
  class Dependency < Gem::Dependency
9
9
  attr_reader :autorequire
10
- attr_reader :groups, :platforms, :gemfile, :git, :branch
10
+ attr_reader :groups, :platforms, :gemfile, :git, :github, :branch, :ref
11
11
 
12
12
  PLATFORM_MAP = {
13
13
  :ruby => Gem::Platform::RUBY,
@@ -82,7 +82,9 @@ module Bundler
82
82
  @groups = Array(options["group"] || :default).map(&:to_sym)
83
83
  @source = options["source"]
84
84
  @git = options["git"]
85
+ @github = options["github"]
85
86
  @branch = options["branch"]
87
+ @ref = options["ref"]
86
88
  @platforms = Array(options["platforms"])
87
89
  @env = options["env"]
88
90
  @should_include = options.fetch("should_include", true)
@@ -96,15 +98,11 @@ module Bundler
96
98
  def gem_platforms(valid_platforms)
97
99
  return valid_platforms if @platforms.empty?
98
100
 
99
- valid_generic_platforms = valid_platforms.map {|p| [p, GemHelpers.generic(p)] }.to_h
100
- @gem_platforms ||= expanded_platforms.compact.uniq
101
-
102
- filtered_generic_platforms = valid_generic_platforms.values & @gem_platforms
103
- valid_generic_platforms.select {|_, v| filtered_generic_platforms.include?(v) }.keys
101
+ valid_platforms.select {|p| expanded_platforms.include?(GemHelpers.generic(p)) }
104
102
  end
105
103
 
106
104
  def expanded_platforms
107
- @platforms.map {|pl| PLATFORM_MAP[pl] }
105
+ @expanded_platforms ||= @platforms.map {|pl| PLATFORM_MAP[pl] }.compact.uniq
108
106
  end
109
107
 
110
108
  def should_include?
@@ -18,6 +18,8 @@ module Bundler
18
18
  VALID_KEYS = %w[group groups git path glob name branch ref tag require submodules
19
19
  platform platforms type source install_if gemfile].freeze
20
20
 
21
+ GITHUB_PULL_REQUEST_URL = %r{\Ahttps://github\.com/([A-Za-z0-9_\-\.]+/[A-Za-z0-9_\-\.]+)/pull/(\d+)\z}.freeze
22
+
21
23
  attr_reader :gemspecs
22
24
  attr_accessor :dependencies
23
25
 
@@ -275,26 +277,24 @@ module Bundler
275
277
 
276
278
  def add_git_sources
277
279
  git_source(:github) do |repo_name|
278
- warn_deprecated_git_source(:github, <<-'RUBY'.strip, 'Change any "reponame" :github sources to "username/reponame".')
279
- "https://github.com/#{repo_name}.git"
280
- RUBY
281
- repo_name = "#{repo_name}/#{repo_name}" unless repo_name.include?("/")
282
- "https://github.com/#{repo_name}.git"
280
+ if repo_name =~ GITHUB_PULL_REQUEST_URL
281
+ {
282
+ "git" => "https://github.com/#{$1}.git",
283
+ "branch" => "refs/pull/#{$2}/head",
284
+ "ref" => nil,
285
+ "tag" => nil,
286
+ }
287
+ else
288
+ repo_name = "#{repo_name}/#{repo_name}" unless repo_name.include?("/")
289
+ "https://github.com/#{repo_name}.git"
290
+ end
283
291
  end
284
292
 
285
293
  git_source(:gist) do |repo_name|
286
- warn_deprecated_git_source(:gist, '"https://gist.github.com/#{repo_name}.git"')
287
-
288
294
  "https://gist.github.com/#{repo_name}.git"
289
295
  end
290
296
 
291
297
  git_source(:bitbucket) do |repo_name|
292
- warn_deprecated_git_source(:bitbucket, <<-'RUBY'.strip)
293
- user_name, repo_name = repo_name.split("/")
294
- repo_name ||= user_name
295
- "https://#{user_name}@bitbucket.org/#{user_name}/#{repo_name}.git"
296
- RUBY
297
-
298
298
  user_name, repo_name = repo_name.split("/")
299
299
  repo_name ||= user_name
300
300
  "https://#{user_name}@bitbucket.org/#{user_name}/#{repo_name}.git"
@@ -365,7 +365,11 @@ repo_name ||= user_name
365
365
 
366
366
  git_name = (git_names & opts.keys).last
367
367
  if @git_sources[git_name]
368
- opts["git"] = @git_sources[git_name].call(opts[git_name])
368
+ git_opts = @git_sources[git_name].call(opts[git_name])
369
+ git_opts = { "git" => git_opts } if git_opts.is_a?(String)
370
+ opts.merge!(git_opts) do |key, _gemfile_value, _git_source_value|
371
+ raise GemfileError, %(The :#{key} option can't be used with `#{git_name}: #{opts[git_name].inspect}`)
372
+ end
369
373
  end
370
374
 
371
375
  %w[git path].each do |type|
@@ -475,22 +479,6 @@ repo_name ||= user_name
475
479
  end
476
480
  end
477
481
 
478
- def warn_deprecated_git_source(name, replacement, additional_message = nil)
479
- additional_message &&= " #{additional_message}"
480
- replacement = if replacement.count("\n").zero?
481
- "{|repo_name| #{replacement} }"
482
- else
483
- "do |repo_name|\n#{replacement.to_s.gsub(/^/, " ")}\n end"
484
- end
485
-
486
- Bundler::SharedHelpers.major_deprecation 3, <<-EOS
487
- The :#{name} git source is deprecated, and will be removed in the future.#{additional_message} Add this code to the top of your Gemfile to ensure it continues to work:
488
-
489
- git_source(:#{name}) #{replacement}
490
-
491
- EOS
492
- end
493
-
494
482
  class DSLError < GemfileError
495
483
  # @return [String] the description that should be presented to the user.
496
484
  #