bundler 2.2.29 → 2.5.16
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +1129 -4
- data/README.md +4 -8
- data/bundler.gemspec +11 -11
- data/exe/bundle +5 -26
- data/exe/bundler +1 -1
- data/lib/bundler/.document +1 -0
- data/lib/bundler/build_metadata.rb +4 -4
- data/lib/bundler/capistrano.rb +1 -1
- data/lib/bundler/checksum.rb +254 -0
- data/lib/bundler/ci_detector.rb +75 -0
- data/lib/bundler/cli/add.rb +4 -4
- data/lib/bundler/cli/binstubs.rb +10 -6
- data/lib/bundler/cli/cache.rb +1 -1
- data/lib/bundler/cli/check.rb +3 -3
- data/lib/bundler/cli/common.rb +13 -3
- data/lib/bundler/cli/config.rb +18 -8
- data/lib/bundler/cli/console.rb +5 -4
- data/lib/bundler/cli/doctor.rb +12 -5
- data/lib/bundler/cli/exec.rb +1 -1
- data/lib/bundler/cli/fund.rb +1 -1
- data/lib/bundler/cli/gem.rb +141 -48
- data/lib/bundler/cli/info.rb +27 -17
- data/lib/bundler/cli/init.rb +6 -2
- data/lib/bundler/cli/install.rb +22 -39
- data/lib/bundler/cli/issue.rb +5 -4
- data/lib/bundler/cli/lock.rb +36 -29
- data/lib/bundler/cli/open.rb +9 -9
- data/lib/bundler/cli/outdated.rb +19 -12
- data/lib/bundler/cli/platform.rb +8 -6
- data/lib/bundler/cli/plugin.rb +9 -15
- data/lib/bundler/cli/pristine.rb +38 -30
- data/lib/bundler/cli/show.rb +3 -3
- data/lib/bundler/cli/update.rb +12 -7
- data/lib/bundler/cli/viz.rb +1 -1
- data/lib/bundler/cli.rb +266 -285
- data/lib/bundler/compact_index_client/cache.rb +53 -67
- data/lib/bundler/compact_index_client/cache_file.rb +153 -0
- data/lib/bundler/compact_index_client/gem_parser.rb +7 -3
- data/lib/bundler/compact_index_client/parser.rb +84 -0
- data/lib/bundler/compact_index_client/updater.rb +83 -76
- data/lib/bundler/compact_index_client.rb +59 -87
- data/lib/bundler/constants.rb +9 -2
- data/lib/bundler/current_ruby.rb +12 -16
- data/lib/bundler/definition.rb +509 -319
- data/lib/bundler/dependency.rb +33 -71
- data/lib/bundler/digest.rb +71 -0
- data/lib/bundler/dsl.rb +88 -69
- data/lib/bundler/endpoint_specification.rb +32 -15
- data/lib/bundler/env.rb +5 -7
- data/lib/bundler/environment_preserver.rb +8 -22
- data/lib/bundler/errors.rb +101 -13
- data/lib/bundler/feature_flag.rb +0 -2
- data/lib/bundler/fetcher/base.rb +11 -11
- data/lib/bundler/fetcher/compact_index.rb +32 -52
- data/lib/bundler/fetcher/dependency.rb +3 -7
- data/lib/bundler/fetcher/downloader.rb +17 -16
- data/lib/bundler/fetcher/gem_remote_fetcher.rb +16 -0
- data/lib/bundler/fetcher/index.rb +2 -29
- data/lib/bundler/fetcher.rb +87 -79
- data/lib/bundler/force_platform.rb +18 -0
- data/lib/bundler/friendly_errors.rb +29 -40
- data/lib/bundler/gem_helper.rb +11 -23
- data/lib/bundler/gem_helpers.rb +30 -6
- data/lib/bundler/gem_version_promoter.rb +68 -109
- data/lib/bundler/graph.rb +9 -9
- data/lib/bundler/index.rb +71 -79
- data/lib/bundler/injector.rb +23 -11
- data/lib/bundler/inline.rb +11 -23
- data/lib/bundler/installer/gem_installer.rb +18 -11
- data/lib/bundler/installer/parallel_installer.rb +17 -65
- data/lib/bundler/installer/standalone.rb +56 -15
- data/lib/bundler/installer.rb +35 -61
- data/lib/bundler/lazy_specification.rb +92 -61
- data/lib/bundler/lockfile_generator.rb +12 -3
- data/lib/bundler/lockfile_parser.rb +137 -70
- data/lib/bundler/man/bundle-add.1 +19 -26
- data/lib/bundler/man/bundle-add.1.ronn +16 -4
- data/lib/bundler/man/bundle-binstubs.1 +4 -16
- data/lib/bundler/man/bundle-cache.1 +9 -24
- data/lib/bundler/man/bundle-cache.1.ronn +9 -2
- data/lib/bundler/man/bundle-check.1 +5 -12
- data/lib/bundler/man/bundle-check.1.ronn +3 -0
- data/lib/bundler/man/bundle-clean.1 +4 -11
- data/lib/bundler/man/bundle-clean.1.ronn +1 -1
- data/lib/bundler/man/bundle-config.1 +47 -224
- data/lib/bundler/man/bundle-config.1.ronn +40 -28
- data/lib/bundler/man/bundle-console.1 +35 -0
- data/lib/bundler/man/bundle-console.1.ronn +44 -0
- data/lib/bundler/man/bundle-doctor.1 +4 -18
- data/lib/bundler/man/bundle-exec.1 +16 -77
- data/lib/bundler/man/bundle-exec.1.ronn +8 -9
- data/lib/bundler/man/bundle-gem.1 +45 -72
- data/lib/bundler/man/bundle-gem.1.ronn +32 -5
- data/lib/bundler/man/bundle-help.1 +9 -0
- data/lib/bundler/man/bundle-help.1.ronn +12 -0
- data/lib/bundler/man/bundle-info.1 +5 -11
- data/lib/bundler/man/bundle-info.1.ronn +3 -3
- data/lib/bundler/man/bundle-init.1 +6 -11
- data/lib/bundler/man/bundle-init.1.ronn +2 -0
- data/lib/bundler/man/bundle-inject.1 +8 -18
- data/lib/bundler/man/bundle-inject.1.ronn +3 -1
- data/lib/bundler/man/bundle-install.1 +32 -155
- data/lib/bundler/man/bundle-install.1.ronn +11 -33
- data/lib/bundler/man/bundle-list.1 +4 -19
- data/lib/bundler/man/bundle-lock.1 +5 -29
- data/lib/bundler/man/bundle-open.1 +18 -18
- data/lib/bundler/man/bundle-open.1.ronn +9 -1
- data/lib/bundler/man/bundle-outdated.1 +17 -72
- data/lib/bundler/man/bundle-outdated.1.ronn +13 -18
- data/lib/bundler/man/bundle-platform.1 +16 -28
- data/lib/bundler/man/bundle-platform.1.ronn +14 -7
- data/lib/bundler/man/bundle-plugin.1 +58 -0
- data/lib/bundler/man/bundle-plugin.1.ronn +63 -0
- data/lib/bundler/man/bundle-pristine.1 +5 -16
- data/lib/bundler/man/bundle-remove.1 +4 -14
- data/lib/bundler/man/bundle-show.1 +3 -10
- data/lib/bundler/man/bundle-update.1 +19 -138
- data/lib/bundler/man/bundle-update.1.ronn +2 -1
- data/lib/bundler/man/bundle-version.1 +22 -0
- data/lib/bundler/man/bundle-version.1.ronn +24 -0
- data/lib/bundler/man/bundle-viz.1 +6 -15
- data/lib/bundler/man/bundle-viz.1.ronn +2 -0
- data/lib/bundler/man/bundle.1 +17 -51
- data/lib/bundler/man/bundle.1.ronn +12 -7
- data/lib/bundler/man/gemfile.5 +130 -346
- data/lib/bundler/man/gemfile.5.ronn +121 -86
- data/lib/bundler/man/index.txt +4 -0
- data/lib/bundler/match_metadata.rb +17 -0
- data/lib/bundler/match_platform.rb +1 -2
- data/lib/bundler/match_remote_metadata.rb +29 -0
- data/lib/bundler/mirror.rb +8 -10
- data/lib/bundler/plugin/api/source.rb +9 -13
- data/lib/bundler/plugin/index.rb +13 -5
- data/lib/bundler/plugin/installer/git.rb +0 -4
- data/lib/bundler/plugin/installer/path.rb +18 -0
- data/lib/bundler/plugin/installer/rubygems.rb +0 -8
- data/lib/bundler/plugin/installer.rb +42 -19
- data/lib/bundler/plugin/source_list.rb +4 -4
- data/lib/bundler/plugin.rb +16 -7
- data/lib/bundler/process_lock.rb +1 -1
- data/lib/bundler/remote_specification.rb +11 -5
- data/lib/bundler/resolver/base.rb +111 -0
- data/lib/bundler/resolver/candidate.rb +82 -0
- data/lib/bundler/resolver/incompatibility.rb +15 -0
- data/lib/bundler/resolver/package.rb +81 -0
- data/lib/bundler/resolver/root.rb +25 -0
- data/lib/bundler/resolver/spec_group.rb +53 -66
- data/lib/bundler/resolver.rb +419 -307
- data/lib/bundler/retry.rb +1 -1
- data/lib/bundler/ruby_dsl.rb +42 -7
- data/lib/bundler/ruby_version.rb +16 -22
- data/lib/bundler/rubygems_ext.rb +250 -64
- data/lib/bundler/rubygems_gem_installer.rb +90 -64
- data/lib/bundler/rubygems_integration.rb +81 -190
- data/lib/bundler/runtime.rb +8 -13
- data/lib/bundler/safe_marshal.rb +31 -0
- data/lib/bundler/self_manager.rb +206 -0
- data/lib/bundler/settings.rb +139 -57
- data/lib/bundler/setup.rb +13 -1
- data/lib/bundler/shared_helpers.rb +67 -36
- data/lib/bundler/source/git/git_proxy.rb +285 -82
- data/lib/bundler/source/git.rb +81 -41
- data/lib/bundler/source/metadata.rb +17 -16
- data/lib/bundler/source/path/installer.rb +1 -22
- data/lib/bundler/source/path.rb +13 -25
- data/lib/bundler/source/rubygems/remote.rb +1 -1
- data/lib/bundler/source/rubygems.rb +164 -234
- data/lib/bundler/source/rubygems_aggregate.rb +1 -1
- data/lib/bundler/source.rb +7 -6
- data/lib/bundler/source_list.rb +40 -32
- data/lib/bundler/source_map.rb +15 -2
- data/lib/bundler/spec_set.rb +156 -46
- data/lib/bundler/stub_specification.rb +18 -5
- data/lib/bundler/templates/Executable +3 -5
- data/lib/bundler/templates/Executable.bundler +7 -12
- data/lib/bundler/templates/Executable.standalone +4 -4
- data/lib/bundler/templates/Gemfile +0 -2
- data/lib/bundler/templates/newgem/CODE_OF_CONDUCT.md.tt +77 -29
- data/lib/bundler/templates/newgem/Cargo.toml.tt +7 -0
- data/lib/bundler/templates/newgem/Gemfile.tt +8 -2
- data/lib/bundler/templates/newgem/README.md.tt +7 -11
- data/lib/bundler/templates/newgem/Rakefile.tt +28 -4
- data/lib/bundler/templates/newgem/bin/console.tt +0 -4
- data/lib/bundler/templates/newgem/circleci/config.yml.tt +12 -0
- data/lib/bundler/templates/newgem/ext/newgem/Cargo.toml.tt +15 -0
- data/lib/bundler/templates/newgem/ext/newgem/extconf-c.rb.tt +10 -0
- data/lib/bundler/templates/newgem/ext/newgem/extconf-rust.rb.tt +6 -0
- data/lib/bundler/templates/newgem/ext/newgem/newgem.c.tt +1 -1
- data/lib/bundler/templates/newgem/ext/newgem/src/lib.rs.tt +12 -0
- data/lib/bundler/templates/newgem/github/workflows/main.yml.tt +13 -3
- data/lib/bundler/templates/newgem/gitignore.tt +3 -0
- data/lib/bundler/templates/newgem/gitlab-ci.yml.tt +13 -4
- data/lib/bundler/templates/newgem/newgem.gemspec.tt +25 -17
- data/lib/bundler/templates/newgem/rubocop.yml.tt +0 -5
- data/lib/bundler/templates/newgem/sig/newgem.rbs.tt +8 -0
- data/lib/bundler/templates/newgem/standard.yml.tt +3 -0
- data/lib/bundler/templates/newgem/test/minitest/{newgem_test.rb.tt → test_newgem.rb.tt} +1 -1
- data/lib/bundler/ui/rg_proxy.rb +1 -1
- data/lib/bundler/ui/shell.rb +38 -15
- data/lib/bundler/ui/silent.rb +21 -5
- data/lib/bundler/uri_credentials_filter.rb +2 -2
- data/lib/bundler/uri_normalizer.rb +23 -0
- data/lib/bundler/vendor/.document +1 -0
- data/lib/bundler/vendor/connection_pool/.document +1 -0
- data/lib/bundler/vendor/connection_pool/LICENSE +20 -0
- data/lib/bundler/vendor/connection_pool/lib/connection_pool/timed_stack.rb +19 -21
- data/lib/bundler/vendor/connection_pool/lib/connection_pool/version.rb +1 -1
- data/lib/bundler/vendor/connection_pool/lib/connection_pool/wrapper.rb +56 -0
- data/lib/bundler/vendor/connection_pool/lib/connection_pool.rb +92 -78
- data/lib/bundler/vendor/fileutils/.document +1 -0
- data/lib/bundler/vendor/fileutils/LICENSE.txt +22 -0
- data/lib/bundler/vendor/fileutils/lib/fileutils.rb +1340 -410
- data/lib/bundler/vendor/net-http-persistent/.document +1 -0
- data/lib/bundler/vendor/net-http-persistent/README.rdoc +82 -0
- data/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/connection.rb +4 -3
- data/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/pool.rb +23 -11
- data/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/timed_stack_multi.rb +1 -1
- data/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb +57 -57
- data/lib/bundler/vendor/pub_grub/.document +1 -0
- data/lib/bundler/vendor/pub_grub/LICENSE.txt +21 -0
- data/lib/bundler/vendor/pub_grub/lib/pub_grub/assignment.rb +20 -0
- data/lib/bundler/vendor/pub_grub/lib/pub_grub/basic_package_source.rb +189 -0
- data/lib/bundler/vendor/pub_grub/lib/pub_grub/failure_writer.rb +182 -0
- data/lib/bundler/vendor/pub_grub/lib/pub_grub/incompatibility.rb +150 -0
- data/lib/bundler/vendor/pub_grub/lib/pub_grub/package.rb +43 -0
- data/lib/bundler/vendor/pub_grub/lib/pub_grub/partial_solution.rb +121 -0
- data/lib/bundler/vendor/pub_grub/lib/pub_grub/rubygems.rb +45 -0
- data/lib/bundler/vendor/pub_grub/lib/pub_grub/solve_failure.rb +19 -0
- data/lib/bundler/vendor/pub_grub/lib/pub_grub/static_package_source.rb +61 -0
- data/lib/bundler/vendor/pub_grub/lib/pub_grub/term.rb +105 -0
- data/lib/bundler/vendor/pub_grub/lib/pub_grub/version.rb +3 -0
- data/lib/bundler/vendor/pub_grub/lib/pub_grub/version_constraint.rb +129 -0
- data/lib/bundler/vendor/pub_grub/lib/pub_grub/version_range.rb +411 -0
- data/lib/bundler/vendor/pub_grub/lib/pub_grub/version_solver.rb +248 -0
- data/lib/bundler/vendor/pub_grub/lib/pub_grub/version_union.rb +178 -0
- data/lib/bundler/vendor/pub_grub/lib/pub_grub.rb +31 -0
- data/lib/bundler/vendor/thor/.document +1 -0
- data/lib/bundler/vendor/thor/LICENSE.md +20 -0
- data/lib/bundler/vendor/thor/lib/thor/actions/create_file.rb +3 -2
- data/lib/bundler/vendor/thor/lib/thor/actions/directory.rb +1 -1
- data/lib/bundler/vendor/thor/lib/thor/actions/empty_directory.rb +1 -1
- data/lib/bundler/vendor/thor/lib/thor/actions/file_manipulation.rb +12 -14
- data/lib/bundler/vendor/thor/lib/thor/actions/inject_into_file.rb +16 -6
- data/lib/bundler/vendor/thor/lib/thor/actions.rb +21 -17
- data/lib/bundler/vendor/thor/lib/thor/base.rb +140 -14
- data/lib/bundler/vendor/thor/lib/thor/command.rb +13 -4
- data/lib/bundler/vendor/thor/lib/thor/core_ext/hash_with_indifferent_access.rb +10 -0
- data/lib/bundler/vendor/thor/lib/thor/error.rb +16 -20
- data/lib/bundler/vendor/thor/lib/thor/group.rb +1 -1
- data/lib/bundler/vendor/thor/lib/thor/invocation.rb +1 -1
- data/lib/bundler/vendor/thor/lib/thor/nested_context.rb +2 -2
- data/lib/bundler/vendor/thor/lib/thor/parser/argument.rb +20 -1
- data/lib/bundler/vendor/thor/lib/thor/parser/arguments.rb +33 -17
- data/lib/bundler/vendor/thor/lib/thor/parser/option.rb +27 -8
- data/lib/bundler/vendor/thor/lib/thor/parser/options.rb +63 -7
- data/lib/bundler/vendor/thor/lib/thor/rake_compat.rb +2 -2
- data/lib/bundler/vendor/thor/lib/thor/runner.rb +40 -30
- data/lib/bundler/vendor/thor/lib/thor/shell/basic.rb +48 -154
- data/lib/bundler/vendor/thor/lib/thor/shell/color.rb +1 -46
- data/lib/bundler/vendor/thor/lib/thor/shell/column_printer.rb +29 -0
- data/lib/bundler/vendor/thor/lib/thor/shell/html.rb +0 -45
- data/lib/bundler/vendor/thor/lib/thor/shell/table_printer.rb +134 -0
- data/lib/bundler/vendor/thor/lib/thor/shell/terminal.rb +42 -0
- data/lib/bundler/vendor/thor/lib/thor/shell/wrapped_printer.rb +38 -0
- data/lib/bundler/vendor/thor/lib/thor/shell.rb +2 -2
- data/lib/bundler/vendor/thor/lib/thor/util.rb +9 -8
- data/lib/bundler/vendor/thor/lib/thor/version.rb +1 -1
- data/lib/bundler/vendor/thor/lib/thor.rb +155 -8
- data/lib/bundler/vendor/tsort/.document +1 -0
- data/lib/bundler/vendor/tsort/LICENSE.txt +22 -0
- data/lib/bundler/vendor/tsort/lib/tsort.rb +455 -0
- data/lib/bundler/vendor/uri/.document +1 -0
- data/lib/bundler/vendor/uri/LICENSE.txt +22 -0
- data/lib/bundler/vendor/uri/lib/uri/common.rb +316 -207
- data/lib/bundler/vendor/uri/lib/uri/file.rb +7 -1
- data/lib/bundler/vendor/uri/lib/uri/ftp.rb +2 -2
- data/lib/bundler/vendor/uri/lib/uri/generic.rb +33 -13
- data/lib/bundler/vendor/uri/lib/uri/http.rb +40 -3
- data/lib/bundler/vendor/uri/lib/uri/https.rb +2 -2
- data/lib/bundler/vendor/uri/lib/uri/ldap.rb +2 -2
- data/lib/bundler/vendor/uri/lib/uri/ldaps.rb +2 -1
- data/lib/bundler/vendor/uri/lib/uri/mailto.rb +2 -3
- data/lib/bundler/vendor/uri/lib/uri/rfc2396_parser.rb +16 -23
- data/lib/bundler/vendor/uri/lib/uri/rfc3986_parser.rb +105 -47
- data/lib/bundler/vendor/uri/lib/uri/version.rb +1 -1
- data/lib/bundler/vendor/uri/lib/uri/ws.rb +83 -0
- data/lib/bundler/vendor/uri/lib/uri/wss.rb +23 -0
- data/lib/bundler/vendor/uri/lib/uri.rb +3 -3
- data/lib/bundler/vendored_net_http.rb +23 -0
- data/lib/bundler/vendored_persistent.rb +0 -36
- data/lib/bundler/{vendored_molinillo.rb → vendored_pub_grub.rb} +1 -1
- data/lib/bundler/vendored_timeout.rb +12 -0
- data/lib/bundler/{vendored_tmpdir.rb → vendored_tsort.rb} +1 -1
- data/lib/bundler/vendored_uri.rb +18 -1
- data/lib/bundler/version.rb +5 -1
- data/lib/bundler/vlad.rb +1 -1
- data/lib/bundler/worker.rb +7 -9
- data/lib/bundler/yaml_serializer.rb +21 -12
- data/lib/bundler.rb +114 -121
- metadata +87 -41
- data/lib/bundler/dep_proxy.rb +0 -55
- data/lib/bundler/gemdeps.rb +0 -29
- data/lib/bundler/psyched_yaml.rb +0 -22
- data/lib/bundler/templates/gems.rb +0 -8
- data/lib/bundler/templates/newgem/ext/newgem/extconf.rb.tt +0 -5
- data/lib/bundler/templates/newgem/travis.yml.tt +0 -6
- data/lib/bundler/vendor/connection_pool/lib/connection_pool/monotonic_time.rb +0 -66
- data/lib/bundler/vendor/molinillo/lib/molinillo/delegates/resolution_state.rb +0 -57
- data/lib/bundler/vendor/molinillo/lib/molinillo/delegates/specification_provider.rb +0 -88
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/action.rb +0 -36
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_edge_no_circular.rb +0 -66
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_vertex.rb +0 -62
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/delete_edge.rb +0 -63
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb +0 -61
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/log.rb +0 -126
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/set_payload.rb +0 -46
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/tag.rb +0 -36
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/vertex.rb +0 -164
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph.rb +0 -255
- data/lib/bundler/vendor/molinillo/lib/molinillo/errors.rb +0 -143
- data/lib/bundler/vendor/molinillo/lib/molinillo/gem_metadata.rb +0 -6
- data/lib/bundler/vendor/molinillo/lib/molinillo/modules/specification_provider.rb +0 -112
- data/lib/bundler/vendor/molinillo/lib/molinillo/modules/ui.rb +0 -67
- data/lib/bundler/vendor/molinillo/lib/molinillo/resolution.rb +0 -839
- data/lib/bundler/vendor/molinillo/lib/molinillo/resolver.rb +0 -46
- data/lib/bundler/vendor/molinillo/lib/molinillo/state.rb +0 -58
- data/lib/bundler/vendor/molinillo/lib/molinillo.rb +0 -11
- data/lib/bundler/vendor/tmpdir/lib/tmpdir.rb +0 -154
- data/lib/bundler/version_ranges.rb +0 -122
@@ -0,0 +1,178 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Bundler::PubGrub
|
4
|
+
class VersionUnion
|
5
|
+
attr_reader :ranges
|
6
|
+
|
7
|
+
def self.normalize_ranges(ranges)
|
8
|
+
ranges = ranges.flat_map do |range|
|
9
|
+
range.ranges
|
10
|
+
end
|
11
|
+
|
12
|
+
ranges.reject!(&:empty?)
|
13
|
+
|
14
|
+
return [] if ranges.empty?
|
15
|
+
|
16
|
+
mins, ranges = ranges.partition { |r| !r.min }
|
17
|
+
original_ranges = mins + ranges.sort_by { |r| [r.min, r.include_min ? 0 : 1] }
|
18
|
+
ranges = [original_ranges.shift]
|
19
|
+
original_ranges.each do |range|
|
20
|
+
if ranges.last.contiguous_to?(range)
|
21
|
+
ranges << ranges.pop.span(range)
|
22
|
+
else
|
23
|
+
ranges << range
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
ranges
|
28
|
+
end
|
29
|
+
|
30
|
+
def self.union(ranges, normalize: true)
|
31
|
+
ranges = normalize_ranges(ranges) if normalize
|
32
|
+
|
33
|
+
if ranges.size == 0
|
34
|
+
VersionRange.empty
|
35
|
+
elsif ranges.size == 1
|
36
|
+
ranges[0]
|
37
|
+
else
|
38
|
+
new(ranges)
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
def initialize(ranges)
|
43
|
+
raise ArgumentError unless ranges.all? { |r| r.instance_of?(VersionRange) }
|
44
|
+
@ranges = ranges
|
45
|
+
end
|
46
|
+
|
47
|
+
def hash
|
48
|
+
ranges.hash
|
49
|
+
end
|
50
|
+
|
51
|
+
def eql?(other)
|
52
|
+
ranges.eql?(other.ranges)
|
53
|
+
end
|
54
|
+
|
55
|
+
def include?(version)
|
56
|
+
!!ranges.bsearch {|r| r.compare_version(version) }
|
57
|
+
end
|
58
|
+
|
59
|
+
def select_versions(all_versions)
|
60
|
+
versions = []
|
61
|
+
ranges.inject(all_versions) do |acc, range|
|
62
|
+
_, matching, higher = range.partition_versions(acc)
|
63
|
+
versions.concat matching
|
64
|
+
higher
|
65
|
+
end
|
66
|
+
versions
|
67
|
+
end
|
68
|
+
|
69
|
+
def intersects?(other)
|
70
|
+
my_ranges = ranges.dup
|
71
|
+
other_ranges = other.ranges.dup
|
72
|
+
|
73
|
+
my_range = my_ranges.shift
|
74
|
+
other_range = other_ranges.shift
|
75
|
+
while my_range && other_range
|
76
|
+
if my_range.intersects?(other_range)
|
77
|
+
return true
|
78
|
+
end
|
79
|
+
|
80
|
+
if !my_range.max || other_range.empty? || (other_range.max && other_range.max < my_range.max)
|
81
|
+
other_range = other_ranges.shift
|
82
|
+
else
|
83
|
+
my_range = my_ranges.shift
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
87
|
+
alias_method :allows_any?, :intersects?
|
88
|
+
|
89
|
+
def allows_all?(other)
|
90
|
+
my_ranges = ranges.dup
|
91
|
+
|
92
|
+
my_range = my_ranges.shift
|
93
|
+
|
94
|
+
other.ranges.all? do |other_range|
|
95
|
+
while my_range
|
96
|
+
break if my_range.allows_all?(other_range)
|
97
|
+
my_range = my_ranges.shift
|
98
|
+
end
|
99
|
+
|
100
|
+
!!my_range
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
104
|
+
def empty?
|
105
|
+
false
|
106
|
+
end
|
107
|
+
|
108
|
+
def any?
|
109
|
+
false
|
110
|
+
end
|
111
|
+
|
112
|
+
def intersect(other)
|
113
|
+
my_ranges = ranges.dup
|
114
|
+
other_ranges = other.ranges.dup
|
115
|
+
new_ranges = []
|
116
|
+
|
117
|
+
my_range = my_ranges.shift
|
118
|
+
other_range = other_ranges.shift
|
119
|
+
while my_range && other_range
|
120
|
+
new_ranges << my_range.intersect(other_range)
|
121
|
+
|
122
|
+
if !my_range.max || other_range.empty? || (other_range.max && other_range.max < my_range.max)
|
123
|
+
other_range = other_ranges.shift
|
124
|
+
else
|
125
|
+
my_range = my_ranges.shift
|
126
|
+
end
|
127
|
+
end
|
128
|
+
new_ranges.reject!(&:empty?)
|
129
|
+
VersionUnion.union(new_ranges, normalize: false)
|
130
|
+
end
|
131
|
+
|
132
|
+
def upper_invert
|
133
|
+
ranges.last.upper_invert
|
134
|
+
end
|
135
|
+
|
136
|
+
def invert
|
137
|
+
ranges.map(&:invert).inject(:intersect)
|
138
|
+
end
|
139
|
+
|
140
|
+
def union(other)
|
141
|
+
VersionUnion.union([self, other])
|
142
|
+
end
|
143
|
+
|
144
|
+
def to_s
|
145
|
+
output = []
|
146
|
+
|
147
|
+
ranges = self.ranges.dup
|
148
|
+
while !ranges.empty?
|
149
|
+
ne = []
|
150
|
+
range = ranges.shift
|
151
|
+
while !ranges.empty? && ranges[0].min.to_s == range.max.to_s
|
152
|
+
ne << range.max
|
153
|
+
range = range.span(ranges.shift)
|
154
|
+
end
|
155
|
+
|
156
|
+
ne.map! {|x| "!= #{x}" }
|
157
|
+
if ne.empty?
|
158
|
+
output << range.to_s
|
159
|
+
elsif range.any?
|
160
|
+
output << ne.join(', ')
|
161
|
+
else
|
162
|
+
output << "#{range}, #{ne.join(', ')}"
|
163
|
+
end
|
164
|
+
end
|
165
|
+
|
166
|
+
output.join(" OR ")
|
167
|
+
end
|
168
|
+
|
169
|
+
def inspect
|
170
|
+
"#<#{self.class} #{to_s}>"
|
171
|
+
end
|
172
|
+
|
173
|
+
def ==(other)
|
174
|
+
self.class == other.class &&
|
175
|
+
self.ranges == other.ranges
|
176
|
+
end
|
177
|
+
end
|
178
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
require_relative "pub_grub/package"
|
2
|
+
require_relative "pub_grub/static_package_source"
|
3
|
+
require_relative "pub_grub/term"
|
4
|
+
require_relative "pub_grub/version_range"
|
5
|
+
require_relative "pub_grub/version_constraint"
|
6
|
+
require_relative "pub_grub/version_union"
|
7
|
+
require_relative "pub_grub/version_solver"
|
8
|
+
require_relative "pub_grub/incompatibility"
|
9
|
+
require_relative 'pub_grub/solve_failure'
|
10
|
+
require_relative 'pub_grub/failure_writer'
|
11
|
+
require_relative 'pub_grub/version'
|
12
|
+
|
13
|
+
module Bundler::PubGrub
|
14
|
+
class << self
|
15
|
+
attr_writer :logger
|
16
|
+
|
17
|
+
def logger
|
18
|
+
@logger || default_logger
|
19
|
+
end
|
20
|
+
|
21
|
+
private
|
22
|
+
|
23
|
+
def default_logger
|
24
|
+
require "logger"
|
25
|
+
|
26
|
+
logger = ::Logger.new(STDERR)
|
27
|
+
logger.level = $DEBUG ? ::Logger::DEBUG : ::Logger::WARN
|
28
|
+
@logger = logger
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
# Vendored files do not need to be documented
|
@@ -0,0 +1,20 @@
|
|
1
|
+
Copyright (c) 2008 Yehuda Katz, Eric Hodel, et al.
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
4
|
+
a copy of this software and associated documentation files (the
|
5
|
+
"Software"), to deal in the Software without restriction, including
|
6
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
7
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
8
|
+
permit persons to whom the Software is furnished to do so, subject to
|
9
|
+
the following conditions:
|
10
|
+
|
11
|
+
The above copyright notice and this permission notice shall be
|
12
|
+
included in all copies or substantial portions of the Software.
|
13
|
+
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
17
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
@@ -43,7 +43,8 @@ class Bundler::Thor
|
|
43
43
|
# Boolean:: true if it is identical, false otherwise.
|
44
44
|
#
|
45
45
|
def identical?
|
46
|
-
|
46
|
+
# binread uses ASCII-8BIT, so to avoid false negatives, the string must use the same
|
47
|
+
exists? && File.binread(destination) == String.new(render).force_encoding("ASCII-8BIT")
|
47
48
|
end
|
48
49
|
|
49
50
|
# Holds the content to be added to the file.
|
@@ -60,7 +61,7 @@ class Bundler::Thor
|
|
60
61
|
invoke_with_conflict_check do
|
61
62
|
require "fileutils"
|
62
63
|
FileUtils.mkdir_p(File.dirname(destination))
|
63
|
-
File.open(destination, "wb") { |f| f.write render }
|
64
|
+
File.open(destination, "wb", config[:perm]) { |f| f.write render }
|
64
65
|
end
|
65
66
|
given_destination
|
66
67
|
end
|
@@ -58,7 +58,7 @@ class Bundler::Thor
|
|
58
58
|
def initialize(base, source, destination = nil, config = {}, &block)
|
59
59
|
@source = File.expand_path(Dir[Util.escape_globs(base.find_in_source_paths(source.to_s))].first)
|
60
60
|
@block = block
|
61
|
-
super(base, destination, {:
|
61
|
+
super(base, destination, {recursive: true}.merge(config))
|
62
62
|
end
|
63
63
|
|
64
64
|
def invoke!
|
@@ -66,12 +66,15 @@ class Bundler::Thor
|
|
66
66
|
# ==== Parameters
|
67
67
|
# source<String>:: the address of the given content.
|
68
68
|
# destination<String>:: the relative path to the destination root.
|
69
|
-
# config<Hash>:: give :verbose => false to not log the status
|
69
|
+
# config<Hash>:: give :verbose => false to not log the status, and
|
70
|
+
# :http_headers => <Hash> to add headers to an http request.
|
70
71
|
#
|
71
72
|
# ==== Examples
|
72
73
|
#
|
73
74
|
# get "http://gist.github.com/103208", "doc/README"
|
74
75
|
#
|
76
|
+
# get "http://gist.github.com/103208", "doc/README", :http_headers => {"Content-Type" => "application/json"}
|
77
|
+
#
|
75
78
|
# get "http://gist.github.com/103208" do |content|
|
76
79
|
# content.split("\n").first
|
77
80
|
# end
|
@@ -82,10 +85,10 @@ class Bundler::Thor
|
|
82
85
|
|
83
86
|
render = if source =~ %r{^https?\://}
|
84
87
|
require "open-uri"
|
85
|
-
URI.send(:open, source) { |input| input.binmode.read }
|
88
|
+
URI.send(:open, source, config.fetch(:http_headers, {})) { |input| input.binmode.read }
|
86
89
|
else
|
87
90
|
source = File.expand_path(find_in_source_paths(source.to_s))
|
88
|
-
open(source) { |input| input.binmode.read }
|
91
|
+
File.open(source) { |input| input.binmode.read }
|
89
92
|
end
|
90
93
|
|
91
94
|
destination ||= if block_given?
|
@@ -120,12 +123,7 @@ class Bundler::Thor
|
|
120
123
|
context = config.delete(:context) || instance_eval("binding")
|
121
124
|
|
122
125
|
create_file destination, nil, config do
|
123
|
-
|
124
|
-
capturable_erb = if match && match[1] >= "2.2.0" # Ruby 2.6+
|
125
|
-
CapturableERB.new(::File.binread(source), :trim_mode => "-", :eoutvar => "@output_buffer")
|
126
|
-
else
|
127
|
-
CapturableERB.new(::File.binread(source), nil, "-", "@output_buffer")
|
128
|
-
end
|
126
|
+
capturable_erb = CapturableERB.new(::File.binread(source), trim_mode: "-", eoutvar: "@output_buffer")
|
129
127
|
content = capturable_erb.tap do |erb|
|
130
128
|
erb.filename = source
|
131
129
|
end.result(context)
|
@@ -210,9 +208,9 @@ class Bundler::Thor
|
|
210
208
|
#
|
211
209
|
# ==== Examples
|
212
210
|
#
|
213
|
-
# inject_into_class "app/controllers/application_controller.rb", ApplicationController, " filter_parameter :password\n"
|
211
|
+
# inject_into_class "app/controllers/application_controller.rb", "ApplicationController", " filter_parameter :password\n"
|
214
212
|
#
|
215
|
-
# inject_into_class "app/controllers/application_controller.rb", ApplicationController do
|
213
|
+
# inject_into_class "app/controllers/application_controller.rb", "ApplicationController" do
|
216
214
|
# " filter_parameter :password\n"
|
217
215
|
# end
|
218
216
|
#
|
@@ -233,9 +231,9 @@ class Bundler::Thor
|
|
233
231
|
#
|
234
232
|
# ==== Examples
|
235
233
|
#
|
236
|
-
# inject_into_module "app/helpers/application_helper.rb", ApplicationHelper, " def help; 'help'; end\n"
|
234
|
+
# inject_into_module "app/helpers/application_helper.rb", "ApplicationHelper", " def help; 'help'; end\n"
|
237
235
|
#
|
238
|
-
# inject_into_module "app/helpers/application_helper.rb", ApplicationHelper do
|
236
|
+
# inject_into_module "app/helpers/application_helper.rb", "ApplicationHelper" do
|
239
237
|
# " def help; 'help'; end\n"
|
240
238
|
# end
|
241
239
|
#
|
@@ -331,7 +329,7 @@ class Bundler::Thor
|
|
331
329
|
path = File.expand_path(path, destination_root)
|
332
330
|
|
333
331
|
say_status :remove, relative_to_original_destination_root(path), config.fetch(:verbose, true)
|
334
|
-
if !options[:pretend] && File.exist?(path)
|
332
|
+
if !options[:pretend] && (File.exist?(path) || File.symlink?(path))
|
335
333
|
require "fileutils"
|
336
334
|
::FileUtils.rm_rf(path)
|
337
335
|
end
|
@@ -21,7 +21,7 @@ class Bundler::Thor
|
|
21
21
|
# gems.split(" ").map{ |gem| " config.gem :#{gem}" }.join("\n")
|
22
22
|
# end
|
23
23
|
#
|
24
|
-
WARNINGS = {
|
24
|
+
WARNINGS = {unchanged_no_flag: "File unchanged! Either the supplied flag value not found or the content has already been inserted!"}
|
25
25
|
|
26
26
|
def insert_into_file(destination, *args, &block)
|
27
27
|
data = block_given? ? block : args.shift
|
@@ -37,7 +37,7 @@ class Bundler::Thor
|
|
37
37
|
attr_reader :replacement, :flag, :behavior
|
38
38
|
|
39
39
|
def initialize(base, destination, data, config)
|
40
|
-
super(base, destination, {:
|
40
|
+
super(base, destination, {verbose: true}.merge(config))
|
41
41
|
|
42
42
|
@behavior, @flag = if @config.key?(:after)
|
43
43
|
[:after, @config.delete(:after)]
|
@@ -59,6 +59,8 @@ class Bundler::Thor
|
|
59
59
|
if exists?
|
60
60
|
if replace!(/#{flag}/, content, config[:force])
|
61
61
|
say_status(:invoke)
|
62
|
+
elsif replacement_present?
|
63
|
+
say_status(:unchanged, color: :blue)
|
62
64
|
else
|
63
65
|
say_status(:unchanged, warning: WARNINGS[:unchanged_no_flag], color: :red)
|
64
66
|
end
|
@@ -96,6 +98,8 @@ class Bundler::Thor
|
|
96
98
|
end
|
97
99
|
elsif warning
|
98
100
|
warning
|
101
|
+
elsif behavior == :unchanged
|
102
|
+
:unchanged
|
99
103
|
else
|
100
104
|
:subtract
|
101
105
|
end
|
@@ -103,15 +107,21 @@ class Bundler::Thor
|
|
103
107
|
super(status, (color || config[:verbose]))
|
104
108
|
end
|
105
109
|
|
110
|
+
def content
|
111
|
+
@content ||= File.read(destination)
|
112
|
+
end
|
113
|
+
|
114
|
+
def replacement_present?
|
115
|
+
content.include?(replacement)
|
116
|
+
end
|
117
|
+
|
106
118
|
# Adds the content to the file.
|
107
119
|
#
|
108
120
|
def replace!(regexp, string, force)
|
109
|
-
|
110
|
-
content = File.read(destination)
|
111
|
-
if force || !content.include?(replacement)
|
121
|
+
if force || !replacement_present?
|
112
122
|
success = content.gsub!(regexp, string)
|
113
123
|
|
114
|
-
File.open(destination, "wb") { |file| file.write(content) }
|
124
|
+
File.open(destination, "wb") { |file| file.write(content) } unless pretend?
|
115
125
|
success
|
116
126
|
end
|
117
127
|
end
|
@@ -46,17 +46,17 @@ class Bundler::Thor
|
|
46
46
|
# Add runtime options that help actions execution.
|
47
47
|
#
|
48
48
|
def add_runtime_options!
|
49
|
-
class_option :force, :
|
50
|
-
:
|
49
|
+
class_option :force, type: :boolean, aliases: "-f", group: :runtime,
|
50
|
+
desc: "Overwrite files that already exist"
|
51
51
|
|
52
|
-
class_option :pretend, :
|
53
|
-
:
|
52
|
+
class_option :pretend, type: :boolean, aliases: "-p", group: :runtime,
|
53
|
+
desc: "Run but do not make any changes"
|
54
54
|
|
55
|
-
class_option :quiet, :
|
56
|
-
:
|
55
|
+
class_option :quiet, type: :boolean, aliases: "-q", group: :runtime,
|
56
|
+
desc: "Suppress status output"
|
57
57
|
|
58
|
-
class_option :skip, :
|
59
|
-
:
|
58
|
+
class_option :skip, type: :boolean, aliases: "-s", group: :runtime,
|
59
|
+
desc: "Skip files that already exist"
|
60
60
|
end
|
61
61
|
end
|
62
62
|
|
@@ -113,9 +113,9 @@ class Bundler::Thor
|
|
113
113
|
#
|
114
114
|
def relative_to_original_destination_root(path, remove_dot = true)
|
115
115
|
root = @destination_stack[0]
|
116
|
-
if path.start_with?(root) && [File::SEPARATOR, File::ALT_SEPARATOR, nil,
|
116
|
+
if path.start_with?(root) && [File::SEPARATOR, File::ALT_SEPARATOR, nil, ""].include?(path[root.size..root.size])
|
117
117
|
path = path.dup
|
118
|
-
path[0...root.size] =
|
118
|
+
path[0...root.size] = "."
|
119
119
|
remove_dot ? (path[2..-1] || "") : path
|
120
120
|
else
|
121
121
|
path
|
@@ -161,6 +161,8 @@ class Bundler::Thor
|
|
161
161
|
# to the block you provide. The path is set back to the previous path when
|
162
162
|
# the method exits.
|
163
163
|
#
|
164
|
+
# Returns the value yielded by the block.
|
165
|
+
#
|
164
166
|
# ==== Parameters
|
165
167
|
# dir<String>:: the directory to move to.
|
166
168
|
# config<Hash>:: give :verbose => true to log and use padding.
|
@@ -173,22 +175,24 @@ class Bundler::Thor
|
|
173
175
|
shell.padding += 1 if verbose
|
174
176
|
@destination_stack.push File.expand_path(dir, destination_root)
|
175
177
|
|
176
|
-
# If the directory
|
178
|
+
# If the directory doesn't exist and we're not pretending
|
177
179
|
if !File.exist?(destination_root) && !pretend
|
178
180
|
require "fileutils"
|
179
181
|
FileUtils.mkdir_p(destination_root)
|
180
182
|
end
|
181
183
|
|
184
|
+
result = nil
|
182
185
|
if pretend
|
183
186
|
# In pretend mode, just yield down to the block
|
184
|
-
block.arity == 1 ? yield(destination_root) : yield
|
187
|
+
result = block.arity == 1 ? yield(destination_root) : yield
|
185
188
|
else
|
186
189
|
require "fileutils"
|
187
|
-
FileUtils.cd(destination_root) { block.arity == 1 ? yield(destination_root) : yield }
|
190
|
+
FileUtils.cd(destination_root) { result = block.arity == 1 ? yield(destination_root) : yield }
|
188
191
|
end
|
189
192
|
|
190
193
|
@destination_stack.pop
|
191
194
|
shell.padding -= 1 if verbose
|
195
|
+
result
|
192
196
|
end
|
193
197
|
|
194
198
|
# Goes to the root and execute the given block.
|
@@ -221,7 +225,7 @@ class Bundler::Thor
|
|
221
225
|
require "open-uri"
|
222
226
|
URI.open(path, "Accept" => "application/x-thor-template", &:read)
|
223
227
|
else
|
224
|
-
open(path, &:read)
|
228
|
+
File.open(path, &:read)
|
225
229
|
end
|
226
230
|
|
227
231
|
instance_eval(contents, path)
|
@@ -280,7 +284,7 @@ class Bundler::Thor
|
|
280
284
|
#
|
281
285
|
def run_ruby_script(command, config = {})
|
282
286
|
return unless behavior == :invoke
|
283
|
-
run command, config.merge(:
|
287
|
+
run command, config.merge(with: Bundler::Thor::Util.ruby_command)
|
284
288
|
end
|
285
289
|
|
286
290
|
# Run a thor command. A hash of options can be given and it's converted to
|
@@ -311,7 +315,7 @@ class Bundler::Thor
|
|
311
315
|
args.push Bundler::Thor::Options.to_switches(config)
|
312
316
|
command = args.join(" ").strip
|
313
317
|
|
314
|
-
run command, :
|
318
|
+
run command, with: :thor, verbose: verbose, pretend: pretend, capture: capture
|
315
319
|
end
|
316
320
|
|
317
321
|
protected
|
@@ -319,7 +323,7 @@ class Bundler::Thor
|
|
319
323
|
# Allow current root to be shared between invocations.
|
320
324
|
#
|
321
325
|
def _shared_configuration #:nodoc:
|
322
|
-
super.merge!(:
|
326
|
+
super.merge!(destination_root: destination_root)
|
323
327
|
end
|
324
328
|
|
325
329
|
def _cleanup_options_and_set(options, key) #:nodoc:
|