rubygems-update 1.3.1 → 1.3.2
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.
- data.tar.gz.sig +0 -0
- data/.autotest +24 -0
- data/.document +4 -3
- data/ChangeLog +382 -1
- data/Manifest.txt +214 -0
- data/README +1 -49
- data/Rakefile +124 -191
- data/bin/gem +1 -4
- data/cruise_config.rb +22 -0
- data/doc/release_notes/rel_1_3_1.rdoc +3 -3
- data/doc/release_notes/rel_1_3_2.rdoc +119 -0
- data/lib/gauntlet_rubygems.rb +50 -0
- data/lib/rubygems.rb +250 -25
- data/lib/rubygems/builder.rb +62 -60
- data/lib/rubygems/command.rb +421 -319
- data/lib/rubygems/command_manager.rb +153 -125
- data/lib/rubygems/commands/check_command.rb +12 -7
- data/lib/rubygems/commands/cleanup_command.rb +11 -2
- data/lib/rubygems/commands/contents_command.rb +42 -18
- data/lib/rubygems/commands/generate_index_command.rb +91 -15
- data/lib/rubygems/commands/install_command.rb +33 -47
- data/lib/rubygems/commands/query_command.rb +36 -20
- data/lib/rubygems/commands/rdoc_command.rb +62 -68
- data/lib/rubygems/commands/search_command.rb +26 -32
- data/lib/rubygems/commands/setup_command.rb +353 -0
- data/lib/rubygems/commands/sources_command.rb +5 -0
- data/lib/rubygems/commands/specification_command.rb +23 -3
- data/lib/rubygems/commands/uninstall_command.rb +71 -61
- data/lib/rubygems/commands/unpack_command.rb +14 -12
- data/lib/rubygems/commands/update_command.rb +26 -5
- data/lib/rubygems/defaults.rb +16 -3
- data/lib/rubygems/dependency.rb +38 -7
- data/lib/rubygems/dependency_installer.rb +7 -4
- data/lib/rubygems/digest/digest_adapter.rb +42 -33
- data/lib/rubygems/digest/sha1.rb +6 -1
- data/lib/rubygems/digest/sha2.rb +5 -0
- data/lib/rubygems/doc_manager.rb +31 -11
- data/lib/rubygems/ext/ext_conf_builder.rb +2 -1
- data/lib/rubygems/ext/rake_builder.rb +6 -2
- data/lib/rubygems/format.rb +63 -63
- data/lib/rubygems/gem_openssl.rb +14 -2
- data/lib/rubygems/gem_path_searcher.rb +7 -3
- data/lib/rubygems/gem_runner.rb +59 -39
- data/lib/rubygems/indexer.rb +450 -109
- data/lib/rubygems/install_update_options.rb +13 -1
- data/lib/rubygems/installer.rb +25 -22
- data/lib/rubygems/local_remote_options.rb +5 -3
- data/lib/rubygems/old_format.rb +124 -120
- data/lib/rubygems/package/tar_header.rb +25 -3
- data/lib/rubygems/package/tar_input.rb +5 -5
- data/lib/rubygems/package/tar_output.rb +2 -0
- data/lib/rubygems/package/tar_reader.rb +19 -0
- data/lib/rubygems/package/tar_reader/entry.rb +43 -0
- data/lib/rubygems/package/tar_writer.rb +65 -3
- data/lib/rubygems/package_task.rb +117 -0
- data/lib/rubygems/platform.rb +12 -8
- data/lib/rubygems/remote_fetcher.rb +43 -24
- data/lib/rubygems/require_paths_builder.rb +14 -12
- data/lib/rubygems/requirement.rb +15 -6
- data/lib/rubygems/rubygems_version.rb +14 -1
- data/lib/rubygems/source_index.rb +38 -16
- data/lib/rubygems/source_info_cache_entry.rb +2 -2
- data/lib/rubygems/spec_fetcher.rb +43 -20
- data/lib/rubygems/specification.rb +1122 -947
- data/lib/rubygems/text.rb +30 -0
- data/lib/rubygems/timer.rb +14 -11
- data/lib/rubygems/uninstaller.rb +25 -5
- data/lib/rubygems/user_interaction.rb +294 -264
- data/lib/rubygems/validator.rb +70 -36
- data/lib/rubygems/version.rb +97 -33
- data/lib/rubygems/version_option.rb +1 -0
- data/setup.rb +11 -306
- data/test/foo/discover.rb +0 -0
- data/test/gem_installer_test_case.rb +22 -11
- data/test/gem_package_tar_test_case.rb +0 -14
- data/test/gemutilities.rb +89 -8
- data/test/mockgemui.rb +2 -1
- data/test/rubygems_plugin.rb +16 -0
- data/test/test_gem.rb +107 -36
- data/test/test_gem_command.rb +3 -13
- data/test/test_gem_command_manager.rb +1 -14
- data/test/test_gem_commands_cert_command.rb +1 -1
- data/test/test_gem_commands_contents_command.rb +63 -0
- data/test/test_gem_commands_environment_command.rb +1 -1
- data/test/test_gem_commands_generate_index_command.rb +104 -1
- data/test/test_gem_commands_install_command.rb +95 -0
- data/test/test_gem_commands_pristine_command.rb +3 -3
- data/test/test_gem_commands_query_command.rb +46 -0
- data/test/test_gem_commands_sources_command.rb +9 -5
- data/test/test_gem_commands_specification_command.rb +31 -0
- data/test/test_gem_commands_uninstall_command.rb +3 -2
- data/test/test_gem_commands_unpack_command.rb +3 -2
- data/test/test_gem_commands_update_command.rb +12 -7
- data/test/test_gem_dependency.rb +62 -11
- data/test/test_gem_dependency_installer.rb +18 -5
- data/test/test_gem_dependency_list.rb +6 -6
- data/test/test_gem_doc_manager.rb +7 -1
- data/test/test_gem_ext_configure_builder.rb +8 -10
- data/test/test_gem_ext_ext_conf_builder.rb +14 -8
- data/test/test_gem_gem_path_searcher.rb +1 -1
- data/test/test_gem_gem_runner.rb +11 -0
- data/test/test_gem_indexer.rb +398 -21
- data/test/test_gem_install_update_options.rb +20 -6
- data/test/test_gem_installer.rb +22 -14
- data/test/test_gem_local_remote_options.rb +2 -1
- data/test/test_gem_package_tar_header.rb +3 -3
- data/test/test_gem_package_tar_input.rb +3 -3
- data/test/test_gem_package_tar_output.rb +2 -2
- data/test/test_gem_package_task.rb +70 -0
- data/test/test_gem_platform.rb +12 -6
- data/test/test_gem_remote_fetcher.rb +23 -1
- data/test/test_gem_source_index.rb +32 -21
- data/test/test_gem_spec_fetcher.rb +77 -5
- data/test/test_gem_specification.rb +274 -1
- data/test/test_gem_uninstaller.rb +34 -4
- data/test/test_gem_version.rb +94 -4
- data/test/test_gem_version_option.rb +13 -0
- data/test/test_kernel.rb +4 -4
- data/util/CL2notes +56 -0
- data/util/gem_prelude.rb.template +251 -0
- metadata +30 -20
- metadata.gz.sig +3 -4
- data/TODO +0 -1
- data/scripts/buildtests.rb +0 -31
- data/scripts/gemdoc.rb +0 -67
- data/scripts/runtest.rb +0 -40
- data/scripts/specdoc.rb +0 -171
- data/scripts/upload_gemdoc.rb +0 -140
data/bin/gem
CHANGED
|
@@ -15,10 +15,7 @@ unless required_version.satisfied_by? Gem.ruby_version then
|
|
|
15
15
|
abort "Expected Ruby Version #{required_version}, was #{Gem.ruby_version}"
|
|
16
16
|
end
|
|
17
17
|
|
|
18
|
-
|
|
19
|
-
# to source gems. If there is a -- in the line, strip all options after
|
|
20
|
-
# it...its for the source building process.
|
|
21
|
-
args = !ARGV.include?("--") ? ARGV.clone : ARGV[0...ARGV.index("--")]
|
|
18
|
+
args = ARGV.clone
|
|
22
19
|
|
|
23
20
|
begin
|
|
24
21
|
Gem::GemRunner.new.run args
|
data/cruise_config.rb
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# Project-specific configuration for CruiseControl.rb
|
|
2
|
+
|
|
3
|
+
Project.configure do |project|
|
|
4
|
+
|
|
5
|
+
# Send email notifications about broken and fixed builds to email1@your.site, email2@your.site (default: send to nobody)
|
|
6
|
+
project.email_notifier.emails = ['rubygems-developers@rubyforge.org']
|
|
7
|
+
|
|
8
|
+
# Set email 'from' field to john@doe.com:
|
|
9
|
+
project.email_notifier.from = 'devnull+rubygems-ci@pivotallabs.com'
|
|
10
|
+
|
|
11
|
+
# Build the project by invoking rake task 'custom'
|
|
12
|
+
# project.rake_task = 'custom'
|
|
13
|
+
|
|
14
|
+
# Build the project by invoking shell script "build_my_app.sh". Keep in mind that when the script is invoked,
|
|
15
|
+
# current working directory is <em>[cruise data]</em>/projects/your_project/work, so if you do not keep build_my_app.sh
|
|
16
|
+
# in version control, it should be '../build_my_app.sh' instead
|
|
17
|
+
# project.build_command = 'build_my_app.sh'
|
|
18
|
+
|
|
19
|
+
# Ping Subversion for new revisions every 5 minutes (default: 30 seconds)
|
|
20
|
+
project.scheduler.polling_interval = 5.minutes
|
|
21
|
+
|
|
22
|
+
end
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
= Announce: RubyGems Release 1.3.
|
|
1
|
+
= Announce: RubyGems Release 1.3.1
|
|
2
2
|
|
|
3
3
|
NOTE: RubyGems 1.1 and 1.2 have problems upgrading when there is no
|
|
4
4
|
rubygems-update installed. You will need to follow the second set of update
|
|
5
5
|
instructions if you see "Nothing to update".
|
|
6
6
|
|
|
7
|
-
Release 1.3.
|
|
7
|
+
Release 1.3.1 fixes some bugs.
|
|
8
8
|
|
|
9
9
|
Bugs fixed:
|
|
10
10
|
|
|
@@ -13,7 +13,7 @@ Bugs fixed:
|
|
|
13
13
|
* Fix requires for Gem::inflate, Gem::deflate, etc.
|
|
14
14
|
* Make Gem.dir respect :gemhome value from config. (Note: this feature may be
|
|
15
15
|
removed since it is hard to implement on 1.9.)
|
|
16
|
-
* Kernel methods are now private. Patch #20801 by
|
|
16
|
+
* Kernel methods are now private. Patch #20801 by James M. Lawrence.
|
|
17
17
|
* Gem::location_of_caller now behaves on Windows. Patch by Daniel Berger.
|
|
18
18
|
* Silence PATH warning.
|
|
19
19
|
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
= Announce: RubyGems Release 1.3.2
|
|
2
|
+
|
|
3
|
+
NOTE: RubyGems 1.1 and 1.2 have problems upgrading when there is no
|
|
4
|
+
rubygems-update installed. You will need to follow the second set of update
|
|
5
|
+
instructions if you see "Nothing to update".
|
|
6
|
+
|
|
7
|
+
Release 1.3.2 fixes some bugs and adds some features.
|
|
8
|
+
|
|
9
|
+
Select New Features:
|
|
10
|
+
|
|
11
|
+
* RubyGems now loads plugins from rubygems_plugin.rb in installed gems.
|
|
12
|
+
This can be used to add commands (See Gem::CommandManager) or add
|
|
13
|
+
install/uninstall hooks (See Gem::Installer and Gem::Uninstaller).
|
|
14
|
+
* Gem::Version now understands prerelease versions using letters. (eg.
|
|
15
|
+
'1.2.1.b') Thanks to Josh Susser, Alex Vollmer and Phil Hagelberg.
|
|
16
|
+
* RubyGems now includes a Rake task for creating gems which replaces rake's
|
|
17
|
+
Rake::GemPackageTask. See Gem::PackageTask.
|
|
18
|
+
* Gem::find_files now returns paths in $LOAD_PATH.
|
|
19
|
+
* Added Gem::promote_load_path for use with Gem::find_files
|
|
20
|
+
* Added Gem::bin_path to make finding executables easier. Patch #24114 by
|
|
21
|
+
James Tucker.
|
|
22
|
+
* Various improvements to build arguments for installing gems.
|
|
23
|
+
* `gem contents` added --all and --no-prefix.
|
|
24
|
+
* Gem::Specification
|
|
25
|
+
* #validate strips directories and errors on not-files.
|
|
26
|
+
* #description no longer removes newlines.
|
|
27
|
+
* #name must be a String.
|
|
28
|
+
* FIXME and TODO are no longer allowed in various fields.
|
|
29
|
+
* Added support for a license attribute. Feature #11041 (partial).
|
|
30
|
+
* Removed Gem::Specification::list, too much process growth. Bug #23668 by
|
|
31
|
+
Steve Purcell.
|
|
32
|
+
* `gem generate_index`
|
|
33
|
+
* Can now generate an RSS feed.
|
|
34
|
+
* Modern indicies can now be updated incrementally.
|
|
35
|
+
* Legacy indicies can be updated separately from modern.
|
|
36
|
+
|
|
37
|
+
Select Bugs Fixed:
|
|
38
|
+
|
|
39
|
+
* Better gem activation error message. Patch #23082.
|
|
40
|
+
* Kernel methods are now private. Patch #20801 by James M. Lawrence.
|
|
41
|
+
* Fixed various usability issues with `gem check`.
|
|
42
|
+
* `gem update` now rescues InstallError and continues. Bug #19268 by Gabriel
|
|
43
|
+
Wilkins.
|
|
44
|
+
* Allow 'https', 'file' as a valid schemes for --source. Patch #22485.
|
|
45
|
+
* `gem install`
|
|
46
|
+
* Now removes existing path before installing. Bug #22837.
|
|
47
|
+
* Uses Gem::bin_path in executable stubs to work around Kernel#load bug in
|
|
48
|
+
1.9.
|
|
49
|
+
* Correctly handle build args (after --) via the API. Bug #23210.
|
|
50
|
+
* --user-install
|
|
51
|
+
* `gem install --no-user-install` now works. Patch #23573 by Alf Mikula.
|
|
52
|
+
* `gem uninstall` can now uninstall from ~/.gem. Bug #23760 by Roger Pack.
|
|
53
|
+
* setup.rb
|
|
54
|
+
* Clarify RubyGems RDoc installation location. Bug #22656 by Gian Marco
|
|
55
|
+
Gherardi.
|
|
56
|
+
* Allow setup to run from read-only location. Patch #21862 by Luis Herrera.
|
|
57
|
+
* Fixed overwriting ruby executable when BASERUBY was not set. Bug #24958
|
|
58
|
+
by Michael Soulier.
|
|
59
|
+
* Ensure we're in a RubyGems dir when installing.
|
|
60
|
+
* Deal with extraneous quotation mark when autogenerating .bat file on MS
|
|
61
|
+
Windows. Bug #22712.
|
|
62
|
+
|
|
63
|
+
Deprecation Notices:
|
|
64
|
+
|
|
65
|
+
* Gem::manage_gems has been removed.
|
|
66
|
+
* Time::today will be removed in RubyGems 1.4.
|
|
67
|
+
|
|
68
|
+
For a full list of changes to RubyGems and the contributor for each change, see
|
|
69
|
+
the ChangeLog file.
|
|
70
|
+
|
|
71
|
+
Special thanks to Chad Wooley for backwards compatibility testing and Luis
|
|
72
|
+
Lavena and Daniel Berger for continuing windows support.
|
|
73
|
+
|
|
74
|
+
== How can I get RubyGems?
|
|
75
|
+
|
|
76
|
+
NOTE: If you have installed RubyGems using a package system you may want to
|
|
77
|
+
install a new RubyGems through the same packaging system.
|
|
78
|
+
|
|
79
|
+
If you have a recent version of RubyGems (0.8.5 or later), then all
|
|
80
|
+
you need to do is:
|
|
81
|
+
|
|
82
|
+
$ gem update --system (you might need to be admin/root)
|
|
83
|
+
|
|
84
|
+
NOTE: RubyGems 1.1 and 1.2 have problems upgrading when there is no
|
|
85
|
+
rubygems-update installed. You will need to follow the second set of update
|
|
86
|
+
instructions if you see "Nothing to update".
|
|
87
|
+
|
|
88
|
+
NOTE: You may have to run the command twice if you have any previosly
|
|
89
|
+
installed rubygems-update gems.
|
|
90
|
+
|
|
91
|
+
If you have an older version of RubyGems installed, then you can still
|
|
92
|
+
do it in two steps:
|
|
93
|
+
|
|
94
|
+
$ gem install rubygems-update (again, might need to be admin/root)
|
|
95
|
+
$ update_rubygems (... here too)
|
|
96
|
+
|
|
97
|
+
If you don't have any gems install, there is still the pre-gem
|
|
98
|
+
approach to getting software ... doing it manually:
|
|
99
|
+
|
|
100
|
+
1. DOWNLOAD FROM: http://rubyforge.org/frs/?group_id=126
|
|
101
|
+
2. UNPACK INTO A DIRECTORY AND CD THERE
|
|
102
|
+
3. INSTALL WITH: ruby setup.rb (you may need admin/root privilege)
|
|
103
|
+
|
|
104
|
+
== To File Bugs
|
|
105
|
+
|
|
106
|
+
The RubyGems bug tracker can be found on RubyForge at:
|
|
107
|
+
http://rubyforge.org/tracker/?func=add&group_id=126&atid=575
|
|
108
|
+
|
|
109
|
+
When filing a bug, `gem env` output will be helpful in diagnosing the issue.
|
|
110
|
+
|
|
111
|
+
If you find a bug where RubyGems crashes, please provide debug output. You can
|
|
112
|
+
do that with `gem --debug the_command`.
|
|
113
|
+
|
|
114
|
+
== Thanks
|
|
115
|
+
|
|
116
|
+
Keep those gems coming!
|
|
117
|
+
|
|
118
|
+
-- The RubyGems team
|
|
119
|
+
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
require 'rubygems'
|
|
2
|
+
require 'gauntlet'
|
|
3
|
+
|
|
4
|
+
##
|
|
5
|
+
# GemGauntlet validates all current gems. Currently these packages are
|
|
6
|
+
# borked:
|
|
7
|
+
#
|
|
8
|
+
# Asami-0.04 : No such file or directory - bin/Asami.rb
|
|
9
|
+
# ObjectGraph-1.0.1 : No such file or directory - bin/objectgraph
|
|
10
|
+
# evil-ruby-0.1.0 : authors must be Array of Strings
|
|
11
|
+
# fresh_cookies-1.0.0 : authors must be Array of Strings
|
|
12
|
+
# plugems_deploy-0.2.0 : authors must be Array of Strings
|
|
13
|
+
# pmsrb-0.2.0 : authors must be Array of Strings
|
|
14
|
+
# pqa-1.6 : authors must be Array of Strings
|
|
15
|
+
# rant-0.5.7 : authors must be Array of Strings
|
|
16
|
+
# rvsh-0.4.5 : No such file or directory - bin/rvsh
|
|
17
|
+
# xen-0.1.2.1 : authors must be Array of Strings
|
|
18
|
+
|
|
19
|
+
class GemGauntlet < Gauntlet
|
|
20
|
+
def run(name)
|
|
21
|
+
warn name
|
|
22
|
+
|
|
23
|
+
spec = begin
|
|
24
|
+
Gem::Specification.load 'gemspec'
|
|
25
|
+
rescue SyntaxError
|
|
26
|
+
Gem::Specification.from_yaml File.read('gemspec')
|
|
27
|
+
end
|
|
28
|
+
spec.validate
|
|
29
|
+
|
|
30
|
+
self.data[name] = false
|
|
31
|
+
self.dirty = true
|
|
32
|
+
rescue SystemCallError, Gem::InvalidSpecificationException => e
|
|
33
|
+
self.data[name] = e.message
|
|
34
|
+
self.dirty = true
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def should_skip?(name)
|
|
38
|
+
self.data[name] == false
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def report
|
|
42
|
+
self.data.sort.reject { |k,v| !v }.each do |k,v|
|
|
43
|
+
puts "%-21s: %s" % [k, v]
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
gauntlet = GemGauntlet.new
|
|
49
|
+
gauntlet.run_the_gauntlet ARGV.shift
|
|
50
|
+
gauntlet.report
|
data/lib/rubygems.rb
CHANGED
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
require 'rubygems/rubygems_version'
|
|
9
9
|
require 'rubygems/defaults'
|
|
10
10
|
require 'thread'
|
|
11
|
+
require 'etc'
|
|
11
12
|
|
|
12
13
|
module Gem
|
|
13
14
|
class LoadError < ::LoadError
|
|
@@ -54,18 +55,105 @@ module Kernel
|
|
|
54
55
|
end
|
|
55
56
|
|
|
56
57
|
##
|
|
57
|
-
#
|
|
58
|
+
# RubyGems is the Ruby standard for publishing and managing third party
|
|
59
|
+
# libraries.
|
|
60
|
+
#
|
|
61
|
+
# For user documentation, see:
|
|
62
|
+
#
|
|
63
|
+
# * <tt>gem help</tt> and <tt>gem help [command]</tt>
|
|
64
|
+
# * {RubyGems User Guide}[http://docs.rubygems.org/read/book/1]
|
|
65
|
+
# * {Frequently Asked Questions}[http://docs.rubygems.org/read/book/3]
|
|
66
|
+
#
|
|
67
|
+
# For gem developer documentation see:
|
|
68
|
+
#
|
|
69
|
+
# * {Creating Gems}[http://docs.rubygems.org/read/chapter/5]
|
|
70
|
+
# * Gem::Specification
|
|
71
|
+
#
|
|
72
|
+
# Further RubyGems documentation can be found at:
|
|
73
|
+
#
|
|
74
|
+
# * {RubyGems API}[http://rubygems.rubyforge.org/rdoc] (also available from
|
|
75
|
+
# <tt>gem server</tt>)
|
|
76
|
+
# * {RubyGems Bookshelf}[http://rubygem.org]
|
|
77
|
+
#
|
|
78
|
+
# == RubyGems Plugins
|
|
79
|
+
#
|
|
80
|
+
# As of RubyGems 1.3.2, RubyGems will load plugins installed in gems or
|
|
81
|
+
# $LOAD_PATH. Plugins must be named 'rubygems_plugin' are discovered via
|
|
82
|
+
# Gem::find_files then loaded. Take care when implementing a plugin as your
|
|
83
|
+
# plugin file may be loaded multiple times if multiple versions of your gem
|
|
84
|
+
# are installed.
|
|
85
|
+
#
|
|
86
|
+
# For an example plugin, see the graph gem which adds a `gem graph` command.
|
|
87
|
+
#
|
|
88
|
+
# == RubyGems Defaults, Packaging
|
|
89
|
+
#
|
|
90
|
+
# RubyGems defaults are stored in rubygems/defaults.rb. If you're packaging
|
|
91
|
+
# RubyGems or implementing Ruby you can change RubyGems' defaults.
|
|
92
|
+
#
|
|
93
|
+
# For RubyGems packagers, provide lib/rubygems/operating_system.rb and
|
|
94
|
+
# override any defaults from lib/rubygems/defaults.rb.
|
|
95
|
+
#
|
|
96
|
+
# For Ruby implementers, provide lib/rubygems/#{RUBY_ENGINE}.rb and override
|
|
97
|
+
# any defaults from lib/rubygems/defaults.rb.
|
|
98
|
+
#
|
|
99
|
+
# If you need RubyGems to perform extra work on install or uninstall, your
|
|
100
|
+
# defaults override file can set pre and post install and uninstall hooks.
|
|
101
|
+
# See Gem::pre_install, Gem::pre_uninstall, Gem::post_install,
|
|
102
|
+
# Gem::post_uninstall.
|
|
103
|
+
#
|
|
104
|
+
# == Bugs
|
|
105
|
+
#
|
|
106
|
+
# You can submit bugs to the
|
|
107
|
+
# {RubyGems bug tracker}[http://rubyforge.org/tracker/?atid=575&group_id=126&func=browse]
|
|
108
|
+
# on RubyForge
|
|
109
|
+
#
|
|
110
|
+
# == Credits
|
|
111
|
+
#
|
|
112
|
+
# RubyGems is currently maintained by Eric Hodel.
|
|
113
|
+
#
|
|
114
|
+
# RubyGems was originally developed at RubyConf 2003 by:
|
|
115
|
+
#
|
|
116
|
+
# * Rich Kilmer -- rich(at)infoether.com
|
|
117
|
+
# * Chad Fowler -- chad(at)chadfowler.com
|
|
118
|
+
# * David Black -- dblack(at)wobblini.net
|
|
119
|
+
# * Paul Brannan -- paul(at)atdesk.com
|
|
120
|
+
# * Jim Weirch -- {jim(at)weirichhouse.org}[mailto:jim@weirichhouse.org]
|
|
121
|
+
#
|
|
122
|
+
# Contributors:
|
|
123
|
+
#
|
|
124
|
+
# * Gavin Sinclair -- gsinclair(at)soyabean.com.au
|
|
125
|
+
# * George Marrows -- george.marrows(at)ntlworld.com
|
|
126
|
+
# * Dick Davies -- rasputnik(at)hellooperator.net
|
|
127
|
+
# * Mauricio Fernandez -- batsman.geo(at)yahoo.com
|
|
128
|
+
# * Simon Strandgaard -- neoneye(at)adslhome.dk
|
|
129
|
+
# * Dave Glasser -- glasser(at)mit.edu
|
|
130
|
+
# * Paul Duncan -- pabs(at)pablotron.org
|
|
131
|
+
# * Ville Aine -- vaine(at)cs.helsinki.fi
|
|
132
|
+
# * Eric Hodel -- drbrain(at)segment7.net
|
|
133
|
+
# * Daniel Berger -- djberg96(at)gmail.com
|
|
134
|
+
# * Phil Hagelberg -- technomancy(at)gmail.com
|
|
135
|
+
# * Ryan Davis
|
|
136
|
+
#
|
|
137
|
+
# (If your name is missing, PLEASE let us know!)
|
|
138
|
+
#
|
|
139
|
+
# Thanks!
|
|
140
|
+
#
|
|
141
|
+
# -The RubyGems Team
|
|
58
142
|
|
|
59
143
|
module Gem
|
|
60
144
|
|
|
145
|
+
##
|
|
146
|
+
# Configuration settings from ::RbConfig
|
|
147
|
+
|
|
61
148
|
ConfigMap = {} unless defined?(ConfigMap)
|
|
149
|
+
|
|
62
150
|
require 'rbconfig'
|
|
151
|
+
# :stopdoc:
|
|
63
152
|
RbConfig = Config unless defined? ::RbConfig
|
|
153
|
+
# :startdoc:
|
|
64
154
|
|
|
65
155
|
ConfigMap.merge!(
|
|
66
|
-
:BASERUBY => RbConfig::CONFIG["BASERUBY"],
|
|
67
156
|
:EXEEXT => RbConfig::CONFIG["EXEEXT"],
|
|
68
|
-
:RUBY_INSTALL_NAME => RbConfig::CONFIG["RUBY_INSTALL_NAME"],
|
|
69
157
|
:RUBY_SO_NAME => RbConfig::CONFIG["RUBY_SO_NAME"],
|
|
70
158
|
:arch => RbConfig::CONFIG["arch"],
|
|
71
159
|
:bindir => RbConfig::CONFIG["bindir"],
|
|
@@ -79,11 +167,16 @@ module Gem
|
|
|
79
167
|
:vendorlibdir => RbConfig::CONFIG["vendorlibdir"]
|
|
80
168
|
)
|
|
81
169
|
|
|
170
|
+
##
|
|
171
|
+
# Default directories in a gem repository
|
|
172
|
+
|
|
82
173
|
DIRECTORIES = %w[cache doc gems specifications] unless defined?(DIRECTORIES)
|
|
83
174
|
|
|
175
|
+
# :stopdoc:
|
|
84
176
|
MUTEX = Mutex.new
|
|
85
177
|
|
|
86
178
|
RubyGemsPackageVersion = RubyGemsVersion
|
|
179
|
+
# :startdoc:
|
|
87
180
|
|
|
88
181
|
##
|
|
89
182
|
# An Array of Regexps that match windows ruby platforms.
|
|
@@ -102,6 +195,7 @@ module Gem
|
|
|
102
195
|
|
|
103
196
|
@configuration = nil
|
|
104
197
|
@loaded_specs = {}
|
|
198
|
+
@loaded_stacks = {}
|
|
105
199
|
@platforms = []
|
|
106
200
|
@ruby = nil
|
|
107
201
|
@sources = []
|
|
@@ -128,6 +222,14 @@ module Gem
|
|
|
128
222
|
# Gem::Requirement and Gem::Version documentation.
|
|
129
223
|
|
|
130
224
|
def self.activate(gem, *version_requirements)
|
|
225
|
+
if version_requirements.last.is_a?(Hash)
|
|
226
|
+
options = version_requirements.pop
|
|
227
|
+
else
|
|
228
|
+
options = {}
|
|
229
|
+
end
|
|
230
|
+
|
|
231
|
+
sources = options[:sources] || []
|
|
232
|
+
|
|
131
233
|
if version_requirements.empty? then
|
|
132
234
|
version_requirements = Gem::Requirement.default
|
|
133
235
|
end
|
|
@@ -146,8 +248,14 @@ module Gem
|
|
|
146
248
|
existing_spec = @loaded_specs[gem.name]
|
|
147
249
|
|
|
148
250
|
unless matches.any? { |spec| spec.version == existing_spec.version } then
|
|
149
|
-
|
|
150
|
-
|
|
251
|
+
sources_message = sources.map { |spec| spec.full_name }
|
|
252
|
+
stack_message = @loaded_stacks[gem.name].map { |spec| spec.full_name }
|
|
253
|
+
|
|
254
|
+
msg = "can't activate #{gem} for #{sources_message.inspect}, "
|
|
255
|
+
msg << "already activated #{existing_spec.full_name} for "
|
|
256
|
+
msg << "#{stack_message.inspect}"
|
|
257
|
+
|
|
258
|
+
raise Gem::Exception, msg
|
|
151
259
|
end
|
|
152
260
|
|
|
153
261
|
return false
|
|
@@ -159,10 +267,11 @@ module Gem
|
|
|
159
267
|
|
|
160
268
|
spec.loaded = true
|
|
161
269
|
@loaded_specs[spec.name] = spec
|
|
270
|
+
@loaded_stacks[spec.name] = sources.dup
|
|
162
271
|
|
|
163
272
|
# Load dependent gems first
|
|
164
273
|
spec.runtime_dependencies.each do |dep_gem|
|
|
165
|
-
activate dep_gem
|
|
274
|
+
activate dep_gem, :sources => [spec, *sources]
|
|
166
275
|
end
|
|
167
276
|
|
|
168
277
|
# bin directory must come before library directories
|
|
@@ -227,6 +336,35 @@ module Gem
|
|
|
227
336
|
!Gem.source_index.search(gem).empty?
|
|
228
337
|
end
|
|
229
338
|
|
|
339
|
+
##
|
|
340
|
+
# Find the full path to the executable for gem +name+. If the +exec_name+
|
|
341
|
+
# is not given, the gem's default_executable is chosen, otherwise the
|
|
342
|
+
# specifed executable's path is returned. +version_requirements+ allows you
|
|
343
|
+
# to specify specific gem versions.
|
|
344
|
+
|
|
345
|
+
def self.bin_path(name, exec_name = nil, *version_requirements)
|
|
346
|
+
version_requirements = Gem::Requirement.default if
|
|
347
|
+
version_requirements.empty?
|
|
348
|
+
spec = Gem.source_index.find_name(name, version_requirements).last
|
|
349
|
+
|
|
350
|
+
raise Gem::GemNotFoundException,
|
|
351
|
+
"can't find gem #{name} (#{version_requirements})" unless spec
|
|
352
|
+
|
|
353
|
+
exec_name ||= spec.default_executable
|
|
354
|
+
|
|
355
|
+
unless exec_name
|
|
356
|
+
msg = "no default executable for #{spec.full_name}"
|
|
357
|
+
raise Gem::Exception, msg
|
|
358
|
+
end
|
|
359
|
+
|
|
360
|
+
unless spec.executables.include? exec_name
|
|
361
|
+
msg = "can't find executable #{exec_name} for #{spec.full_name}"
|
|
362
|
+
raise Gem::Exception, msg
|
|
363
|
+
end
|
|
364
|
+
|
|
365
|
+
File.join spec.full_gem_path, spec.bindir, exec_name
|
|
366
|
+
end
|
|
367
|
+
|
|
230
368
|
##
|
|
231
369
|
# The mode needed to read a file as straight binary.
|
|
232
370
|
|
|
@@ -351,14 +489,27 @@ module Gem
|
|
|
351
489
|
#
|
|
352
490
|
# Gem.find_files('rdoc/discover').each do |path| load path end
|
|
353
491
|
#
|
|
354
|
-
# find_files
|
|
492
|
+
# find_files search $LOAD_PATH for files as well as gems.
|
|
493
|
+
#
|
|
494
|
+
# Note that find_files will return all files even if they are from different
|
|
495
|
+
# versions of the same gem.
|
|
355
496
|
|
|
356
497
|
def self.find_files(path)
|
|
498
|
+
load_path_files = $LOAD_PATH.map do |load_path|
|
|
499
|
+
files = Dir["#{File.expand_path path, load_path}#{Gem.suffix_pattern}"]
|
|
500
|
+
|
|
501
|
+
files.select do |load_path_file|
|
|
502
|
+
File.file? load_path_file.untaint
|
|
503
|
+
end
|
|
504
|
+
end.flatten
|
|
505
|
+
|
|
357
506
|
specs = searcher.find_all path
|
|
358
507
|
|
|
359
|
-
specs.map do |spec|
|
|
508
|
+
specs_files = specs.map do |spec|
|
|
360
509
|
searcher.matching_files spec, path
|
|
361
510
|
end.flatten
|
|
511
|
+
|
|
512
|
+
(load_path_files + specs_files).flatten.uniq
|
|
362
513
|
end
|
|
363
514
|
|
|
364
515
|
##
|
|
@@ -487,22 +638,13 @@ module Gem
|
|
|
487
638
|
# The file name and line number of the caller of the caller of this method.
|
|
488
639
|
|
|
489
640
|
def self.location_of_caller
|
|
490
|
-
caller[1] =~ /(.*?):(\d+)
|
|
641
|
+
caller[1] =~ /(.*?):(\d+).*?$/i
|
|
491
642
|
file = $1
|
|
492
643
|
lineno = $2.to_i
|
|
493
644
|
|
|
494
645
|
[file, lineno]
|
|
495
646
|
end
|
|
496
647
|
|
|
497
|
-
##
|
|
498
|
-
# manage_gems is useless and deprecated. Don't call it anymore.
|
|
499
|
-
|
|
500
|
-
def self.manage_gems # :nodoc:
|
|
501
|
-
file, lineno = location_of_caller
|
|
502
|
-
|
|
503
|
-
warn "#{file}:#{lineno}:Warning: Gem::manage_gems is deprecated and will be removed on or after March 2009."
|
|
504
|
-
end
|
|
505
|
-
|
|
506
648
|
##
|
|
507
649
|
# The version of the Marshal format for your Ruby.
|
|
508
650
|
|
|
@@ -596,6 +738,33 @@ module Gem
|
|
|
596
738
|
end
|
|
597
739
|
end
|
|
598
740
|
|
|
741
|
+
##
|
|
742
|
+
# Promotes the load paths of the +gem_name+ over the load paths of
|
|
743
|
+
# +over_name+. Useful for allowing one gem to override features in another
|
|
744
|
+
# using #find_files.
|
|
745
|
+
|
|
746
|
+
def self.promote_load_path(gem_name, over_name)
|
|
747
|
+
gem = Gem.loaded_specs[gem_name]
|
|
748
|
+
over = Gem.loaded_specs[over_name]
|
|
749
|
+
|
|
750
|
+
raise ArgumentError, "gem #{gem_name} is not activated" if gem.nil?
|
|
751
|
+
raise ArgumentError, "gem #{over_name} is not activated" if over.nil?
|
|
752
|
+
|
|
753
|
+
last_gem_path = File.join gem.full_gem_path, gem.require_paths.last
|
|
754
|
+
|
|
755
|
+
over_paths = over.require_paths.map do |path|
|
|
756
|
+
File.join over.full_gem_path, path
|
|
757
|
+
end
|
|
758
|
+
|
|
759
|
+
over_paths.each do |path|
|
|
760
|
+
$LOAD_PATH.delete path
|
|
761
|
+
end
|
|
762
|
+
|
|
763
|
+
gem = $LOAD_PATH.index(last_gem_path) + 1
|
|
764
|
+
|
|
765
|
+
$LOAD_PATH.insert(gem, *over_paths)
|
|
766
|
+
end
|
|
767
|
+
|
|
599
768
|
##
|
|
600
769
|
# Refresh source_index from disk and clear searcher.
|
|
601
770
|
|
|
@@ -638,15 +807,23 @@ module Gem
|
|
|
638
807
|
|
|
639
808
|
private_class_method :report_activate_error
|
|
640
809
|
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
810
|
+
##
|
|
811
|
+
# Full path to +libfile+ in +gemname+. Searches for the latest gem unless
|
|
812
|
+
# +requirements+ is given.
|
|
813
|
+
|
|
814
|
+
def self.required_location(gemname, libfile, *requirements)
|
|
815
|
+
requirements = Gem::Requirement.default if requirements.empty?
|
|
816
|
+
|
|
817
|
+
matches = Gem.source_index.find_name gemname, requirements
|
|
818
|
+
|
|
644
819
|
return nil if matches.empty?
|
|
820
|
+
|
|
645
821
|
spec = matches.last
|
|
646
822
|
spec.require_paths.each do |path|
|
|
647
|
-
result = File.join
|
|
648
|
-
return result if File.exist?
|
|
823
|
+
result = File.join spec.full_gem_path, path, libfile
|
|
824
|
+
return result if File.exist? result
|
|
649
825
|
end
|
|
826
|
+
|
|
650
827
|
nil
|
|
651
828
|
end
|
|
652
829
|
|
|
@@ -672,7 +849,7 @@ module Gem
|
|
|
672
849
|
def self.ruby_version
|
|
673
850
|
return @ruby_version if defined? @ruby_version
|
|
674
851
|
version = RUBY_VERSION.dup
|
|
675
|
-
version << ".#{RUBY_PATCHLEVEL}" if defined? RUBY_PATCHLEVEL
|
|
852
|
+
version << ".#{RUBY_PATCHLEVEL}" if defined?(RUBY_PATCHLEVEL) && RUBY_PATCHLEVEL != -1
|
|
676
853
|
@ruby_version = Gem::Version.new version
|
|
677
854
|
end
|
|
678
855
|
|
|
@@ -718,9 +895,12 @@ module Gem
|
|
|
718
895
|
@gem_path.uniq!
|
|
719
896
|
@gem_path.each do |path|
|
|
720
897
|
if 0 == File.expand_path(path).index(Gem.user_home)
|
|
898
|
+
next unless File.directory? Gem.user_home
|
|
721
899
|
unless win_platform? then
|
|
722
900
|
# only create by matching user
|
|
723
|
-
|
|
901
|
+
if Etc.getpwuid.nil? || Etc.getpwuid.uid != File::Stat.new(Gem.user_home).uid
|
|
902
|
+
next
|
|
903
|
+
end
|
|
724
904
|
end
|
|
725
905
|
end
|
|
726
906
|
ensure_gem_subdirectories path
|
|
@@ -776,6 +956,31 @@ module Gem
|
|
|
776
956
|
['', '.rb', '.rbw', '.so', '.bundle', '.dll', '.sl', '.jar']
|
|
777
957
|
end
|
|
778
958
|
|
|
959
|
+
##
|
|
960
|
+
# Prints the amount of time the supplied block takes to run using the debug
|
|
961
|
+
# UI output.
|
|
962
|
+
|
|
963
|
+
def self.time(msg, width = 0, display = Gem.configuration.verbose)
|
|
964
|
+
now = Time.now
|
|
965
|
+
|
|
966
|
+
value = yield
|
|
967
|
+
|
|
968
|
+
elapsed = Time.now - now
|
|
969
|
+
|
|
970
|
+
ui.say "%2$*1$s: %3$3.3fs" % [-width, msg, elapsed] if display
|
|
971
|
+
|
|
972
|
+
value
|
|
973
|
+
end
|
|
974
|
+
|
|
975
|
+
##
|
|
976
|
+
# Lazily loads DefaultUserInteraction and returns the default UI.
|
|
977
|
+
|
|
978
|
+
def self.ui
|
|
979
|
+
require 'rubygems/user_interaction'
|
|
980
|
+
|
|
981
|
+
Gem::DefaultUserInteraction.ui
|
|
982
|
+
end
|
|
983
|
+
|
|
779
984
|
##
|
|
780
985
|
# Use the +home+ and +paths+ values for Gem.dir and Gem.path. Used mainly
|
|
781
986
|
# by the unit tests to provide environment isolation.
|
|
@@ -806,6 +1011,9 @@ module Gem
|
|
|
806
1011
|
|
|
807
1012
|
class << self
|
|
808
1013
|
|
|
1014
|
+
##
|
|
1015
|
+
# Hash of loaded Gem::Specification keyed by name
|
|
1016
|
+
|
|
809
1017
|
attr_reader :loaded_specs
|
|
810
1018
|
|
|
811
1019
|
##
|
|
@@ -837,8 +1045,14 @@ module Gem
|
|
|
837
1045
|
|
|
838
1046
|
end
|
|
839
1047
|
|
|
1048
|
+
##
|
|
1049
|
+
# Location of Marshal quick gemspecs on remote repositories
|
|
1050
|
+
|
|
840
1051
|
MARSHAL_SPEC_DIR = "quick/Marshal.#{Gem.marshal_version}/"
|
|
841
1052
|
|
|
1053
|
+
##
|
|
1054
|
+
# Location of legacy YAML quick gemspecs on remote repositories
|
|
1055
|
+
|
|
842
1056
|
YAML_SPEC_DIR = 'quick/'
|
|
843
1057
|
|
|
844
1058
|
end
|
|
@@ -886,3 +1100,14 @@ if RUBY_VERSION < '1.9' then
|
|
|
886
1100
|
end
|
|
887
1101
|
|
|
888
1102
|
Gem.clear_paths
|
|
1103
|
+
|
|
1104
|
+
plugins = Gem.find_files 'rubygems_plugin'
|
|
1105
|
+
|
|
1106
|
+
plugins.each do |plugin|
|
|
1107
|
+
begin
|
|
1108
|
+
load plugin
|
|
1109
|
+
rescue => e
|
|
1110
|
+
warn "error loading #{plugin.inspect}: #{e.message} (#{e.class})"
|
|
1111
|
+
end
|
|
1112
|
+
end
|
|
1113
|
+
|