rubygems-update 3.5.7 → 3.5.8

Sign up to get free protection for your applications and to get access to all the features.
Files changed (56) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +26 -0
  3. data/Manifest.txt +3 -0
  4. data/bundler/CHANGELOG.md +12 -0
  5. data/bundler/lib/bundler/build_metadata.rb +2 -2
  6. data/bundler/lib/bundler/cli/plugin.rb +2 -1
  7. data/bundler/lib/bundler/gem_version_promoter.rb +42 -38
  8. data/bundler/lib/bundler/man/bundle-add.1 +1 -1
  9. data/bundler/lib/bundler/man/bundle-binstubs.1 +1 -1
  10. data/bundler/lib/bundler/man/bundle-cache.1 +1 -1
  11. data/bundler/lib/bundler/man/bundle-check.1 +1 -1
  12. data/bundler/lib/bundler/man/bundle-clean.1 +1 -1
  13. data/bundler/lib/bundler/man/bundle-config.1 +1 -1
  14. data/bundler/lib/bundler/man/bundle-console.1 +1 -1
  15. data/bundler/lib/bundler/man/bundle-doctor.1 +1 -1
  16. data/bundler/lib/bundler/man/bundle-exec.1 +1 -1
  17. data/bundler/lib/bundler/man/bundle-gem.1 +1 -1
  18. data/bundler/lib/bundler/man/bundle-help.1 +1 -1
  19. data/bundler/lib/bundler/man/bundle-info.1 +1 -1
  20. data/bundler/lib/bundler/man/bundle-init.1 +1 -1
  21. data/bundler/lib/bundler/man/bundle-inject.1 +1 -1
  22. data/bundler/lib/bundler/man/bundle-install.1 +1 -1
  23. data/bundler/lib/bundler/man/bundle-list.1 +1 -1
  24. data/bundler/lib/bundler/man/bundle-lock.1 +1 -1
  25. data/bundler/lib/bundler/man/bundle-open.1 +1 -1
  26. data/bundler/lib/bundler/man/bundle-outdated.1 +1 -1
  27. data/bundler/lib/bundler/man/bundle-platform.1 +1 -1
  28. data/bundler/lib/bundler/man/bundle-plugin.1 +6 -3
  29. data/bundler/lib/bundler/man/bundle-plugin.1.ronn +6 -2
  30. data/bundler/lib/bundler/man/bundle-pristine.1 +1 -1
  31. data/bundler/lib/bundler/man/bundle-remove.1 +1 -1
  32. data/bundler/lib/bundler/man/bundle-show.1 +1 -1
  33. data/bundler/lib/bundler/man/bundle-update.1 +1 -1
  34. data/bundler/lib/bundler/man/bundle-version.1 +1 -1
  35. data/bundler/lib/bundler/man/bundle-viz.1 +1 -1
  36. data/bundler/lib/bundler/man/bundle.1 +1 -1
  37. data/bundler/lib/bundler/man/gemfile.5 +1 -1
  38. data/bundler/lib/bundler/plugin/installer/path.rb +18 -0
  39. data/bundler/lib/bundler/plugin/installer.rb +34 -10
  40. data/bundler/lib/bundler/plugin/source_list.rb +4 -4
  41. data/bundler/lib/bundler/resolver/candidate.rb +1 -1
  42. data/bundler/lib/bundler/resolver.rb +54 -24
  43. data/bundler/lib/bundler/self_manager.rb +1 -1
  44. data/bundler/lib/bundler/source/rubygems.rb +2 -2
  45. data/bundler/lib/bundler/source_list.rb +2 -2
  46. data/bundler/lib/bundler/version.rb +1 -1
  47. data/lib/rubygems/command_manager.rb +1 -0
  48. data/lib/rubygems/commands/build_command.rb +2 -11
  49. data/lib/rubygems/commands/rebuild_command.rb +264 -0
  50. data/lib/rubygems/config_file.rb +20 -8
  51. data/lib/rubygems/gemspec_helpers.rb +19 -0
  52. data/lib/rubygems/package.rb +2 -2
  53. data/lib/rubygems/resolver/spec_specification.rb +7 -0
  54. data/lib/rubygems.rb +1 -1
  55. data/rubygems-update.gemspec +1 -1
  56. metadata +6 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 3b83feaa9b9fd7b87e8ac6fcbff33eb461f17e32f59cdcf4825825944fb2e206
4
- data.tar.gz: 5edabd88afc0a9efb93f1cc664071cef09a2869b1ab84e2eb627ed2d88b949b9
3
+ metadata.gz: 9a2678739bb9aec6c55fccde57b8156dea5c1fe48a21f2ad189e57dc0dd469d6
4
+ data.tar.gz: cb8a2bb827a187b5f20e9a3ba0810cfcfafe64124e0b8b74bd3dd17b023e82dc
5
5
  SHA512:
