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
@@ -0,0 +1,23 @@
|
|
1
|
+
bundle-remove(1) -- Removes gems from the Gemfile
|
2
|
+
===========================================================================
|
3
|
+
|
4
|
+
## SYNOPSIS
|
5
|
+
|
6
|
+
`bundle remove [GEM [GEM ...]] [--install]`
|
7
|
+
|
8
|
+
## DESCRIPTION
|
9
|
+
|
10
|
+
Removes the given gems from the Gemfile while ensuring that the resulting Gemfile is still valid. If a gem cannot be removed, a warning is printed. If a gem is already absent from the Gemfile, and error is raised.
|
11
|
+
|
12
|
+
## OPTIONS
|
13
|
+
|
14
|
+
* `--install`:
|
15
|
+
Runs `bundle install` after the given gems have been removed from the Gemfile, which ensures that both the lockfile and the installed gems on disk are also updated to remove the given gem(s).
|
16
|
+
|
17
|
+
Example:
|
18
|
+
|
19
|
+
bundle remove rails
|
20
|
+
|
21
|
+
bundle remove rails rack
|
22
|
+
|
23
|
+
bundle remove rails rack --install
|
data/bundler/man/bundle.ronn
CHANGED
@@ -94,6 +94,9 @@ We divide `bundle` subcommands into primary commands and utilities:
|
|
94
94
|
* [`bundle doctor(1)`](bundle-doctor.1.html):
|
95
95
|
Display warnings about common problems
|
96
96
|
|
97
|
+
* [`bundle remove(1)`](bundle-remove.1.html):
|
98
|
+
Removes gems from the Gemfile
|
99
|
+
|
97
100
|
## PLUGINS
|
98
101
|
|
99
102
|
When running a command that isn't listed in PRIMARY COMMANDS or UTILITIES,
|
@@ -103,7 +103,7 @@ class Gem::AvailableSet
|
|
103
103
|
# Other options are :shallow for only direct development dependencies of the
|
104
104
|
# gems in this set or :all for all development dependencies.
|
105
105
|
|
106
|
-
def to_request_set
|
106
|
+
def to_request_set(development = :none)
|
107
107
|
request_set = Gem::RequestSet.new
|
108
108
|
request_set.development = :all == development
|
109
109
|
|
@@ -65,10 +65,10 @@ class Gem::BasicSpecification
|
|
65
65
|
##
|
66
66
|
# Return true if this spec can require +file+.
|
67
67
|
|
68
|
-
def contains_requirable_file?
|
69
|
-
if @ignored
|
68
|
+
def contains_requirable_file?(file)
|
69
|
+
if @ignored
|
70
70
|
return false
|
71
|
-
elsif missing_extensions?
|
71
|
+
elsif missing_extensions?
|
72
72
|
@ignored = true
|
73
73
|
|
74
74
|
warn "Ignoring #{full_name} because its extensions are not built. " +
|
@@ -124,7 +124,7 @@ class Gem::BasicSpecification
|
|
124
124
|
# default Ruby platform.
|
125
125
|
|
126
126
|
def full_name
|
127
|
-
if platform == Gem::Platform::RUBY or platform.nil?
|
127
|
+
if platform == Gem::Platform::RUBY or platform.nil?
|
128
128
|
"#{name}-#{version}".dup.untaint
|
129
129
|
else
|
130
130
|
"#{name}-#{version}-#{platform}".dup.untaint
|
@@ -152,7 +152,7 @@ class Gem::BasicSpecification
|
|
152
152
|
# The path to the data directory for this gem.
|
153
153
|
|
154
154
|
def datadir
|
155
|
-
# TODO: drop the extra ", gem_name" which is uselessly redundant
|
155
|
+
# TODO: drop the extra ", gem_name" which is uselessly redundant
|
156
156
|
File.expand_path(File.join(gems_dir, full_name, "data", name)).untaint
|
157
157
|
end
|
158
158
|
|
@@ -160,8 +160,8 @@ class Gem::BasicSpecification
|
|
160
160
|
# Full path of the target library file.
|
161
161
|
# If the file is not in this gem, return nil.
|
162
162
|
|
163
|
-
def to_fullpath
|
164
|
-
if activated?
|
163
|
+
def to_fullpath(path)
|
164
|
+
if activated?
|
165
165
|
@paths_map ||= {}
|
166
166
|
@paths_map[path] ||=
|
167
167
|
begin
|
@@ -249,7 +249,7 @@ class Gem::BasicSpecification
|
|
249
249
|
def source_paths
|
250
250
|
paths = raw_require_paths.dup
|
251
251
|
|
252
|
-
if have_extensions?
|
252
|
+
if have_extensions?
|
253
253
|
ext_dirs = extensions.map do |extension|
|
254
254
|
extension.split(File::SEPARATOR, 2).first
|
255
255
|
end.uniq
|
@@ -263,7 +263,7 @@ class Gem::BasicSpecification
|
|
263
263
|
##
|
264
264
|
# Return all files in this gem that match for +glob+.
|
265
265
|
|
266
|
-
def matches_for_glob
|
266
|
+
def matches_for_glob(glob) # TODO: rename?
|
267
267
|
# TODO: do we need these?? Kill it
|
268
268
|
glob = File.join(self.lib_dirs_glob, glob)
|
269
269
|
|
@@ -276,13 +276,13 @@ class Gem::BasicSpecification
|
|
276
276
|
|
277
277
|
def lib_dirs_glob
|
278
278
|
dirs = if self.raw_require_paths
|
279
|
-
if self.raw_require_paths.size > 1
|
279
|
+
if self.raw_require_paths.size > 1
|
280
280
|
"{#{self.raw_require_paths.join(',')}}"
|
281
281
|
else
|
282
282
|
self.raw_require_paths.first
|
283
283
|
end
|
284
284
|
else
|
285
|
-
|
285
|
+
"lib" # default value for require_paths for bundler/inline
|
286
286
|
end
|
287
287
|
|
288
288
|
"#{self.full_gem_path}/#{dirs}".dup.untaint
|
@@ -316,7 +316,7 @@ class Gem::BasicSpecification
|
|
316
316
|
|
317
317
|
def have_extensions?; !extensions.empty?; end
|
318
318
|
|
319
|
-
def have_file?
|
319
|
+
def have_file?(file, suffixes)
|
320
320
|
return true if raw_require_paths.any? do |path|
|
321
321
|
base = File.join(gems_dir, full_name, path.untaint, file).untaint
|
322
322
|
suffixes.any? { |suf| File.file? base + suf }
|
@@ -87,9 +87,9 @@ To install the missing version, run `gem install bundler:#{vr.first}`
|
|
87
87
|
return unless gemfile
|
88
88
|
|
89
89
|
lockfile = case gemfile
|
90
|
-
|
91
|
-
|
92
|
-
|
90
|
+
when "gems.rb" then "gems.locked"
|
91
|
+
else "#{gemfile}.lock"
|
92
|
+
end.dup.untaint
|
93
93
|
|
94
94
|
return unless File.file?(lockfile)
|
95
95
|
|
data/lib/rubygems/command.rb
CHANGED
@@ -152,16 +152,24 @@ class Gem::Command
|
|
152
152
|
#--
|
153
153
|
# TODO: replace +domain+ with a parameter to suppress suggestions
|
154
154
|
|
155
|
-
def show_lookup_failure(gem_name, version, errors, domain)
|
155
|
+
def show_lookup_failure(gem_name, version, errors, domain, required_by = nil)
|
156
|
+
gem = "'#{gem_name}' (#{version})"
|
157
|
+
msg = String.new "Could not find a valid gem #{gem}"
|
158
|
+
|
156
159
|
if errors and !errors.empty?
|
157
|
-
msg
|
160
|
+
msg << ", here is why:\n"
|
158
161
|
errors.each { |x| msg << " #{x.wordy}\n" }
|
159
|
-
alert_error msg
|
160
162
|
else
|
161
|
-
|
163
|
+
if required_by and gem != required_by
|
164
|
+
msg << " (required by #{required_by}) in any repository"
|
165
|
+
else
|
166
|
+
msg << " in any repository"
|
167
|
+
end
|
162
168
|
end
|
163
169
|
|
164
|
-
|
170
|
+
alert_error msg
|
171
|
+
|
172
|
+
unless domain == :local # HACK
|
165
173
|
suggestions = Gem::SpecFetcher.fetcher.suggest_gems_from_name gem_name
|
166
174
|
|
167
175
|
unless suggestions.empty?
|
@@ -176,7 +184,7 @@ class Gem::Command
|
|
176
184
|
def get_all_gem_names
|
177
185
|
args = options[:args]
|
178
186
|
|
179
|
-
if args.nil? or args.empty?
|
187
|
+
if args.nil? or args.empty?
|
180
188
|
raise Gem::CommandLineError,
|
181
189
|
"Please specify at least one gem name (e.g. gem build GEMNAME)"
|
182
190
|
end
|
@@ -206,12 +214,12 @@ class Gem::Command
|
|
206
214
|
def get_one_gem_name
|
207
215
|
args = options[:args]
|
208
216
|
|
209
|
-
if args.nil? or args.empty?
|
217
|
+
if args.nil? or args.empty?
|
210
218
|
raise Gem::CommandLineError,
|
211
219
|
"Please specify a gem name on the command line (e.g. gem build GEMNAME)"
|
212
220
|
end
|
213
221
|
|
214
|
-
if args.size > 1
|
222
|
+
if args.size > 1
|
215
223
|
raise Gem::CommandLineError,
|
216
224
|
"Too many gem names (#{args.join(', ')}); please specify only one"
|
217
225
|
end
|
@@ -305,9 +313,9 @@ class Gem::Command
|
|
305
313
|
self.ui = ui = Gem::SilentUI.new
|
306
314
|
end
|
307
315
|
|
308
|
-
if options[:help]
|
316
|
+
if options[:help]
|
309
317
|
show_help
|
310
|
-
elsif @when_invoked
|
318
|
+
elsif @when_invoked
|
311
319
|
@when_invoked.call options
|
312
320
|
else
|
313
321
|
execute
|
@@ -353,7 +361,7 @@ class Gem::Command
|
|
353
361
|
|
354
362
|
def remove_option(name)
|
355
363
|
@option_groups.each do |_, option_list|
|
356
|
-
option_list.reject! { |args, _| args.any? { |x| x =~ /^#{name}/ } }
|
364
|
+
option_list.reject! { |args, _| args.any? { |x| x.is_a?(String) && x =~ /^#{name}/ } }
|
357
365
|
end
|
358
366
|
end
|
359
367
|
|
@@ -443,7 +451,7 @@ class Gem::Command
|
|
443
451
|
# Adds a section with +title+ and +content+ to the parser help view. Used
|
444
452
|
# for adding command arguments and default arguments.
|
445
453
|
|
446
|
-
def add_parser_run_info
|
454
|
+
def add_parser_run_info(title, content)
|
447
455
|
return if content.empty?
|
448
456
|
|
449
457
|
@parser.separator nil
|
@@ -496,7 +504,6 @@ class Gem::Command
|
|
496
504
|
@parser.separator " #{header}Options:"
|
497
505
|
|
498
506
|
option_list.each do |args, handler|
|
499
|
-
args.select { |arg| arg =~ /^-/ }
|
500
507
|
@parser.on(*args) do |value|
|
501
508
|
handler.call(value, @options)
|
502
509
|
end
|
@@ -523,7 +530,7 @@ class Gem::Command
|
|
523
530
|
add_common_option('-V', '--[no-]verbose',
|
524
531
|
'Set the verbose level of output') do |value, options|
|
525
532
|
# Set us to "really verbose" so the progress meter works
|
526
|
-
if Gem.configuration.verbose and value
|
533
|
+
if Gem.configuration.verbose and value
|
527
534
|
Gem.configuration.verbose = 1
|
528
535
|
else
|
529
536
|
Gem.configuration.verbose = value
|
@@ -562,7 +569,7 @@ class Gem::Command
|
|
562
569
|
|
563
570
|
# :stopdoc:
|
564
571
|
|
565
|
-
HELP = <<-HELP
|
572
|
+
HELP = <<-HELP.freeze
|
566
573
|
RubyGems is a sophisticated package manager for Ruby. This is a
|
567
574
|
basic help message containing pointers to more information.
|
568
575
|
|
@@ -47,6 +47,7 @@ class Gem::CommandManager
|
|
47
47
|
:fetch,
|
48
48
|
:generate_index,
|
49
49
|
:help,
|
50
|
+
:info,
|
50
51
|
:install,
|
51
52
|
:list,
|
52
53
|
:lock,
|
@@ -70,7 +71,11 @@ class Gem::CommandManager
|
|
70
71
|
:update,
|
71
72
|
:which,
|
72
73
|
:yank,
|
73
|
-
]
|
74
|
+
].freeze
|
75
|
+
|
76
|
+
ALIAS_COMMANDS = {
|
77
|
+
'i' => 'install'
|
78
|
+
}.freeze
|
74
79
|
|
75
80
|
##
|
76
81
|
# Return the authoritative instance of the command manager.
|
@@ -152,7 +157,7 @@ class Gem::CommandManager
|
|
152
157
|
end
|
153
158
|
|
154
159
|
def process_args(args, build_args=nil)
|
155
|
-
if args.empty?
|
160
|
+
if args.empty?
|
156
161
|
say Gem::Command::HELP
|
157
162
|
terminate_interaction 1
|
158
163
|
end
|
@@ -164,6 +169,12 @@ class Gem::CommandManager
|
|
164
169
|
when '-v', '--version' then
|
165
170
|
say Gem::VERSION
|
166
171
|
terminate_interaction 0
|
172
|
+
when '--no-ri', '--no-rdoc' then
|
173
|
+
# This was added to compensate for a deprecation warning not being shown
|
174
|
+
# in Rubygems 2.x.x.
|
175
|
+
# TODO: Remove when Rubygems 3.1 is released.
|
176
|
+
alert_error "Invalid option: #{args.first}. Use --no-document instead."
|
177
|
+
terminate_interaction 1
|
167
178
|
when /^-/ then
|
168
179
|
alert_error clean_text("Invalid option: #{args.first}. See 'gem --help'.")
|
169
180
|
terminate_interaction 1
|
@@ -175,18 +186,25 @@ class Gem::CommandManager
|
|
175
186
|
end
|
176
187
|
|
177
188
|
def find_command(cmd_name)
|
189
|
+
cmd_name = find_alias_command cmd_name
|
190
|
+
|
178
191
|
possibilities = find_command_possibilities cmd_name
|
179
192
|
|
180
|
-
if possibilities.size > 1
|
193
|
+
if possibilities.size > 1
|
181
194
|
raise Gem::CommandLineError,
|
182
195
|
"Ambiguous command #{cmd_name} matches [#{possibilities.join(', ')}]"
|
183
|
-
elsif possibilities.empty?
|
196
|
+
elsif possibilities.empty?
|
184
197
|
raise Gem::CommandLineError, "Unknown command #{cmd_name}"
|
185
198
|
end
|
186
199
|
|
187
200
|
self[possibilities.first]
|
188
201
|
end
|
189
202
|
|
203
|
+
def find_alias_command(cmd_name)
|
204
|
+
alias_name = ALIAS_COMMANDS[cmd_name]
|
205
|
+
alias_name ? alias_name : cmd_name
|
206
|
+
end
|
207
|
+
|
190
208
|
def find_command_possibilities(cmd_name)
|
191
209
|
len = cmd_name.length
|
192
210
|
|
@@ -220,4 +238,3 @@ class Gem::CommandManager
|
|
220
238
|
end
|
221
239
|
|
222
240
|
end
|
223
|
-
|
@@ -10,6 +10,18 @@ class Gem::Commands::BuildCommand < Gem::Command
|
|
10
10
|
add_option '--force', 'skip validation of the spec' do |value, options|
|
11
11
|
options[:force] = true
|
12
12
|
end
|
13
|
+
|
14
|
+
add_option '--strict', 'consider warnings as errors when validating the spec' do |value, options|
|
15
|
+
options[:strict] = true
|
16
|
+
end
|
17
|
+
|
18
|
+
add_option '-o', '--output FILE', 'output gem with the given filename' do |value, options|
|
19
|
+
options[:output] = value
|
20
|
+
end
|
21
|
+
|
22
|
+
add_option '-C PATH', '', 'Run as if gem build was started in <PATH> instead of the current working directory.' do |value, options|
|
23
|
+
options[:build_path] = value
|
24
|
+
end
|
13
25
|
end
|
14
26
|
|
15
27
|
def arguments # :nodoc:
|
@@ -32,6 +44,11 @@ with gem spec:
|
|
32
44
|
$ cd my_gem-1.0
|
33
45
|
[edit gem contents]
|
34
46
|
$ gem build my_gem-1.0.gemspec
|
47
|
+
|
48
|
+
Gems can be saved to a specified filename with the output option:
|
49
|
+
|
50
|
+
$ gem build my_gem-1.0.gemspec --output=release.gem
|
51
|
+
|
35
52
|
EOF
|
36
53
|
end
|
37
54
|
|
@@ -46,20 +63,37 @@ with gem spec:
|
|
46
63
|
gemspec += '.gemspec' if File.exist? gemspec + '.gemspec'
|
47
64
|
end
|
48
65
|
|
49
|
-
if File.exist? gemspec
|
50
|
-
spec = Gem::Specification.load
|
66
|
+
if File.exist? gemspec
|
67
|
+
spec = Gem::Specification.load(gemspec)
|
51
68
|
|
52
|
-
if
|
53
|
-
|
69
|
+
if options[:build_path]
|
70
|
+
Dir.chdir(File.dirname(gemspec)) do
|
71
|
+
spec = Gem::Specification.load File.basename(gemspec)
|
72
|
+
build_package(spec)
|
73
|
+
end
|
54
74
|
else
|
55
|
-
|
56
|
-
terminate_interaction 1
|
75
|
+
build_package(spec)
|
57
76
|
end
|
77
|
+
|
58
78
|
else
|
59
79
|
alert_error "Gemspec file not found: #{gemspec}"
|
60
80
|
terminate_interaction 1
|
61
81
|
end
|
62
82
|
end
|
63
83
|
|
64
|
-
|
84
|
+
private
|
65
85
|
|
86
|
+
def build_package(spec)
|
87
|
+
if spec
|
88
|
+
Gem::Package.build(
|
89
|
+
spec,
|
90
|
+
options[:force],
|
91
|
+
options[:strict],
|
92
|
+
options[:output]
|
93
|
+
)
|
94
|
+
else
|
95
|
+
alert_error "Error loading gemspec. Aborting."
|
96
|
+
terminate_interaction 1
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
@@ -14,15 +14,16 @@ class Gem::Commands::CertCommand < Gem::Command
|
|
14
14
|
super 'cert', 'Manage RubyGems certificates and signing settings',
|
15
15
|
:add => [], :remove => [], :list => [], :build => [], :sign => []
|
16
16
|
|
17
|
-
OptionParser.accept OpenSSL::X509::Certificate do |
|
17
|
+
OptionParser.accept OpenSSL::X509::Certificate do |certificate_file|
|
18
18
|
begin
|
19
|
-
OpenSSL::X509::Certificate.new File.read
|
19
|
+
certificate = OpenSSL::X509::Certificate.new File.read certificate_file
|
20
20
|
rescue Errno::ENOENT
|
21
|
-
raise OptionParser::InvalidArgument, "#{
|
21
|
+
raise OptionParser::InvalidArgument, "#{certificate_file}: does not exist"
|
22
22
|
rescue OpenSSL::X509::CertificateError
|
23
23
|
raise OptionParser::InvalidArgument,
|
24
|
-
"#{
|
24
|
+
"#{certificate_file}: invalid X509 certificate"
|
25
25
|
end
|
26
|
+
[certificate, certificate_file]
|
26
27
|
end
|
27
28
|
|
28
29
|
OptionParser.accept OpenSSL::PKey::RSA do |key_file|
|
@@ -42,7 +43,7 @@ class Gem::Commands::CertCommand < Gem::Command
|
|
42
43
|
end
|
43
44
|
|
44
45
|
add_option('-a', '--add CERT', OpenSSL::X509::Certificate,
|
45
|
-
'Add a trusted certificate.') do |cert, options|
|
46
|
+
'Add a trusted certificate.') do |(cert, _), options|
|
46
47
|
options[:add] << cert
|
47
48
|
end
|
48
49
|
|
@@ -67,8 +68,9 @@ class Gem::Commands::CertCommand < Gem::Command
|
|
67
68
|
end
|
68
69
|
|
69
70
|
add_option('-C', '--certificate CERT', OpenSSL::X509::Certificate,
|
70
|
-
'Signing certificate for --sign') do |cert, options|
|
71
|
+
'Signing certificate for --sign') do |(cert, cert_file), options|
|
71
72
|
options[:issuer_cert] = cert
|
73
|
+
options[:issuer_cert_file] = cert_file
|
72
74
|
end
|
73
75
|
|
74
76
|
add_option('-K', '--private-key KEY', OpenSSL::PKey::RSA,
|
@@ -87,11 +89,16 @@ class Gem::Commands::CertCommand < Gem::Command
|
|
87
89
|
|
88
90
|
add_option('-d', '--days NUMBER_OF_DAYS',
|
89
91
|
'Days before the certificate expires') do |days, options|
|
90
|
-
|
92
|
+
options[:expiration_length_days] = days.to_i
|
93
|
+
end
|
94
|
+
|
95
|
+
add_option('-R', '--re-sign',
|
96
|
+
'Re-signs the certificate from -C with the key from -K') do |resign, options|
|
97
|
+
options[:resign] = resign
|
91
98
|
end
|
92
99
|
end
|
93
100
|
|
94
|
-
def add_certificate
|
101
|
+
def add_certificate(certificate) # :nodoc:
|
95
102
|
Gem::Security.trust_dir.trust_cert certificate
|
96
103
|
|
97
104
|
say "Added '#{certificate.subject}'"
|
@@ -114,10 +121,18 @@ class Gem::Commands::CertCommand < Gem::Command
|
|
114
121
|
build email
|
115
122
|
end
|
116
123
|
|
124
|
+
if options[:resign]
|
125
|
+
re_sign_cert(
|
126
|
+
options[:issuer_cert],
|
127
|
+
options[:issuer_cert_file],
|
128
|
+
options[:key]
|
129
|
+
)
|
130
|
+
end
|
131
|
+
|
117
132
|
sign_certificates unless options[:sign].empty?
|
118
133
|
end
|
119
134
|
|
120
|
-
def build
|
135
|
+
def build(email)
|
121
136
|
if !valid_email?(email)
|
122
137
|
raise Gem::CommandLineError, "Invalid email address #{email}"
|
123
138
|
end
|
@@ -133,16 +148,16 @@ class Gem::Commands::CertCommand < Gem::Command
|
|
133
148
|
end
|
134
149
|
end
|
135
150
|
|
136
|
-
def build_cert
|
137
|
-
expiration_length_days = options[:expiration_length_days]
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
151
|
+
def build_cert(email, key) # :nodoc:
|
152
|
+
expiration_length_days = options[:expiration_length_days] ||
|
153
|
+
Gem.configuration.cert_expiration_length_days
|
154
|
+
|
155
|
+
cert = Gem::Security.create_cert_email(
|
156
|
+
email,
|
157
|
+
key,
|
158
|
+
(Gem::Security::ONE_DAY * expiration_length_days)
|
159
|
+
)
|
144
160
|
|
145
|
-
cert = Gem::Security.create_cert_email email, key, age
|
146
161
|
Gem::Security.write cert, "gem-public_cert.pem"
|
147
162
|
end
|
148
163
|
|
@@ -164,7 +179,7 @@ class Gem::Commands::CertCommand < Gem::Command
|
|
164
179
|
return key, key_path
|
165
180
|
end
|
166
181
|
|
167
|
-
def certificates_matching
|
182
|
+
def certificates_matching(filter)
|
168
183
|
return enum_for __method__, filter unless block_given?
|
169
184
|
|
170
185
|
Gem::Security.trusted_certificates.select do |certificate, _|
|
@@ -216,7 +231,7 @@ For further reading on signing gems see `ri Gem::Security`.
|
|
216
231
|
EOF
|
217
232
|
end
|
218
233
|
|
219
|
-
def list_certificates_matching
|
234
|
+
def list_certificates_matching(filter) # :nodoc:
|
220
235
|
certificates_matching filter do |certificate, _|
|
221
236
|
# this could probably be formatted more gracefully
|
222
237
|
say certificate.subject.to_s
|
@@ -261,14 +276,14 @@ For further reading on signing gems see `ri Gem::Security`.
|
|
261
276
|
load_default_key unless options[:key]
|
262
277
|
end
|
263
278
|
|
264
|
-
def remove_certificates_matching
|
279
|
+
def remove_certificates_matching(filter) # :nodoc:
|
265
280
|
certificates_matching filter do |certificate, path|
|
266
281
|
FileUtils.rm path
|
267
282
|
say "Removed '#{certificate.subject}'"
|
268
283
|
end
|
269
284
|
end
|
270
285
|
|
271
|
-
def sign
|
286
|
+
def sign(cert_file)
|
272
287
|
cert = File.read cert_file
|
273
288
|
cert = OpenSSL::X509::Certificate.new cert
|
274
289
|
|
@@ -290,13 +305,19 @@ For further reading on signing gems see `ri Gem::Security`.
|
|
290
305
|
end
|
291
306
|
end
|
292
307
|
|
308
|
+
def re_sign_cert(cert, cert_path, private_key)
|
309
|
+
Gem::Security::Signer.re_sign_cert(cert, cert_path, private_key) do |expired_cert_path, new_expired_cert_path|
|
310
|
+
alert("Your certificate #{expired_cert_path} has been re-signed")
|
311
|
+
alert("Your expired certificate will be located at: #{new_expired_cert_path}")
|
312
|
+
end
|
313
|
+
end
|
314
|
+
|
293
315
|
private
|
294
316
|
|
295
|
-
def valid_email?
|
317
|
+
def valid_email?(email)
|
296
318
|
# It's simple, but is all we need
|
297
319
|
email =~ /\A.+@.+\z/
|
298
320
|
end
|
299
321
|
|
300
322
|
|
301
323
|
end if defined?(OpenSSL::SSL)
|
302
|
-
|
@@ -44,7 +44,7 @@ class Gem::Commands::CheckCommand < Gem::Command
|
|
44
44
|
gems = get_all_gem_names rescue []
|
45
45
|
|
46
46
|
Gem::Validator.new.alien(gems).sort.each do |key, val|
|
47
|
-
unless val.empty?
|
47
|
+
unless val.empty?
|
48
48
|
say "#{key} has #{val.size} problems"
|
49
49
|
val.each do |error_entry|
|
50
50
|
say " #{error_entry.path}:"
|
@@ -22,6 +22,12 @@ class Gem::Commands::CleanupCommand < Gem::Command
|
|
22
22
|
options[:check_dev] = value
|
23
23
|
end
|
24
24
|
|
25
|
+
add_option('--[no-]user-install',
|
26
|
+
'Cleanup in user\'s home directory instead',
|
27
|
+
'of GEM_HOME.') do |value, options|
|
28
|
+
options[:user_install] = value
|
29
|
+
end
|
30
|
+
|
25
31
|
@candidate_gems = nil
|
26
32
|
@default_gems = []
|
27
33
|
@full = nil
|
@@ -56,7 +62,7 @@ If no gems are named all gems in GEM_HOME are cleaned.
|
|
56
62
|
def execute
|
57
63
|
say "Cleaning up installed gems..."
|
58
64
|
|
59
|
-
if options[:args].empty?
|
65
|
+
if options[:args].empty?
|
60
66
|
done = false
|
61
67
|
last_set = nil
|
62
68
|
|
@@ -105,7 +111,7 @@ If no gems are named all gems in GEM_HOME are cleaned.
|
|
105
111
|
end
|
106
112
|
|
107
113
|
def get_candidate_gems
|
108
|
-
@candidate_gems = unless options[:args].empty?
|
114
|
+
@candidate_gems = unless options[:args].empty?
|
109
115
|
options[:args].map do |gem_name|
|
110
116
|
Gem::Specification.find_all_by_name gem_name
|
111
117
|
end.flatten
|
@@ -115,7 +121,6 @@ If no gems are named all gems in GEM_HOME are cleaned.
|
|
115
121
|
end
|
116
122
|
|
117
123
|
def get_gems_to_cleanup
|
118
|
-
|
119
124
|
gems_to_cleanup = @candidate_gems.select { |spec|
|
120
125
|
@primary_gems[spec.name].version != spec.version
|
121
126
|
}
|
@@ -124,8 +129,10 @@ If no gems are named all gems in GEM_HOME are cleaned.
|
|
124
129
|
spec.default_gem?
|
125
130
|
}
|
126
131
|
|
132
|
+
uninstall_from = options[:user_install] ? Gem.user_dir : @original_home
|
133
|
+
|
127
134
|
gems_to_cleanup = gems_to_cleanup.select { |spec|
|
128
|
-
spec.base_dir ==
|
135
|
+
spec.base_dir == uninstall_from
|
129
136
|
}
|
130
137
|
|
131
138
|
@default_gems += default_gems
|
@@ -138,16 +145,16 @@ If no gems are named all gems in GEM_HOME are cleaned.
|
|
138
145
|
|
139
146
|
Gem::Specification.each do |spec|
|
140
147
|
if @primary_gems[spec.name].nil? or
|
141
|
-
@primary_gems[spec.name].version < spec.version
|
148
|
+
@primary_gems[spec.name].version < spec.version
|
142
149
|
@primary_gems[spec.name] = spec
|
143
150
|
end
|
144
151
|
end
|
145
152
|
end
|
146
153
|
|
147
|
-
def uninstall_dep
|
154
|
+
def uninstall_dep(spec)
|
148
155
|
return unless @full.ok_to_remove?(spec.full_name, options[:check_dev])
|
149
156
|
|
150
|
-
if options[:dryrun]
|
157
|
+
if options[:dryrun]
|
151
158
|
say "Dry Run Mode: Would uninstall #{spec.full_name}"
|
152
159
|
return
|
153
160
|
end
|