bundler 1.9.0 → 1.17.3
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 +5 -5
- data/CHANGELOG.md +1157 -6
- data/README.md +33 -6
- data/bundler.gemspec +51 -18
- data/exe/bundle +31 -0
- data/{bin → exe}/bundle_ruby +10 -6
- data/exe/bundler +4 -0
- data/lib/bundler.rb +326 -207
- data/lib/bundler/build_metadata.rb +53 -0
- data/lib/bundler/capistrano.rb +9 -3
- data/lib/bundler/cli.rb +522 -141
- data/lib/bundler/cli/add.rb +35 -0
- data/lib/bundler/cli/binstubs.rb +22 -11
- data/lib/bundler/cli/cache.rb +7 -6
- data/lib/bundler/cli/check.rb +11 -8
- data/lib/bundler/cli/clean.rb +7 -8
- data/lib/bundler/cli/common.rb +53 -7
- data/lib/bundler/cli/config.rb +84 -49
- data/lib/bundler/cli/console.rb +13 -8
- data/lib/bundler/cli/doctor.rb +140 -0
- data/lib/bundler/cli/exec.rb +77 -16
- data/lib/bundler/cli/gem.rb +120 -52
- data/lib/bundler/cli/info.rb +50 -0
- data/lib/bundler/cli/init.rb +21 -7
- data/lib/bundler/cli/inject.rb +37 -10
- data/lib/bundler/cli/install.rb +139 -78
- data/lib/bundler/cli/issue.rb +40 -0
- data/lib/bundler/cli/list.rb +58 -0
- data/lib/bundler/cli/lock.rb +63 -0
- data/lib/bundler/cli/open.rb +9 -6
- data/lib/bundler/cli/outdated.rb +221 -35
- data/lib/bundler/cli/package.rb +11 -7
- data/lib/bundler/cli/platform.rb +7 -4
- data/lib/bundler/cli/plugin.rb +24 -0
- data/lib/bundler/cli/pristine.rb +47 -0
- data/lib/bundler/cli/remove.rb +18 -0
- data/lib/bundler/cli/show.rb +11 -10
- data/lib/bundler/cli/update.rb +47 -29
- data/lib/bundler/cli/viz.rb +12 -8
- data/lib/bundler/compact_index_client.rb +109 -0
- data/lib/bundler/compact_index_client/cache.rb +118 -0
- data/lib/bundler/compact_index_client/updater.rb +116 -0
- data/lib/bundler/compatibility_guard.rb +14 -0
- data/lib/bundler/constants.rb +3 -1
- data/lib/bundler/current_ruby.rb +47 -137
- data/lib/bundler/definition.rb +599 -230
- data/lib/bundler/dep_proxy.rb +15 -10
- data/lib/bundler/dependency.rb +54 -25
- data/lib/bundler/deployment.rb +12 -2
- data/lib/bundler/deprecate.rb +33 -4
- data/lib/bundler/dsl.rb +383 -99
- data/lib/bundler/endpoint_specification.rb +72 -7
- data/lib/bundler/env.rb +121 -41
- data/lib/bundler/environment_preserver.rb +59 -0
- data/lib/bundler/errors.rb +158 -0
- data/lib/bundler/feature_flag.rb +74 -0
- data/lib/bundler/fetcher.rb +171 -280
- data/lib/bundler/fetcher/base.rb +52 -0
- data/lib/bundler/fetcher/compact_index.rb +126 -0
- data/lib/bundler/fetcher/dependency.rb +82 -0
- data/lib/bundler/fetcher/downloader.rb +84 -0
- data/lib/bundler/fetcher/index.rb +52 -0
- data/lib/bundler/friendly_errors.rb +113 -58
- data/lib/bundler/gem_helper.rb +73 -46
- data/lib/bundler/gem_helpers.rb +85 -9
- data/lib/bundler/gem_remote_fetcher.rb +43 -0
- data/lib/bundler/gem_tasks.rb +6 -1
- data/lib/bundler/gem_version_promoter.rb +190 -0
- data/lib/bundler/gemdeps.rb +29 -0
- data/lib/bundler/graph.rb +32 -49
- data/lib/bundler/index.rb +79 -67
- data/lib/bundler/injector.rb +219 -30
- data/lib/bundler/inline.rb +74 -0
- data/lib/bundler/installer.rb +191 -206
- data/lib/bundler/installer/gem_installer.rb +85 -0
- data/lib/bundler/installer/parallel_installer.rb +233 -0
- data/lib/bundler/installer/standalone.rb +53 -0
- data/lib/bundler/lazy_specification.rb +53 -13
- data/lib/bundler/lockfile_generator.rb +95 -0
- data/lib/bundler/lockfile_parser.rb +157 -62
- data/lib/bundler/match_platform.rb +15 -4
- data/lib/bundler/mirror.rb +223 -0
- data/lib/bundler/plugin.rb +292 -0
- data/lib/bundler/plugin/api.rb +81 -0
- data/lib/bundler/plugin/api/source.rb +306 -0
- data/lib/bundler/plugin/dsl.rb +53 -0
- data/lib/bundler/plugin/events.rb +61 -0
- data/lib/bundler/plugin/index.rb +162 -0
- data/lib/bundler/plugin/installer.rb +96 -0
- data/lib/bundler/plugin/installer/git.rb +38 -0
- data/lib/bundler/plugin/installer/rubygems.rb +27 -0
- data/lib/bundler/plugin/source_list.rb +27 -0
- data/lib/bundler/process_lock.rb +24 -0
- data/lib/bundler/psyched_yaml.rb +17 -6
- data/lib/bundler/remote_specification.rb +68 -11
- data/lib/bundler/resolver.rb +263 -229
- data/lib/bundler/resolver/spec_group.rb +106 -0
- data/lib/bundler/retry.rb +25 -19
- data/lib/bundler/ruby_dsl.rb +9 -2
- data/lib/bundler/ruby_version.rb +101 -66
- data/lib/bundler/rubygems_ext.rb +77 -37
- data/lib/bundler/rubygems_gem_installer.rb +106 -0
- data/lib/bundler/rubygems_integration.rb +450 -163
- data/lib/bundler/runtime.rb +133 -103
- data/lib/bundler/settings.rb +344 -83
- data/lib/bundler/settings/validator.rb +102 -0
- data/lib/bundler/setup.rb +7 -3
- data/lib/bundler/shared_helpers.rb +284 -54
- data/lib/bundler/similarity_detector.rb +21 -21
- data/lib/bundler/source.rb +68 -15
- data/lib/bundler/source/gemspec.rb +18 -0
- data/lib/bundler/source/git.rb +90 -55
- data/lib/bundler/source/git/git_proxy.rb +135 -35
- data/lib/bundler/source/metadata.rb +62 -0
- data/lib/bundler/source/path.rb +84 -61
- data/lib/bundler/source/path/installer.rb +53 -17
- data/lib/bundler/source/rubygems.rb +282 -122
- data/lib/bundler/source/rubygems/remote.rb +69 -0
- data/lib/bundler/source_list.rb +107 -22
- data/lib/bundler/spec_set.rb +83 -45
- data/lib/bundler/ssl_certs/certificate_manager.rb +8 -7
- data/lib/bundler/ssl_certs/index.rubygems.org/GlobalSignRootCA.pem +21 -0
- data/lib/bundler/ssl_certs/{DigiCertHighAssuranceEVRootCA.pem → rubygems.global.ssl.fastly.net/DigiCertHighAssuranceEVRootCA.pem} +0 -0
- data/lib/bundler/ssl_certs/{AddTrustExternalCARoot-2048.pem → rubygems.org/AddTrustExternalCARoot.pem} +0 -0
- data/lib/bundler/stub_specification.rb +108 -0
- data/lib/bundler/templates/.document +1 -0
- data/lib/bundler/templates/Executable +19 -6
- data/lib/bundler/templates/Executable.bundler +105 -0
- data/lib/bundler/templates/Executable.standalone +6 -4
- data/lib/bundler/templates/Gemfile +4 -1
- data/lib/bundler/templates/gems.rb +8 -0
- data/lib/bundler/templates/newgem/CODE_OF_CONDUCT.md.tt +68 -7
- data/lib/bundler/templates/newgem/Gemfile.tt +4 -2
- data/lib/bundler/templates/newgem/LICENSE.txt.tt +1 -1
- data/lib/bundler/templates/newgem/README.md.tt +19 -11
- data/lib/bundler/templates/newgem/Rakefile.tt +10 -6
- data/lib/bundler/templates/newgem/bin/console.tt +1 -1
- data/lib/bundler/templates/newgem/bin/setup.tt +2 -1
- data/lib/bundler/templates/newgem/ext/newgem/newgem.c.tt +4 -4
- data/lib/bundler/templates/newgem/ext/newgem/newgem.h.tt +3 -3
- data/lib/bundler/templates/newgem/gitignore.tt +5 -1
- data/lib/bundler/templates/newgem/lib/newgem.rb.tt +7 -6
- data/lib/bundler/templates/newgem/lib/newgem/version.rb.tt +4 -4
- data/lib/bundler/templates/newgem/newgem.gemspec.tt +31 -15
- data/lib/bundler/templates/newgem/rspec.tt +1 -0
- data/lib/bundler/templates/newgem/spec/newgem_spec.rb.tt +3 -5
- data/lib/bundler/templates/newgem/spec/spec_helper.rb.tt +14 -2
- data/lib/bundler/templates/newgem/test/{test_newgem.rb.tt → newgem_test.rb.tt} +2 -2
- data/lib/bundler/templates/newgem/test/test_helper.rb.tt +4 -0
- data/lib/bundler/templates/newgem/travis.yml.tt +7 -0
- data/lib/bundler/ui.rb +5 -3
- data/lib/bundler/ui/rg_proxy.rb +5 -7
- data/lib/bundler/ui/shell.rb +69 -18
- data/lib/bundler/ui/silent.rb +26 -1
- data/lib/bundler/uri_credentials_filter.rb +37 -0
- data/lib/bundler/vendor/fileutils/lib/fileutils.rb +1638 -0
- data/lib/bundler/vendor/molinillo/lib/molinillo.rb +12 -0
- data/lib/bundler/vendor/molinillo/lib/molinillo/compatibility.rb +26 -0
- data/lib/bundler/vendor/molinillo/lib/molinillo/delegates/resolution_state.rb +57 -0
- data/lib/bundler/vendor/molinillo/lib/molinillo/delegates/specification_provider.rb +81 -0
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph.rb +223 -0
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/action.rb +36 -0
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_edge_no_circular.rb +66 -0
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_vertex.rb +62 -0
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/delete_edge.rb +63 -0
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb +61 -0
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/log.rb +126 -0
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/set_payload.rb +46 -0
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/tag.rb +36 -0
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/vertex.rb +136 -0
- data/lib/bundler/vendor/molinillo/lib/molinillo/errors.rb +143 -0
- data/lib/bundler/vendor/molinillo/lib/molinillo/gem_metadata.rb +6 -0
- data/lib/bundler/vendor/{Molinillo-0.2.1 → molinillo}/lib/molinillo/modules/specification_provider.rb +11 -0
- data/lib/bundler/vendor/{Molinillo-0.2.1 → molinillo}/lib/molinillo/modules/ui.rb +6 -2
- data/lib/bundler/vendor/molinillo/lib/molinillo/resolution.rb +837 -0
- data/lib/bundler/vendor/{Molinillo-0.2.1 → molinillo}/lib/molinillo/resolver.rb +6 -3
- data/lib/bundler/vendor/molinillo/lib/molinillo/state.rb +58 -0
- data/lib/bundler/vendor/{net → net-http-persistent/lib/net}/http/faster.rb +1 -0
- data/lib/bundler/vendor/{net → net-http-persistent/lib/net}/http/persistent.rb +27 -24
- data/lib/bundler/vendor/{net → net-http-persistent/lib/net}/http/persistent/ssl_reuse.rb +2 -1
- data/lib/bundler/vendor/{thor-0.19.1 → thor}/lib/thor.rb +47 -22
- data/lib/bundler/vendor/{thor-0.19.1 → thor}/lib/thor/actions.rb +31 -29
- data/lib/bundler/vendor/{thor-0.19.1 → thor}/lib/thor/actions/create_file.rb +3 -2
- data/lib/bundler/vendor/{thor-0.19.1 → thor}/lib/thor/actions/create_link.rb +3 -2
- data/lib/bundler/vendor/{thor-0.19.1 → thor}/lib/thor/actions/directory.rb +3 -3
- data/lib/bundler/vendor/{thor-0.19.1 → thor}/lib/thor/actions/empty_directory.rb +16 -8
- data/lib/bundler/vendor/{thor-0.19.1 → thor}/lib/thor/actions/file_manipulation.rb +66 -18
- data/lib/bundler/vendor/{thor-0.19.1 → thor}/lib/thor/actions/inject_into_file.rb +18 -16
- data/lib/bundler/vendor/{thor-0.19.1 → thor}/lib/thor/base.rb +67 -44
- data/lib/bundler/vendor/{thor-0.19.1 → thor}/lib/thor/command.rb +13 -11
- data/lib/bundler/vendor/{thor-0.19.1 → thor}/lib/thor/core_ext/hash_with_indifferent_access.rb +21 -1
- data/lib/bundler/vendor/thor/lib/thor/core_ext/io_binary_read.rb +12 -0
- data/lib/bundler/vendor/thor/lib/thor/core_ext/ordered_hash.rb +129 -0
- data/lib/bundler/vendor/{thor-0.19.1 → thor}/lib/thor/error.rb +3 -3
- data/lib/bundler/vendor/{thor-0.19.1 → thor}/lib/thor/group.rb +14 -14
- data/lib/bundler/vendor/{thor-0.19.1 → thor}/lib/thor/invocation.rb +4 -5
- data/lib/bundler/vendor/{thor-0.19.1 → thor}/lib/thor/line_editor.rb +2 -2
- data/lib/bundler/vendor/{thor-0.19.1 → thor}/lib/thor/line_editor/basic.rb +2 -0
- data/lib/bundler/vendor/{thor-0.19.1 → thor}/lib/thor/line_editor/readline.rb +0 -0
- data/lib/bundler/vendor/thor/lib/thor/parser.rb +4 -0
- data/lib/bundler/vendor/{thor-0.19.1 → thor}/lib/thor/parser/argument.rb +4 -7
- data/lib/bundler/vendor/{thor-0.19.1 → thor}/lib/thor/parser/arguments.rb +16 -16
- data/lib/bundler/vendor/{thor-0.19.1 → thor}/lib/thor/parser/option.rb +42 -21
- data/lib/bundler/vendor/{thor-0.19.1 → thor}/lib/thor/parser/options.rb +13 -10
- data/lib/bundler/vendor/{thor-0.19.1 → thor}/lib/thor/rake_compat.rb +1 -1
- data/lib/bundler/vendor/{thor-0.19.1 → thor}/lib/thor/runner.rb +35 -33
- data/lib/bundler/vendor/{thor-0.19.1 → thor}/lib/thor/shell.rb +4 -4
- data/lib/bundler/vendor/{thor-0.19.1 → thor}/lib/thor/shell/basic.rb +49 -33
- data/lib/bundler/vendor/{thor-0.19.1 → thor}/lib/thor/shell/color.rb +2 -2
- data/lib/bundler/vendor/{thor-0.19.1 → thor}/lib/thor/shell/html.rb +5 -5
- data/lib/bundler/vendor/{thor-0.19.1 → thor}/lib/thor/util.rb +8 -7
- data/lib/bundler/vendor/{thor-0.19.1 → thor}/lib/thor/version.rb +1 -1
- data/lib/bundler/vendored_fileutils.rb +9 -0
- data/lib/bundler/vendored_molinillo.rb +4 -5
- data/lib/bundler/vendored_persistent.rb +45 -4
- data/lib/bundler/vendored_thor.rb +8 -5
- data/lib/bundler/version.rb +23 -1
- data/lib/bundler/version_ranges.rb +76 -0
- data/lib/bundler/vlad.rb +8 -2
- data/lib/bundler/worker.rb +39 -6
- data/lib/bundler/yaml_serializer.rb +90 -0
- data/man/bundle-add.1 +58 -0
- data/man/bundle-add.1.txt +52 -0
- data/man/bundle-add.ronn +40 -0
- data/man/bundle-binstubs.1 +40 -0
- data/man/bundle-binstubs.1.txt +48 -0
- data/man/bundle-binstubs.ronn +43 -0
- data/man/bundle-check.1 +31 -0
- data/man/bundle-check.1.txt +33 -0
- data/man/bundle-check.ronn +26 -0
- data/man/bundle-clean.1 +24 -0
- data/man/bundle-clean.1.txt +26 -0
- data/man/bundle-clean.ronn +18 -0
- data/man/bundle-config.1 +497 -0
- data/man/bundle-config.1.txt +529 -0
- data/man/bundle-config.ronn +256 -31
- data/man/bundle-doctor.1 +44 -0
- data/man/bundle-doctor.1.txt +44 -0
- data/man/bundle-doctor.ronn +33 -0
- data/man/bundle-exec.1 +165 -0
- data/man/bundle-exec.1.txt +178 -0
- data/man/bundle-exec.ronn +19 -3
- data/man/bundle-gem.1 +80 -0
- data/man/bundle-gem.1.txt +91 -0
- data/man/bundle-gem.ronn +78 -0
- data/man/bundle-info.1 +20 -0
- data/man/bundle-info.1.txt +21 -0
- data/man/bundle-info.ronn +17 -0
- data/man/bundle-init.1 +25 -0
- data/man/bundle-init.1.txt +34 -0
- data/man/bundle-init.ronn +29 -0
- data/man/bundle-inject.1 +33 -0
- data/man/bundle-inject.1.txt +32 -0
- data/man/bundle-inject.ronn +22 -0
- data/man/bundle-install.1 +308 -0
- data/man/bundle-install.1.txt +396 -0
- data/man/bundle-install.ronn +64 -67
- data/man/bundle-list.1 +50 -0
- data/man/bundle-list.1.txt +43 -0
- data/man/bundle-list.ronn +33 -0
- data/man/bundle-lock.1 +84 -0
- data/man/bundle-lock.1.txt +93 -0
- data/man/bundle-lock.ronn +94 -0
- data/man/bundle-open.1 +32 -0
- data/man/bundle-open.1.txt +29 -0
- data/man/bundle-open.ronn +19 -0
- data/man/bundle-outdated.1 +155 -0
- data/man/bundle-outdated.1.txt +131 -0
- data/man/bundle-outdated.ronn +111 -0
- data/man/bundle-package.1 +55 -0
- data/man/bundle-package.1.txt +79 -0
- data/man/bundle-package.ronn +14 -8
- data/man/bundle-platform.1 +61 -0
- data/man/bundle-platform.1.txt +57 -0
- data/man/bundle-platform.ronn +1 -1
- data/man/bundle-pristine.1 +34 -0
- data/man/bundle-pristine.1.txt +44 -0
- data/man/bundle-pristine.ronn +34 -0
- data/man/bundle-remove.1 +31 -0
- data/man/bundle-remove.1.txt +34 -0
- data/man/bundle-remove.ronn +23 -0
- data/man/bundle-show.1 +23 -0
- data/man/bundle-show.1.txt +27 -0
- data/man/bundle-show.ronn +21 -0
- data/man/bundle-update.1 +394 -0
- data/man/bundle-update.1.txt +391 -0
- data/man/bundle-update.ronn +180 -18
- data/man/bundle-viz.1 +39 -0
- data/man/bundle-viz.1.txt +39 -0
- data/man/bundle-viz.ronn +30 -0
- data/man/bundle.1 +136 -0
- data/man/bundle.1.txt +116 -0
- data/man/bundle.ronn +46 -33
- data/man/gemfile.5 +689 -0
- data/man/gemfile.5.ronn +127 -79
- data/man/gemfile.5.txt +653 -0
- data/man/index.txt +25 -7
- metadata +242 -95
- data/.gitignore +0 -16
- data/.rspec +0 -3
- data/.travis.yml +0 -110
- data/CODE_OF_CONDUCT.md +0 -40
- data/CONTRIBUTING.md +0 -32
- data/DEVELOPMENT.md +0 -119
- data/ISSUES.md +0 -96
- data/Rakefile +0 -302
- data/UPGRADING.md +0 -103
- data/bin/bundle +0 -21
- data/bin/bundler +0 -21
- data/lib/bundler/anonymizable_uri.rb +0 -32
- data/lib/bundler/environment.rb +0 -42
- data/lib/bundler/gem_installer.rb +0 -9
- data/lib/bundler/gem_path_manipulation.rb +0 -8
- data/lib/bundler/ssl_certs/AddTrustExternalCARoot.pem +0 -32
- data/lib/bundler/ssl_certs/Class3PublicPrimaryCertificationAuthority.pem +0 -14
- data/lib/bundler/ssl_certs/EntrustnetSecureServerCertificationAuthority.pem +0 -28
- data/lib/bundler/ssl_certs/GeoTrustGlobalCA.pem +0 -20
- data/lib/bundler/templates/newgem/.travis.yml.tt +0 -3
- data/lib/bundler/templates/newgem/test/minitest_helper.rb.tt +0 -4
- data/lib/bundler/vendor/Molinillo-0.2.1/lib/molinillo.rb +0 -5
- data/lib/bundler/vendor/Molinillo-0.2.1/lib/molinillo/dependency_graph.rb +0 -266
- data/lib/bundler/vendor/Molinillo-0.2.1/lib/molinillo/errors.rb +0 -69
- data/lib/bundler/vendor/Molinillo-0.2.1/lib/molinillo/gem_metadata.rb +0 -3
- data/lib/bundler/vendor/Molinillo-0.2.1/lib/molinillo/resolution.rb +0 -412
- data/lib/bundler/vendor/Molinillo-0.2.1/lib/molinillo/state.rb +0 -43
- data/lib/bundler/vendor/thor-0.19.1/lib/thor/core_ext/io_binary_read.rb +0 -10
- data/lib/bundler/vendor/thor-0.19.1/lib/thor/core_ext/ordered_hash.rb +0 -98
- data/lib/bundler/vendor/thor-0.19.1/lib/thor/parser.rb +0 -4
data/lib/bundler/gem_helper.rb
CHANGED
@@ -1,5 +1,7 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "bundler/vendored_thor" unless defined?(Thor)
|
4
|
+
require "bundler"
|
3
5
|
|
4
6
|
module Bundler
|
5
7
|
class GemHelper
|
@@ -35,30 +37,35 @@ module Bundler
|
|
35
37
|
built_gem_path = nil
|
36
38
|
|
37
39
|
desc "Build #{name}-#{version}.gem into the pkg directory."
|
38
|
-
task
|
40
|
+
task "build" do
|
39
41
|
built_gem_path = build_gem
|
40
42
|
end
|
41
43
|
|
42
44
|
desc "Build and install #{name}-#{version}.gem into system gems."
|
43
|
-
task
|
45
|
+
task "install" => "build" do
|
44
46
|
install_gem(built_gem_path)
|
45
47
|
end
|
46
48
|
|
47
|
-
desc "
|
48
|
-
|
49
|
-
|
50
|
-
|
49
|
+
desc "Build and install #{name}-#{version}.gem into system gems without network access."
|
50
|
+
task "install:local" => "build" do
|
51
|
+
install_gem(built_gem_path, :local)
|
52
|
+
end
|
53
|
+
|
54
|
+
desc "Create tag #{version_tag} and build and push #{name}-#{version}.gem to #{gem_push_host}\n" \
|
55
|
+
"To prevent publishing in RubyGems use `gem_push=no rake release`"
|
56
|
+
task "release", [:remote] => ["build", "release:guard_clean",
|
57
|
+
"release:source_control_push", "release:rubygem_push"] do
|
51
58
|
end
|
52
59
|
|
53
|
-
task
|
60
|
+
task "release:guard_clean" do
|
54
61
|
guard_clean
|
55
62
|
end
|
56
63
|
|
57
|
-
task
|
58
|
-
tag_version { git_push } unless already_tagged?
|
64
|
+
task "release:source_control_push", [:remote] do |_, args|
|
65
|
+
tag_version { git_push(args[:remote]) } unless already_tagged?
|
59
66
|
end
|
60
67
|
|
61
|
-
task
|
68
|
+
task "release:rubygem_push" do
|
62
69
|
rubygem_push(built_gem_path) if gem_push?
|
63
70
|
end
|
64
71
|
|
@@ -67,57 +74,71 @@ module Bundler
|
|
67
74
|
|
68
75
|
def build_gem
|
69
76
|
file_name = nil
|
70
|
-
sh("gem build -V '#{spec_path}'")
|
77
|
+
sh("gem build -V '#{spec_path}'") do
|
71
78
|
file_name = File.basename(built_gem_path)
|
72
|
-
|
73
|
-
FileUtils.mv(built_gem_path,
|
79
|
+
SharedHelpers.filesystem_access(File.join(base, "pkg")) {|p| FileUtils.mkdir_p(p) }
|
80
|
+
FileUtils.mv(built_gem_path, "pkg")
|
74
81
|
Bundler.ui.confirm "#{name} #{version} built to pkg/#{file_name}."
|
75
|
-
|
76
|
-
File.join(base,
|
82
|
+
end
|
83
|
+
File.join(base, "pkg", file_name)
|
77
84
|
end
|
78
85
|
|
79
|
-
def install_gem(built_gem_path=nil)
|
86
|
+
def install_gem(built_gem_path = nil, local = false)
|
80
87
|
built_gem_path ||= build_gem
|
81
|
-
out, _ = sh_with_code("gem install '#{built_gem_path}' --local")
|
88
|
+
out, _ = sh_with_code("gem install '#{built_gem_path}'#{" --local" if local}")
|
82
89
|
raise "Couldn't install gem, run `gem install #{built_gem_path}' for more detailed output" unless out[/Successfully installed/]
|
83
90
|
Bundler.ui.confirm "#{name} (#{version}) installed."
|
84
91
|
end
|
85
92
|
|
86
|
-
|
93
|
+
protected
|
94
|
+
|
87
95
|
def rubygem_push(path)
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
96
|
+
gem_command = "gem push '#{path}'"
|
97
|
+
gem_command += " --key #{gem_key}" if gem_key
|
98
|
+
gem_command += " --host #{allowed_push_host}" if allowed_push_host
|
99
|
+
unless allowed_push_host || Bundler.user_home.join(".gem/credentials").file?
|
92
100
|
raise "Your rubygems.org credentials aren't set. Run `gem push` to set them."
|
93
101
|
end
|
102
|
+
sh(gem_command)
|
103
|
+
Bundler.ui.confirm "Pushed #{name} #{version} to #{gem_push_host}"
|
94
104
|
end
|
95
105
|
|
96
106
|
def built_gem_path
|
97
|
-
Dir[File.join(base, "#{name}-*.gem")].sort_by{|f| File.mtime(f)}.last
|
107
|
+
Dir[File.join(base, "#{name}-*.gem")].sort_by {|f| File.mtime(f) }.last
|
98
108
|
end
|
99
109
|
|
100
|
-
def git_push
|
101
|
-
perform_git_push
|
102
|
-
perform_git_push
|
110
|
+
def git_push(remote = "")
|
111
|
+
perform_git_push remote
|
112
|
+
perform_git_push "#{remote} --tags"
|
103
113
|
Bundler.ui.confirm "Pushed git commits and tags."
|
104
114
|
end
|
105
115
|
|
106
|
-
def
|
116
|
+
def allowed_push_host
|
117
|
+
@gemspec.metadata["allowed_push_host"] if @gemspec.respond_to?(:metadata)
|
118
|
+
end
|
119
|
+
|
120
|
+
def gem_push_host
|
121
|
+
env_rubygems_host = ENV["RUBYGEMS_HOST"]
|
122
|
+
env_rubygems_host = nil if
|
123
|
+
env_rubygems_host && env_rubygems_host.empty?
|
124
|
+
|
125
|
+
allowed_push_host || env_rubygems_host || "rubygems.org"
|
126
|
+
end
|
127
|
+
|
128
|
+
def perform_git_push(options = "")
|
107
129
|
cmd = "git push #{options}"
|
108
130
|
out, code = sh_with_code(cmd)
|
109
131
|
raise "Couldn't git push. `#{cmd}' failed with the following output:\n\n#{out}\n" unless code == 0
|
110
132
|
end
|
111
133
|
|
112
134
|
def already_tagged?
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
end
|
135
|
+
return false unless sh("git tag").split(/\n/).include?(version_tag)
|
136
|
+
Bundler.ui.confirm "Tag #{version_tag} has already been created."
|
137
|
+
true
|
117
138
|
end
|
118
139
|
|
119
140
|
def guard_clean
|
120
|
-
clean? && committed?
|
141
|
+
clean? && committed? || raise("There are files that need to be committed first.")
|
121
142
|
end
|
122
143
|
|
123
144
|
def clean?
|
@@ -129,10 +150,10 @@ module Bundler
|
|
129
150
|
end
|
130
151
|
|
131
152
|
def tag_version
|
132
|
-
sh "git tag -
|
153
|
+
sh "git tag -m \"Version #{version}\" #{version_tag}"
|
133
154
|
Bundler.ui.confirm "Tagged #{version_tag}."
|
134
155
|
yield if block_given?
|
135
|
-
rescue
|
156
|
+
rescue RuntimeError
|
136
157
|
Bundler.ui.error "Untagging #{version_tag} due to error."
|
137
158
|
sh_with_code "git tag -d #{version_tag}"
|
138
159
|
raise
|
@@ -152,24 +173,30 @@ module Bundler
|
|
152
173
|
|
153
174
|
def sh(cmd, &block)
|
154
175
|
out, code = sh_with_code(cmd, &block)
|
155
|
-
code
|
176
|
+
unless code.zero?
|
177
|
+
raise(out.empty? ? "Running `#{cmd}` failed. Run this command directly for more detailed output." : out)
|
178
|
+
end
|
179
|
+
out
|
156
180
|
end
|
157
181
|
|
158
182
|
def sh_with_code(cmd, &block)
|
159
|
-
cmd
|
160
|
-
outbuf =
|
183
|
+
cmd += " 2>&1"
|
184
|
+
outbuf = String.new
|
161
185
|
Bundler.ui.debug(cmd)
|
162
|
-
SharedHelpers.chdir(base)
|
186
|
+
SharedHelpers.chdir(base) do
|
163
187
|
outbuf = `#{cmd}`
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
188
|
+
status = $?.exitstatus
|
189
|
+
block.call(outbuf) if status.zero? && block
|
190
|
+
[outbuf, status]
|
191
|
+
end
|
192
|
+
end
|
193
|
+
|
194
|
+
def gem_key
|
195
|
+
Bundler.settings["gem.push_key"].to_s.downcase if Bundler.settings["gem.push_key"]
|
169
196
|
end
|
170
197
|
|
171
198
|
def gem_push?
|
172
|
-
|
199
|
+
!%w[n no nil false off 0].include?(ENV["gem_push"].to_s.downcase)
|
173
200
|
end
|
174
201
|
end
|
175
202
|
end
|
data/lib/bundler/gem_helpers.rb
CHANGED
@@ -1,15 +1,17 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Bundler
|
2
4
|
module GemHelpers
|
3
|
-
|
4
|
-
GENERIC_CACHE = {}
|
5
|
+
GENERIC_CACHE = {} # rubocop:disable MutableConstant
|
5
6
|
GENERICS = [
|
6
|
-
[Gem::Platform.new(
|
7
|
-
[Gem::Platform.new(
|
8
|
-
[Gem::Platform.new(
|
9
|
-
[Gem::Platform.new(
|
10
|
-
[Gem::Platform.new(
|
11
|
-
[Gem::Platform.new(
|
12
|
-
|
7
|
+
[Gem::Platform.new("java"), Gem::Platform.new("java")],
|
8
|
+
[Gem::Platform.new("mswin32"), Gem::Platform.new("mswin32")],
|
9
|
+
[Gem::Platform.new("mswin64"), Gem::Platform.new("mswin64")],
|
10
|
+
[Gem::Platform.new("universal-mingw32"), Gem::Platform.new("universal-mingw32")],
|
11
|
+
[Gem::Platform.new("x64-mingw32"), Gem::Platform.new("x64-mingw32")],
|
12
|
+
[Gem::Platform.new("x86_64-mingw32"), Gem::Platform.new("x64-mingw32")],
|
13
|
+
[Gem::Platform.new("mingw32"), Gem::Platform.new("x86-mingw32")]
|
14
|
+
].freeze
|
13
15
|
|
14
16
|
def generic(p)
|
15
17
|
return p if p == Gem::Platform::RUBY
|
@@ -21,5 +23,79 @@ module Bundler
|
|
21
23
|
found || Gem::Platform::RUBY
|
22
24
|
end
|
23
25
|
end
|
26
|
+
module_function :generic
|
27
|
+
|
28
|
+
def generic_local_platform
|
29
|
+
generic(Bundler.local_platform)
|
30
|
+
end
|
31
|
+
module_function :generic_local_platform
|
32
|
+
|
33
|
+
def platform_specificity_match(spec_platform, user_platform)
|
34
|
+
spec_platform = Gem::Platform.new(spec_platform)
|
35
|
+
return PlatformMatch::EXACT_MATCH if spec_platform == user_platform
|
36
|
+
return PlatformMatch::WORST_MATCH if spec_platform.nil? || spec_platform == Gem::Platform::RUBY || user_platform == Gem::Platform::RUBY
|
37
|
+
|
38
|
+
PlatformMatch.new(
|
39
|
+
PlatformMatch.os_match(spec_platform, user_platform),
|
40
|
+
PlatformMatch.cpu_match(spec_platform, user_platform),
|
41
|
+
PlatformMatch.platform_version_match(spec_platform, user_platform)
|
42
|
+
)
|
43
|
+
end
|
44
|
+
module_function :platform_specificity_match
|
45
|
+
|
46
|
+
def select_best_platform_match(specs, platform)
|
47
|
+
specs.select {|spec| spec.match_platform(platform) }.
|
48
|
+
min_by {|spec| platform_specificity_match(spec.platform, platform) }
|
49
|
+
end
|
50
|
+
module_function :select_best_platform_match
|
51
|
+
|
52
|
+
PlatformMatch = Struct.new(:os_match, :cpu_match, :platform_version_match)
|
53
|
+
class PlatformMatch
|
54
|
+
def <=>(other)
|
55
|
+
return nil unless other.is_a?(PlatformMatch)
|
56
|
+
|
57
|
+
m = os_match <=> other.os_match
|
58
|
+
return m unless m.zero?
|
59
|
+
|
60
|
+
m = cpu_match <=> other.cpu_match
|
61
|
+
return m unless m.zero?
|
62
|
+
|
63
|
+
m = platform_version_match <=> other.platform_version_match
|
64
|
+
m
|
65
|
+
end
|
66
|
+
|
67
|
+
EXACT_MATCH = new(-1, -1, -1).freeze
|
68
|
+
WORST_MATCH = new(1_000_000, 1_000_000, 1_000_000).freeze
|
69
|
+
|
70
|
+
def self.os_match(spec_platform, user_platform)
|
71
|
+
if spec_platform.os == user_platform.os
|
72
|
+
0
|
73
|
+
else
|
74
|
+
1
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
def self.cpu_match(spec_platform, user_platform)
|
79
|
+
if spec_platform.cpu == user_platform.cpu
|
80
|
+
0
|
81
|
+
elsif spec_platform.cpu == "arm" && user_platform.cpu.to_s.start_with?("arm")
|
82
|
+
0
|
83
|
+
elsif spec_platform.cpu.nil? || spec_platform.cpu == "universal"
|
84
|
+
1
|
85
|
+
else
|
86
|
+
2
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
def self.platform_version_match(spec_platform, user_platform)
|
91
|
+
if spec_platform.version == user_platform.version
|
92
|
+
0
|
93
|
+
elsif spec_platform.version.nil?
|
94
|
+
1
|
95
|
+
else
|
96
|
+
2
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
24
100
|
end
|
25
101
|
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "rubygems/remote_fetcher"
|
4
|
+
|
5
|
+
module Bundler
|
6
|
+
# Adds support for setting custom HTTP headers when fetching gems from the
|
7
|
+
# server.
|
8
|
+
#
|
9
|
+
# TODO: Get rid of this when and if gemstash only supports RubyGems versions
|
10
|
+
# that contain https://github.com/rubygems/rubygems/commit/3db265cc20b2f813.
|
11
|
+
class GemRemoteFetcher < Gem::RemoteFetcher
|
12
|
+
attr_accessor :headers
|
13
|
+
|
14
|
+
# Extracted from RubyGems 2.4.
|
15
|
+
def fetch_http(uri, last_modified = nil, head = false, depth = 0)
|
16
|
+
fetch_type = head ? Net::HTTP::Head : Net::HTTP::Get
|
17
|
+
# beginning of change
|
18
|
+
response = request uri, fetch_type, last_modified do |req|
|
19
|
+
headers.each {|k, v| req.add_field(k, v) } if headers
|
20
|
+
end
|
21
|
+
# end of change
|
22
|
+
|
23
|
+
case response
|
24
|
+
when Net::HTTPOK, Net::HTTPNotModified then
|
25
|
+
response.uri = uri if response.respond_to? :uri
|
26
|
+
head ? response : response.body
|
27
|
+
when Net::HTTPMovedPermanently, Net::HTTPFound, Net::HTTPSeeOther,
|
28
|
+
Net::HTTPTemporaryRedirect then
|
29
|
+
raise FetchError.new("too many redirects", uri) if depth > 10
|
30
|
+
|
31
|
+
location = URI.parse response["Location"]
|
32
|
+
|
33
|
+
if https?(uri) && !https?(location)
|
34
|
+
raise FetchError.new("redirecting to non-https resource: #{location}", uri)
|
35
|
+
end
|
36
|
+
|
37
|
+
fetch_http(location, last_modified, head, depth + 1)
|
38
|
+
else
|
39
|
+
raise FetchError.new("bad response #{response.message} #{response.code}", uri)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
data/lib/bundler/gem_tasks.rb
CHANGED
@@ -0,0 +1,190 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Bundler
|
4
|
+
# This class contains all of the logic for determining the next version of a
|
5
|
+
# Gem to update to based on the requested level (patch, minor, major).
|
6
|
+
# Primarily designed to work with Resolver which will provide it the list of
|
7
|
+
# available dependency versions as found in its index, before returning it to
|
8
|
+
# to the resolution engine to select the best version.
|
9
|
+
class GemVersionPromoter
|
10
|
+
DEBUG = ENV["DEBUG_RESOLVER"]
|
11
|
+
|
12
|
+
attr_reader :level, :locked_specs, :unlock_gems
|
13
|
+
|
14
|
+
# By default, strict is false, meaning every available version of a gem
|
15
|
+
# is returned from sort_versions. The order gives preference to the
|
16
|
+
# requested level (:patch, :minor, :major) but in complicated requirement
|
17
|
+
# cases some gems will by necessity by promoted past the requested level,
|
18
|
+
# or even reverted to older versions.
|
19
|
+
#
|
20
|
+
# If strict is set to true, the results from sort_versions will be
|
21
|
+
# truncated, eliminating any version outside the current level scope.
|
22
|
+
# This can lead to unexpected outcomes or even VersionConflict exceptions
|
23
|
+
# that report a version of a gem not existing for versions that indeed do
|
24
|
+
# existing in the referenced source.
|
25
|
+
attr_accessor :strict
|
26
|
+
|
27
|
+
attr_accessor :prerelease_specified
|
28
|
+
|
29
|
+
# Given a list of locked_specs and a list of gems to unlock creates a
|
30
|
+
# GemVersionPromoter instance.
|
31
|
+
#
|
32
|
+
# @param locked_specs [SpecSet] All current locked specs. Unlike Definition
|
33
|
+
# where this list is empty if all gems are being updated, this should
|
34
|
+
# always be populated for all gems so this class can properly function.
|
35
|
+
# @param unlock_gems [String] List of gem names being unlocked. If empty,
|
36
|
+
# all gems will be considered unlocked.
|
37
|
+
# @return [GemVersionPromoter]
|
38
|
+
def initialize(locked_specs = SpecSet.new([]), unlock_gems = [])
|
39
|
+
@level = :major
|
40
|
+
@strict = false
|
41
|
+
@locked_specs = locked_specs
|
42
|
+
@unlock_gems = unlock_gems
|
43
|
+
@sort_versions = {}
|
44
|
+
@prerelease_specified = {}
|
45
|
+
end
|
46
|
+
|
47
|
+
# @param value [Symbol] One of three Symbols: :major, :minor or :patch.
|
48
|
+
def level=(value)
|
49
|
+
v = case value
|
50
|
+
when String, Symbol
|
51
|
+
value.to_sym
|
52
|
+
end
|
53
|
+
|
54
|
+
raise ArgumentError, "Unexpected level #{v}. Must be :major, :minor or :patch" unless [:major, :minor, :patch].include?(v)
|
55
|
+
@level = v
|
56
|
+
end
|
57
|
+
|
58
|
+
# Given a Dependency and an Array of SpecGroups of available versions for a
|
59
|
+
# gem, this method will return the Array of SpecGroups sorted (and possibly
|
60
|
+
# truncated if strict is true) in an order to give preference to the current
|
61
|
+
# level (:major, :minor or :patch) when resolution is deciding what versions
|
62
|
+
# best resolve all dependencies in the bundle.
|
63
|
+
# @param dep [Dependency] The Dependency of the gem.
|
64
|
+
# @param spec_groups [SpecGroup] An array of SpecGroups for the same gem
|
65
|
+
# named in the @dep param.
|
66
|
+
# @return [SpecGroup] A new instance of the SpecGroup Array sorted and
|
67
|
+
# possibly filtered.
|
68
|
+
def sort_versions(dep, spec_groups)
|
69
|
+
before_result = "before sort_versions: #{debug_format_result(dep, spec_groups).inspect}" if DEBUG
|
70
|
+
|
71
|
+
@sort_versions[dep] ||= begin
|
72
|
+
gem_name = dep.name
|
73
|
+
|
74
|
+
# An Array per version returned, different entries for different platforms.
|
75
|
+
# We only need the version here so it's ok to hard code this to the first instance.
|
76
|
+
locked_spec = locked_specs[gem_name].first
|
77
|
+
|
78
|
+
if strict
|
79
|
+
filter_dep_specs(spec_groups, locked_spec)
|
80
|
+
else
|
81
|
+
sort_dep_specs(spec_groups, locked_spec)
|
82
|
+
end.tap do |specs|
|
83
|
+
if DEBUG
|
84
|
+
STDERR.puts before_result
|
85
|
+
STDERR.puts " after sort_versions: #{debug_format_result(dep, specs).inspect}"
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
# @return [bool] Convenience method for testing value of level variable.
|
92
|
+
def major?
|
93
|
+
level == :major
|
94
|
+
end
|
95
|
+
|
96
|
+
# @return [bool] Convenience method for testing value of level variable.
|
97
|
+
def minor?
|
98
|
+
level == :minor
|
99
|
+
end
|
100
|
+
|
101
|
+
private
|
102
|
+
|
103
|
+
def filter_dep_specs(spec_groups, locked_spec)
|
104
|
+
res = spec_groups.select do |spec_group|
|
105
|
+
if locked_spec && !major?
|
106
|
+
gsv = spec_group.version
|
107
|
+
lsv = locked_spec.version
|
108
|
+
|
109
|
+
must_match = minor? ? [0] : [0, 1]
|
110
|
+
|
111
|
+
matches = must_match.map {|idx| gsv.segments[idx] == lsv.segments[idx] }
|
112
|
+
(matches.uniq == [true]) ? (gsv >= lsv) : false
|
113
|
+
else
|
114
|
+
true
|
115
|
+
end
|
116
|
+
end
|
117
|
+
|
118
|
+
sort_dep_specs(res, locked_spec)
|
119
|
+
end
|
120
|
+
|
121
|
+
def sort_dep_specs(spec_groups, locked_spec)
|
122
|
+
return spec_groups unless locked_spec
|
123
|
+
@gem_name = locked_spec.name
|
124
|
+
@locked_version = locked_spec.version
|
125
|
+
|
126
|
+
result = spec_groups.sort do |a, b|
|
127
|
+
@a_ver = a.version
|
128
|
+
@b_ver = b.version
|
129
|
+
|
130
|
+
unless @prerelease_specified[@gem_name]
|
131
|
+
a_pre = @a_ver.prerelease?
|
132
|
+
b_pre = @b_ver.prerelease?
|
133
|
+
|
134
|
+
next -1 if a_pre && !b_pre
|
135
|
+
next 1 if b_pre && !a_pre
|
136
|
+
end
|
137
|
+
|
138
|
+
if major?
|
139
|
+
@a_ver <=> @b_ver
|
140
|
+
elsif either_version_older_than_locked
|
141
|
+
@a_ver <=> @b_ver
|
142
|
+
elsif segments_do_not_match(:major)
|
143
|
+
@b_ver <=> @a_ver
|
144
|
+
elsif !minor? && segments_do_not_match(:minor)
|
145
|
+
@b_ver <=> @a_ver
|
146
|
+
else
|
147
|
+
@a_ver <=> @b_ver
|
148
|
+
end
|
149
|
+
end
|
150
|
+
post_sort(result)
|
151
|
+
end
|
152
|
+
|
153
|
+
def either_version_older_than_locked
|
154
|
+
@a_ver < @locked_version || @b_ver < @locked_version
|
155
|
+
end
|
156
|
+
|
157
|
+
def segments_do_not_match(level)
|
158
|
+
index = [:major, :minor].index(level)
|
159
|
+
@a_ver.segments[index] != @b_ver.segments[index]
|
160
|
+
end
|
161
|
+
|
162
|
+
def unlocking_gem?
|
163
|
+
unlock_gems.empty? || unlock_gems.include?(@gem_name)
|
164
|
+
end
|
165
|
+
|
166
|
+
# Specific version moves can't always reliably be done during sorting
|
167
|
+
# as not all elements are compared against each other.
|
168
|
+
def post_sort(result)
|
169
|
+
# default :major behavior in Bundler does not do this
|
170
|
+
return result if major?
|
171
|
+
if unlocking_gem?
|
172
|
+
result
|
173
|
+
else
|
174
|
+
move_version_to_end(result, @locked_version)
|
175
|
+
end
|
176
|
+
end
|
177
|
+
|
178
|
+
def move_version_to_end(result, version)
|
179
|
+
move, keep = result.partition {|s| s.version.to_s == version.to_s }
|
180
|
+
keep.concat(move)
|
181
|
+
end
|
182
|
+
|
183
|
+
def debug_format_result(dep, spec_groups)
|
184
|
+
a = [dep.to_s,
|
185
|
+
spec_groups.map {|sg| [sg.version, sg.dependencies_for_activated_platforms.map {|dp| [dp.name, dp.requirement.to_s] }] }]
|
186
|
+
last_map = a.last.map {|sg_data| [sg_data.first.version, sg_data.last.map {|aa| aa.join(" ") }] }
|
187
|
+
[a.first, last_map, level, strict ? :strict : :not_strict]
|
188
|
+
end
|
189
|
+
end
|
190
|
+
end
|