rubygems-update 1.8.30 → 2.0.0.preview2
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of rubygems-update might be problematic. Click here for more details.
- checksums.yaml +6 -6
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +3 -0
- data/.autotest +6 -3
- data/History.txt +137 -63
- data/LICENSE.txt +1 -5
- data/Manifest.txt +69 -32
- data/README.rdoc +11 -9
- data/Rakefile +24 -38
- data/bin/gem +0 -9
- data/bin/update_rubygems +1 -0
- data/lib/rubygems.rb +193 -405
- data/lib/rubygems/available_set.rb +95 -0
- data/lib/rubygems/command.rb +88 -45
- data/lib/rubygems/command_manager.rb +67 -40
- data/lib/rubygems/commands/build_command.rb +5 -23
- data/lib/rubygems/commands/cert_command.rb +199 -57
- data/lib/rubygems/commands/check_command.rb +14 -39
- data/lib/rubygems/commands/cleanup_command.rb +9 -1
- data/lib/rubygems/commands/contents_command.rb +30 -12
- data/lib/rubygems/commands/dependency_command.rb +3 -8
- data/lib/rubygems/commands/environment_command.rb +13 -8
- data/lib/rubygems/commands/fetch_command.rb +3 -16
- data/lib/rubygems/commands/generate_index_command.rb +7 -47
- data/lib/rubygems/commands/help_command.rb +1 -1
- data/lib/rubygems/commands/install_command.rb +69 -36
- data/lib/rubygems/commands/list_command.rb +6 -4
- data/lib/rubygems/commands/lock_command.rb +1 -1
- data/lib/rubygems/commands/mirror_command.rb +17 -0
- data/lib/rubygems/commands/outdated_command.rb +6 -3
- data/lib/rubygems/commands/owner_command.rb +13 -5
- data/lib/rubygems/commands/pristine_command.rb +19 -4
- data/lib/rubygems/commands/push_command.rb +12 -1
- data/lib/rubygems/commands/query_command.rb +43 -27
- data/lib/rubygems/commands/rdoc_command.rb +23 -28
- data/lib/rubygems/commands/search_command.rb +4 -18
- data/lib/rubygems/commands/server_command.rb +1 -1
- data/lib/rubygems/commands/setup_command.rb +124 -38
- data/lib/rubygems/commands/sources_command.rb +16 -16
- data/lib/rubygems/commands/specification_command.rb +11 -13
- data/lib/rubygems/commands/uninstall_command.rb +24 -7
- data/lib/rubygems/commands/unpack_command.rb +7 -3
- data/lib/rubygems/commands/update_command.rb +22 -36
- data/lib/rubygems/commands/yank_command.rb +98 -0
- data/lib/rubygems/compatibility.rb +51 -0
- data/lib/rubygems/config_file.rb +82 -54
- data/lib/rubygems/core_ext/kernel_gem.rb +53 -0
- data/lib/rubygems/core_ext/kernel_require.rb +119 -0
- data/lib/rubygems/defaults.rb +10 -21
- data/lib/rubygems/dependency.rb +61 -10
- data/lib/rubygems/dependency_installer.rb +157 -69
- data/lib/rubygems/dependency_list.rb +11 -19
- data/lib/rubygems/dependency_resolver.rb +562 -0
- data/lib/rubygems/deprecate.rb +40 -40
- data/lib/rubygems/errors.rb +77 -24
- data/lib/rubygems/exceptions.rb +25 -7
- data/lib/rubygems/ext/builder.rb +20 -23
- data/lib/rubygems/ext/configure_builder.rb +2 -2
- data/lib/rubygems/ext/ext_conf_builder.rb +5 -45
- data/lib/rubygems/ext/rake_builder.rb +2 -2
- data/lib/rubygems/gem_runner.rb +3 -16
- data/lib/rubygems/gemcutter_utilities.rb +22 -7
- data/lib/rubygems/indexer.rb +6 -159
- data/lib/rubygems/install_message.rb +12 -0
- data/lib/rubygems/install_update_options.rb +56 -18
- data/lib/rubygems/installer.rb +244 -134
- data/lib/rubygems/installer_test_case.rb +71 -19
- data/lib/rubygems/mock_gem_ui.rb +17 -0
- data/lib/rubygems/name_tuple.rb +110 -0
- data/lib/rubygems/package.rb +514 -43
- data/lib/rubygems/package/digest_io.rb +64 -0
- data/lib/rubygems/package/old.rb +147 -0
- data/lib/rubygems/package/tar_header.rb +18 -55
- data/lib/rubygems/package/tar_reader.rb +20 -3
- data/lib/rubygems/package/tar_writer.rb +63 -7
- data/lib/rubygems/package_task.rb +3 -4
- data/lib/rubygems/path_support.rb +14 -7
- data/lib/rubygems/platform.rb +19 -26
- data/lib/rubygems/rdoc.rb +316 -0
- data/lib/rubygems/remote_fetcher.rb +117 -54
- data/lib/rubygems/request_set.rb +182 -0
- data/lib/rubygems/requirement.rb +63 -26
- data/lib/rubygems/security.rb +295 -555
- data/lib/rubygems/security/policies.rb +115 -0
- data/lib/rubygems/security/policy.rb +227 -0
- data/lib/rubygems/security/signer.rb +136 -0
- data/lib/rubygems/security/trust_dir.rb +104 -0
- data/lib/rubygems/server.rb +45 -55
- data/lib/rubygems/source.rb +144 -0
- data/lib/rubygems/source_list.rb +87 -0
- data/lib/rubygems/source_local.rb +92 -0
- data/lib/rubygems/source_specific_file.rb +28 -0
- data/lib/rubygems/spec_fetcher.rb +116 -184
- data/lib/rubygems/specification.rb +731 -335
- data/lib/rubygems/ssl_certs/AddTrustExternalCARoot.pem +88 -30
- data/lib/rubygems/ssl_certs/Entrust_net-Secure-Server-Certification-Authority.pem +90 -0
- data/lib/rubygems/ssl_certs/VerisignClass3PublicPrimaryCertificationAuthority-G2.pem +57 -0
- data/lib/rubygems/syck_hack.rb +2 -0
- data/lib/rubygems/test_case.rb +199 -109
- data/lib/rubygems/test_utilities.rb +25 -5
- data/lib/rubygems/uninstaller.rb +62 -20
- data/lib/rubygems/user_interaction.rb +10 -0
- data/lib/rubygems/validator.rb +33 -40
- data/lib/rubygems/version.rb +19 -8
- data/setup.rb +8 -1
- data/test/rubygems/alternate_cert.pem +9 -0
- data/test/rubygems/alternate_cert_32.pem +9 -0
- data/test/rubygems/alternate_key.pem +9 -0
- data/test/rubygems/bad_rake.rb +1 -0
- data/test/rubygems/child_cert.pem +9 -0
- data/test/rubygems/child_cert_32.pem +9 -0
- data/test/rubygems/child_key.pem +9 -0
- data/test/rubygems/data/null-type.gemspec.rz +0 -0
- data/test/rubygems/expired_cert.pem +9 -0
- data/test/rubygems/future_cert.pem +9 -0
- data/test/rubygems/future_cert_32.pem +9 -0
- data/test/rubygems/good_rake.rb +1 -0
- data/test/rubygems/grandchild_cert.pem +9 -0
- data/test/rubygems/grandchild_cert_32.pem +9 -0
- data/test/rubygems/grandchild_key.pem +9 -0
- data/test/rubygems/invalid_issuer_cert.pem +9 -0
- data/test/rubygems/invalid_issuer_cert_32.pem +9 -0
- data/test/rubygems/invalid_key.pem +9 -0
- data/test/rubygems/invalid_signer_cert.pem +9 -0
- data/test/rubygems/invalid_signer_cert_32.pem +9 -0
- data/test/rubygems/invalidchild_cert.pem +9 -0
- data/test/rubygems/invalidchild_cert_32.pem +9 -0
- data/test/rubygems/invalidchild_key.pem +9 -0
- data/test/rubygems/plugin/exception/rubygems_plugin.rb +1 -1
- data/test/rubygems/plugin/standarderror/rubygems_plugin.rb +1 -1
- data/test/rubygems/private_key.pem +7 -25
- data/test/rubygems/public_cert.pem +8 -18
- data/test/rubygems/public_cert_32.pem +10 -0
- data/test/rubygems/public_key.pem +4 -0
- data/test/rubygems/rubygems/commands/crash_command.rb +1 -1
- data/test/rubygems/test_config.rb +4 -6
- data/test/rubygems/test_deprecate.rb +76 -0
- data/test/rubygems/test_gem.rb +318 -83
- data/test/rubygems/test_gem_available_set.rb +106 -0
- data/test/rubygems/test_gem_command.rb +10 -0
- data/test/rubygems/test_gem_command_manager.rb +55 -9
- data/test/rubygems/test_gem_commands_build_command.rb +11 -19
- data/test/rubygems/test_gem_commands_cert_command.rb +441 -42
- data/test/rubygems/test_gem_commands_cleanup_command.rb +29 -1
- data/test/rubygems/test_gem_commands_contents_command.rb +23 -0
- data/test/rubygems/test_gem_commands_dependency_command.rb +5 -0
- data/test/rubygems/test_gem_commands_fetch_command.rb +19 -20
- data/test/rubygems/test_gem_commands_generate_index_command.rb +2 -83
- data/test/rubygems/test_gem_commands_help_command.rb +2 -1
- data/test/rubygems/test_gem_commands_install_command.rb +647 -48
- data/test/rubygems/test_gem_commands_mirror.rb +32 -0
- data/test/rubygems/test_gem_commands_owner_command.rb +4 -8
- data/test/rubygems/test_gem_commands_pristine_command.rb +99 -4
- data/test/rubygems/test_gem_commands_push_command.rb +62 -8
- data/test/rubygems/test_gem_commands_query_command.rb +51 -0
- data/test/rubygems/test_gem_commands_search_command.rb +25 -0
- data/test/rubygems/test_gem_commands_setup_command.rb +45 -0
- data/test/rubygems/test_gem_commands_sources_command.rb +21 -6
- data/test/rubygems/test_gem_commands_specification_command.rb +33 -1
- data/test/rubygems/test_gem_commands_uninstall_command.rb +91 -31
- data/test/rubygems/test_gem_commands_unpack_command.rb +3 -3
- data/test/rubygems/test_gem_commands_update_command.rb +56 -38
- data/test/rubygems/test_gem_commands_which_command.rb +4 -4
- data/test/rubygems/test_gem_commands_yank_command.rb +97 -0
- data/test/rubygems/test_gem_config_file.rb +66 -21
- data/test/rubygems/test_gem_dependency.rb +46 -0
- data/test/rubygems/test_gem_dependency_installer.rb +228 -18
- data/test/rubygems/test_gem_dependency_list.rb +0 -9
- data/test/rubygems/test_gem_dependency_resolver.rb +327 -0
- data/test/rubygems/test_gem_ext_configure_builder.rb +4 -4
- data/test/rubygems/test_gem_ext_ext_conf_builder.rb +21 -49
- data/test/rubygems/test_gem_ext_rake_builder.rb +13 -13
- data/test/rubygems/test_gem_gem_runner.rb +27 -5
- data/test/rubygems/test_gem_gemcutter_utilities.rb +19 -0
- data/test/rubygems/test_gem_indexer.rb +14 -227
- data/test/rubygems/test_gem_install_update_options.rb +83 -3
- data/test/rubygems/test_gem_installer.rb +211 -236
- data/test/rubygems/test_gem_local_remote_options.rb +8 -2
- data/test/rubygems/test_gem_name_tuple.rb +15 -0
- data/test/rubygems/test_gem_package.rb +547 -0
- data/test/rubygems/test_gem_package_old.rb +37 -0
- data/test/rubygems/test_gem_package_tar_reader.rb +32 -0
- data/test/rubygems/test_gem_package_tar_writer.rb +84 -1
- data/test/rubygems/test_gem_path_support.rb +4 -30
- data/test/rubygems/test_gem_platform.rb +3 -6
- data/test/rubygems/test_gem_rdoc.rb +245 -0
- data/test/rubygems/test_gem_remote_fetcher.rb +51 -5
- data/test/rubygems/test_gem_request_set.rb +70 -0
- data/test/rubygems/test_gem_requirement.rb +53 -24
- data/test/rubygems/test_gem_security.rb +189 -43
- data/test/rubygems/test_gem_security_policy.rb +376 -0
- data/test/rubygems/test_gem_security_signer.rb +184 -0
- data/test/rubygems/test_gem_security_trust_dir.rb +94 -0
- data/test/rubygems/test_gem_server.rb +31 -36
- data/test/rubygems/test_gem_silent_ui.rb +2 -2
- data/test/rubygems/test_gem_source.rb +188 -0
- data/test/rubygems/test_gem_source_list.rb +87 -0
- data/test/rubygems/test_gem_source_local.rb +83 -0
- data/test/rubygems/test_gem_source_specific_file.rb +33 -0
- data/test/rubygems/test_gem_spec_fetcher.rb +91 -255
- data/test/rubygems/test_gem_specification.rb +293 -39
- data/test/rubygems/test_gem_uninstaller.rb +136 -13
- data/test/rubygems/test_gem_validator.rb +14 -41
- data/test/rubygems/test_gem_version.rb +15 -21
- data/test/rubygems/test_require.rb +193 -0
- data/test/rubygems/wrong_key_cert.pem +9 -0
- data/test/rubygems/wrong_key_cert_32.pem +9 -0
- metadata +171 -83
- metadata.gz.sig +1 -0
- data/CVE-2013-4287.txt +0 -36
- data/CVE-2013-4363.txt +0 -45
- data/ci_build.sh +0 -27
- data/cruise_config.rb +0 -32
- data/lib/rbconfig/datadir.rb +0 -13
- data/lib/rubygems/builder.rb +0 -99
- data/lib/rubygems/custom_require.rb +0 -69
- data/lib/rubygems/doc_manager.rb +0 -243
- data/lib/rubygems/format.rb +0 -82
- data/lib/rubygems/gem_openssl.rb +0 -90
- data/lib/rubygems/gem_path_searcher.rb +0 -172
- data/lib/rubygems/old_format.rb +0 -153
- data/lib/rubygems/package/f_sync_dir.rb +0 -23
- data/lib/rubygems/package/tar_input.rb +0 -234
- data/lib/rubygems/package/tar_output.rb +0 -146
- data/lib/rubygems/require_paths_builder.rb +0 -18
- data/lib/rubygems/source_index.rb +0 -406
- data/lib/rubygems/ssl_certs/AddTrustExternalCARoot-2048.pem +0 -25
- data/lib/rubygems/ssl_certs/Class3PublicPrimaryCertificationAuthority.pem +0 -14
- data/lib/rubygems/ssl_certs/DigiCertHighAssuranceEVRootCA.pem +0 -23
- data/lib/rubygems/ssl_certs/EntrustnetSecureServerCertificationAuthority.pem +0 -28
- data/lib/rubygems/ssl_certs/GeoTrustGlobalCA.pem +0 -20
- data/test/rubygems/test_bundled_ca.rb +0 -59
- data/test/rubygems/test_gem_builder.rb +0 -44
- data/test/rubygems/test_gem_doc_manager.rb +0 -32
- data/test/rubygems/test_gem_ext_builder.rb +0 -58
- data/test/rubygems/test_gem_format.rb +0 -88
- data/test/rubygems/test_gem_gem_path_searcher.rb +0 -94
- data/test/rubygems/test_gem_package_tar_input.rb +0 -129
- data/test/rubygems/test_gem_package_tar_output.rb +0 -101
- data/test/rubygems/test_gem_source_index.rb +0 -250
- data/util/update_bundled_ca_certificates.rb +0 -103
metadata.gz.sig
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
�Me2�,�:���46�)���n?�s$�e����ȍ������M�oX~����Ǿ�.Jf�O����1�yu?�"�^���|���kP�j�
|
data/CVE-2013-4287.txt
DELETED
@@ -1,36 +0,0 @@
|
|
1
|
-
= Algorithmic complexity vulnerability in RubyGems 2.0.7 and older
|
2
|
-
|
3
|
-
RubyGems validates versions with a regular expression that is vulnerable to
|
4
|
-
denial of service due to a backtracking regular expression. For specially
|
5
|
-
crafted RubyGems versions attackers can cause denial of service through CPU
|
6
|
-
consumption.
|
7
|
-
|
8
|
-
RubyGems versions 2.0.7 and older, 2.1.0.rc.1 and 2.1.0.rc.2 are vulnerable.
|
9
|
-
|
10
|
-
Ruby versions 1.9.0 through 2.0.0p247 are vulnerable as they contain embedded
|
11
|
-
versions of RubyGems.
|
12
|
-
|
13
|
-
It does not appear to be possible to exploit this vulnerability by installing a
|
14
|
-
gem for RubyGems 1.8.x or 2.0.x. Vulnerable uses of RubyGems API include
|
15
|
-
packaging a gem (through `gem build`, Gem::Package or Gem::PackageTask),
|
16
|
-
sending user input to Gem::Version.new, Gem::Version.correct? or use of the
|
17
|
-
Gem::Version::VERSION_PATTERN or Gem::Version::ANCHORED_VERSION_PATTERN
|
18
|
-
constants.
|
19
|
-
|
20
|
-
Notably, users of bundler that install gems from git are vulnerable if a
|
21
|
-
malicious author changes the gemspec to an invalid version.
|
22
|
-
|
23
|
-
The vulnerability can be fixed by changing the first grouping to an atomic
|
24
|
-
grouping in Gem::Version::VERSION_PATTERN in lib/rubygems/version.rb. For
|
25
|
-
RubyGems 2.0.x:
|
26
|
-
|
27
|
-
- VERSION_PATTERN = '[0-9]+(\.[0-9a-zA-Z]+)*(-[0-9A-Za-z-]+(\.[0-9A-Za-z-]+)*)?' # :nodoc:
|
28
|
-
+ VERSION_PATTERN = '[0-9]+(?>\.[0-9a-zA-Z]+)*(-[0-9A-Za-z-]+(\.[0-9A-Za-z-]+)*)?' # :nodoc:
|
29
|
-
|
30
|
-
For RubyGems 1.8.x:
|
31
|
-
|
32
|
-
- VERSION_PATTERN = '[0-9]+(\.[0-9a-zA-Z]+)*' # :nodoc:
|
33
|
-
+ VERSION_PATTERN = '[0-9]+(?>\.[0-9a-zA-Z]+)*' # :nodoc:
|
34
|
-
|
35
|
-
This vulnerability was discovered by Damir Sharipov <dammer2k@gmail.com>
|
36
|
-
|
data/CVE-2013-4363.txt
DELETED
@@ -1,45 +0,0 @@
|
|
1
|
-
= Algorithmic complexity vulnerability in RubyGems 2.1.4 and older
|
2
|
-
|
3
|
-
The patch for CVE-2013-4287 was insufficiently verified so the combined
|
4
|
-
regular expression for verifying gem version remains vulnerable following
|
5
|
-
CVE-2013-4287.
|
6
|
-
|
7
|
-
RubyGems validates versions with a regular expression that is vulnerable to
|
8
|
-
denial of service due to backtracking. For specially crafted RubyGems
|
9
|
-
versions attackers can cause denial of service through CPU consumption.
|
10
|
-
|
11
|
-
RubyGems versions 2.1.4 and older are vulnerable.
|
12
|
-
|
13
|
-
Ruby versions 1.9.0 through 2.0.0p247 are vulnerable as they contain embedded
|
14
|
-
versions of RubyGems.
|
15
|
-
|
16
|
-
It does not appear to be possible to exploit this vulnerability by installing a
|
17
|
-
gem for RubyGems 1.8.x or newer. Vulnerable uses of RubyGems API include
|
18
|
-
packaging a gem (through `gem build`, Gem::Package or Gem::PackageTask),
|
19
|
-
sending user input to Gem::Version.new, Gem::Version.correct? or use of the
|
20
|
-
Gem::Version::VERSION_PATTERN or Gem::Version::ANCHORED_VERSION_PATTERN
|
21
|
-
constants.
|
22
|
-
|
23
|
-
Notably, users of bundler that install gems from git are vulnerable if a
|
24
|
-
malicious author changes the gemspec to an invalid version.
|
25
|
-
|
26
|
-
The vulnerability can be fixed by changing the "*" repetition to a "?"
|
27
|
-
repetition in Gem::Version::ANCHORED_VERSION_PATTERN in
|
28
|
-
lib/rubygems/version.rb. For RubyGems 2.1.x:
|
29
|
-
|
30
|
-
- ANCHORED_VERSION_PATTERN = /\A\s*(#{VERSION_PATTERN})*\s*\z/ # :nodoc:
|
31
|
-
+ ANCHORED_VERSION_PATTERN = /\A\s*(#{VERSION_PATTERN})?\s*\z/ # :nodoc:
|
32
|
-
|
33
|
-
For RubyGems 2.0.x:
|
34
|
-
|
35
|
-
- ANCHORED_VERSION_PATTERN = /\A\s*(#{VERSION_PATTERN})*\s*\z/ # :nodoc:
|
36
|
-
+ ANCHORED_VERSION_PATTERN = /\A\s*(#{VERSION_PATTERN})?\s*\z/ # :nodoc:
|
37
|
-
|
38
|
-
For RubyGems 1.8.x:
|
39
|
-
|
40
|
-
- ANCHORED_VERSION_PATTERN = /\A\s*(#{VERSION_PATTERN})*\s*\z/ # :nodoc:
|
41
|
-
+ ANCHORED_VERSION_PATTERN = /\A\s*(#{VERSION_PATTERN})?\s*\z/ # :nodoc:
|
42
|
-
|
43
|
-
|
44
|
-
This vulnerability was discovered by Alexander Cherepanov <cherepan@mccme.ru>
|
45
|
-
|
data/ci_build.sh
DELETED
@@ -1,27 +0,0 @@
|
|
1
|
-
# You must ensure that rake, hoe, and minitest are already installed in specified RVM interpreter
|
2
|
-
export rvm_install_on_use_flag=1
|
3
|
-
export rvm_gemset_create_on_use_flag=1
|
4
|
-
rvm use $1
|
5
|
-
. "$HOME/.rvm/environments/ruby-$1" # There seems to be a bug where 'rvm use' from within a script doesn't override default interpreter, so we have to manually source the rvm environment file for the proper interpreter
|
6
|
-
|
7
|
-
# TODO: How can you make Hoe's check_extra_deps not use sudo?
|
8
|
-
#rake check_extra_deps default
|
9
|
-
# install gems manually for now
|
10
|
-
gem install 'rake' --no-ri --no-rdoc
|
11
|
-
gem install 'hoe' --no-ri --no-rdoc
|
12
|
-
gem install 'builder' -v '~> 2.1' --no-ri --no-rdoc
|
13
|
-
gem install 'hoe-seattlerb' -v '~> 1.2' --no-ri --no-rdoc
|
14
|
-
gem install 'minitest' -v '~> 1.4' --no-ri --no-rdoc
|
15
|
-
gem install 'session' -v '~> 2.4' --no-ri --no-rdoc
|
16
|
-
gem install 'rubyforge' --no-ri --no-rdoc
|
17
|
-
|
18
|
-
echo "----------------------------"
|
19
|
-
echo "Build environment:"
|
20
|
-
cat /etc/issue
|
21
|
-
uname -a
|
22
|
-
ruby -v
|
23
|
-
gem env
|
24
|
-
gem list
|
25
|
-
echo "----------------------------"
|
26
|
-
|
27
|
-
rake default
|
data/cruise_config.rb
DELETED
@@ -1,32 +0,0 @@
|
|
1
|
-
# Project-specific configuration for CruiseControl.rb
|
2
|
-
require 'socket'
|
3
|
-
|
4
|
-
Project.configure do |project|
|
5
|
-
# To add a build for a new interpreter (from ccrb root):
|
6
|
-
# ./cruise add RubyGems-x_y_z-pxxx -s git -r git://github.com/rubygems/rubygems.git
|
7
|
-
interpreter = Regexp.new(/RubyGems-(.*)$/i).match(project.name)[1]
|
8
|
-
interpreter.gsub!('_','.')
|
9
|
-
|
10
|
-
# only send notifications from the official ci box
|
11
|
-
if Socket.gethostname =~ /cibuilder.pivotallabs.com/
|
12
|
-
# explicitly enable dev list notification only for interpreters which should be green
|
13
|
-
interpreters_with_enabled_notification = [
|
14
|
-
'1.8.7-p330',
|
15
|
-
'1.9.1-p378',
|
16
|
-
'1.9.2-p136'
|
17
|
-
]
|
18
|
-
if interpreters_with_enabled_notification.include?(interpreter)
|
19
|
-
project.email_notifier.emails = ['rubygems-developers@rubyforge.org']
|
20
|
-
end
|
21
|
-
|
22
|
-
# Always notify the following for all interpreters:
|
23
|
-
project.email_notifier.emails.concat([
|
24
|
-
'thewoolleyman+rubygems-ci@gmail.com'
|
25
|
-
])
|
26
|
-
end
|
27
|
-
|
28
|
-
project.build_command = "./ci_build.sh '#{interpreter}@rubygems'"
|
29
|
-
|
30
|
-
project.email_notifier.from = 'thewoolleyman+rubygems-ci@gmail.com'
|
31
|
-
project.scheduler.polling_interval = 5.minutes
|
32
|
-
end
|
data/lib/rbconfig/datadir.rb
DELETED
@@ -1,13 +0,0 @@
|
|
1
|
-
#--
|
2
|
-
# Copyright 2006 by Chad Fowler, Rich Kilmer, Jim Weirich and others.
|
3
|
-
# All rights reserved.
|
4
|
-
# See LICENSE.txt for permissions.
|
5
|
-
#++
|
6
|
-
|
7
|
-
# N.B. This file is used by Config.datadir in rubygems.rb, and must not be
|
8
|
-
# removed before that require is removed. I require to avoid warning more than
|
9
|
-
# once.
|
10
|
-
|
11
|
-
warn 'rbconfig/datadir.rb and {Rb}Config.datadir is being deprecated from '\
|
12
|
-
'RubyGems. It will be removed completely on or after June 2011. If you '\
|
13
|
-
'wish to rely on a datadir, please use Gem.datadir.'
|
data/lib/rubygems/builder.rb
DELETED
@@ -1,99 +0,0 @@
|
|
1
|
-
#--
|
2
|
-
# Copyright 2006 by Chad Fowler, Rich Kilmer, Jim Weirich and others.
|
3
|
-
# All rights reserved.
|
4
|
-
# See LICENSE.txt for permissions.
|
5
|
-
#++
|
6
|
-
|
7
|
-
require 'rubygems'
|
8
|
-
require 'rubygems/user_interaction'
|
9
|
-
|
10
|
-
Gem.load_yaml
|
11
|
-
|
12
|
-
require 'rubygems/package'
|
13
|
-
|
14
|
-
##
|
15
|
-
# The Builder class processes RubyGem specification files
|
16
|
-
# to produce a .gem file.
|
17
|
-
|
18
|
-
class Gem::Builder
|
19
|
-
|
20
|
-
include Gem::UserInteraction
|
21
|
-
|
22
|
-
##
|
23
|
-
# Constructs a builder instance for the provided specification
|
24
|
-
#
|
25
|
-
# spec:: [Gem::Specification] The specification instance
|
26
|
-
|
27
|
-
def initialize(spec)
|
28
|
-
@spec = spec
|
29
|
-
end
|
30
|
-
|
31
|
-
##
|
32
|
-
# Builds the gem from the specification. Returns the name of the file
|
33
|
-
# written.
|
34
|
-
|
35
|
-
def build(skip_validation=false)
|
36
|
-
@spec.mark_version
|
37
|
-
@spec.validate unless skip_validation
|
38
|
-
@signer = sign
|
39
|
-
write_package
|
40
|
-
say success if Gem.configuration.verbose
|
41
|
-
File.basename @spec.cache_file
|
42
|
-
end
|
43
|
-
|
44
|
-
def success
|
45
|
-
<<-EOM
|
46
|
-
Successfully built RubyGem
|
47
|
-
Name: #{@spec.name}
|
48
|
-
Version: #{@spec.version}
|
49
|
-
File: #{File.basename @spec.cache_file}
|
50
|
-
EOM
|
51
|
-
end
|
52
|
-
|
53
|
-
private
|
54
|
-
|
55
|
-
##
|
56
|
-
# If the signing key was specified, then load the file, and swap to the
|
57
|
-
# public key (TODO: we should probably just omit the signing key in favor of
|
58
|
-
# the signing certificate, but that's for the future, also the signature
|
59
|
-
# algorithm should be configurable)
|
60
|
-
|
61
|
-
def sign
|
62
|
-
signer = nil
|
63
|
-
|
64
|
-
if @spec.respond_to?(:signing_key) and @spec.signing_key then
|
65
|
-
require 'rubygems/security'
|
66
|
-
|
67
|
-
signer = Gem::Security::Signer.new @spec.signing_key, @spec.cert_chain
|
68
|
-
@spec.signing_key = nil
|
69
|
-
@spec.cert_chain = signer.cert_chain.map { |cert| cert.to_s }
|
70
|
-
end
|
71
|
-
|
72
|
-
signer
|
73
|
-
end
|
74
|
-
|
75
|
-
def write_package
|
76
|
-
file_name = File.basename @spec.cache_file
|
77
|
-
open file_name, 'wb' do |gem_io|
|
78
|
-
Gem::Package.open gem_io, 'w', @signer do |pkg|
|
79
|
-
yaml = @spec.to_yaml
|
80
|
-
pkg.metadata = yaml
|
81
|
-
|
82
|
-
@spec.files.each do |file|
|
83
|
-
next if File.directory?(file)
|
84
|
-
next if file == file_name # Don't add gem onto itself
|
85
|
-
|
86
|
-
stat = File.stat(file)
|
87
|
-
mode = stat.mode & 0777
|
88
|
-
size = stat.size
|
89
|
-
|
90
|
-
pkg.add_file_simple file, mode, size do |tar_io|
|
91
|
-
tar_io.write open(file, "rb") { |f| f.read }
|
92
|
-
end
|
93
|
-
end
|
94
|
-
end
|
95
|
-
end
|
96
|
-
end
|
97
|
-
|
98
|
-
end
|
99
|
-
|
@@ -1,69 +0,0 @@
|
|
1
|
-
#--
|
2
|
-
# Copyright 2006 by Chad Fowler, Rich Kilmer, Jim Weirich and others.
|
3
|
-
# All rights reserved.
|
4
|
-
# See LICENSE.txt for permissions.
|
5
|
-
#++
|
6
|
-
|
7
|
-
module Kernel
|
8
|
-
|
9
|
-
if defined?(gem_original_require) then
|
10
|
-
# Ruby ships with a custom_require, override its require
|
11
|
-
remove_method :require
|
12
|
-
else
|
13
|
-
##
|
14
|
-
# The Kernel#require from before RubyGems was loaded.
|
15
|
-
|
16
|
-
alias gem_original_require require
|
17
|
-
private :gem_original_require
|
18
|
-
end
|
19
|
-
|
20
|
-
##
|
21
|
-
# When RubyGems is required, Kernel#require is replaced with our own which
|
22
|
-
# is capable of loading gems on demand.
|
23
|
-
#
|
24
|
-
# When you call <tt>require 'x'</tt>, this is what happens:
|
25
|
-
# * If the file can be loaded from the existing Ruby loadpath, it
|
26
|
-
# is.
|
27
|
-
# * Otherwise, installed gems are searched for a file that matches.
|
28
|
-
# If it's found in gem 'y', that gem is activated (added to the
|
29
|
-
# loadpath).
|
30
|
-
#
|
31
|
-
# The normal <tt>require</tt> functionality of returning false if
|
32
|
-
# that file has already been loaded is preserved.
|
33
|
-
|
34
|
-
def require path
|
35
|
-
if Gem.unresolved_deps.empty? then
|
36
|
-
gem_original_require path
|
37
|
-
else
|
38
|
-
spec = Gem::Specification.find { |s|
|
39
|
-
s.activated? and s.contains_requirable_file? path
|
40
|
-
}
|
41
|
-
|
42
|
-
unless spec then
|
43
|
-
found_specs = Gem::Specification.find_in_unresolved path
|
44
|
-
unless found_specs.empty? then
|
45
|
-
found_specs = [found_specs.last]
|
46
|
-
else
|
47
|
-
found_specs = Gem::Specification.find_in_unresolved_tree path
|
48
|
-
end
|
49
|
-
|
50
|
-
found_specs.each do |found_spec|
|
51
|
-
found_spec.activate
|
52
|
-
end
|
53
|
-
end
|
54
|
-
|
55
|
-
return gem_original_require path
|
56
|
-
end
|
57
|
-
rescue LoadError => load_error
|
58
|
-
if load_error.message.start_with?("Could not find") or
|
59
|
-
(load_error.message.end_with?(path) and Gem.try_activate(path)) then
|
60
|
-
return gem_original_require(path)
|
61
|
-
end
|
62
|
-
|
63
|
-
raise load_error
|
64
|
-
end
|
65
|
-
|
66
|
-
private :require
|
67
|
-
|
68
|
-
end
|
69
|
-
|
data/lib/rubygems/doc_manager.rb
DELETED
@@ -1,243 +0,0 @@
|
|
1
|
-
#--
|
2
|
-
# Copyright 2006 by Chad Fowler, Rich Kilmer, Jim Weirich and others.
|
3
|
-
# All rights reserved.
|
4
|
-
# See LICENSE.txt for permissions.
|
5
|
-
#++
|
6
|
-
|
7
|
-
require 'rubygems'
|
8
|
-
|
9
|
-
##
|
10
|
-
# The documentation manager generates RDoc and RI for RubyGems.
|
11
|
-
|
12
|
-
class Gem::DocManager
|
13
|
-
|
14
|
-
include Gem::UserInteraction
|
15
|
-
|
16
|
-
@configured_args = []
|
17
|
-
|
18
|
-
def self.configured_args
|
19
|
-
@configured_args ||= []
|
20
|
-
end
|
21
|
-
|
22
|
-
def self.configured_args=(args)
|
23
|
-
case args
|
24
|
-
when Array
|
25
|
-
@configured_args = args
|
26
|
-
when String
|
27
|
-
@configured_args = args.split
|
28
|
-
end
|
29
|
-
end
|
30
|
-
|
31
|
-
##
|
32
|
-
# Load RDoc from a gem if it is available, otherwise from Ruby's stdlib
|
33
|
-
|
34
|
-
def self.load_rdoc
|
35
|
-
begin
|
36
|
-
gem 'rdoc'
|
37
|
-
rescue Gem::LoadError
|
38
|
-
# use built-in RDoc
|
39
|
-
end
|
40
|
-
|
41
|
-
begin
|
42
|
-
require 'rdoc/rdoc'
|
43
|
-
|
44
|
-
@rdoc_version = if defined? RDoc::VERSION then
|
45
|
-
Gem::Version.new RDoc::VERSION
|
46
|
-
else
|
47
|
-
Gem::Version.new '1.0.1' # HACK parsing is hard
|
48
|
-
end
|
49
|
-
|
50
|
-
rescue LoadError => e
|
51
|
-
raise Gem::DocumentError,
|
52
|
-
"ERROR: RDoc documentation generator not installed: #{e}"
|
53
|
-
end
|
54
|
-
end
|
55
|
-
|
56
|
-
def self.rdoc_version
|
57
|
-
@rdoc_version
|
58
|
-
end
|
59
|
-
|
60
|
-
##
|
61
|
-
# Updates the RI cache for RDoc 2 if it is installed
|
62
|
-
|
63
|
-
def self.update_ri_cache
|
64
|
-
load_rdoc rescue return
|
65
|
-
|
66
|
-
return unless defined? RDoc::VERSION # RDoc 1 does not have VERSION
|
67
|
-
|
68
|
-
require 'rdoc/ri/driver'
|
69
|
-
|
70
|
-
options = {
|
71
|
-
:use_cache => true,
|
72
|
-
:use_system => true,
|
73
|
-
:use_site => true,
|
74
|
-
:use_home => true,
|
75
|
-
:use_gems => true,
|
76
|
-
:formatter => RDoc::RI::Formatter,
|
77
|
-
}
|
78
|
-
|
79
|
-
RDoc::RI::Driver.new(options).class_cache
|
80
|
-
end
|
81
|
-
|
82
|
-
##
|
83
|
-
# Create a document manager for +spec+. +rdoc_args+ contains arguments for
|
84
|
-
# RDoc (template etc.) as a String.
|
85
|
-
|
86
|
-
def initialize(spec, rdoc_args="")
|
87
|
-
require 'fileutils'
|
88
|
-
@spec = spec
|
89
|
-
@doc_dir = spec.doc_dir
|
90
|
-
@rdoc_args = rdoc_args.nil? ? [] : rdoc_args.split
|
91
|
-
end
|
92
|
-
|
93
|
-
##
|
94
|
-
# Is the RDoc documentation installed?
|
95
|
-
|
96
|
-
def rdoc_installed?
|
97
|
-
File.exist?(File.join(@doc_dir, "rdoc"))
|
98
|
-
end
|
99
|
-
|
100
|
-
##
|
101
|
-
# Is the RI documentation installed?
|
102
|
-
|
103
|
-
def ri_installed?
|
104
|
-
File.exist?(File.join(@doc_dir, "ri"))
|
105
|
-
end
|
106
|
-
|
107
|
-
##
|
108
|
-
# Generate the RI documents for this gem spec.
|
109
|
-
#
|
110
|
-
# Note that if both RI and RDoc documents are generated from the same
|
111
|
-
# process, the RI docs should be done first (a likely bug in RDoc will cause
|
112
|
-
# RI docs generation to fail if run after RDoc).
|
113
|
-
|
114
|
-
def generate_ri
|
115
|
-
setup_rdoc
|
116
|
-
install_ri # RDoc bug, ri goes first
|
117
|
-
|
118
|
-
FileUtils.mkdir_p @doc_dir unless File.exist?(@doc_dir)
|
119
|
-
end
|
120
|
-
|
121
|
-
##
|
122
|
-
# Generate the RDoc documents for this gem spec.
|
123
|
-
#
|
124
|
-
# Note that if both RI and RDoc documents are generated from the same
|
125
|
-
# process, the RI docs should be done first (a likely bug in RDoc will cause
|
126
|
-
# RI docs generation to fail if run after RDoc).
|
127
|
-
|
128
|
-
def generate_rdoc
|
129
|
-
setup_rdoc
|
130
|
-
install_rdoc
|
131
|
-
|
132
|
-
FileUtils.mkdir_p @doc_dir unless File.exist?(@doc_dir)
|
133
|
-
end
|
134
|
-
|
135
|
-
##
|
136
|
-
# Generate and install RDoc into the documentation directory
|
137
|
-
|
138
|
-
def install_rdoc
|
139
|
-
rdoc_dir = File.join @doc_dir, 'rdoc'
|
140
|
-
|
141
|
-
FileUtils.rm_rf rdoc_dir
|
142
|
-
|
143
|
-
say "Installing RDoc documentation for #{@spec.full_name}..."
|
144
|
-
run_rdoc '--op', rdoc_dir
|
145
|
-
end
|
146
|
-
|
147
|
-
##
|
148
|
-
# Generate and install RI into the documentation directory
|
149
|
-
|
150
|
-
def install_ri
|
151
|
-
ri_dir = File.join @doc_dir, 'ri'
|
152
|
-
|
153
|
-
FileUtils.rm_rf ri_dir
|
154
|
-
|
155
|
-
say "Installing ri documentation for #{@spec.full_name}..."
|
156
|
-
run_rdoc '--ri', '--op', ri_dir
|
157
|
-
end
|
158
|
-
|
159
|
-
##
|
160
|
-
# Run RDoc with +args+, which is an ARGV style argument list
|
161
|
-
|
162
|
-
def run_rdoc(*args)
|
163
|
-
args << @spec.rdoc_options
|
164
|
-
args << self.class.configured_args
|
165
|
-
args << @spec.require_paths.clone
|
166
|
-
args << @spec.extra_rdoc_files
|
167
|
-
args << '--title' << "#{@spec.full_name} Documentation"
|
168
|
-
args << '--quiet'
|
169
|
-
args = args.flatten.map do |arg| arg.to_s end
|
170
|
-
|
171
|
-
if self.class.rdoc_version >= Gem::Version.new('2.4.0') then
|
172
|
-
args.delete '--inline-source'
|
173
|
-
args.delete '--promiscuous'
|
174
|
-
args.delete '-p'
|
175
|
-
args.delete '--one-file'
|
176
|
-
# HACK more
|
177
|
-
end
|
178
|
-
|
179
|
-
debug_args = args.dup
|
180
|
-
|
181
|
-
r = RDoc::RDoc.new
|
182
|
-
|
183
|
-
old_pwd = Dir.pwd
|
184
|
-
Dir.chdir @spec.full_gem_path
|
185
|
-
|
186
|
-
say "rdoc #{args.join ' '}" if Gem.configuration.really_verbose
|
187
|
-
|
188
|
-
begin
|
189
|
-
r.document args
|
190
|
-
rescue Errno::EACCES => e
|
191
|
-
dirname = File.dirname e.message.split("-")[1].strip
|
192
|
-
raise Gem::FilePermissionError.new(dirname)
|
193
|
-
rescue Interrupt => e
|
194
|
-
raise e
|
195
|
-
rescue Exception => ex
|
196
|
-
alert_error "While generating documentation for #{@spec.full_name}"
|
197
|
-
ui.errs.puts "... MESSAGE: #{ex}"
|
198
|
-
ui.errs.puts "... RDOC args: #{debug_args.join(' ')}"
|
199
|
-
ui.errs.puts "\t#{ex.backtrace.join "\n\t"}" if
|
200
|
-
Gem.configuration.backtrace
|
201
|
-
terminate_interaction 1
|
202
|
-
ensure
|
203
|
-
Dir.chdir old_pwd
|
204
|
-
end
|
205
|
-
end
|
206
|
-
|
207
|
-
def setup_rdoc
|
208
|
-
if File.exist?(@doc_dir) && !File.writable?(@doc_dir) then
|
209
|
-
raise Gem::FilePermissionError.new(@doc_dir)
|
210
|
-
end
|
211
|
-
|
212
|
-
FileUtils.mkdir_p @doc_dir unless File.exist?(@doc_dir)
|
213
|
-
|
214
|
-
self.class.load_rdoc
|
215
|
-
end
|
216
|
-
|
217
|
-
##
|
218
|
-
# Remove RDoc and RI documentation
|
219
|
-
|
220
|
-
def uninstall_doc
|
221
|
-
base_dir = @spec.base_dir
|
222
|
-
raise Gem::FilePermissionError.new base_dir unless File.writable? base_dir
|
223
|
-
|
224
|
-
# TODO: ok... that's twice... ugh
|
225
|
-
old_name = [
|
226
|
-
@spec.name, @spec.version, @spec.original_platform].join '-'
|
227
|
-
|
228
|
-
doc_dir = @spec.doc_dir
|
229
|
-
unless File.directory? doc_dir then
|
230
|
-
doc_dir = File.join File.dirname(doc_dir), old_name
|
231
|
-
end
|
232
|
-
|
233
|
-
ri_dir = @spec.ri_dir
|
234
|
-
unless File.directory? ri_dir then
|
235
|
-
ri_dir = File.join File.dirname(ri_dir), old_name
|
236
|
-
end
|
237
|
-
|
238
|
-
FileUtils.rm_rf doc_dir
|
239
|
-
FileUtils.rm_rf ri_dir
|
240
|
-
end
|
241
|
-
|
242
|
-
end
|
243
|
-
|