6
- metadata.gz: 882690618a686f258f5d6bd0d194c142129a8fa79643c6d12668c33e681cc2d5c55c31c6e7e5ec652893262270a25e99692ea2193d2305598be9f10c2b336036
7
- data.tar.gz: e87beb2867ef8be9387914bad8c7fa760619ea5b76b3c0195dc5a0b56d284e500466ffdf71389c5fba19d5d8adcf895e8be36ec953af008cf25522040a8b0a80
6
+ metadata.gz: 15d77cdf7c54546c855e2d339fc0724a306d0d9235989504e0eac89b0d931401b2fb4e39bf026b6ac45dfd460d80082eeaaafa1249c68f4e552c6d664e5ce993
7
+ data.tar.gz: 28dadfbea1be447d43ec7b820df10aa871316e31be79232b1eb25780bc994cefbf647700932e83fb55a401437350e6b760a9f1a1920bde5f0a346480bea23a3e
data/CHANGELOG.md CHANGED
@@ -1,3 +1,29 @@
1
+ # 3.5.8 / 2024-04-11
2
+
3
+ ## Security:
4
+
5
+ * Respect global umask when writing regular files. Pull request
6
+ [#7518](https://github.com/rubygems/rubygems/pull/7518) by
7
+ deivid-rodriguez
8
+
9
+ ## Enhancements:
10
+
11
+ * Allow string keys with gemrc. Pull request
12
+ [#7543](https://github.com/rubygems/rubygems/pull/7543) by hsbt
13
+ * [Experimental] Add "gem rebuild" command. Pull request
14
+ [#4913](https://github.com/rubygems/rubygems/pull/4913) by duckinator
15
+ * Installs bundler 2.5.8 as a default gem.
16
+
17
+ ## Bug fixes:
18
+
19
+ * Fix NoMethodError crash when building errors about corrupt package
20
+ files. Pull request
21
+ [#7539](https://github.com/rubygems/rubygems/pull/7539) by jez
22
+ * Fix resolver to properly intersect Arrays of `Gem::Resolver::Activation`
23
+ objects. Pull request
24
+ [#7537](https://github.com/rubygems/rubygems/pull/7537) by
25
+ deivid-rodriguez
26
+
1
27
  # 3.5.7 / 2024-03-22
2
28
 
3
29
  ## Enhancements:
data/Manifest.txt CHANGED
@@ -164,6 +164,7 @@ bundler/lib/bundler/plugin/events.rb
164
164
  bundler/lib/bundler/plugin/index.rb
165
165
  bundler/lib/bundler/plugin/installer.rb
166
166
  bundler/lib/bundler/plugin/installer/git.rb
167
+ bundler/lib/bundler/plugin/installer/path.rb
167
168
  bundler/lib/bundler/plugin/installer/rubygems.rb
168
169
  bundler/lib/bundler/plugin/source_list.rb
169
170
  bundler/lib/bundler/process_lock.rb
@@ -383,6 +384,7 @@ lib/rubygems/commands/pristine_command.rb
383
384
  lib/rubygems/commands/push_command.rb
384
385
  lib/rubygems/commands/query_command.rb
385
386
  lib/rubygems/commands/rdoc_command.rb
387
+ lib/rubygems/commands/rebuild_command.rb
386
388
  lib/rubygems/commands/search_command.rb
387
389
  lib/rubygems/commands/server_command.rb
388
390
  lib/rubygems/commands/setup_command.rb
@@ -424,6 +426,7 @@ lib/rubygems/gemcutter_utilities.rb
424
426
  lib/rubygems/gemcutter_utilities/webauthn_listener.rb
425
427
  lib/rubygems/gemcutter_utilities/webauthn_listener/response.rb
426
428
  lib/rubygems/gemcutter_utilities/webauthn_poller.rb
429
+ lib/rubygems/gemspec_helpers.rb
427
430
  lib/rubygems/install_default_message.rb
428
431
  lib/rubygems/install_message.rb
429
432
  lib/rubygems/install_update_options.rb
data/bundler/CHANGELOG.md CHANGED
@@ -1,3 +1,15 @@
1
+ # 2.5.8 (April 11, 2024)
2
+
3
+ ## Enhancements:
4
+
5
+ - Allow installing plugins from path via CLI [#6960](https://github.com/rubygems/rubygems/pull/6960)
6
+ - Improve validation of `bundle plugin install` options [#7529](https://github.com/rubygems/rubygems/pull/7529)
7
+
8
+ ## Bug fixes:
9
+
10
+ - Fix resolver error message when it runs out of versions due to `--strict --patch` filtering out everything [#7527](https://github.com/rubygems/rubygems/pull/7527)
11
+ - Fix incorrect `bundle update --bundler` message [#7516](https://github.com/rubygems/rubygems/pull/7516)
12
+
1
13
  # 2.5.7 (March 22, 2024)
2
14
 
3
15
  ## Deprecations:
@@ -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 = "2024-03-22".freeze
8
- @git_commit_sha = "199531f621".freeze
7
+ @built_at = "2024-04-11".freeze
8
+ @git_commit_sha = "cf66a7369b".freeze
9
9
  @release = true
10
10
  # end ivars
11
11
 
@@ -5,7 +5,7 @@ module Bundler
5
5
  class CLI::Plugin < Thor
6
6
  desc "install PLUGINS", "Install the plugin from the source"
7
7
  long_desc <<-D
8
- Install plugins either from the rubygems source provided (with --source option) or from a git source provided with --git. If no sources are provided, it uses Gem.sources
8
+ Install plugins either from the rubygems source provided (with --source option), from a git source provided with --git, or a local path provided with --path. If no sources are provided, it uses Gem.sources
9
9
  D
10
10
  method_option "source", type: :string, default: nil, banner: "URL of the RubyGems source to fetch the plugin from"
11
11
  method_option "version", type: :string, default: nil, banner: "The version of the plugin to fetch"
@@ -13,6 +13,7 @@ module Bundler
13
13
  method_option "local_git", type: :string, default: nil, banner: "Path of the local git repo to fetch from (deprecated)"
14
14
  method_option "branch", type: :string, default: nil, banner: "The git branch to checkout"
15
15
  method_option "ref", type: :string, default: nil, banner: "The git revision to check out"
16
+ method_option "path", type: :string, default: nil, banner: "Path of a local gem to directly use"
16
17
  def install(*plugins)
17
18
  Bundler::Plugin.install(plugins, options)
18
19
  end
@@ -45,17 +45,37 @@ module Bundler
45
45
 
46
46
  # Given a Resolver::Package and an Array of Specifications of available
47
47
  # versions for a gem, this method will return the Array of Specifications
48
- # sorted (and possibly truncated if strict is true) in an order to give
49
- # preference to the current level (:major, :minor or :patch) when resolution
50
- # is deciding what versions best resolve all dependencies in the bundle.
48
+ # sorted in an order to give preference to the current level (:major, :minor
49
+ # or :patch) when resolution is deciding what versions best resolve all
50
+ # dependencies in the bundle.
51
51
  # @param package [Resolver::Package] The package being resolved.
52
52
  # @param specs [Specification] An array of Specifications for the package.
53
- # @return [Specification] A new instance of the Specification Array sorted and
54
- # possibly filtered.
53
+ # @return [Specification] A new instance of the Specification Array sorted.
55
54
  def sort_versions(package, specs)
56
- specs = filter_dep_specs(specs, package) if strict
55
+ locked_version = package.locked_version
57
56
 
58
- sort_dep_specs(specs, package)
57
+ result = specs.sort do |a, b|
58
+ unless package.prerelease_specified? || pre?
59
+ a_pre = a.prerelease?
60
+ b_pre = b.prerelease?
61
+
62
+ next 1 if a_pre && !b_pre
63
+ next -1 if b_pre && !a_pre
64
+ end
65
+
66
+ if major? || locked_version.nil?
67
+ b <=> a
68
+ elsif either_version_older_than_locked?(a, b, locked_version)
69
+ b <=> a
70
+ elsif segments_do_not_match?(a, b, :major)
71
+ a <=> b
72
+ elsif !minor? && segments_do_not_match?(a, b, :minor)
73
+ a <=> b
74
+ else
75
+ b <=> a
76
+ end
77
+ end
78
+ post_sort(result, package.unlock?, locked_version)
59
79
  end
60
80
 
61
81
  # @return [bool] Convenience method for testing value of level variable.
@@ -73,9 +93,18 @@ module Bundler
73
93
  pre == true
74
94
  end
75
95
 
76
- private
96
+ # Given a Resolver::Package and an Array of Specifications of available
97
+ # versions for a gem, this method will truncate the Array if strict
98
+ # is true. That means filtering out downgrades from the version currently
99
+ # locked, and filtering out upgrades that go past the selected level (major,
100
+ # minor, or patch).
101
+ # @param package [Resolver::Package] The package being resolved.
102
+ # @param specs [Specification] An array of Specifications for the package.
103
+ # @return [Specification] A new instance of the Specification Array
104
+ # truncated.
105
+ def filter_versions(package, specs)
106
+ return specs unless strict
77
107
 
78
- def filter_dep_specs(specs, package)
79
108
  locked_version = package.locked_version
80
109
  return specs if locked_version.nil? || major?
81
110
 
@@ -89,32 +118,7 @@ module Bundler
89
118
  end
90
119
  end
91
120
 
92
- def sort_dep_specs(specs, package)
93
- locked_version = package.locked_version
94
-
95
- result = specs.sort do |a, b|
96
- unless package.prerelease_specified? || pre?
97
- a_pre = a.prerelease?
98
- b_pre = b.prerelease?
99
-
100
- next -1 if a_pre && !b_pre
101
- next 1 if b_pre && !a_pre
102
- end
103
-
104
- if major? || locked_version.nil?
105
- a <=> b
106
- elsif either_version_older_than_locked?(a, b, locked_version)
107
- a <=> b
108
- elsif segments_do_not_match?(a, b, :major)
109
- b <=> a
110
- elsif !minor? && segments_do_not_match?(a, b, :minor)
111
- b <=> a
112
- else
113
- a <=> b
114
- end
115
- end
116
- post_sort(result, package.unlock?, locked_version)
117
- end
121
+ private
118
122
 
119
123
  def either_version_older_than_locked?(a, b, locked_version)
120
124
  a.version < locked_version || b.version < locked_version
@@ -133,13 +137,13 @@ module Bundler
133
137
  if unlock || locked_version.nil?
134
138
  result
135
139
  else
136
- move_version_to_end(result, locked_version)
140
+ move_version_to_beginning(result, locked_version)
137
141
  end
138
142
  end
139
143
 
140
- def move_version_to_end(result, version)
144
+ def move_version_to_beginning(result, version)
141
145
  move, keep = result.partition {|s| s.version.to_s == version.to_s }
142
- keep.concat(move)
146
+ move.concat(keep)
143
147
  end
144
148
  end
145
149
  end
@@ -1,6 +1,6 @@
1
1
  .\" generated with nRonn/v0.11.1
2
2
  .\" https://github.com/n-ronn/nronn/tree/0.11.1
3
- .TH "BUNDLE\-ADD" "1" "February 2024" ""
3
+ .TH "BUNDLE\-ADD" "1" "March 2024" ""
4
4
  .SH "NAME"
5
5
  \fBbundle\-add\fR \- Add gem to the Gemfile and run bundle install
6
6
  .SH "SYNOPSIS"
@@ -1,6 +1,6 @@
1
1
  .\" generated with nRonn/v0.11.1
2
2
  .\" https://github.com/n-ronn/nronn/tree/0.11.1
3
- .TH "BUNDLE\-BINSTUBS" "1" "February 2024" ""
3
+ .TH "BUNDLE\-BINSTUBS" "1" "March 2024" ""
4
4
  .SH "NAME"
5
5
  \fBbundle\-binstubs\fR \- Install the binstubs of the listed gems
6
6
  .SH "SYNOPSIS"
@@ -1,6 +1,6 @@
1
1
  .\" generated with nRonn/v0.11.1
2
2
  .\" https://github.com/n-ronn/nronn/tree/0.11.1
3
- .TH "BUNDLE\-CACHE" "1" "February 2024" ""
3
+ .TH "BUNDLE\-CACHE" "1" "March 2024" ""
4
4
  .SH "NAME"
5
5
  \fBbundle\-cache\fR \- Package your needed \fB\.gem\fR files into your application
6
6
  .SH "SYNOPSIS"
@@ -1,6 +1,6 @@
1
1
  .\" generated with nRonn/v0.11.1
2
2
  .\" https://github.com/n-ronn/nronn/tree/0.11.1
3
- .TH "BUNDLE\-CHECK" "1" "February 2024" ""
3
+ .TH "BUNDLE\-CHECK" "1" "March 2024" ""
4
4
  .SH "NAME"
5
5
  \fBbundle\-check\fR \- Verifies if dependencies are satisfied by installed gems
6
6
  .SH "SYNOPSIS"
@@ -1,6 +1,6 @@
1
1
  .\" generated with nRonn/v0.11.1
2
2
  .\" https://github.com/n-ronn/nronn/tree/0.11.1
3
- .TH "BUNDLE\-CLEAN" "1" "February 2024" ""
3
+ .TH "BUNDLE\-CLEAN" "1" "March 2024" ""
4
4
  .SH "NAME"
5
5
  \fBbundle\-clean\fR \- Cleans up unused gems in your bundler directory
6
6
  .SH "SYNOPSIS"
@@ -1,6 +1,6 @@
1
1
  .\" generated with nRonn/v0.11.1
2
2
  .\" https://github.com/n-ronn/nronn/tree/0.11.1
3
- .TH "BUNDLE\-CONFIG" "1" "February 2024" ""
3
+ .TH "BUNDLE\-CONFIG" "1" "March 2024" ""
4
4
  .SH "NAME"
5
5
  \fBbundle\-config\fR \- Set bundler configuration options
6
6
  .SH "SYNOPSIS"
@@ -1,6 +1,6 @@
1
1
  .\" generated with nRonn/v0.11.1
2
2
  .\" https://github.com/n-ronn/nronn/tree/0.11.1
3
- .TH "BUNDLE\-CONSOLE" "1" "February 2024" ""
3
+ .TH "BUNDLE\-CONSOLE" "1" "March 2024" ""
4
4
  .SH "NAME"
5
5
  \fBbundle\-console\fR \- Deprecated way to open an IRB session with the bundle pre\-loaded
6
6
  .SH "SYNOPSIS"
@@ -1,6 +1,6 @@
1
1
  .\" generated with nRonn/v0.11.1
2
2
  .\" https://github.com/n-ronn/nronn/tree/0.11.1
3
- .TH "BUNDLE\-DOCTOR" "1" "February 2024" ""
3
+ .TH "BUNDLE\-DOCTOR" "1" "March 2024" ""
4
4
  .SH "NAME"
5
5
  \fBbundle\-doctor\fR \- Checks the bundle for common problems
6
6
  .SH "SYNOPSIS"
@@ -1,6 +1,6 @@
1
1
  .\" generated with nRonn/v0.11.1
2
2
  .\" https://github.com/n-ronn/nronn/tree/0.11.1
3
- .TH "BUNDLE\-EXEC" "1" "February 2024" ""
3
+ .TH "BUNDLE\-EXEC" "1" "March 2024" ""
4
4
  .SH "NAME"
5
5
  \fBbundle\-exec\fR \- Execute a command in the context of the bundle
6
6
  .SH "SYNOPSIS"
@@ -1,6 +1,6 @@
1
1
  .\" generated with nRonn/v0.11.1
2
2
  .\" https://github.com/n-ronn/nronn/tree/0.11.1
3
- .TH "BUNDLE\-GEM" "1" "February 2024" ""
3
+ .TH "BUNDLE\-GEM" "1" "March 2024" ""
4
4
  .SH "NAME"
5
5
  \fBbundle\-gem\fR \- Generate a project skeleton for creating a rubygem
6
6
  .SH "SYNOPSIS"
@@ -1,6 +1,6 @@
1
1
  .\" generated with nRonn/v0.11.1
2
2
  .\" https://github.com/n-ronn/nronn/tree/0.11.1
3
- .TH "BUNDLE\-HELP" "1" "February 2024" ""
3
+ .TH "BUNDLE\-HELP" "1" "March 2024" ""
4
4
  .SH "NAME"
5
5
  \fBbundle\-help\fR \- Displays detailed help for each subcommand
6
6
  .SH "SYNOPSIS"
@@ -1,6 +1,6 @@
1
1
  .\" generated with nRonn/v0.11.1
2
2
  .\" https://github.com/n-ronn/nronn/tree/0.11.1
3
- .TH "BUNDLE\-INFO" "1" "February 2024" ""
3
+ .TH "BUNDLE\-INFO" "1" "March 2024" ""
4
4
  .SH "NAME"
5
5
  \fBbundle\-info\fR \- Show information for the given gem in your bundle
6
6
  .SH "SYNOPSIS"
@@ -1,6 +1,6 @@
1
1
  .\" generated with nRonn/v0.11.1
2
2
  .\" https://github.com/n-ronn/nronn/tree/0.11.1
3
- .TH "BUNDLE\-INIT" "1" "February 2024" ""
3
+ .TH "BUNDLE\-INIT" "1" "March 2024" ""
4
4
  .SH "NAME"
5
5
  \fBbundle\-init\fR \- Generates a Gemfile into the current working directory
6
6
  .SH "SYNOPSIS"
@@ -1,6 +1,6 @@
1
1
  .\" generated with nRonn/v0.11.1
2
2
  .\" https://github.com/n-ronn/nronn/tree/0.11.1
3
- .TH "BUNDLE\-INJECT" "1" "February 2024" ""
3
+ .TH "BUNDLE\-INJECT" "1" "March 2024" ""
4
4
  .SH "NAME"
5
5
  \fBbundle\-inject\fR \- Add named gem(s) with version requirements to Gemfile
6
6
  .SH "SYNOPSIS"
@@ -1,6 +1,6 @@
1
1
  .\" generated with nRonn/v0.11.1
2
2
  .\" https://github.com/n-ronn/nronn/tree/0.11.1
3
- .TH "BUNDLE\-INSTALL" "1" "February 2024" ""
3
+ .TH "BUNDLE\-INSTALL" "1" "March 2024" ""
4
4
  .SH "NAME"
5
5
  \fBbundle\-install\fR \- Install the dependencies specified in your Gemfile
6
6
  .SH "SYNOPSIS"
@@ -1,6 +1,6 @@
1
1
  .\" generated with nRonn/v0.11.1
2
2
  .\" https://github.com/n-ronn/nronn/tree/0.11.1
3
- .TH "BUNDLE\-LIST" "1" "February 2024" ""
3
+ .TH "BUNDLE\-LIST" "1" "March 2024" ""
4
4
  .SH "NAME"
5
5
  \fBbundle\-list\fR \- List all the gems in the bundle
6
6
  .SH "SYNOPSIS"
@@ -1,6 +1,6 @@
1
1
  .\" generated with nRonn/v0.11.1
2
2
  .\" https://github.com/n-ronn/nronn/tree/0.11.1
3
- .TH "BUNDLE\-LOCK" "1" "February 2024" ""
3
+ .TH "BUNDLE\-LOCK" "1" "March 2024" ""
4
4
  .SH "NAME"
5
5
  \fBbundle\-lock\fR \- Creates / Updates a lockfile without installing
6
6
  .SH "SYNOPSIS"
@@ -1,6 +1,6 @@
1
1
  .\" generated with nRonn/v0.11.1
2
2
  .\" https://github.com/n-ronn/nronn/tree/0.11.1
3
- .TH "BUNDLE\-OPEN" "1" "February 2024" ""
3
+ .TH "BUNDLE\-OPEN" "1" "March 2024" ""
4
4
  .SH "NAME"
5
5
  \fBbundle\-open\fR \- Opens the source directory for a gem in your bundle
6
6
  .SH "SYNOPSIS"
@@ -1,6 +1,6 @@
1
1
  .\" generated with nRonn/v0.11.1
2
2
  .\" https://github.com/n-ronn/nronn/tree/0.11.1
3
- .TH "BUNDLE\-OUTDATED" "1" "February 2024" ""
3
+ .TH "BUNDLE\-OUTDATED" "1" "March 2024" ""
4
4
  .SH "NAME"
5
5
  \fBbundle\-outdated\fR \- List installed gems with newer versions available
6
6
  .SH "SYNOPSIS"
@@ -1,6 +1,6 @@
1
1
  .\" generated with nRonn/v0.11.1
2
2
  .\" https://github.com/n-ronn/nronn/tree/0.11.1
3
- .TH "BUNDLE\-PLATFORM" "1" "February 2024" ""
3
+ .TH "BUNDLE\-PLATFORM" "1" "March 2024" ""
4
4
  .SH "NAME"
5
5
  \fBbundle\-platform\fR \- Displays platform compatibility information
6
6
  .SH "SYNOPSIS"
@@ -1,10 +1,10 @@
1
1
  .\" generated with nRonn/v0.11.1
2
2
  .\" https://github.com/n-ronn/nronn/tree/0.11.1
3
- .TH "BUNDLE\-PLUGIN" "1" "February 2024" ""
3
+ .TH "BUNDLE\-PLUGIN" "1" "March 2024" ""
4
4
  .SH "NAME"
5
5
  \fBbundle\-plugin\fR \- Manage Bundler plugins
6
6
  .SH "SYNOPSIS"
7
- \fBbundle plugin\fR install PLUGINS [\-\-source=\fISOURCE\fR] [\-\-version=\fIversion\fR] [\-\-git=\fIgit\-url\fR] [\-\-branch=\fIbranch\fR|\-\-ref=\fIrev\fR]
7
+ \fBbundle plugin\fR install PLUGINS [\-\-source=\fISOURCE\fR] [\-\-version=\fIversion\fR] [\-\-git=\fIgit\-url\fR] [\-\-branch=\fIbranch\fR|\-\-ref=\fIrev\fR] [\-\-path=\fIpath\fR]
8
8
  .br
9
9
  \fBbundle plugin\fR uninstall PLUGINS
10
10
  .br
@@ -37,7 +37,10 @@ Install bundler\-graph gem from Git repository\. You can use standard Git URLs l
37
37
  .br
38
38
  \fBfile:///path/to/repo\fR
39
39
  .IP
40
- When you specify \fB\-\-git\fR, you can use \fB\-\-branch\fR or \fB\-\-ref\fR to specify any branch, tag, or commit hash (revision) to use\. When you specify both, only the latter is used\.
40
+ When you specify \fB\-\-git\fR, you can use \fB\-\-branch\fR or \fB\-\-ref\fR to specify any branch, tag, or commit hash (revision) to use\.
41
+ .TP
42
+ \fBbundle plugin install bundler\-graph \-\-path \.\./bundler\-graph\fR
43
+ Install bundler\-graph gem from a local path\.
41
44
  .SS "uninstall"
42
45
  Uninstall the plugin(s) specified in PLUGINS\.
43
46
  .SS "list"
@@ -4,7 +4,8 @@ bundle-plugin(1) -- Manage Bundler plugins
4
4
  ## SYNOPSIS
5
5
 
6
6
  `bundle plugin` install PLUGINS [--source=<SOURCE>] [--version=<version>]
7
- [--git=<git-url>] [--branch=<branch>|--ref=<rev>]<br>
7
+ [--git=<git-url>] [--branch=<branch>|--ref=<rev>]
8
+ [--path=<path>]<br>
8
9
  `bundle plugin` uninstall PLUGINS<br>
9
10
  `bundle plugin` list<br>
10
11
  `bundle plugin` help [COMMAND]
@@ -36,7 +37,10 @@ Install the given plugin(s).
36
37
  `/path/to/repo`<br>
37
38
  `file:///path/to/repo`
38
39
 
39
- When you specify `--git`, you can use `--branch` or `--ref` to specify any branch, tag, or commit hash (revision) to use. When you specify both, only the latter is used.
40
+ When you specify `--git`, you can use `--branch` or `--ref` to specify any branch, tag, or commit hash (revision) to use.
41
+
42
+ * `bundle plugin install bundler-graph --path ../bundler-graph`:
43
+ Install bundler-graph gem from a local path.
40
44
 
41
45
  ### uninstall
42
46
 
@@ -1,6 +1,6 @@
1
1
  .\" generated with nRonn/v0.11.1
2
2
  .\" https://github.com/n-ronn/nronn/tree/0.11.1
3
- .TH "BUNDLE\-PRISTINE" "1" "February 2024" ""
3
+ .TH "BUNDLE\-PRISTINE" "1" "March 2024" ""
4
4
  .SH "NAME"
5
5
  \fBbundle\-pristine\fR \- Restores installed gems to their pristine condition
6
6
  .SH "SYNOPSIS"
@@ -1,6 +1,6 @@
1
1
  .\" generated with nRonn/v0.11.1
2
2
  .\" https://github.com/n-ronn/nronn/tree/0.11.1
3
- .TH "BUNDLE\-REMOVE" "1" "February 2024" ""
3
+ .TH "BUNDLE\-REMOVE" "1" "March 2024" ""
4
4
  .SH "NAME"
5
5
  \fBbundle\-remove\fR \- Removes gems from the Gemfile
6
6
  .SH "SYNOPSIS"
@@ -1,6 +1,6 @@
1
1
  .\" generated with nRonn/v0.11.1
2
2
  .\" https://github.com/n-ronn/nronn/tree/0.11.1
3
- .TH "BUNDLE\-SHOW" "1" "February 2024" ""
3
+ .TH "BUNDLE\-SHOW" "1" "March 2024" ""
4
4
  .SH "NAME"
5
5
  \fBbundle\-show\fR \- Shows all the gems in your bundle, or the path to a gem
6
6
  .SH "SYNOPSIS"
@@ -1,6 +1,6 @@
1
1
  .\" generated with nRonn/v0.11.1
2
2
  .\" https://github.com/n-ronn/nronn/tree/0.11.1
3
- .TH "BUNDLE\-UPDATE" "1" "February 2024" ""
3
+ .TH "BUNDLE\-UPDATE" "1" "March 2024" ""
4
4
  .SH "NAME"
5
5
  \fBbundle\-update\fR \- Update your gems to the latest available versions
6
6
  .SH "SYNOPSIS"
@@ -1,6 +1,6 @@
1
1
  .\" generated with nRonn/v0.11.1
2
2
  .\" https://github.com/n-ronn/nronn/tree/0.11.1
3
- .TH "BUNDLE\-VERSION" "1" "February 2024" ""
3
+ .TH "BUNDLE\-VERSION" "1" "March 2024" ""
4
4
  .SH "NAME"
5
5
  \fBbundle\-version\fR \- Prints Bundler version information
6
6
  .SH "SYNOPSIS"
@@ -1,6 +1,6 @@
1
1
  .\" generated with nRonn/v0.11.1
2
2
  .\" https://github.com/n-ronn/nronn/tree/0.11.1
3
- .TH "BUNDLE\-VIZ" "1" "February 2024" ""
3
+ .TH "BUNDLE\-VIZ" "1" "March 2024" ""
4
4
  .SH "NAME"
5
5
  \fBbundle\-viz\fR \- Generates a visual dependency graph for your Gemfile
6
6
  .SH "SYNOPSIS"
@@ -1,6 +1,6 @@
1
1
  .\" generated with nRonn/v0.11.1
2
2
  .\" https://github.com/n-ronn/nronn/tree/0.11.1
3
- .TH "BUNDLE" "1" "February 2024" ""
3
+ .TH "BUNDLE" "1" "March 2024" ""
4
4
  .SH "NAME"
5
5
  \fBbundle\fR \- Ruby Dependency Management
6
6
  .SH "SYNOPSIS"
@@ -1,6 +1,6 @@
1
1
  .\" generated with nRonn/v0.11.1
2
2
  .\" https://github.com/n-ronn/nronn/tree/0.11.1
3
- .TH "GEMFILE" "5" "February 2024" ""
3
+ .TH "GEMFILE" "5" "March 2024" ""
4
4
  .SH "NAME"
5
5
  \fBGemfile\fR \- A format for describing gem dependencies for Ruby programs
6
6
  .SH "SYNOPSIS"
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Bundler
4
+ module Plugin
5
+ class Installer
6
+ class Path < Bundler::Source::Path
7
+ def root
8
+ Plugin.root
9
+ end
10
+
11
+ def generate_bin(spec, disable_extensions = false)
12
+ # Need to find a way without code duplication
13
+ # For now, we can ignore this
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
@@ -10,6 +10,7 @@ module Bundler
10
10
  class Installer
11
11
  autoload :Rubygems, File.expand_path("installer/rubygems", __dir__)
12
12
  autoload :Git, File.expand_path("installer/git", __dir__)
13
+ autoload :Path, File.expand_path("installer/path", __dir__)
13
14
 
14
15
  def install(names, options)
15
16
  check_sources_consistency!(options)
@@ -18,6 +19,8 @@ module Bundler
18
19
 
19
20
  if options[:git]
20
21
  install_git(names, version, options)
22
+ elsif options[:path]
23
+ install_path(names, version, options[:path])
21
24
  else
22
25
  sources = options[:source] || Gem.sources
23
26
  install_rubygems(names, version, sources)
@@ -43,18 +46,40 @@ module Bundler
43
46
  if options.key?(:git) && options.key?(:local_git)
44
47
  raise InvalidOption, "Remote and local plugin git sources can't be both specified"
45
48
  end
49
+
46
50
  # back-compat; local_git is an alias for git
47
51
  if options.key?(:local_git)
48
52
  Bundler::SharedHelpers.major_deprecation(2, "--local_git is deprecated, use --git")
49
53
  options[:git] = options.delete(:local_git)
50
54
  end
55
+
56
+ if (options.keys & [:source, :git, :path]).length > 1
57
+ raise InvalidOption, "Only one of --source, --git, or --path may be specified"
58
+ end
59
+
60
+ if (options.key?(:branch) || options.key?(:ref)) && !options.key?(:git)
61
+ raise InvalidOption, "--#{options.key?(:branch) ? "branch" : "ref"} can only be used with git sources"
62
+ end
63
+
64
+ if options.key?(:branch) && options.key?(:ref)
65
+ raise InvalidOption, "--branch and --ref can't be both specified"
66
+ end
51
67
  end
52
68
 
53
69
  def install_git(names, version, options)
54
- uri = options.delete(:git)
55
- options["uri"] = uri
70
+ source_list = SourceList.new
71
+ source = source_list.add_git_source({ "uri" => options[:git],
72
+ "branch" => options[:branch],
73
+ "ref" => options[:ref] })
56
74
 
57
- install_all_sources(names, version, options, options[:source])
75
+ install_all_sources(names, version, source_list, source)
76
+ end
77
+
78
+ def install_path(names, version, path)
79
+ source_list = SourceList.new
80
+ source = source_list.add_path_source({ "path" => path })
81
+
82
+ install_all_sources(names, version, source_list, source)
58
83
  end
59
84
 
60
85
  # Installs the plugin from rubygems source and returns the path where the
@@ -66,16 +91,15 @@ module Bundler
66
91
  #
67
92
  # @return [Hash] map of names to the specs of plugins installed
68
93
  def install_rubygems(names, version, sources)
69
- install_all_sources(names, version, nil, sources)
70
- end
71
-
72
- def install_all_sources(names, version, git_source_options, rubygems_source)
73
94
  source_list = SourceList.new
74
95
 
75
- source_list.add_git_source(git_source_options) if git_source_options
76
- Array(rubygems_source).each {|remote| source_list.add_global_rubygems_remote(remote) } if rubygems_source
96
+ Array(sources).each {|remote| source_list.add_global_rubygems_remote(remote) }
97
+
98
+ install_all_sources(names, version, source_list)
99
+ end
77
100
 
78
- deps = names.map {|name| Dependency.new name, version }
101
+ def install_all_sources(names, version, source_list, source = nil)
102
+ deps = names.map {|name| Dependency.new(name, version, { "source" => source }) }
79
103
 
80
104
  Bundler.configure_gem_home_and_path(Plugin.root)
81
105