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
@@ -76,51 +76,6 @@ class Bundler::Thor
|
|
76
76
|
def can_display_colors?
|
77
77
|
true
|
78
78
|
end
|
79
|
-
|
80
|
-
# Overwrite show_diff to show diff with colors if Diff::LCS is
|
81
|
-
# available.
|
82
|
-
#
|
83
|
-
def show_diff(destination, content) #:nodoc:
|
84
|
-
if diff_lcs_loaded? && ENV["THOR_DIFF"].nil? && ENV["RAILS_DIFF"].nil?
|
85
|
-
actual = File.binread(destination).to_s.split("\n")
|
86
|
-
content = content.to_s.split("\n")
|
87
|
-
|
88
|
-
Diff::LCS.sdiff(actual, content).each do |diff|
|
89
|
-
output_diff_line(diff)
|
90
|
-
end
|
91
|
-
else
|
92
|
-
super
|
93
|
-
end
|
94
|
-
end
|
95
|
-
|
96
|
-
def output_diff_line(diff) #:nodoc:
|
97
|
-
case diff.action
|
98
|
-
when "-"
|
99
|
-
say "- #{diff.old_element.chomp}", :red, true
|
100
|
-
when "+"
|
101
|
-
say "+ #{diff.new_element.chomp}", :green, true
|
102
|
-
when "!"
|
103
|
-
say "- #{diff.old_element.chomp}", :red, true
|
104
|
-
say "+ #{diff.new_element.chomp}", :green, true
|
105
|
-
else
|
106
|
-
say " #{diff.old_element.chomp}", nil, true
|
107
|
-
end
|
108
|
-
end
|
109
|
-
|
110
|
-
# Check if Diff::LCS is loaded. If it is, use it to create pretty output
|
111
|
-
# for diff.
|
112
|
-
#
|
113
|
-
def diff_lcs_loaded? #:nodoc:
|
114
|
-
return true if defined?(Diff::LCS)
|
115
|
-
return @diff_lcs_loaded unless @diff_lcs_loaded.nil?
|
116
|
-
|
117
|
-
@diff_lcs_loaded = begin
|
118
|
-
require "diff/lcs"
|
119
|
-
true
|
120
|
-
rescue LoadError
|
121
|
-
false
|
122
|
-
end
|
123
|
-
end
|
124
79
|
end
|
125
80
|
end
|
126
81
|
end
|
@@ -0,0 +1,134 @@
|
|
1
|
+
require_relative "column_printer"
|
2
|
+
require_relative "terminal"
|
3
|
+
|
4
|
+
class Bundler::Thor
|
5
|
+
module Shell
|
6
|
+
class TablePrinter < ColumnPrinter
|
7
|
+
BORDER_SEPARATOR = :separator
|
8
|
+
|
9
|
+
def initialize(stdout, options = {})
|
10
|
+
super
|
11
|
+
@formats = []
|
12
|
+
@maximas = []
|
13
|
+
@colwidth = options[:colwidth]
|
14
|
+
@truncate = options[:truncate] == true ? Terminal.terminal_width : options[:truncate]
|
15
|
+
@padding = 1
|
16
|
+
end
|
17
|
+
|
18
|
+
def print(array)
|
19
|
+
return if array.empty?
|
20
|
+
|
21
|
+
prepare(array)
|
22
|
+
|
23
|
+
print_border_separator if options[:borders]
|
24
|
+
|
25
|
+
array.each do |row|
|
26
|
+
if options[:borders] && row == BORDER_SEPARATOR
|
27
|
+
print_border_separator
|
28
|
+
next
|
29
|
+
end
|
30
|
+
|
31
|
+
sentence = "".dup
|
32
|
+
|
33
|
+
row.each_with_index do |column, index|
|
34
|
+
sentence << format_cell(column, row.size, index)
|
35
|
+
end
|
36
|
+
|
37
|
+
sentence = truncate(sentence)
|
38
|
+
sentence << "|" if options[:borders]
|
39
|
+
stdout.puts indentation + sentence
|
40
|
+
|
41
|
+
end
|
42
|
+
print_border_separator if options[:borders]
|
43
|
+
end
|
44
|
+
|
45
|
+
private
|
46
|
+
|
47
|
+
def prepare(array)
|
48
|
+
array = array.reject{|row| row == BORDER_SEPARATOR }
|
49
|
+
|
50
|
+
@formats << "%-#{@colwidth + 2}s".dup if @colwidth
|
51
|
+
start = @colwidth ? 1 : 0
|
52
|
+
|
53
|
+
colcount = array.max { |a, b| a.size <=> b.size }.size
|
54
|
+
|
55
|
+
start.upto(colcount - 1) do |index|
|
56
|
+
maxima = array.map { |row| row[index] ? row[index].to_s.size : 0 }.max
|
57
|
+
|
58
|
+
@maximas << maxima
|
59
|
+
@formats << if options[:borders]
|
60
|
+
"%-#{maxima}s".dup
|
61
|
+
elsif index == colcount - 1
|
62
|
+
# Don't output 2 trailing spaces when printing the last column
|
63
|
+
"%-s".dup
|
64
|
+
else
|
65
|
+
"%-#{maxima + 2}s".dup
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
@formats << "%s"
|
70
|
+
end
|
71
|
+
|
72
|
+
def format_cell(column, row_size, index)
|
73
|
+
maxima = @maximas[index]
|
74
|
+
|
75
|
+
f = if column.is_a?(Numeric)
|
76
|
+
if options[:borders]
|
77
|
+
# With borders we handle padding separately
|
78
|
+
"%#{maxima}s"
|
79
|
+
elsif index == row_size - 1
|
80
|
+
# Don't output 2 trailing spaces when printing the last column
|
81
|
+
"%#{maxima}s"
|
82
|
+
else
|
83
|
+
"%#{maxima}s "
|
84
|
+
end
|
85
|
+
else
|
86
|
+
@formats[index]
|
87
|
+
end
|
88
|
+
|
89
|
+
cell = "".dup
|
90
|
+
cell << "|" + " " * @padding if options[:borders]
|
91
|
+
cell << f % column.to_s
|
92
|
+
cell << " " * @padding if options[:borders]
|
93
|
+
cell
|
94
|
+
end
|
95
|
+
|
96
|
+
def print_border_separator
|
97
|
+
separator = @maximas.map do |maxima|
|
98
|
+
"+" + "-" * (maxima + 2 * @padding)
|
99
|
+
end
|
100
|
+
stdout.puts indentation + separator.join + "+"
|
101
|
+
end
|
102
|
+
|
103
|
+
def truncate(string)
|
104
|
+
return string unless @truncate
|
105
|
+
as_unicode do
|
106
|
+
chars = string.chars.to_a
|
107
|
+
if chars.length <= @truncate
|
108
|
+
chars.join
|
109
|
+
else
|
110
|
+
chars[0, @truncate - 3 - @indent].join + "..."
|
111
|
+
end
|
112
|
+
end
|
113
|
+
end
|
114
|
+
|
115
|
+
def indentation
|
116
|
+
" " * @indent
|
117
|
+
end
|
118
|
+
|
119
|
+
if "".respond_to?(:encode)
|
120
|
+
def as_unicode
|
121
|
+
yield
|
122
|
+
end
|
123
|
+
else
|
124
|
+
def as_unicode
|
125
|
+
old = $KCODE # rubocop:disable Style/GlobalVars
|
126
|
+
$KCODE = "U" # rubocop:disable Style/GlobalVars
|
127
|
+
yield
|
128
|
+
ensure
|
129
|
+
$KCODE = old # rubocop:disable Style/GlobalVars
|
130
|
+
end
|
131
|
+
end
|
132
|
+
end
|
133
|
+
end
|
134
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
class Bundler::Thor
|
2
|
+
module Shell
|
3
|
+
module Terminal
|
4
|
+
DEFAULT_TERMINAL_WIDTH = 80
|
5
|
+
|
6
|
+
class << self
|
7
|
+
# This code was copied from Rake, available under MIT-LICENSE
|
8
|
+
# Copyright (c) 2003, 2004 Jim Weirich
|
9
|
+
def terminal_width
|
10
|
+
result = if ENV["THOR_COLUMNS"]
|
11
|
+
ENV["THOR_COLUMNS"].to_i
|
12
|
+
else
|
13
|
+
unix? ? dynamic_width : DEFAULT_TERMINAL_WIDTH
|
14
|
+
end
|
15
|
+
result < 10 ? DEFAULT_TERMINAL_WIDTH : result
|
16
|
+
rescue
|
17
|
+
DEFAULT_TERMINAL_WIDTH
|
18
|
+
end
|
19
|
+
|
20
|
+
def unix?
|
21
|
+
RUBY_PLATFORM =~ /(aix|darwin|linux|(net|free|open)bsd|cygwin|solaris)/i
|
22
|
+
end
|
23
|
+
|
24
|
+
private
|
25
|
+
|
26
|
+
# Calculate the dynamic width of the terminal
|
27
|
+
def dynamic_width
|
28
|
+
@dynamic_width ||= (dynamic_width_stty.nonzero? || dynamic_width_tput)
|
29
|
+
end
|
30
|
+
|
31
|
+
def dynamic_width_stty
|
32
|
+
`stty size 2>/dev/null`.split[1].to_i
|
33
|
+
end
|
34
|
+
|
35
|
+
def dynamic_width_tput
|
36
|
+
`tput cols 2>/dev/null`.to_i
|
37
|
+
end
|
38
|
+
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
require_relative "column_printer"
|
2
|
+
require_relative "terminal"
|
3
|
+
|
4
|
+
class Bundler::Thor
|
5
|
+
module Shell
|
6
|
+
class WrappedPrinter < ColumnPrinter
|
7
|
+
def print(message)
|
8
|
+
width = Terminal.terminal_width - @indent
|
9
|
+
paras = message.split("\n\n")
|
10
|
+
|
11
|
+
paras.map! do |unwrapped|
|
12
|
+
words = unwrapped.split(" ")
|
13
|
+
counter = words.first.length
|
14
|
+
words.inject do |memo, word|
|
15
|
+
word = word.gsub(/\n\005/, "\n").gsub(/\005/, "\n")
|
16
|
+
counter = 0 if word.include? "\n"
|
17
|
+
if (counter + word.length + 1) < width
|
18
|
+
memo = "#{memo} #{word}"
|
19
|
+
counter += (word.length + 1)
|
20
|
+
else
|
21
|
+
memo = "#{memo}\n#{word}"
|
22
|
+
counter = word.length
|
23
|
+
end
|
24
|
+
memo
|
25
|
+
end
|
26
|
+
end.compact!
|
27
|
+
|
28
|
+
paras.each do |para|
|
29
|
+
para.split("\n").each do |line|
|
30
|
+
stdout.puts line.insert(0, " " * @indent)
|
31
|
+
end
|
32
|
+
stdout.puts unless para == paras.last
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
@@ -21,7 +21,7 @@ class Bundler::Thor
|
|
21
21
|
end
|
22
22
|
|
23
23
|
module Shell
|
24
|
-
SHELL_DELEGATED_METHODS = [:ask, :error, :set_color, :yes?, :no?, :say, :say_status, :print_in_columns, :print_table, :print_wrapped, :file_collision, :terminal_width]
|
24
|
+
SHELL_DELEGATED_METHODS = [:ask, :error, :set_color, :yes?, :no?, :say, :say_error, :say_status, :print_in_columns, :print_table, :print_wrapped, :file_collision, :terminal_width]
|
25
25
|
attr_writer :shell
|
26
26
|
|
27
27
|
autoload :Basic, File.expand_path("shell/basic", __dir__)
|
@@ -75,7 +75,7 @@ class Bundler::Thor
|
|
75
75
|
# Allow shell to be shared between invocations.
|
76
76
|
#
|
77
77
|
def _shared_configuration #:nodoc:
|
78
|
-
super.merge!(:
|
78
|
+
super.merge!(shell: shell)
|
79
79
|
end
|
80
80
|
end
|
81
81
|
end
|
@@ -90,7 +90,7 @@ class Bundler::Thor
|
|
90
90
|
def snake_case(str)
|
91
91
|
return str.downcase if str =~ /^[A-Z_]+$/
|
92
92
|
str.gsub(/\B[A-Z]/, '_\&').squeeze("_") =~ /_*(.*)/
|
93
|
-
|
93
|
+
Regexp.last_match(-1).downcase
|
94
94
|
end
|
95
95
|
|
96
96
|
# Receives a string and convert it to camel case. camel_case returns CamelCase.
|
@@ -130,9 +130,10 @@ class Bundler::Thor
|
|
130
130
|
#
|
131
131
|
def find_class_and_command_by_namespace(namespace, fallback = true)
|
132
132
|
if namespace.include?(":") # look for a namespaced command
|
133
|
-
pieces = namespace.split(":")
|
134
|
-
|
135
|
-
|
133
|
+
*pieces, command = namespace.split(":")
|
134
|
+
namespace = pieces.join(":")
|
135
|
+
namespace = "default" if namespace.empty?
|
136
|
+
klass = Bundler::Thor::Base.subclasses.detect { |thor| thor.namespace == namespace && thor.commands.keys.include?(command) }
|
136
137
|
end
|
137
138
|
unless klass # look for a Bundler::Thor::Group with the right name
|
138
139
|
klass = Bundler::Thor::Util.find_by_namespace(namespace)
|
@@ -150,7 +151,7 @@ class Bundler::Thor
|
|
150
151
|
# inside the sandbox to avoid namespacing conflicts.
|
151
152
|
#
|
152
153
|
def load_thorfile(path, content = nil, debug = false)
|
153
|
-
content ||= File.
|
154
|
+
content ||= File.read(path)
|
154
155
|
|
155
156
|
begin
|
156
157
|
Bundler::Thor::Sandbox.class_eval(content, path)
|
@@ -189,7 +190,7 @@ class Bundler::Thor
|
|
189
190
|
# Returns the root where thor files are located, depending on the OS.
|
190
191
|
#
|
191
192
|
def thor_root
|
192
|
-
File.join(user_home, ".thor").tr(
|
193
|
+
File.join(user_home, ".thor").tr("\\", "/")
|
193
194
|
end
|
194
195
|
|
195
196
|
# Returns the files in the thor root. On Windows thor_root will be something
|
@@ -211,7 +212,7 @@ class Bundler::Thor
|
|
211
212
|
#
|
212
213
|
def globs_for(path)
|
213
214
|
path = escape_globs(path)
|
214
|
-
["#{path}/Thorfile", "#{path}/*.thor", "#{path}/tasks/*.thor", "#{path}/lib/tasks
|
215
|
+
["#{path}/Thorfile", "#{path}/*.thor", "#{path}/tasks/*.thor", "#{path}/lib/tasks/**/*.thor"]
|
215
216
|
end
|
216
217
|
|
217
218
|
# Return the path to the ruby interpreter taking into account multiple
|
@@ -236,7 +237,7 @@ class Bundler::Thor
|
|
236
237
|
# symlink points to 'ruby_install_name'
|
237
238
|
ruby = alternate_ruby if linked_ruby == ruby_name || linked_ruby == ruby
|
238
239
|
end
|
239
|
-
rescue NotImplementedError # rubocop:disable HandleExceptions
|
240
|
+
rescue NotImplementedError # rubocop:disable Lint/HandleExceptions
|
240
241
|
# just ignore on windows
|
241
242
|
end
|
242
243
|
end
|
@@ -65,8 +65,15 @@ class Bundler::Thor
|
|
65
65
|
|
66
66
|
# Defines the long description of the next command.
|
67
67
|
#
|
68
|
+
# Long description is by default indented, line-wrapped and repeated whitespace merged.
|
69
|
+
# In order to print long description verbatim, with indentation and spacing exactly
|
70
|
+
# as found in the code, use the +wrap+ option
|
71
|
+
#
|
72
|
+
# long_desc 'your very long description', wrap: false
|
73
|
+
#
|
68
74
|
# ==== Parameters
|
69
75
|
# long description<String>
|
76
|
+
# options<Hash>
|
70
77
|
#
|
71
78
|
def long_desc(long_description, options = {})
|
72
79
|
if options[:for]
|
@@ -74,6 +81,7 @@ class Bundler::Thor
|
|
74
81
|
command.long_description = long_description if long_description
|
75
82
|
else
|
76
83
|
@long_desc = long_description
|
84
|
+
@long_desc_wrap = options[:wrap] != false
|
77
85
|
end
|
78
86
|
end
|
79
87
|
|
@@ -133,7 +141,7 @@ class Bundler::Thor
|
|
133
141
|
# # magic
|
134
142
|
# end
|
135
143
|
#
|
136
|
-
# method_option :foo
|
144
|
+
# method_option :foo, :for => :previous_command
|
137
145
|
#
|
138
146
|
# def next_command
|
139
147
|
# # magic
|
@@ -153,6 +161,9 @@ class Bundler::Thor
|
|
153
161
|
# :hide - If you want to hide this option from the help.
|
154
162
|
#
|
155
163
|
def method_option(name, options = {})
|
164
|
+
unless [ Symbol, String ].any? { |klass| name.is_a?(klass) }
|
165
|
+
raise ArgumentError, "Expected a Symbol or String, got #{name.inspect}"
|
166
|
+
end
|
156
167
|
scope = if options[:for]
|
157
168
|
find_and_refresh_command(options[:for]).options
|
158
169
|
else
|
@@ -163,6 +174,81 @@ class Bundler::Thor
|
|
163
174
|
end
|
164
175
|
alias_method :option, :method_option
|
165
176
|
|
177
|
+
# Adds and declares option group for exclusive options in the
|
178
|
+
# block and arguments. You can declare options as the outside of the block.
|
179
|
+
#
|
180
|
+
# If :for is given as option, it allows you to change the options from
|
181
|
+
# a previous defined command.
|
182
|
+
#
|
183
|
+
# ==== Parameters
|
184
|
+
# Array[Bundler::Thor::Option.name]
|
185
|
+
# options<Hash>:: :for is applied for previous defined command.
|
186
|
+
#
|
187
|
+
# ==== Examples
|
188
|
+
#
|
189
|
+
# exclusive do
|
190
|
+
# option :one
|
191
|
+
# option :two
|
192
|
+
# end
|
193
|
+
#
|
194
|
+
# Or
|
195
|
+
#
|
196
|
+
# option :one
|
197
|
+
# option :two
|
198
|
+
# exclusive :one, :two
|
199
|
+
#
|
200
|
+
# If you give "--one" and "--two" at the same time ExclusiveArgumentsError
|
201
|
+
# will be raised.
|
202
|
+
#
|
203
|
+
def method_exclusive(*args, &block)
|
204
|
+
register_options_relation_for(:method_options,
|
205
|
+
:method_exclusive_option_names, *args, &block)
|
206
|
+
end
|
207
|
+
alias_method :exclusive, :method_exclusive
|
208
|
+
|
209
|
+
# Adds and declares option group for required at least one of options in the
|
210
|
+
# block of arguments. You can declare options as the outside of the block.
|
211
|
+
#
|
212
|
+
# If :for is given as option, it allows you to change the options from
|
213
|
+
# a previous defined command.
|
214
|
+
#
|
215
|
+
# ==== Parameters
|
216
|
+
# Array[Bundler::Thor::Option.name]
|
217
|
+
# options<Hash>:: :for is applied for previous defined command.
|
218
|
+
#
|
219
|
+
# ==== Examples
|
220
|
+
#
|
221
|
+
# at_least_one do
|
222
|
+
# option :one
|
223
|
+
# option :two
|
224
|
+
# end
|
225
|
+
#
|
226
|
+
# Or
|
227
|
+
#
|
228
|
+
# option :one
|
229
|
+
# option :two
|
230
|
+
# at_least_one :one, :two
|
231
|
+
#
|
232
|
+
# If you do not give "--one" and "--two" AtLeastOneRequiredArgumentError
|
233
|
+
# will be raised.
|
234
|
+
#
|
235
|
+
# You can use at_least_one and exclusive at the same time.
|
236
|
+
#
|
237
|
+
# exclusive do
|
238
|
+
# at_least_one do
|
239
|
+
# option :one
|
240
|
+
# option :two
|
241
|
+
# end
|
242
|
+
# end
|
243
|
+
#
|
244
|
+
# Then it is required either only one of "--one" or "--two".
|
245
|
+
#
|
246
|
+
def method_at_least_one(*args, &block)
|
247
|
+
register_options_relation_for(:method_options,
|
248
|
+
:method_at_least_one_option_names, *args, &block)
|
249
|
+
end
|
250
|
+
alias_method :at_least_one, :method_at_least_one
|
251
|
+
|
166
252
|
# Prints help information for the given command.
|
167
253
|
#
|
168
254
|
# ==== Parameters
|
@@ -178,9 +264,16 @@ class Bundler::Thor
|
|
178
264
|
shell.say " #{banner(command).split("\n").join("\n ")}"
|
179
265
|
shell.say
|
180
266
|
class_options_help(shell, nil => command.options.values)
|
267
|
+
print_exclusive_options(shell, command)
|
268
|
+
print_at_least_one_required_options(shell, command)
|
269
|
+
|
181
270
|
if command.long_description
|
182
271
|
shell.say "Description:"
|
183
|
-
|
272
|
+
if command.wrap_long_description
|
273
|
+
shell.print_wrapped(command.long_description, indent: 2)
|
274
|
+
else
|
275
|
+
shell.say command.long_description
|
276
|
+
end
|
184
277
|
else
|
185
278
|
shell.say command.description
|
186
279
|
end
|
@@ -197,7 +290,7 @@ class Bundler::Thor
|
|
197
290
|
Bundler::Thor::Util.thor_classes_in(self).each do |klass|
|
198
291
|
list += klass.printable_commands(false)
|
199
292
|
end
|
200
|
-
list
|
293
|
+
sort_commands!(list)
|
201
294
|
|
202
295
|
if defined?(@package_name) && @package_name
|
203
296
|
shell.say "#{@package_name} commands:"
|
@@ -205,9 +298,11 @@ class Bundler::Thor
|
|
205
298
|
shell.say "Commands:"
|
206
299
|
end
|
207
300
|
|
208
|
-
shell.print_table(list, :
|
301
|
+
shell.print_table(list, indent: 2, truncate: true)
|
209
302
|
shell.say
|
210
303
|
class_options_help(shell)
|
304
|
+
print_exclusive_options(shell)
|
305
|
+
print_at_least_one_required_options(shell)
|
211
306
|
end
|
212
307
|
|
213
308
|
# Returns commands ready to be printed.
|
@@ -238,7 +333,7 @@ class Bundler::Thor
|
|
238
333
|
|
239
334
|
define_method(subcommand) do |*args|
|
240
335
|
args, opts = Bundler::Thor::Arguments.split(args)
|
241
|
-
invoke_args = [args, opts, {:
|
336
|
+
invoke_args = [args, opts, {invoked_via_subcommand: true, class_options: options}]
|
242
337
|
invoke_args.unshift "help" if opts.delete("--help") || opts.delete("-h")
|
243
338
|
invoke subcommand_class, *invoke_args
|
244
339
|
end
|
@@ -346,6 +441,24 @@ class Bundler::Thor
|
|
346
441
|
|
347
442
|
protected
|
348
443
|
|
444
|
+
# Returns this class exclusive options array set.
|
445
|
+
#
|
446
|
+
# ==== Returns
|
447
|
+
# Array[Array[Bundler::Thor::Option.name]]
|
448
|
+
#
|
449
|
+
def method_exclusive_option_names #:nodoc:
|
450
|
+
@method_exclusive_option_names ||= []
|
451
|
+
end
|
452
|
+
|
453
|
+
# Returns this class at least one of required options array set.
|
454
|
+
#
|
455
|
+
# ==== Returns
|
456
|
+
# Array[Array[Bundler::Thor::Option.name]]
|
457
|
+
#
|
458
|
+
def method_at_least_one_option_names #:nodoc:
|
459
|
+
@method_at_least_one_option_names ||= []
|
460
|
+
end
|
461
|
+
|
349
462
|
def stop_on_unknown_option #:nodoc:
|
350
463
|
@stop_on_unknown_option ||= []
|
351
464
|
end
|
@@ -355,8 +468,30 @@ class Bundler::Thor
|
|
355
468
|
@disable_required_check ||= [:help]
|
356
469
|
end
|
357
470
|
|
471
|
+
def print_exclusive_options(shell, command = nil) # :nodoc:
|
472
|
+
opts = []
|
473
|
+
opts = command.method_exclusive_option_names unless command.nil?
|
474
|
+
opts += class_exclusive_option_names
|
475
|
+
unless opts.empty?
|
476
|
+
shell.say "Exclusive Options:"
|
477
|
+
shell.print_table(opts.map{ |ex| ex.map{ |e| "--#{e}"}}, indent: 2 )
|
478
|
+
shell.say
|
479
|
+
end
|
480
|
+
end
|
481
|
+
|
482
|
+
def print_at_least_one_required_options(shell, command = nil) # :nodoc:
|
483
|
+
opts = []
|
484
|
+
opts = command.method_at_least_one_option_names unless command.nil?
|
485
|
+
opts += class_at_least_one_option_names
|
486
|
+
unless opts.empty?
|
487
|
+
shell.say "Required At Least One:"
|
488
|
+
shell.print_table(opts.map{ |ex| ex.map{ |e| "--#{e}"}}, indent: 2 )
|
489
|
+
shell.say
|
490
|
+
end
|
491
|
+
end
|
492
|
+
|
358
493
|
# The method responsible for dispatching given the args.
|
359
|
-
def dispatch(meth, given_args, given_opts, config) #:nodoc:
|
494
|
+
def dispatch(meth, given_args, given_opts, config) #:nodoc:
|
360
495
|
meth ||= retrieve_command_name(given_args)
|
361
496
|
command = all_commands[normalize_command_name(meth)]
|
362
497
|
|
@@ -415,12 +550,16 @@ class Bundler::Thor
|
|
415
550
|
@usage ||= nil
|
416
551
|
@desc ||= nil
|
417
552
|
@long_desc ||= nil
|
553
|
+
@long_desc_wrap ||= nil
|
418
554
|
@hide ||= nil
|
419
555
|
|
420
556
|
if @usage && @desc
|
421
557
|
base_class = @hide ? Bundler::Thor::HiddenCommand : Bundler::Thor::Command
|
422
|
-
|
423
|
-
|
558
|
+
relations = {exclusive_option_names: method_exclusive_option_names,
|
559
|
+
at_least_one_option_names: method_at_least_one_option_names}
|
560
|
+
commands[meth] = base_class.new(meth, @desc, @long_desc, @long_desc_wrap, @usage, method_options, relations)
|
561
|
+
@usage, @desc, @long_desc, @long_desc_wrap, @method_options, @hide = nil
|
562
|
+
@method_exclusive_option_names, @method_at_least_one_option_names = nil
|
424
563
|
true
|
425
564
|
elsif all_commands[meth] || meth == "method_missing"
|
426
565
|
true
|
@@ -495,6 +634,14 @@ class Bundler::Thor
|
|
495
634
|
"
|
496
635
|
end
|
497
636
|
alias_method :subtask_help, :subcommand_help
|
637
|
+
|
638
|
+
# Sort the commands, lexicographically by default.
|
639
|
+
#
|
640
|
+
# Can be overridden in the subclass to change the display order of the
|
641
|
+
# commands.
|
642
|
+
def sort_commands!(list)
|
643
|
+
list.sort! { |a, b| a[0] <=> b[0] }
|
644
|
+
end
|
498
645
|
end
|
499
646
|
|
500
647
|
include Bundler::Thor::Base
|
@@ -0,0 +1 @@
|
|
1
|
+
# Vendored files do not need to be documented
|
@@ -0,0 +1,22 @@
|
|
1
|
+
Copyright (C) 1993-2013 Yukihiro Matsumoto. All rights reserved.
|
2
|
+
|
3
|
+
Redistribution and use in source and binary forms, with or without
|
4
|
+
modification, are permitted provided that the following conditions
|
5
|
+
are met:
|
6
|
+
1. Redistributions of source code must retain the above copyright
|
7
|
+
notice, this list of conditions and the following disclaimer.
|
8
|
+
2. Redistributions in binary form must reproduce the above copyright
|
9
|
+
notice, this list of conditions and the following disclaimer in the
|
10
|
+
documentation and/or other materials provided with the distribution.
|
11
|
+
|
12
|
+
THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
13
|
+
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
14
|
+
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
15
|
+
ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
16
|
+
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
17
|
+
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
18
|
+
OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
19
|
+
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
20
|
+
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
21
|
+
OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
22
|
+
SUCH DAMAGE.
|