rubygems-update 2.7.11 → 3.0.9
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/.rubocop.yml +67 -0
- data/.travis.yml +24 -18
- data/CODE_OF_CONDUCT.md +10 -8
- data/CONTRIBUTING.md +148 -0
- data/History.txt +458 -8
- data/MAINTAINERS.txt +1 -0
- data/Manifest.txt +16 -9
- data/POLICIES.md +92 -0
- data/README.md +53 -26
- data/Rakefile +77 -211
- data/{UPGRADING.rdoc → UPGRADING.md} +31 -32
- data/appveyor.yml +20 -45
- data/bin/gem +1 -2
- data/bin/update_rubygems +2 -3
- data/bundler/CHANGELOG.md +65 -0
- data/bundler/bundler.gemspec +7 -1
- data/bundler/lib/bundler/build_metadata.rb +1 -1
- data/bundler/lib/bundler/cli/add.rb +15 -5
- data/bundler/lib/bundler/cli/binstubs.rb +8 -2
- data/bundler/lib/bundler/cli/doctor.rb +47 -1
- data/bundler/lib/bundler/cli/install.rb +8 -5
- data/bundler/lib/bundler/cli/list.rb +41 -5
- data/bundler/lib/bundler/cli/outdated.rb +7 -1
- data/bundler/lib/bundler/cli/pristine.rb +4 -0
- data/bundler/lib/bundler/cli/remove.rb +18 -0
- data/bundler/lib/bundler/cli.rb +63 -21
- data/bundler/lib/bundler/definition.rb +15 -16
- data/bundler/lib/bundler/dependency.rb +2 -2
- data/bundler/lib/bundler/dsl.rb +19 -3
- data/bundler/lib/bundler/feature_flag.rb +7 -0
- data/bundler/lib/bundler/gem_version_promoter.rb +4 -2
- data/bundler/lib/bundler/injector.rb +168 -9
- data/bundler/lib/bundler/installer/parallel_installer.rb +5 -0
- data/bundler/lib/bundler/installer.rb +29 -6
- data/bundler/lib/bundler/plugin/events.rb +61 -0
- data/bundler/lib/bundler/plugin.rb +10 -3
- data/bundler/lib/bundler/resolver.rb +2 -2
- data/bundler/lib/bundler/rubygems_gem_installer.rb +7 -0
- data/bundler/lib/bundler/runtime.rb +8 -2
- data/bundler/lib/bundler/settings/validator.rb +23 -0
- data/bundler/lib/bundler/settings.rb +24 -3
- data/bundler/lib/bundler/shared_helpers.rb +19 -3
- data/bundler/lib/bundler/source/metadata.rb +2 -3
- data/bundler/lib/bundler/source.rb +9 -9
- data/bundler/lib/bundler/templates/newgem/lib/newgem.rb.tt +1 -0
- data/bundler/lib/bundler/version.rb +1 -1
- data/bundler/lib/bundler.rb +26 -8
- data/bundler/man/bundle-add.ronn +13 -2
- data/bundler/man/bundle-config.ronn +21 -0
- data/bundler/man/bundle-install.ronn +1 -1
- data/bundler/man/bundle-list.ronn +19 -1
- data/bundler/man/bundle-outdated.ronn +4 -0
- data/bundler/man/bundle-remove.ronn +23 -0
- data/bundler/man/bundle-update.ronn +1 -1
- data/bundler/man/bundle.ronn +3 -0
- data/lib/rubygems/available_set.rb +1 -1
- data/lib/rubygems/basic_specification.rb +12 -12
- data/lib/rubygems/bundler_version_finder.rb +3 -3
- data/lib/rubygems/command.rb +22 -15
- data/lib/rubygems/command_manager.rb +22 -5
- data/lib/rubygems/commands/build_command.rb +41 -7
- data/lib/rubygems/commands/cert_command.rb +45 -24
- data/lib/rubygems/commands/check_command.rb +1 -1
- data/lib/rubygems/commands/cleanup_command.rb +14 -7
- data/lib/rubygems/commands/contents_command.rb +14 -15
- data/lib/rubygems/commands/dependency_command.rb +17 -17
- data/lib/rubygems/commands/environment_command.rb +20 -1
- data/lib/rubygems/commands/fetch_command.rb +2 -3
- data/lib/rubygems/commands/generate_index_command.rb +2 -3
- data/lib/rubygems/commands/help_command.rb +12 -13
- data/lib/rubygems/commands/info_command.rb +33 -0
- data/lib/rubygems/commands/install_command.rb +21 -17
- data/lib/rubygems/commands/list_command.rb +0 -1
- data/lib/rubygems/commands/lock_command.rb +3 -4
- data/lib/rubygems/commands/open_command.rb +16 -10
- data/lib/rubygems/commands/owner_command.rb +21 -7
- data/lib/rubygems/commands/pristine_command.rb +23 -16
- data/lib/rubygems/commands/push_command.rb +19 -8
- data/lib/rubygems/commands/query_command.rb +24 -24
- data/lib/rubygems/commands/rdoc_command.rb +3 -4
- data/lib/rubygems/commands/search_command.rb +0 -1
- data/lib/rubygems/commands/server_command.rb +1 -2
- data/lib/rubygems/commands/setup_command.rb +86 -48
- data/lib/rubygems/commands/signin_command.rb +2 -1
- data/lib/rubygems/commands/signout_command.rb +2 -2
- data/lib/rubygems/commands/sources_command.rb +11 -12
- data/lib/rubygems/commands/specification_command.rb +7 -7
- data/lib/rubygems/commands/uninstall_command.rb +50 -18
- data/lib/rubygems/commands/unpack_command.rb +16 -7
- data/lib/rubygems/commands/update_command.rb +28 -23
- data/lib/rubygems/commands/which_command.rb +5 -8
- data/lib/rubygems/commands/yank_command.rb +1 -2
- data/lib/rubygems/compatibility.rb +1 -21
- data/lib/rubygems/config_file.rb +36 -36
- data/lib/rubygems/core_ext/kernel_require.rb +6 -6
- data/lib/rubygems/core_ext/kernel_warn.rb +45 -0
- data/lib/rubygems/defaults.rb +31 -19
- data/lib/rubygems/dependency.rb +15 -15
- data/lib/rubygems/dependency_installer.rb +30 -33
- data/lib/rubygems/dependency_list.rb +9 -10
- data/lib/rubygems/deprecate.rb +2 -3
- data/lib/rubygems/doctor.rb +5 -6
- data/lib/rubygems/errors.rb +3 -3
- data/lib/rubygems/exceptions.rb +11 -8
- data/lib/rubygems/ext/build_error.rb +0 -1
- data/lib/rubygems/ext/builder.rb +50 -23
- data/lib/rubygems/ext/cmake_builder.rb +2 -2
- data/lib/rubygems/ext/configure_builder.rb +2 -3
- data/lib/rubygems/ext/ext_conf_builder.rb +8 -7
- data/lib/rubygems/ext/rake_builder.rb +16 -18
- data/lib/rubygems/ext.rb +0 -1
- data/lib/rubygems/gem_runner.rb +2 -2
- data/lib/rubygems/gemcutter_utilities.rb +46 -12
- data/lib/rubygems/indexer.rb +19 -12
- data/lib/rubygems/install_default_message.rb +0 -1
- data/lib/rubygems/install_message.rb +0 -1
- data/lib/rubygems/install_update_options.rb +3 -29
- data/lib/rubygems/installer.rb +97 -55
- data/lib/rubygems/installer_test_case.rb +2 -16
- data/lib/rubygems/local_remote_options.rb +5 -4
- data/lib/rubygems/mock_gem_ui.rb +3 -4
- data/lib/rubygems/name_tuple.rb +4 -4
- data/lib/rubygems/package/digest_io.rb +3 -4
- data/lib/rubygems/package/file_source.rb +3 -4
- data/lib/rubygems/package/io_source.rb +1 -2
- data/lib/rubygems/package/old.rb +8 -16
- data/lib/rubygems/package/source.rb +0 -1
- data/lib/rubygems/package/tar_header.rb +13 -4
- data/lib/rubygems/package/tar_reader/entry.rb +20 -4
- data/lib/rubygems/package/tar_reader.rb +2 -4
- data/lib/rubygems/package/tar_test_case.rb +2 -8
- data/lib/rubygems/package/tar_writer.rb +13 -15
- data/lib/rubygems/package.rb +90 -63
- data/lib/rubygems/package_task.rb +0 -1
- data/lib/rubygems/path_support.rb +16 -6
- data/lib/rubygems/platform.rb +4 -5
- data/lib/rubygems/psych_tree.rb +1 -1
- data/lib/rubygems/rdoc.rb +2 -313
- data/lib/rubygems/remote_fetcher.rb +29 -82
- data/lib/rubygems/request/connection_pools.rb +24 -13
- data/lib/rubygems/request/http_pool.rb +3 -4
- data/lib/rubygems/request/https_pool.rb +1 -3
- data/lib/rubygems/request.rb +17 -16
- data/lib/rubygems/request_set/gem_dependency_api.rb +46 -49
- data/lib/rubygems/request_set/lockfile/parser.rb +18 -29
- data/lib/rubygems/request_set/lockfile/tokenizer.rb +9 -9
- data/lib/rubygems/request_set/lockfile.rb +12 -12
- data/lib/rubygems/request_set.rb +52 -25
- data/lib/rubygems/requirement.rb +32 -21
- data/lib/rubygems/resolver/activation_request.rb +6 -6
- data/lib/rubygems/resolver/api_set.rb +5 -6
- data/lib/rubygems/resolver/api_specification.rb +2 -3
- data/lib/rubygems/resolver/best_set.rb +5 -6
- data/lib/rubygems/resolver/composed_set.rb +5 -6
- data/lib/rubygems/resolver/conflict.rb +5 -5
- data/lib/rubygems/resolver/current_set.rb +1 -2
- data/lib/rubygems/resolver/dependency_request.rb +4 -4
- data/lib/rubygems/resolver/git_set.rb +5 -6
- data/lib/rubygems/resolver/git_specification.rb +4 -5
- data/lib/rubygems/resolver/index_set.rb +5 -6
- data/lib/rubygems/resolver/index_specification.rb +3 -4
- data/lib/rubygems/resolver/installed_specification.rb +3 -4
- data/lib/rubygems/resolver/installer_set.rb +12 -12
- data/lib/rubygems/resolver/local_specification.rb +1 -2
- data/lib/rubygems/resolver/lock_set.rb +5 -6
- data/lib/rubygems/resolver/lock_specification.rb +7 -8
- data/lib/rubygems/resolver/requirement_list.rb +1 -1
- data/lib/rubygems/resolver/set.rb +2 -2
- data/lib/rubygems/resolver/source_set.rb +4 -5
- data/lib/rubygems/resolver/spec_specification.rb +1 -2
- data/lib/rubygems/resolver/specification.rb +10 -7
- data/lib/rubygems/resolver/stats.rb +1 -1
- data/lib/rubygems/resolver/vendor_set.rb +4 -5
- data/lib/rubygems/resolver/vendor_specification.rb +2 -3
- data/lib/rubygems/resolver.rb +14 -16
- data/lib/rubygems/s3_uri_signer.rb +183 -0
- data/lib/rubygems/safe_yaml.rb +18 -10
- data/lib/rubygems/security/policies.rb +1 -2
- data/lib/rubygems/security/policy.rb +25 -25
- data/lib/rubygems/security/signer.rb +72 -24
- data/lib/rubygems/security/trust_dir.rb +10 -10
- data/lib/rubygems/security.rb +21 -22
- data/lib/rubygems/security_option.rb +0 -1
- data/lib/rubygems/server.rb +21 -21
- data/lib/rubygems/source/git.rb +9 -10
- data/lib/rubygems/source/installed.rb +3 -4
- data/lib/rubygems/source/local.rb +7 -7
- data/lib/rubygems/source/lock.rb +4 -4
- data/lib/rubygems/source/specific_file.rb +5 -5
- data/lib/rubygems/source/vendor.rb +2 -3
- data/lib/rubygems/source.rb +16 -25
- data/lib/rubygems/source_list.rb +2 -2
- data/lib/rubygems/source_local.rb +0 -1
- data/lib/rubygems/spec_fetcher.rb +5 -6
- data/lib/rubygems/specification.rb +219 -558
- data/lib/rubygems/specification_policy.rb +407 -0
- data/lib/rubygems/stub_specification.rb +12 -17
- data/lib/rubygems/test_case.rb +161 -75
- data/lib/rubygems/test_utilities.rb +20 -35
- data/lib/rubygems/text.rb +6 -6
- data/lib/rubygems/uninstaller.rb +38 -27
- data/lib/rubygems/uri_formatter.rb +1 -2
- data/lib/rubygems/user_interaction.rb +37 -89
- data/lib/rubygems/util/licenses.rb +27 -1
- data/lib/rubygems/util/list.rb +1 -1
- data/lib/rubygems/util.rb +32 -14
- data/lib/rubygems/validator.rb +4 -5
- data/lib/rubygems/version.rb +15 -15
- data/lib/rubygems/version_option.rb +2 -3
- data/lib/rubygems.rb +71 -102
- data/rubygems-update.gemspec +43 -0
- data/setup.rb +2 -8
- data/test/rubygems/ca_cert.pem +74 -65
- data/test/rubygems/client.pem +103 -45
- data/test/rubygems/rubygems_plugin.rb +0 -1
- data/test/rubygems/simple_gem.rb +1 -1
- data/test/rubygems/ssl_cert.pem +78 -17
- data/test/rubygems/ssl_key.pem +25 -13
- data/test/rubygems/test_bundled_ca.rb +1 -1
- data/test/rubygems/test_config.rb +7 -2
- data/test/rubygems/test_gem.rb +205 -132
- data/test/rubygems/test_gem_bundler_version_finder.rb +4 -0
- data/test/rubygems/test_gem_command.rb +0 -1
- data/test/rubygems/test_gem_command_manager.rb +18 -3
- data/test/rubygems/test_gem_commands_build_command.rb +220 -15
- data/test/rubygems/test_gem_commands_cert_command.rb +69 -8
- data/test/rubygems/test_gem_commands_check_command.rb +1 -1
- data/test/rubygems/test_gem_commands_cleanup_command.rb +27 -1
- data/test/rubygems/test_gem_commands_contents_command.rb +1 -2
- data/test/rubygems/test_gem_commands_dependency_command.rb +33 -34
- data/test/rubygems/test_gem_commands_environment_command.rb +1 -0
- data/test/rubygems/test_gem_commands_fetch_command.rb +0 -1
- data/test/rubygems/test_gem_commands_generate_index_command.rb +0 -1
- data/test/rubygems/test_gem_commands_help_command.rb +7 -4
- data/test/rubygems/test_gem_commands_info_command.rb +44 -0
- data/test/rubygems/test_gem_commands_install_command.rb +79 -12
- data/test/rubygems/test_gem_commands_lock_command.rb +0 -1
- data/test/rubygems/test_gem_commands_open_command.rb +29 -0
- data/test/rubygems/test_gem_commands_outdated_command.rb +0 -1
- data/test/rubygems/test_gem_commands_owner_command.rb +93 -57
- data/test/rubygems/test_gem_commands_pristine_command.rb +65 -30
- data/test/rubygems/test_gem_commands_push_command.rb +54 -0
- data/test/rubygems/test_gem_commands_query_command.rb +102 -100
- data/test/rubygems/test_gem_commands_search_command.rb +0 -1
- data/test/rubygems/test_gem_commands_server_command.rb +0 -1
- data/test/rubygems/test_gem_commands_setup_command.rb +50 -15
- data/test/rubygems/test_gem_commands_signin_command.rb +1 -1
- data/test/rubygems/test_gem_commands_sources_command.rb +0 -1
- data/test/rubygems/test_gem_commands_specification_command.rb +2 -3
- data/test/rubygems/test_gem_commands_stale_command.rb +3 -2
- data/test/rubygems/test_gem_commands_uninstall_command.rb +161 -8
- data/test/rubygems/test_gem_commands_unpack_command.rb +17 -1
- data/test/rubygems/test_gem_commands_update_command.rb +19 -2
- data/test/rubygems/test_gem_commands_which_command.rb +0 -1
- data/test/rubygems/test_gem_commands_yank_command.rb +0 -1
- data/test/rubygems/test_gem_config_file.rb +4 -2
- data/test/rubygems/test_gem_dependency.rb +0 -1
- data/test/rubygems/test_gem_dependency_installer.rb +8 -5
- data/test/rubygems/test_gem_dependency_list.rb +6 -7
- data/test/rubygems/test_gem_dependency_resolution_error.rb +0 -1
- data/test/rubygems/test_gem_doctor.rb +1 -2
- data/test/rubygems/test_gem_ext_builder.rb +10 -23
- data/test/rubygems/test_gem_ext_cmake_builder.rb +5 -4
- data/test/rubygems/test_gem_ext_configure_builder.rb +3 -3
- data/test/rubygems/test_gem_ext_ext_conf_builder.rb +8 -9
- data/test/rubygems/test_gem_ext_rake_builder.rb +20 -5
- data/test/rubygems/test_gem_gem_runner.rb +0 -1
- data/test/rubygems/test_gem_gemcutter_utilities.rb +32 -6
- data/test/rubygems/test_gem_impossible_dependencies_error.rb +0 -1
- data/test/rubygems/test_gem_indexer.rb +16 -10
- data/test/rubygems/test_gem_install_update_options.rb +1 -20
- data/test/rubygems/test_gem_installer.rb +154 -119
- data/test/rubygems/test_gem_local_remote_options.rb +3 -3
- data/test/rubygems/test_gem_name_tuple.rb +0 -1
- data/test/rubygems/test_gem_package.rb +77 -31
- data/test/rubygems/test_gem_package_old.rb +0 -1
- data/test/rubygems/test_gem_package_tar_header.rb +42 -2
- data/test/rubygems/test_gem_package_tar_reader.rb +0 -1
- data/test/rubygems/test_gem_package_tar_reader_entry.rb +11 -0
- data/test/rubygems/test_gem_package_tar_writer.rb +43 -7
- data/test/rubygems/test_gem_package_task.rb +2 -2
- data/test/rubygems/test_gem_path_support.rb +28 -11
- data/test/rubygems/test_gem_platform.rb +4 -5
- data/test/rubygems/test_gem_rdoc.rb +1 -136
- data/test/rubygems/test_gem_remote_fetcher.rb +241 -141
- data/test/rubygems/test_gem_request.rb +9 -9
- data/test/rubygems/test_gem_request_connection_pools.rb +24 -3
- data/test/rubygems/test_gem_request_set.rb +5 -5
- data/test/rubygems/test_gem_request_set_gem_dependency_api.rb +82 -64
- data/test/rubygems/test_gem_request_set_lockfile.rb +1 -2
- data/test/rubygems/test_gem_request_set_lockfile_parser.rb +4 -9
- data/test/rubygems/test_gem_request_set_lockfile_tokenizer.rb +1 -1
- data/test/rubygems/test_gem_requirement.rb +24 -4
- data/test/rubygems/test_gem_resolver.rb +13 -17
- data/test/rubygems/test_gem_resolver_activation_request.rb +0 -1
- data/test/rubygems/test_gem_resolver_api_set.rb +0 -1
- data/test/rubygems/test_gem_resolver_api_specification.rb +0 -1
- data/test/rubygems/test_gem_resolver_best_set.rb +0 -1
- data/test/rubygems/test_gem_resolver_composed_set.rb +0 -1
- data/test/rubygems/test_gem_resolver_conflict.rb +0 -1
- data/test/rubygems/test_gem_resolver_dependency_request.rb +0 -1
- data/test/rubygems/test_gem_resolver_git_set.rb +0 -1
- data/test/rubygems/test_gem_resolver_git_specification.rb +0 -1
- data/test/rubygems/test_gem_resolver_index_set.rb +0 -1
- data/test/rubygems/test_gem_resolver_index_specification.rb +0 -1
- data/test/rubygems/test_gem_resolver_installed_specification.rb +0 -1
- data/test/rubygems/test_gem_resolver_installer_set.rb +2 -3
- data/test/rubygems/test_gem_resolver_local_specification.rb +0 -1
- data/test/rubygems/test_gem_resolver_lock_set.rb +0 -1
- data/test/rubygems/test_gem_resolver_lock_specification.rb +0 -1
- data/test/rubygems/test_gem_resolver_requirement_list.rb +0 -1
- data/test/rubygems/test_gem_resolver_specification.rb +1 -2
- data/test/rubygems/test_gem_resolver_vendor_set.rb +0 -1
- data/test/rubygems/test_gem_resolver_vendor_specification.rb +0 -1
- data/test/rubygems/test_gem_security.rb +1 -3
- data/test/rubygems/test_gem_security_policy.rb +5 -6
- data/test/rubygems/test_gem_security_signer.rb +4 -3
- data/test/rubygems/test_gem_security_trust_dir.rb +1 -2
- data/test/rubygems/test_gem_server.rb +4 -4
- data/test/rubygems/test_gem_source.rb +0 -13
- data/test/rubygems/test_gem_source_fetch_problem.rb +0 -1
- data/test/rubygems/test_gem_source_git.rb +0 -1
- data/test/rubygems/test_gem_source_installed.rb +0 -1
- data/test/rubygems/test_gem_source_lock.rb +0 -1
- data/test/rubygems/test_gem_source_vendor.rb +0 -1
- data/test/rubygems/test_gem_spec_fetcher.rb +0 -1
- data/test/rubygems/test_gem_specification.rb +366 -198
- data/test/rubygems/test_gem_stream_ui.rb +15 -32
- data/test/rubygems/test_gem_stub_specification.rb +0 -2
- data/test/rubygems/test_gem_text.rb +4 -0
- data/test/rubygems/test_gem_uninstaller.rb +42 -3
- data/test/rubygems/test_gem_unsatisfiable_dependency_error.rb +0 -1
- data/test/rubygems/test_gem_uri_formatter.rb +0 -1
- data/test/rubygems/test_gem_util.rb +31 -11
- data/test/rubygems/test_gem_validator.rb +0 -1
- data/test/rubygems/test_gem_version.rb +11 -11
- data/test/rubygems/test_gem_version_option.rb +0 -1
- data/test/rubygems/test_remote_fetch_error.rb +0 -1
- data/test/rubygems/test_require.rb +67 -52
- data/util/CL2notes +1 -2
- data/util/ci +20 -12
- data/util/cops/deprecations.rb +52 -0
- data/util/create_certs.rb +6 -7
- data/util/create_certs.sh +27 -0
- data/util/create_encrypted_key.rb +4 -5
- data/util/patch_with_prs.rb +1 -1
- data/util/rubocop +8 -0
- data/util/update_bundled_ca_certificates.rb +12 -13
- data/util/update_changelog.rb +1 -1
- metadata +61 -51
- data/.autotest +0 -71
- data/.document +0 -5
- data/CONTRIBUTING.rdoc +0 -130
- data/CVE-2013-4287.txt +0 -35
- data/CVE-2013-4363.txt +0 -45
- data/CVE-2015-3900.txt +0 -40
- data/POLICIES.rdoc +0 -74
- data/test/rubygems/fix_openssl_warnings.rb +0 -13
@@ -73,7 +73,7 @@ prefix or only the files that are requireable.
|
|
73
73
|
|
74
74
|
names.each do |name|
|
75
75
|
found =
|
76
|
-
if options[:show_install_dir]
|
76
|
+
if options[:show_install_dir]
|
77
77
|
gem_install_dir name
|
78
78
|
else
|
79
79
|
gem_contents name
|
@@ -83,15 +83,15 @@ prefix or only the files that are requireable.
|
|
83
83
|
end
|
84
84
|
end
|
85
85
|
|
86
|
-
def files_in
|
87
|
-
if spec.default_gem?
|
86
|
+
def files_in(spec)
|
87
|
+
if spec.default_gem?
|
88
88
|
files_in_default_gem spec
|
89
89
|
else
|
90
90
|
files_in_gem spec
|
91
91
|
end
|
92
92
|
end
|
93
93
|
|
94
|
-
def files_in_gem
|
94
|
+
def files_in_gem(spec)
|
95
95
|
gem_path = spec.full_gem_path
|
96
96
|
extra = "/{#{spec.require_paths.join ','}}" if options[:lib_only]
|
97
97
|
glob = "#{gem_path}#{extra}/**/*"
|
@@ -102,7 +102,7 @@ prefix or only the files that are requireable.
|
|
102
102
|
end
|
103
103
|
end
|
104
104
|
|
105
|
-
def files_in_default_gem
|
105
|
+
def files_in_default_gem(spec)
|
106
106
|
spec.files.map do |file|
|
107
107
|
case file
|
108
108
|
when /\A#{spec.bindir}\//
|
@@ -115,7 +115,7 @@ prefix or only the files that are requireable.
|
|
115
115
|
end
|
116
116
|
end
|
117
117
|
|
118
|
-
def gem_contents
|
118
|
+
def gem_contents(name)
|
119
119
|
spec = spec_for name
|
120
120
|
|
121
121
|
return false unless spec
|
@@ -127,7 +127,7 @@ prefix or only the files that are requireable.
|
|
127
127
|
true
|
128
128
|
end
|
129
129
|
|
130
|
-
def gem_install_dir
|
130
|
+
def gem_install_dir(name)
|
131
131
|
spec = spec_for name
|
132
132
|
|
133
133
|
return false unless spec
|
@@ -138,27 +138,27 @@ prefix or only the files that are requireable.
|
|
138
138
|
end
|
139
139
|
|
140
140
|
def gem_names # :nodoc:
|
141
|
-
if options[:all]
|
141
|
+
if options[:all]
|
142
142
|
Gem::Specification.map(&:name)
|
143
143
|
else
|
144
144
|
get_all_gem_names
|
145
145
|
end
|
146
146
|
end
|
147
147
|
|
148
|
-
def path_description
|
149
|
-
if spec_dirs.empty?
|
148
|
+
def path_description(spec_dirs) # :nodoc:
|
149
|
+
if spec_dirs.empty?
|
150
150
|
"default gem paths"
|
151
151
|
else
|
152
152
|
"specified path"
|
153
153
|
end
|
154
154
|
end
|
155
155
|
|
156
|
-
def show_files
|
156
|
+
def show_files(files)
|
157
157
|
files.sort.each do |prefix, basename|
|
158
158
|
absolute_path = File.join(prefix, basename)
|
159
159
|
next if File.directory? absolute_path
|
160
160
|
|
161
|
-
if options[:prefix]
|
161
|
+
if options[:prefix]
|
162
162
|
say absolute_path
|
163
163
|
else
|
164
164
|
say basename
|
@@ -166,14 +166,14 @@ prefix or only the files that are requireable.
|
|
166
166
|
end
|
167
167
|
end
|
168
168
|
|
169
|
-
def spec_for
|
169
|
+
def spec_for(name)
|
170
170
|
spec = Gem::Specification.find_all_by_name(name, @version).last
|
171
171
|
|
172
172
|
return spec if spec
|
173
173
|
|
174
174
|
say "Unable to find gem '#{name}' in #{@path_kind}"
|
175
175
|
|
176
|
-
if Gem.configuration.verbose
|
176
|
+
if Gem.configuration.verbose
|
177
177
|
say "\nDirectories searched:"
|
178
178
|
@spec_dirs.sort.each { |dir| say dir }
|
179
179
|
end
|
@@ -188,4 +188,3 @@ prefix or only the files that are requireable.
|
|
188
188
|
end
|
189
189
|
|
190
190
|
end
|
191
|
-
|
@@ -54,7 +54,7 @@ use with other commands.
|
|
54
54
|
"#{program_name} REGEXP"
|
55
55
|
end
|
56
56
|
|
57
|
-
def fetch_remote_specs
|
57
|
+
def fetch_remote_specs(dependency) # :nodoc:
|
58
58
|
fetcher = Gem::SpecFetcher.fetcher
|
59
59
|
|
60
60
|
ss, = fetcher.spec_for_dependency dependency
|
@@ -62,7 +62,7 @@ use with other commands.
|
|
62
62
|
ss.map { |spec, _| spec }
|
63
63
|
end
|
64
64
|
|
65
|
-
def fetch_specs
|
65
|
+
def fetch_specs(name_pattern, dependency) # :nodoc:
|
66
66
|
specs = []
|
67
67
|
|
68
68
|
if local?
|
@@ -79,7 +79,7 @@ use with other commands.
|
|
79
79
|
specs.uniq.sort
|
80
80
|
end
|
81
81
|
|
82
|
-
def gem_dependency
|
82
|
+
def gem_dependency(pattern, version, prerelease) # :nodoc:
|
83
83
|
dependency = Gem::Deprecate.skip_during {
|
84
84
|
Gem::Dependency.new pattern, version
|
85
85
|
}
|
@@ -89,9 +89,9 @@ use with other commands.
|
|
89
89
|
dependency
|
90
90
|
end
|
91
91
|
|
92
|
-
def display_pipe
|
92
|
+
def display_pipe(specs) # :nodoc:
|
93
93
|
specs.each do |spec|
|
94
|
-
unless spec.dependencies.empty?
|
94
|
+
unless spec.dependencies.empty?
|
95
95
|
spec.dependencies.sort_by { |dep| dep.name }.each do |dep|
|
96
96
|
say "#{dep.name} --version '#{dep.requirement}'"
|
97
97
|
end
|
@@ -99,12 +99,12 @@ use with other commands.
|
|
99
99
|
end
|
100
100
|
end
|
101
101
|
|
102
|
-
def display_readable
|
102
|
+
def display_readable(specs, reverse) # :nodoc:
|
103
103
|
response = String.new
|
104
104
|
|
105
105
|
specs.each do |spec|
|
106
106
|
response << print_dependencies(spec)
|
107
|
-
unless reverse[spec.full_name].empty?
|
107
|
+
unless reverse[spec.full_name].empty?
|
108
108
|
response << " Used by\n"
|
109
109
|
reverse[spec.full_name].each do |sp, dep|
|
110
110
|
response << " #{sp} (#{dep})\n"
|
@@ -128,7 +128,7 @@ use with other commands.
|
|
128
128
|
|
129
129
|
reverse = reverse_dependencies specs
|
130
130
|
|
131
|
-
if options[:pipe_format]
|
131
|
+
if options[:pipe_format]
|
132
132
|
display_pipe specs
|
133
133
|
else
|
134
134
|
display_readable specs, reverse
|
@@ -136,13 +136,13 @@ use with other commands.
|
|
136
136
|
end
|
137
137
|
|
138
138
|
def ensure_local_only_reverse_dependencies # :nodoc:
|
139
|
-
if options[:reverse_dependencies] and remote? and not local?
|
139
|
+
if options[:reverse_dependencies] and remote? and not local?
|
140
140
|
alert_error 'Only reverse dependencies for local gems are supported.'
|
141
141
|
terminate_interaction 1
|
142
142
|
end
|
143
143
|
end
|
144
144
|
|
145
|
-
def ensure_specs
|
145
|
+
def ensure_specs(specs) # :nodoc:
|
146
146
|
return unless specs.empty?
|
147
147
|
|
148
148
|
patterns = options[:args].join ','
|
@@ -155,7 +155,7 @@ use with other commands.
|
|
155
155
|
def print_dependencies(spec, level = 0) # :nodoc:
|
156
156
|
response = String.new
|
157
157
|
response << ' ' * level + "Gem #{spec.full_name}\n"
|
158
|
-
unless spec.dependencies.empty?
|
158
|
+
unless spec.dependencies.empty?
|
159
159
|
spec.dependencies.sort_by { |dep| dep.name }.each do |dep|
|
160
160
|
response << ' ' * level + " #{dep}\n"
|
161
161
|
end
|
@@ -163,7 +163,7 @@ use with other commands.
|
|
163
163
|
response
|
164
164
|
end
|
165
165
|
|
166
|
-
def remote_specs
|
166
|
+
def remote_specs(dependency) # :nodoc:
|
167
167
|
fetcher = Gem::SpecFetcher.fetcher
|
168
168
|
|
169
169
|
ss, _ = fetcher.spec_for_dependency dependency
|
@@ -171,7 +171,7 @@ use with other commands.
|
|
171
171
|
ss.map { |s,o| s }
|
172
172
|
end
|
173
173
|
|
174
|
-
def reverse_dependencies
|
174
|
+
def reverse_dependencies(specs) # :nodoc:
|
175
175
|
reverse = Hash.new { |h, k| h[k] = [] }
|
176
176
|
|
177
177
|
return reverse unless options[:reverse_dependencies]
|
@@ -186,7 +186,7 @@ use with other commands.
|
|
186
186
|
##
|
187
187
|
# Returns an Array of [specification, dep] that are satisfied by +spec+.
|
188
188
|
|
189
|
-
def find_reverse_dependencies
|
189
|
+
def find_reverse_dependencies(spec) # :nodoc:
|
190
190
|
result = []
|
191
191
|
|
192
192
|
Gem::Specification.each do |sp|
|
@@ -194,7 +194,7 @@ use with other commands.
|
|
194
194
|
dep = Gem::Dependency.new(*dep) unless Gem::Dependency === dep
|
195
195
|
|
196
196
|
if spec.name == dep.name and
|
197
|
-
dep.requirement.satisfied_by?(spec.version)
|
197
|
+
dep.requirement.satisfied_by?(spec.version)
|
198
198
|
result << [sp.full_name, dep]
|
199
199
|
end
|
200
200
|
end
|
@@ -205,10 +205,10 @@ use with other commands.
|
|
205
205
|
|
206
206
|
private
|
207
207
|
|
208
|
-
def name_pattern
|
208
|
+
def name_pattern(args)
|
209
209
|
args << '' if args.empty?
|
210
210
|
|
211
|
-
if args.length == 1 and args.first =~ /\A\/(.*)\/(i)?\z/m
|
211
|
+
if args.length == 1 and args.first =~ /\A\/(.*)\/(i)?\z/m
|
212
212
|
flags = $2 ? Regexp::IGNORECASE : nil
|
213
213
|
Regexp.new $1, flags
|
214
214
|
else
|
@@ -97,7 +97,7 @@ lib/rubygems/defaults/operating_system.rb
|
|
97
97
|
true
|
98
98
|
end
|
99
99
|
|
100
|
-
def add_path
|
100
|
+
def add_path(out, path)
|
101
101
|
path.each do |component|
|
102
102
|
out << " - #{component}\n"
|
103
103
|
end
|
@@ -120,6 +120,8 @@ lib/rubygems/defaults/operating_system.rb
|
|
120
120
|
|
121
121
|
out << " - RUBY EXECUTABLE: #{Gem.ruby}\n"
|
122
122
|
|
123
|
+
out << " - GIT EXECUTABLE: #{git_path}\n"
|
124
|
+
|
123
125
|
out << " - EXECUTABLE DIRECTORY: #{Gem.bindir}\n"
|
124
126
|
|
125
127
|
out << " - SPEC CACHE DIRECTORY: #{Gem.spec_cache_dir}\n"
|
@@ -157,4 +159,21 @@ lib/rubygems/defaults/operating_system.rb
|
|
157
159
|
out
|
158
160
|
end
|
159
161
|
|
162
|
+
private
|
163
|
+
|
164
|
+
##
|
165
|
+
# Git binary path
|
166
|
+
|
167
|
+
def git_path
|
168
|
+
exts = ENV["PATHEXT"] ? ENV["PATHEXT"].split(";") : [""]
|
169
|
+
ENV["PATH"].split(File::PATH_SEPARATOR).each do |path|
|
170
|
+
exts.each do |ext|
|
171
|
+
exe = File.join(path, "git#{ext}")
|
172
|
+
return exe if File.executable?(exe) && !File.directory?(exe)
|
173
|
+
end
|
174
|
+
end
|
175
|
+
|
176
|
+
return nil
|
177
|
+
end
|
178
|
+
|
160
179
|
end
|
@@ -56,14 +56,14 @@ then repackaging it.
|
|
56
56
|
specs_and_sources, errors =
|
57
57
|
Gem::SpecFetcher.fetcher.spec_for_dependency dep
|
58
58
|
|
59
|
-
if platform
|
59
|
+
if platform
|
60
60
|
filtered = specs_and_sources.select { |s,| s.platform == platform }
|
61
61
|
specs_and_sources = filtered unless filtered.empty?
|
62
62
|
end
|
63
63
|
|
64
64
|
spec, source = specs_and_sources.max_by { |s,| s.version }
|
65
65
|
|
66
|
-
if spec.nil?
|
66
|
+
if spec.nil?
|
67
67
|
show_lookup_failure gem_name, version, errors, options[:domain]
|
68
68
|
next
|
69
69
|
end
|
@@ -75,4 +75,3 @@ then repackaging it.
|
|
75
75
|
end
|
76
76
|
|
77
77
|
end
|
78
|
-
|
@@ -67,13 +67,13 @@ Marshal::MINOR_VERSION constants. It is used to ensure compatibility.
|
|
67
67
|
options[:build_modern] = true
|
68
68
|
|
69
69
|
if not File.exist?(options[:directory]) or
|
70
|
-
not File.directory?(options[:directory])
|
70
|
+
not File.directory?(options[:directory])
|
71
71
|
alert_error "unknown directory name #{options[:directory]}."
|
72
72
|
terminate_interaction 1
|
73
73
|
else
|
74
74
|
indexer = Gem::Indexer.new options.delete(:directory), options
|
75
75
|
|
76
|
-
if options[:update]
|
76
|
+
if options[:update]
|
77
77
|
indexer.update_index
|
78
78
|
else
|
79
79
|
indexer.generate_index
|
@@ -82,4 +82,3 @@ Marshal::MINOR_VERSION constants. It is used to ensure compatibility.
|
|
82
82
|
end
|
83
83
|
|
84
84
|
end
|
85
|
-
|
@@ -4,7 +4,7 @@ require 'rubygems/command'
|
|
4
4
|
class Gem::Commands::HelpCommand < Gem::Command
|
5
5
|
|
6
6
|
# :stopdoc:
|
7
|
-
EXAMPLES = <<-EOF
|
7
|
+
EXAMPLES = <<-EOF.freeze
|
8
8
|
Some examples of 'gem' usage.
|
9
9
|
|
10
10
|
* Install 'rake', either from local directory or remote server:
|
@@ -53,7 +53,7 @@ Some examples of 'gem' usage.
|
|
53
53
|
gem update --system
|
54
54
|
EOF
|
55
55
|
|
56
|
-
GEM_DEPENDENCIES = <<-EOF
|
56
|
+
GEM_DEPENDENCIES = <<-EOF.freeze
|
57
57
|
A gem dependencies file allows installation of a consistent set of gems across
|
58
58
|
multiple environments. The RubyGems implementation is designed to be
|
59
59
|
compatible with Bundler's Gemfile format. You can see additional
|
@@ -230,7 +230,7 @@ default. This may be overridden with the :development_group option:
|
|
230
230
|
|
231
231
|
EOF
|
232
232
|
|
233
|
-
PLATFORMS = <<-'EOF'
|
233
|
+
PLATFORMS = <<-'EOF'.freeze
|
234
234
|
RubyGems platforms are composed of three parts, a CPU, an OS, and a
|
235
235
|
version. These values are taken from values in rbconfig.rb. You can view
|
236
236
|
your current platform by running `gem environment`.
|
@@ -277,7 +277,7 @@ platform.
|
|
277
277
|
["examples", EXAMPLES],
|
278
278
|
["gem_dependencies", GEM_DEPENDENCIES],
|
279
279
|
["platforms", PLATFORMS],
|
280
|
-
]
|
280
|
+
].freeze
|
281
281
|
# :startdoc:
|
282
282
|
|
283
283
|
def initialize
|
@@ -297,8 +297,8 @@ platform.
|
|
297
297
|
begins? command, arg
|
298
298
|
end
|
299
299
|
|
300
|
-
if help
|
301
|
-
if Symbol === help
|
300
|
+
if help
|
301
|
+
if Symbol === help
|
302
302
|
send help
|
303
303
|
else
|
304
304
|
say help
|
@@ -306,10 +306,10 @@ platform.
|
|
306
306
|
return
|
307
307
|
end
|
308
308
|
|
309
|
-
if options[:help]
|
309
|
+
if options[:help]
|
310
310
|
show_help
|
311
311
|
|
312
|
-
elsif arg
|
312
|
+
elsif arg
|
313
313
|
show_command_help arg
|
314
314
|
|
315
315
|
else
|
@@ -334,7 +334,7 @@ platform.
|
|
334
334
|
command = @command_manager[cmd_name]
|
335
335
|
|
336
336
|
summary =
|
337
|
-
if command
|
337
|
+
if command
|
338
338
|
command.summary
|
339
339
|
else
|
340
340
|
"[No command found for #{cmd_name}]"
|
@@ -356,15 +356,15 @@ platform.
|
|
356
356
|
say out.join("\n")
|
357
357
|
end
|
358
358
|
|
359
|
-
def show_command_help
|
359
|
+
def show_command_help(command_name) # :nodoc:
|
360
360
|
command_name = command_name.downcase
|
361
361
|
|
362
362
|
possibilities = @command_manager.find_command_possibilities command_name
|
363
363
|
|
364
|
-
if possibilities.size == 1
|
364
|
+
if possibilities.size == 1
|
365
365
|
command = @command_manager[possibilities.first]
|
366
366
|
command.invoke("--help")
|
367
|
-
elsif possibilities.size > 1
|
367
|
+
elsif possibilities.size > 1
|
368
368
|
alert_warning "Ambiguous command #{command_name} (#{possibilities.join(', ')})"
|
369
369
|
else
|
370
370
|
alert_warning "Unknown command #{command_name}. Try: gem help commands"
|
@@ -372,4 +372,3 @@ platform.
|
|
372
372
|
end
|
373
373
|
|
374
374
|
end
|
375
|
-
|
@@ -0,0 +1,33 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'rubygems/command'
|
4
|
+
require 'rubygems/commands/query_command'
|
5
|
+
|
6
|
+
class Gem::Commands::InfoCommand < Gem::Commands::QueryCommand
|
7
|
+
def initialize
|
8
|
+
super "info", "Show information for the given gem"
|
9
|
+
|
10
|
+
remove_option('--name-matches')
|
11
|
+
remove_option('-d')
|
12
|
+
|
13
|
+
defaults[:details] = true
|
14
|
+
defaults[:exact] = true
|
15
|
+
end
|
16
|
+
|
17
|
+
def description # :nodoc:
|
18
|
+
"Info prints information about the gem such as name,"\
|
19
|
+
" description, website, license and installed paths"
|
20
|
+
end
|
21
|
+
|
22
|
+
def usage # :nodoc:
|
23
|
+
"#{program_name} GEMNAME"
|
24
|
+
end
|
25
|
+
|
26
|
+
def arguments # :nodoc:
|
27
|
+
"GEMNAME name of the gem to print information about"
|
28
|
+
end
|
29
|
+
|
30
|
+
def defaults_str
|
31
|
+
"--local"
|
32
|
+
end
|
33
|
+
end
|
@@ -132,7 +132,7 @@ You can use `i` command instead of `install`.
|
|
132
132
|
end
|
133
133
|
|
134
134
|
def check_install_dir # :nodoc:
|
135
|
-
if options[:install_dir] and options[:user_install]
|
135
|
+
if options[:install_dir] and options[:user_install]
|
136
136
|
alert_error "Use --install-dir or --user-install but not both"
|
137
137
|
terminate_interaction 1
|
138
138
|
end
|
@@ -140,22 +140,22 @@ You can use `i` command instead of `install`.
|
|
140
140
|
|
141
141
|
def check_version # :nodoc:
|
142
142
|
if options[:version] != Gem::Requirement.default and
|
143
|
-
get_all_gem_names.size > 1
|
144
|
-
alert_error "Can't use --version
|
143
|
+
get_all_gem_names.size > 1
|
144
|
+
alert_error "Can't use --version with multiple gems. You can specify multiple gems with" \
|
145
|
+
" version requirements using `gem install 'my_gem:1.0.0' 'my_other_gem:~>2.0.0'`"
|
145
146
|
terminate_interaction 1
|
146
147
|
end
|
147
148
|
end
|
148
149
|
|
149
150
|
def execute
|
150
|
-
|
151
|
-
if options.include? :gemdeps then
|
151
|
+
if options.include? :gemdeps
|
152
152
|
install_from_gemdeps
|
153
153
|
return # not reached
|
154
154
|
end
|
155
155
|
|
156
156
|
@installed_specs = []
|
157
157
|
|
158
|
-
ENV.delete 'GEM_PATH' if options[:install_dir].nil?
|
158
|
+
ENV.delete 'GEM_PATH' if options[:install_dir].nil?
|
159
159
|
|
160
160
|
check_install_dir
|
161
161
|
check_version
|
@@ -188,13 +188,13 @@ You can use `i` command instead of `install`.
|
|
188
188
|
terminate_interaction
|
189
189
|
end
|
190
190
|
|
191
|
-
def install_gem
|
191
|
+
def install_gem(name, version) # :nodoc:
|
192
192
|
return if options[:conservative] and
|
193
193
|
not Gem::Dependency.new(name, version).matching_specs.empty?
|
194
194
|
|
195
195
|
req = Gem::Requirement.create(version)
|
196
196
|
|
197
|
-
if options[:ignore_dependencies]
|
197
|
+
if options[:ignore_dependencies]
|
198
198
|
install_gem_without_dependencies name, req
|
199
199
|
else
|
200
200
|
inst = Gem::DependencyInstaller.new options
|
@@ -216,11 +216,11 @@ You can use `i` command instead of `install`.
|
|
216
216
|
end
|
217
217
|
end
|
218
218
|
|
219
|
-
def install_gem_without_dependencies
|
219
|
+
def install_gem_without_dependencies(name, req) # :nodoc:
|
220
220
|
gem = nil
|
221
221
|
|
222
|
-
if local?
|
223
|
-
if name =~ /\.gem$/ and File.file? name
|
222
|
+
if local?
|
223
|
+
if name =~ /\.gem$/ and File.file? name
|
224
224
|
source = Gem::Source::SpecificFile.new name
|
225
225
|
spec = source.spec
|
226
226
|
else
|
@@ -230,7 +230,7 @@ You can use `i` command instead of `install`.
|
|
230
230
|
gem = source.download spec if spec
|
231
231
|
end
|
232
232
|
|
233
|
-
if remote? and not gem
|
233
|
+
if remote? and not gem
|
234
234
|
dependency = Gem::Dependency.new name, req
|
235
235
|
dependency.prerelease = options[:prerelease]
|
236
236
|
|
@@ -257,17 +257,22 @@ You can use `i` command instead of `install`.
|
|
257
257
|
|
258
258
|
get_all_gem_names_and_versions.each do |gem_name, gem_version|
|
259
259
|
gem_version ||= options[:version]
|
260
|
+
domain = options[:domain]
|
261
|
+
domain = :local unless options[:suggest_alternate]
|
260
262
|
|
261
263
|
begin
|
262
264
|
install_gem gem_name, gem_version
|
263
265
|
rescue Gem::InstallError => e
|
264
266
|
alert_error "Error installing #{gem_name}:\n\t#{e.message}"
|
265
267
|
exit_code |= 1
|
266
|
-
rescue Gem::GemNotFoundException
|
267
|
-
domain = options[:domain]
|
268
|
-
domain = :local unless options[:suggest_alternate]
|
268
|
+
rescue Gem::GemNotFoundException => e
|
269
269
|
show_lookup_failure e.name, e.version, e.errors, domain
|
270
270
|
|
271
|
+
exit_code |= 2
|
272
|
+
rescue Gem::UnsatisfiableDependencyError => e
|
273
|
+
show_lookup_failure e.name, e.version, e.errors, domain,
|
274
|
+
"'#{gem_name}' (#{gem_version})"
|
275
|
+
|
271
276
|
exit_code |= 2
|
272
277
|
end
|
273
278
|
end
|
@@ -287,7 +292,7 @@ You can use `i` command instead of `install`.
|
|
287
292
|
require 'rubygems/rdoc'
|
288
293
|
end
|
289
294
|
|
290
|
-
def show_install_errors
|
295
|
+
def show_install_errors(errors) # :nodoc:
|
291
296
|
return unless errors
|
292
297
|
|
293
298
|
errors.each do |x|
|
@@ -307,4 +312,3 @@ You can use `i` command instead of `install`.
|
|
307
312
|
end
|
308
313
|
|
309
314
|
end
|
310
|
-
|
@@ -59,7 +59,7 @@ lock it down to the exact version.
|
|
59
59
|
end
|
60
60
|
|
61
61
|
def complain(message)
|
62
|
-
if options[:strict]
|
62
|
+
if options[:strict]
|
63
63
|
raise Gem::Exception, message
|
64
64
|
else
|
65
65
|
say "# #{message}"
|
@@ -78,7 +78,7 @@ lock it down to the exact version.
|
|
78
78
|
|
79
79
|
spec = Gem::Specification.load spec_path(full_name)
|
80
80
|
|
81
|
-
if spec.nil?
|
81
|
+
if spec.nil?
|
82
82
|
complain "Could not find gem #{full_name}, try using the full name"
|
83
83
|
next
|
84
84
|
end
|
@@ -90,7 +90,7 @@ lock it down to the exact version.
|
|
90
90
|
next if locked[dep.name]
|
91
91
|
candidates = dep.matching_specs
|
92
92
|
|
93
|
-
if candidates.empty?
|
93
|
+
if candidates.empty?
|
94
94
|
complain "Unable to satisfy '#{dep}' from currently installed gems"
|
95
95
|
else
|
96
96
|
pending << candidates.last.full_name
|
@@ -108,4 +108,3 @@ lock it down to the exact version.
|
|
108
108
|
end
|
109
109
|
|
110
110
|
end
|
111
|
-
|
@@ -11,9 +11,9 @@ class Gem::Commands::OpenCommand < Gem::Command
|
|
11
11
|
def initialize
|
12
12
|
super 'open', 'Open gem sources in editor'
|
13
13
|
|
14
|
-
add_option('-e', '--editor
|
15
|
-
"
|
16
|
-
options[:editor] =
|
14
|
+
add_option('-e', '--editor COMMAND', String,
|
15
|
+
"Prepends COMMAND to gem path. Could be used to specify editor.") do |command, options|
|
16
|
+
options[:editor] = command || get_env_editor
|
17
17
|
end
|
18
18
|
add_option('-v', '--version VERSION', String,
|
19
19
|
"Opens specific gem version") do |version|
|
@@ -32,14 +32,14 @@ class Gem::Commands::OpenCommand < Gem::Command
|
|
32
32
|
def description # :nodoc:
|
33
33
|
<<-EOF
|
34
34
|
The open command opens gem in editor and changes current path
|
35
|
-
to gem's source directory.
|
36
|
-
|
37
|
-
$GEM_EDITOR variables.
|
35
|
+
to gem's source directory.
|
36
|
+
Editor command can be specified with -e option, otherwise rubygems
|
37
|
+
will look for editor in $EDITOR, $VISUAL and $GEM_EDITOR variables.
|
38
38
|
EOF
|
39
39
|
end
|
40
40
|
|
41
41
|
def usage # :nodoc:
|
42
|
-
"#{program_name} GEMNAME [-e
|
42
|
+
"#{program_name} GEMNAME [-e COMMAND]"
|
43
43
|
end
|
44
44
|
|
45
45
|
def get_env_editor
|
@@ -58,20 +58,26 @@ class Gem::Commands::OpenCommand < Gem::Command
|
|
58
58
|
terminate_interaction 1 unless found
|
59
59
|
end
|
60
60
|
|
61
|
-
def open_gem
|
61
|
+
def open_gem(name)
|
62
62
|
spec = spec_for name
|
63
|
+
|
63
64
|
return false unless spec
|
64
65
|
|
66
|
+
if spec.default_gem?
|
67
|
+
say "'#{name}' is a default gem and can't be opened."
|
68
|
+
return false
|
69
|
+
end
|
70
|
+
|
65
71
|
open_editor(spec.full_gem_path)
|
66
72
|
end
|
67
73
|
|
68
|
-
def open_editor
|
74
|
+
def open_editor(path)
|
69
75
|
Dir.chdir(path) do
|
70
76
|
system(*@editor.split(/\s+/) + [path])
|
71
77
|
end
|
72
78
|
end
|
73
79
|
|
74
|
-
def spec_for
|
80
|
+
def spec_for(name)
|
75
81
|
spec = Gem::Specification.find_all_by_name(name, @version).first
|
76
82
|
|
77
83
|
return spec if spec
|