rubygems-update 1.7.2 → 1.8.0
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 +5 -1
- data/History.txt +101 -4
- data/LICENSE.txt +42 -37
- data/MIT.txt +20 -0
- data/Manifest.txt +5 -4
- data/Rakefile +6 -7
- data/lib/rubygems.rb +175 -278
- data/lib/rubygems/builder.rb +7 -6
- data/lib/rubygems/command_manager.rb +16 -2
- data/lib/rubygems/commands/build_command.rb +13 -11
- data/lib/rubygems/commands/cert_command.rb +1 -1
- data/lib/rubygems/commands/cleanup_command.rb +10 -19
- data/lib/rubygems/commands/contents_command.rb +5 -5
- data/lib/rubygems/commands/dependency_command.rb +17 -40
- data/lib/rubygems/commands/fetch_command.rb +1 -1
- data/lib/rubygems/commands/install_command.rb +2 -1
- data/lib/rubygems/commands/lock_command.rb +4 -4
- data/lib/rubygems/commands/outdated_command.rb +18 -6
- data/lib/rubygems/commands/pristine_command.rb +25 -15
- data/lib/rubygems/commands/query_command.rb +9 -6
- data/lib/rubygems/commands/setup_command.rb +1 -1
- data/lib/rubygems/commands/specification_command.rb +8 -23
- data/lib/rubygems/commands/stale_command.rb +2 -1
- data/lib/rubygems/commands/unpack_command.rb +7 -5
- data/lib/rubygems/commands/update_command.rb +2 -4
- data/lib/rubygems/commands/which_command.rb +5 -9
- data/lib/rubygems/config_file.rb +9 -7
- data/lib/rubygems/custom_require.rb +6 -4
- data/lib/rubygems/defaults.rb +30 -14
- data/lib/rubygems/dependency.rb +44 -1
- data/lib/rubygems/dependency_installer.rb +37 -41
- data/lib/rubygems/dependency_list.rb +20 -9
- data/lib/rubygems/deprecate.rb +3 -3
- data/lib/rubygems/doc_manager.rb +10 -11
- data/lib/rubygems/ext/rake_builder.rb +1 -1
- data/lib/rubygems/gem_path_searcher.rb +19 -4
- data/lib/rubygems/gem_runner.rb +1 -1
- data/lib/rubygems/indexer.rb +117 -123
- data/lib/rubygems/installer.rb +101 -94
- data/lib/rubygems/installer_test_case.rb +28 -30
- data/lib/rubygems/local_remote_options.rb +1 -1
- data/lib/rubygems/mock_gem_ui.rb +10 -3
- data/lib/rubygems/package.rb +0 -26
- data/lib/rubygems/package/tar_input.rb +5 -6
- data/lib/rubygems/package_task.rb +1 -1
- data/lib/rubygems/path_support.rb +72 -0
- data/lib/rubygems/platform.rb +12 -2
- data/lib/rubygems/remote_fetcher.rb +7 -6
- data/lib/rubygems/requirement.rb +3 -0
- data/lib/rubygems/security.rb +1 -1
- data/lib/rubygems/server.rb +67 -67
- data/lib/rubygems/source_index.rb +58 -29
- data/lib/rubygems/spec_fetcher.rb +5 -1
- data/lib/rubygems/specification.rb +1422 -877
- data/lib/rubygems/test_case.rb +114 -64
- data/lib/rubygems/test_utilities.rb +4 -3
- data/lib/rubygems/text.rb +1 -1
- data/lib/rubygems/uninstaller.rb +37 -44
- data/test/rubygems/test_gem.rb +131 -102
- data/test/rubygems/test_gem_builder.rb +18 -1
- data/test/rubygems/test_gem_command_manager.rb +2 -0
- data/test/rubygems/test_gem_commands_build_command.rb +31 -3
- data/test/rubygems/test_gem_commands_cleanup_command.rb +51 -0
- data/test/rubygems/test_gem_commands_dependency_command.rb +1 -10
- data/test/rubygems/test_gem_commands_fetch_command.rb +5 -4
- data/test/rubygems/test_gem_commands_help_command.rb +58 -0
- data/test/rubygems/test_gem_commands_install_command.rb +25 -24
- data/test/rubygems/test_gem_commands_list_command.rb +1 -4
- data/test/rubygems/test_gem_commands_outdated_command.rb +10 -9
- data/test/rubygems/test_gem_commands_pristine_command.rb +63 -22
- data/test/rubygems/test_gem_commands_push_command.rb +1 -1
- data/test/rubygems/test_gem_commands_query_command.rb +15 -82
- data/test/rubygems/test_gem_commands_sources_command.rb +8 -9
- data/test/rubygems/test_gem_commands_specification_command.rb +10 -6
- data/test/rubygems/test_gem_commands_stale_command.rb +4 -4
- data/test/rubygems/test_gem_commands_unpack_command.rb +20 -21
- data/test/rubygems/test_gem_commands_update_command.rb +19 -23
- data/test/rubygems/test_gem_commands_which_command.rb +7 -4
- data/test/rubygems/test_gem_dependency.rb +14 -8
- data/test/rubygems/test_gem_dependency_installer.rb +87 -33
- data/test/rubygems/test_gem_dependency_list.rb +7 -3
- data/test/rubygems/test_gem_doc_manager.rb +3 -3
- data/test/rubygems/test_gem_format.rb +1 -1
- data/test/rubygems/test_gem_gem_path_searcher.rb +45 -29
- data/test/rubygems/test_gem_indexer.rb +48 -47
- data/test/rubygems/test_gem_install_update_options.rb +6 -5
- data/test/rubygems/test_gem_installer.rb +61 -37
- data/test/rubygems/test_gem_path_support.rb +58 -0
- data/test/rubygems/test_gem_platform.rb +5 -5
- data/test/rubygems/test_gem_remote_fetcher.rb +18 -21
- data/test/rubygems/test_gem_server.rb +23 -15
- data/test/rubygems/test_gem_source_index.rb +165 -127
- data/test/rubygems/test_gem_spec_fetcher.rb +42 -49
- data/test/rubygems/test_gem_specification.rb +104 -74
- data/test/rubygems/test_gem_text.rb +15 -0
- data/test/rubygems/test_gem_uninstaller.rb +15 -26
- data/test/rubygems/test_kernel.rb +1 -2
- metadata +64 -14
- metadata.gz.sig +0 -0
- data/GPL.txt +0 -340
- data/pkgs/sources/lib/sources.rb +0 -3
- data/pkgs/sources/sources.gemspec +0 -14
- data/test/rubygems/functional.rb +0 -92
data.tar.gz.sig
CHANGED
|
Binary file
|
data/.autotest
CHANGED
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
# -*- ruby -*-
|
|
2
2
|
|
|
3
|
+
ENV['GEM_HOME'] = "tmp/isolate/ruby-1.8"
|
|
4
|
+
Gem.refresh
|
|
5
|
+
|
|
3
6
|
require 'autotest/restart'
|
|
4
7
|
|
|
5
8
|
Autotest.add_hook :initialize do |at|
|
|
@@ -25,7 +28,8 @@ Autotest.add_hook :initialize do |at|
|
|
|
25
28
|
at.files_matching %r%^test/rubygems/test_(.*)\.rb$%
|
|
26
29
|
end
|
|
27
30
|
|
|
28
|
-
|
|
31
|
+
args = ARGV.reject { |a| a =~ /^-/ }
|
|
32
|
+
at.find_directories = args unless args.empty?
|
|
29
33
|
end
|
|
30
34
|
|
|
31
35
|
class Autotest
|
data/History.txt
CHANGED
|
@@ -1,12 +1,109 @@
|
|
|
1
|
-
=== 1.
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
=== 1.8.0 / 2011-04-34
|
|
2
|
+
|
|
3
|
+
This release focused on properly encapsulating functionality. Most of this
|
|
4
|
+
work focused on moving functionality out of Gem::SourceIndex and
|
|
5
|
+
Gem::GemPathSearcher into Gem::Specification where it belongs.
|
|
6
|
+
|
|
7
|
+
After installing RubyGems 1.8.0 you will see deprecations when loading your
|
|
8
|
+
exsting gems. Run `gem pristine --all --no-extensions` to regenerate your
|
|
9
|
+
gem specifications safely.
|
|
10
|
+
|
|
11
|
+
Currently RubyGems does not save the build arguments used to build gems with
|
|
12
|
+
extensions. You will need to run `gem pristine gem_with_extension --
|
|
13
|
+
--build-arg` to regenerate a gem with an extension where it requires special
|
|
14
|
+
build arguments.
|
|
15
|
+
|
|
16
|
+
* 24(+) Deprecations (WOOT!):
|
|
17
|
+
|
|
18
|
+
* DependencyList.from_source_index deprecated the source_index argument.
|
|
19
|
+
* Deprecated Dependency.new(/regex/).
|
|
20
|
+
* Deprecated Gem.searcher.
|
|
21
|
+
* Deprecated Gem.source_index and Gem.available?
|
|
22
|
+
* Deprecated Gem: activate_dep, activate_spec, activate,
|
|
23
|
+
report_activate_error, and required_location.
|
|
24
|
+
* Deprecated Gem::all_partials
|
|
25
|
+
* Deprecated Gem::cache_dir
|
|
26
|
+
* Deprecated Gem::cache_gem
|
|
27
|
+
* Deprecated Gem::default_system_source_cache_dir
|
|
28
|
+
* Deprecated Gem::default_user_source_cache_dir
|
|
29
|
+
* Deprecated Platform#empty?
|
|
30
|
+
* Deprecated Specification.cache_gem
|
|
31
|
+
* Deprecated Specification.installation_path
|
|
32
|
+
* Deprecated Specification.loaded, loaded?, and loaded=
|
|
33
|
+
* Deprecated all of Gem::SourceIndex.
|
|
34
|
+
* Deprecated all of Gem::GemPathSearcher.
|
|
35
|
+
* Deprecated Gem::Specification#default_executable.
|
|
36
|
+
|
|
37
|
+
* 2 major enhancements:
|
|
38
|
+
|
|
39
|
+
* Gem::SourceIndex functionality has been moved to Gem::Specification.
|
|
40
|
+
Gem::SourceIndex is completely disconnected from Gem::Specification
|
|
41
|
+
* Refactored GemPathSearcher entirely out. RIPMF
|
|
42
|
+
|
|
43
|
+
* 41 minor enhancements:
|
|
44
|
+
|
|
45
|
+
* Added CommandManager#unregister_command
|
|
46
|
+
* Added Dependency#matching_specs + to_specs.
|
|
47
|
+
* Added Dependency#to_spec
|
|
48
|
+
* Added Gem.pre_reset_hook/s and post_reset_hook/s.
|
|
49
|
+
* Added GemCommand.reset to reinitialize the singleton
|
|
50
|
+
* Added Specification#activate.
|
|
51
|
+
* Added Specification#activated, activated=, and activated?
|
|
52
|
+
* Added Specification#base_dir.
|
|
53
|
+
* Added Specification#bin_dir and bin_file.
|
|
54
|
+
* Added Specification#cache_dir and cache_file. Aliased cache_gem.
|
|
55
|
+
* Added Specification#doc_dir and ri_dir.
|
|
56
|
+
* Added Specification#find(name_or_dep, *requirements).
|
|
57
|
+
* Added Specification#gem_dir and gems_dir.
|
|
58
|
+
* Added Specification#spec_dir and spec_file.
|
|
59
|
+
* Added Specification.add_spec, add_specs, and remove_spec.
|
|
60
|
+
* Added Specification.all=. If you use this, we will light you on fire.
|
|
61
|
+
* Added Specification.all_names.
|
|
62
|
+
* Added Specification.dirs and dirs=. dirs= resets.
|
|
63
|
+
* Added Specification.find_all_by_name(name, *reqs)
|
|
64
|
+
* Added Specification.latest_specs. SO TINY!
|
|
65
|
+
* Added TestCase#all_spec_names to help clean up tests
|
|
66
|
+
* Added TestCase#assert_path_exists and refute_path_exists. Will move to
|
|
67
|
+
minitest.
|
|
68
|
+
* Gem.sources no longer tries to load sources gem. Only uses default_sources.
|
|
69
|
+
* Installer no longer accepts a source_index option.
|
|
70
|
+
* More low-level integration.
|
|
71
|
+
* Removed Gem::FileOperations since it is a dummy class
|
|
72
|
+
* Removed a comment because I am dumb
|
|
73
|
+
* Removed pkgs/sources/lib/sources.rb
|
|
74
|
+
* Revamped indexer to mostly not use SourceIndex (legacy index requires it).
|
|
75
|
+
* Rewrote our last functional test suite to be happy and fast
|
|
76
|
+
* RubyGems is now under the Ruby License or the MIT license
|
|
77
|
+
* Specification#== now only checks name, version, and platform.
|
|
78
|
+
* Specification#authors= now forcefully flattens contents (bad rspec! no
|
|
79
|
+
cookie!)
|
|
80
|
+
* Specification#eql? checks all fields.
|
|
81
|
+
* Specification#installation_path no longer raises if it hasn't been
|
|
82
|
+
activated.
|
|
83
|
+
* Specification#validate now ensures that authors is not empty.
|
|
84
|
+
* TestCase.util_setup_spec_fetcher no longer returns a SourceIndex.
|
|
85
|
+
* Uninstaller no longer passes around SourceIndex instances
|
|
4
86
|
* Warn on loading bad spec array values (ntlm-http gem has nil in its cert
|
|
5
87
|
chain)
|
|
88
|
+
* `gem pristine` now accepts --no-executables to skip restoring gems with
|
|
89
|
+
extensions.
|
|
90
|
+
* `gem pristine` can now restore multiple gems.
|
|
91
|
+
|
|
92
|
+
* 6 bug fixes:
|
|
93
|
+
|
|
94
|
+
* DependencyInstaller passed around a source_index instance but used
|
|
95
|
+
Gem.source_index.
|
|
96
|
+
* Fixed Platform#== and #hash so instances may be used as hash keys.
|
|
97
|
+
* Fixed broken Specification#original_platform. It should never be nil.
|
|
98
|
+
* Gem::Text#format_text now strips trailing whitespace
|
|
99
|
+
* Normalize LOAD_PATH with File.expand_path
|
|
100
|
+
* `gem build` errors should exit 1.
|
|
101
|
+
* `gem pristine` can now restore non-latest gems where the cached gem was
|
|
102
|
+
removed.
|
|
6
103
|
|
|
7
104
|
=== 1.7.1 / 2011-03-32
|
|
8
105
|
|
|
9
|
-
* 1
|
|
106
|
+
* 1 bug fix:
|
|
10
107
|
* Fixed missing file in Manifest.txt. (Also a bug in hoe was fixed where
|
|
11
108
|
`rake check_manifest` showing a diff would not exit with an error.)
|
|
12
109
|
|
data/LICENSE.txt
CHANGED
|
@@ -1,53 +1,58 @@
|
|
|
1
1
|
RubyGems is copyrighted free software by Chad Fowler, Rich Kilmer, Jim
|
|
2
2
|
Weirich and others. You can redistribute it and/or modify it under
|
|
3
|
-
either the terms of the
|
|
4
|
-
below:
|
|
3
|
+
either the terms of the MIT license (see the file MIT.txt), or the
|
|
4
|
+
conditions below:
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
6
|
+
1. You may make and give away verbatim copies of the source form of the
|
|
7
|
+
software without restriction, provided that you duplicate all of the
|
|
8
|
+
original copyright notices and associated disclaimers.
|
|
9
9
|
|
|
10
|
-
|
|
11
|
-
|
|
10
|
+
2. You may modify your copy of the software in any way, provided that
|
|
11
|
+
you do at least ONE of the following:
|
|
12
12
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
13
|
+
a. place your modifications in the Public Domain or otherwise
|
|
14
|
+
make them Freely Available, such as by posting said
|
|
15
|
+
modifications to Usenet or an equivalent medium, or by allowing
|
|
16
|
+
the author to include your modifications in the software.
|
|
17
17
|
|
|
18
|
-
|
|
19
|
-
|
|
18
|
+
b. use the modified software only within your corporation or
|
|
19
|
+
organization.
|
|
20
20
|
|
|
21
|
-
|
|
22
|
-
|
|
21
|
+
c. give non-standard executables non-standard names, with
|
|
22
|
+
instructions on where to get the original software distribution.
|
|
23
23
|
|
|
24
|
-
|
|
24
|
+
d. make other distribution arrangements with the author.
|
|
25
25
|
|
|
26
|
-
|
|
27
|
-
|
|
26
|
+
3. You may distribute the software in object code or executable
|
|
27
|
+
form, provided that you do at least ONE of the following:
|
|
28
28
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
29
|
+
a. distribute the executables and library files of the software,
|
|
30
|
+
together with instructions (in the manual page or equivalent)
|
|
31
|
+
on where to get the original distribution.
|
|
32
32
|
|
|
33
|
-
|
|
34
|
-
|
|
33
|
+
b. accompany the distribution with the machine-readable source of
|
|
34
|
+
the software.
|
|
35
35
|
|
|
36
|
-
|
|
37
|
-
|
|
36
|
+
c. give non-standard executables non-standard names, with
|
|
37
|
+
instructions on where to get the original software distribution.
|
|
38
38
|
|
|
39
|
-
|
|
39
|
+
d. make other distribution arrangements with the author.
|
|
40
40
|
|
|
41
|
-
|
|
42
|
-
|
|
41
|
+
4. You may modify and include the part of the software into any other
|
|
42
|
+
software (possibly commercial). But some files in the distribution
|
|
43
|
+
are not written by the author, so that they are not under these terms.
|
|
43
44
|
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
45
|
+
For the list of those files and their copying conditions, see the
|
|
46
|
+
file LEGAL.
|
|
47
|
+
|
|
48
|
+
5. The scripts and library files supplied as input to or produced as
|
|
49
|
+
output from the software do not automatically fall under the
|
|
50
|
+
copyright of the software, but belong to whomever generated them,
|
|
51
|
+
and may be sold commercially, and may be aggregated with this
|
|
52
|
+
software.
|
|
53
|
+
|
|
54
|
+
6. THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR
|
|
55
|
+
IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
|
|
56
|
+
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
|
57
|
+
PURPOSE.
|
|
49
58
|
|
|
50
|
-
6. THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR
|
|
51
|
-
IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
|
|
52
|
-
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
|
53
|
-
PURPOSE.
|
data/MIT.txt
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
Copyright (c) Chad Fowler, Rich Kilmer, Jim Weirich and others.
|
|
2
|
+
|
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
|
4
|
+
a copy of this software and associated documentation files (the
|
|
5
|
+
'Software'), to deal in the Software without restriction, including
|
|
6
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
|
7
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
|
8
|
+
permit persons to whom the Software is furnished to do so, subject to
|
|
9
|
+
the following conditions:
|
|
10
|
+
|
|
11
|
+
The above copyright notice and this permission notice shall be
|
|
12
|
+
included in all copies or substantial portions of the Software.
|
|
13
|
+
|
|
14
|
+
THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
|
|
15
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
16
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
|
17
|
+
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
|
18
|
+
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
|
19
|
+
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
|
20
|
+
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/Manifest.txt
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
.autotest
|
|
2
2
|
.document
|
|
3
|
-
GPL.txt
|
|
4
3
|
History.txt
|
|
5
4
|
LICENSE.txt
|
|
5
|
+
MIT.txt
|
|
6
6
|
Manifest.txt
|
|
7
7
|
README.rdoc
|
|
8
8
|
Rakefile
|
|
@@ -84,6 +84,7 @@ lib/rubygems/package/tar_reader/entry.rb
|
|
|
84
84
|
lib/rubygems/package/tar_test_case.rb
|
|
85
85
|
lib/rubygems/package/tar_writer.rb
|
|
86
86
|
lib/rubygems/package_task.rb
|
|
87
|
+
lib/rubygems/path_support.rb
|
|
87
88
|
lib/rubygems/platform.rb
|
|
88
89
|
lib/rubygems/remote_fetcher.rb
|
|
89
90
|
lib/rubygems/require_paths_builder.rb
|
|
@@ -102,8 +103,6 @@ lib/rubygems/validator.rb
|
|
|
102
103
|
lib/rubygems/version.rb
|
|
103
104
|
lib/rubygems/version_option.rb
|
|
104
105
|
lib/ubygems.rb
|
|
105
|
-
pkgs/sources/lib/sources.rb
|
|
106
|
-
pkgs/sources/sources.gemspec
|
|
107
106
|
setup.rb
|
|
108
107
|
test/rubygems/bogussources.rb
|
|
109
108
|
test/rubygems/data/gem-private_key.pem
|
|
@@ -111,7 +110,6 @@ test/rubygems/data/gem-public_cert.pem
|
|
|
111
110
|
test/rubygems/fake_certlib/openssl.rb
|
|
112
111
|
test/rubygems/fix_openssl_warnings.rb
|
|
113
112
|
test/rubygems/foo/discover.rb
|
|
114
|
-
test/rubygems/functional.rb
|
|
115
113
|
test/rubygems/insure_session.rb
|
|
116
114
|
test/rubygems/plugin/exception/rubygems_plugin.rb
|
|
117
115
|
test/rubygems/plugin/load/rubygems_plugin.rb
|
|
@@ -130,11 +128,13 @@ test/rubygems/test_gem_command_manager.rb
|
|
|
130
128
|
test/rubygems/test_gem_commands_build_command.rb
|
|
131
129
|
test/rubygems/test_gem_commands_cert_command.rb
|
|
132
130
|
test/rubygems/test_gem_commands_check_command.rb
|
|
131
|
+
test/rubygems/test_gem_commands_cleanup_command.rb
|
|
133
132
|
test/rubygems/test_gem_commands_contents_command.rb
|
|
134
133
|
test/rubygems/test_gem_commands_dependency_command.rb
|
|
135
134
|
test/rubygems/test_gem_commands_environment_command.rb
|
|
136
135
|
test/rubygems/test_gem_commands_fetch_command.rb
|
|
137
136
|
test/rubygems/test_gem_commands_generate_index_command.rb
|
|
137
|
+
test/rubygems/test_gem_commands_help_command.rb
|
|
138
138
|
test/rubygems/test_gem_commands_install_command.rb
|
|
139
139
|
test/rubygems/test_gem_commands_list_command.rb
|
|
140
140
|
test/rubygems/test_gem_commands_lock_command.rb
|
|
@@ -174,6 +174,7 @@ test/rubygems/test_gem_package_tar_reader.rb
|
|
|
174
174
|
test/rubygems/test_gem_package_tar_reader_entry.rb
|
|
175
175
|
test/rubygems/test_gem_package_tar_writer.rb
|
|
176
176
|
test/rubygems/test_gem_package_task.rb
|
|
177
|
+
test/rubygems/test_gem_path_support.rb
|
|
177
178
|
test/rubygems/test_gem_platform.rb
|
|
178
179
|
test/rubygems/test_gem_remote_fetcher.rb
|
|
179
180
|
test/rubygems/test_gem_requirement.rb
|
data/Rakefile
CHANGED
|
@@ -18,6 +18,7 @@ Hoe::RUBY_FLAGS << " --disable-gems" if RUBY_VERSION > "1.9"
|
|
|
18
18
|
|
|
19
19
|
Hoe.plugin :minitest
|
|
20
20
|
Hoe.plugin :git
|
|
21
|
+
Hoe.plugin :isolate
|
|
21
22
|
|
|
22
23
|
hoe = Hoe.spec 'rubygems-update' do
|
|
23
24
|
self.rubyforge_name = 'rubygems'
|
|
@@ -45,6 +46,9 @@ hoe = Hoe.spec 'rubygems-update' do
|
|
|
45
46
|
extra_dev_deps << ['builder', '~> 2.1']
|
|
46
47
|
extra_dev_deps << ['hoe-seattlerb', '~> 1.2']
|
|
47
48
|
extra_dev_deps << ['session', '~> 2.4']
|
|
49
|
+
extra_dev_deps << ['rdoc', '~> 3.0']
|
|
50
|
+
extra_dev_deps << ['rcov', '~> 0.9.0']
|
|
51
|
+
extra_dev_deps << ['ZenTest', '~> 4.5']
|
|
48
52
|
|
|
49
53
|
self.extra_rdoc_files = Dir["*.rdoc"]
|
|
50
54
|
|
|
@@ -73,16 +77,10 @@ task :rake_sucks do
|
|
|
73
77
|
end
|
|
74
78
|
end
|
|
75
79
|
|
|
76
|
-
desc "Run just the functional tests"
|
|
77
|
-
Rake::TestTask.new(:test_functional) do |t|
|
|
78
|
-
t.test_files = FileList['test/functional*.rb']
|
|
79
|
-
t.warning = true
|
|
80
|
-
end
|
|
81
|
-
|
|
82
80
|
# --------------------------------------------------------------------
|
|
83
81
|
# Creating a release
|
|
84
82
|
|
|
85
|
-
task :prerelease => [:clobber, :check_manifest, :test
|
|
83
|
+
task :prerelease => [:clobber, :check_manifest, :test]
|
|
86
84
|
|
|
87
85
|
task :postrelease => :publish_docs
|
|
88
86
|
|
|
@@ -167,6 +165,7 @@ task "rcov:for", [:test] do |task, args|
|
|
|
167
165
|
|
|
168
166
|
rflags = []
|
|
169
167
|
rflags << "-i" << "lib/rubygems"
|
|
168
|
+
rflags << "--no-color" << "--save coverage.info" << "-T" << "--no-html"
|
|
170
169
|
|
|
171
170
|
ruby "#{flags.join ' '} #{rcov} #{rflags.join ' '} #{args[:test]}"
|
|
172
171
|
end
|
data/lib/rubygems.rb
CHANGED
|
@@ -27,6 +27,7 @@ end
|
|
|
27
27
|
|
|
28
28
|
require 'rubygems/defaults'
|
|
29
29
|
require "rubygems/dependency_list"
|
|
30
|
+
require 'rubygems/path_support'
|
|
30
31
|
require 'rbconfig'
|
|
31
32
|
require "rubygems/deprecate"
|
|
32
33
|
|
|
@@ -119,8 +120,7 @@ require "rubygems/deprecate"
|
|
|
119
120
|
# -The RubyGems Team
|
|
120
121
|
|
|
121
122
|
module Gem
|
|
122
|
-
|
|
123
|
-
VERSION = '1.7.2'
|
|
123
|
+
VERSION = '1.8.0'
|
|
124
124
|
|
|
125
125
|
##
|
|
126
126
|
# Raised when RubyGems is unable to load or activate a gem. Contains the
|
|
@@ -156,11 +156,6 @@ module Gem
|
|
|
156
156
|
end
|
|
157
157
|
end
|
|
158
158
|
|
|
159
|
-
##
|
|
160
|
-
# Default directories in a gem repository
|
|
161
|
-
|
|
162
|
-
DIRECTORIES = %w[cache doc gems specifications] unless defined?(DIRECTORIES)
|
|
163
|
-
|
|
164
159
|
RubyGemsPackageVersion = VERSION
|
|
165
160
|
|
|
166
161
|
RUBYGEMS_DIR = File.dirname File.expand_path(__FILE__)
|
|
@@ -186,13 +181,15 @@ module Gem
|
|
|
186
181
|
@loaded_specs = {}
|
|
187
182
|
@platforms = []
|
|
188
183
|
@ruby = nil
|
|
189
|
-
@sources =
|
|
184
|
+
@sources = nil
|
|
190
185
|
|
|
191
186
|
@post_build_hooks ||= []
|
|
192
187
|
@post_install_hooks ||= []
|
|
193
188
|
@post_uninstall_hooks ||= []
|
|
194
189
|
@pre_uninstall_hooks ||= []
|
|
195
190
|
@pre_install_hooks ||= []
|
|
191
|
+
@pre_reset_hooks ||= []
|
|
192
|
+
@post_reset_hooks ||= []
|
|
196
193
|
|
|
197
194
|
##
|
|
198
195
|
# Try to activate a gem containing +path+. Returns true if
|
|
@@ -200,17 +197,18 @@ module Gem
|
|
|
200
197
|
# activated. Returns false if it can't find the path in a gem.
|
|
201
198
|
|
|
202
199
|
def self.try_activate path
|
|
200
|
+
# TODO: deprecate when 1.9.3 comes out.
|
|
203
201
|
# finds the _latest_ version... regardless of loaded specs and their deps
|
|
204
202
|
|
|
205
203
|
# TODO: use find_all and bork if ambiguous
|
|
206
204
|
|
|
207
|
-
spec = Gem.
|
|
205
|
+
spec = Gem::Specification.find_by_path path
|
|
208
206
|
return false unless spec
|
|
209
207
|
|
|
210
208
|
begin
|
|
211
|
-
|
|
209
|
+
spec.activate
|
|
212
210
|
rescue Gem::LoadError # this could fail due to gem dep collisions, go lax
|
|
213
|
-
Gem.
|
|
211
|
+
Gem::Specification.find_by_name(spec.name).activate
|
|
214
212
|
end
|
|
215
213
|
|
|
216
214
|
return true
|
|
@@ -233,111 +231,18 @@ module Gem
|
|
|
233
231
|
# Gem::Requirement and Gem::Version documentation.
|
|
234
232
|
|
|
235
233
|
def self.activate(dep, *requirements)
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
def self.activate_dep dep, *requirements
|
|
240
|
-
requirements = Gem::Requirement.default if requirements.empty?
|
|
241
|
-
dep = Gem::Dependency.new(dep, requirements) unless Gem::Dependency === dep
|
|
242
|
-
|
|
243
|
-
matches = Gem.source_index.search dep, true
|
|
244
|
-
report_activate_error(dep) if matches.empty?
|
|
245
|
-
|
|
246
|
-
existing_spec = @loaded_specs[dep.name]
|
|
234
|
+
raise ArgumentError, "Deprecated use of Gem.activate(dep)" if
|
|
235
|
+
Gem::Dependency === dep
|
|
247
236
|
|
|
248
|
-
|
|
249
|
-
if existing_spec then
|
|
250
|
-
# This gem is already loaded. If the currently loaded gem is not in the
|
|
251
|
-
# list of candidate gems, then we have a version conflict.
|
|
252
|
-
|
|
253
|
-
# TODO: unless dep.matches_spec? existing_spec then
|
|
254
|
-
unless matches.any? { |spec| spec.version == existing_spec.version } then
|
|
255
|
-
msg = "can't activate #{dep}, "
|
|
256
|
-
msg << "already activated #{existing_spec.full_name}"
|
|
257
|
-
|
|
258
|
-
e = Gem::LoadError.new msg
|
|
259
|
-
e.name = dep.name
|
|
260
|
-
e.requirement = dep.requirement
|
|
261
|
-
|
|
262
|
-
raise e
|
|
263
|
-
end
|
|
264
|
-
|
|
265
|
-
return false
|
|
266
|
-
end
|
|
267
|
-
|
|
268
|
-
# TODO: this + spec.conflicts hint that activation is still dumb
|
|
269
|
-
spec = matches.last
|
|
270
|
-
|
|
271
|
-
activate_spec spec
|
|
237
|
+
Gem::Specification.find_by_name(dep, *requirements).activate
|
|
272
238
|
end
|
|
273
239
|
|
|
274
|
-
def self.
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
# TODO: move this to Specification
|
|
278
|
-
if existing_spec then
|
|
279
|
-
if spec.version != existing_spec.version then
|
|
280
|
-
# This gem is already loaded. If the currently loaded gem is not in the
|
|
281
|
-
# list of candidate gems, then we have a version conflict.
|
|
282
|
-
|
|
283
|
-
msg = "can't activate #{dep}, "
|
|
284
|
-
msg << "already activated #{existing_spec.full_name}"
|
|
285
|
-
|
|
286
|
-
e = Gem::LoadError.new msg
|
|
287
|
-
e.name = dep.name
|
|
288
|
-
e.requirement = dep.requirement
|
|
289
|
-
|
|
290
|
-
raise e
|
|
291
|
-
end
|
|
292
|
-
|
|
293
|
-
return false
|
|
294
|
-
end
|
|
295
|
-
|
|
296
|
-
conf = spec.conflicts
|
|
297
|
-
|
|
298
|
-
unless conf.empty? then
|
|
299
|
-
why = conf.map { |act,con|
|
|
300
|
-
"#{act.full_name} conflicts with #{con.join(", ")}"
|
|
301
|
-
}.join ", "
|
|
302
|
-
|
|
303
|
-
# TODO: improve message by saying who activated `con`
|
|
304
|
-
|
|
305
|
-
raise LoadError, "Unable to activate #{spec.full_name}, because #{why}"
|
|
306
|
-
end
|
|
307
|
-
|
|
308
|
-
spec.loaded = true
|
|
309
|
-
@loaded_specs[spec.name] = spec
|
|
310
|
-
|
|
311
|
-
spec.runtime_dependencies.each do |spec_dep|
|
|
312
|
-
next if Gem.loaded_specs.include? spec_dep.name
|
|
313
|
-
specs = Gem.source_index.search spec_dep, true
|
|
314
|
-
|
|
315
|
-
if specs.size == 1 then
|
|
316
|
-
self.activate spec_dep
|
|
317
|
-
else
|
|
318
|
-
name = spec_dep.name
|
|
319
|
-
unresolved_deps[name] = unresolved_deps[name].merge spec_dep
|
|
320
|
-
end
|
|
321
|
-
end
|
|
322
|
-
|
|
323
|
-
unresolved_deps.delete spec.name
|
|
324
|
-
|
|
325
|
-
require_paths = spec.require_paths.map do |path|
|
|
326
|
-
File.join spec.full_gem_path, path
|
|
327
|
-
end
|
|
328
|
-
|
|
329
|
-
# gem directories must come after -I and ENV['RUBYLIB']
|
|
330
|
-
insert_index = load_path_insert_index
|
|
331
|
-
|
|
332
|
-
if insert_index then
|
|
333
|
-
# gem directories must come after -I and ENV['RUBYLIB']
|
|
334
|
-
$LOAD_PATH.insert(insert_index, *require_paths)
|
|
335
|
-
else
|
|
336
|
-
# we are probably testing in core, -I and RUBYLIB don't apply
|
|
337
|
-
$LOAD_PATH.unshift(*require_paths)
|
|
338
|
-
end
|
|
240
|
+
def self.activate_dep dep, *requirements # :nodoc:
|
|
241
|
+
dep.to_spec.activate
|
|
242
|
+
end
|
|
339
243
|
|
|
340
|
-
|
|
244
|
+
def self.activate_spec spec # :nodoc:
|
|
245
|
+
spec.activate
|
|
341
246
|
end
|
|
342
247
|
|
|
343
248
|
def self.unresolved_deps
|
|
@@ -353,7 +258,7 @@ module Gem
|
|
|
353
258
|
|
|
354
259
|
Gem.path.each do |gemdir|
|
|
355
260
|
each_load_path all_partials(gemdir) do |load_path|
|
|
356
|
-
result << load_path
|
|
261
|
+
result << gemdir.add(load_path).expand_path
|
|
357
262
|
end
|
|
358
263
|
end
|
|
359
264
|
|
|
@@ -364,7 +269,7 @@ module Gem
|
|
|
364
269
|
# Return all the partial paths in +gemdir+.
|
|
365
270
|
|
|
366
271
|
def self.all_partials(gemdir)
|
|
367
|
-
Dir[File.join(gemdir,
|
|
272
|
+
Dir[File.join(gemdir, "gems/*")]
|
|
368
273
|
end
|
|
369
274
|
|
|
370
275
|
private_class_method :all_partials
|
|
@@ -372,15 +277,14 @@ module Gem
|
|
|
372
277
|
##
|
|
373
278
|
# See if a given gem is available.
|
|
374
279
|
|
|
375
|
-
def self.available?(
|
|
280
|
+
def self.available?(dep, *requirements)
|
|
376
281
|
requirements = Gem::Requirement.default if requirements.empty?
|
|
377
282
|
|
|
378
|
-
unless
|
|
379
|
-
|
|
380
|
-
gem = Gem::Dependency.new gem, requirements
|
|
283
|
+
unless dep.respond_to?(:name) and dep.respond_to?(:requirement) then
|
|
284
|
+
dep = Gem::Dependency.new dep, requirements
|
|
381
285
|
end
|
|
382
286
|
|
|
383
|
-
|
|
287
|
+
not dep.matching_specs(true).empty?
|
|
384
288
|
end
|
|
385
289
|
|
|
386
290
|
##
|
|
@@ -390,32 +294,29 @@ module Gem
|
|
|
390
294
|
# you to specify specific gem versions.
|
|
391
295
|
|
|
392
296
|
def self.bin_path(name, exec_name = nil, *requirements)
|
|
297
|
+
# TODO: fails test_self_bin_path_bin_file_gone_in_latest
|
|
298
|
+
# Gem::Specification.find_by_name(name, *requirements).bin_file exec_name
|
|
299
|
+
|
|
393
300
|
raise ArgumentError, "you must supply exec_name" unless exec_name
|
|
394
301
|
|
|
395
302
|
requirements = Gem::Requirement.default if
|
|
396
303
|
requirements.empty?
|
|
397
|
-
|
|
304
|
+
|
|
305
|
+
specs = Gem::Dependency.new(name, requirements).matching_specs(true)
|
|
398
306
|
|
|
399
307
|
raise Gem::GemNotFoundException,
|
|
400
308
|
"can't find gem #{name} (#{requirements})" if specs.empty?
|
|
401
309
|
|
|
402
|
-
specs = specs.find_all
|
|
403
|
-
spec.executables.include?
|
|
404
|
-
|
|
310
|
+
specs = specs.find_all { |spec|
|
|
311
|
+
spec.executables.include? exec_name
|
|
312
|
+
} if exec_name
|
|
405
313
|
|
|
406
314
|
unless spec = specs.last
|
|
407
315
|
msg = "can't find gem #{name} (#{requirements}) with executable #{exec_name}"
|
|
408
316
|
raise Gem::GemNotFoundException, msg
|
|
409
317
|
end
|
|
410
318
|
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
unless exec_name
|
|
414
|
-
msg = "no default executable for #{spec.full_name} and none given"
|
|
415
|
-
raise Gem::Exception, msg
|
|
416
|
-
end
|
|
417
|
-
|
|
418
|
-
File.join(spec.full_gem_path, spec.bindir, exec_name)
|
|
319
|
+
spec.bin_file exec_name
|
|
419
320
|
end
|
|
420
321
|
|
|
421
322
|
##
|
|
@@ -429,8 +330,9 @@ module Gem
|
|
|
429
330
|
# The path where gem executables are to be installed.
|
|
430
331
|
|
|
431
332
|
def self.bindir(install_dir=Gem.dir)
|
|
432
|
-
|
|
433
|
-
|
|
333
|
+
# TODO: move to Gem::Dirs
|
|
334
|
+
return File.join install_dir, 'bin' unless
|
|
335
|
+
install_dir.to_s == Gem.default_dir.to_s
|
|
434
336
|
Gem.default_bindir
|
|
435
337
|
end
|
|
436
338
|
|
|
@@ -440,20 +342,18 @@ module Gem
|
|
|
440
342
|
# mainly used by the unit tests to provide test isolation.
|
|
441
343
|
|
|
442
344
|
def self.clear_paths
|
|
443
|
-
@gem_home = nil
|
|
444
|
-
@gem_path = nil
|
|
445
|
-
@user_home = nil
|
|
446
|
-
|
|
447
345
|
@@source_index = nil
|
|
448
|
-
|
|
449
|
-
@
|
|
346
|
+
@paths = nil
|
|
347
|
+
@user_home = nil
|
|
348
|
+
@searcher = nil
|
|
349
|
+
Gem::Specification.reset
|
|
450
350
|
end
|
|
451
351
|
|
|
452
352
|
##
|
|
453
353
|
# The path to standard location of the user's .gemrc file.
|
|
454
354
|
|
|
455
355
|
def self.config_file
|
|
456
|
-
File.join Gem.user_home, '.gemrc'
|
|
356
|
+
@config_file ||= File.join Gem.user_home, '.gemrc'
|
|
457
357
|
end
|
|
458
358
|
|
|
459
359
|
##
|
|
@@ -476,9 +376,10 @@ module Gem
|
|
|
476
376
|
# package is not available as a gem, return nil.
|
|
477
377
|
|
|
478
378
|
def self.datadir(gem_name)
|
|
379
|
+
# TODO: deprecate
|
|
479
380
|
spec = @loaded_specs[gem_name]
|
|
480
381
|
return nil if spec.nil?
|
|
481
|
-
File.join
|
|
382
|
+
File.join spec.full_gem_path, "data", gem_name
|
|
482
383
|
end
|
|
483
384
|
|
|
484
385
|
##
|
|
@@ -489,13 +390,29 @@ module Gem
|
|
|
489
390
|
Zlib::Deflate.deflate data
|
|
490
391
|
end
|
|
491
392
|
|
|
393
|
+
def self.paths
|
|
394
|
+
@paths ||= Gem::PathSupport.new
|
|
395
|
+
end
|
|
396
|
+
|
|
397
|
+
def self.paths=(env)
|
|
398
|
+
clear_paths
|
|
399
|
+
@paths = Gem::PathSupport.new env
|
|
400
|
+
Gem::Specification.dirs = @paths.path # FIX: home is at end
|
|
401
|
+
end
|
|
402
|
+
|
|
492
403
|
##
|
|
493
404
|
# The path where gems are to be installed.
|
|
405
|
+
#--
|
|
406
|
+
# FIXME deprecate these once everything else has been done -ebh
|
|
494
407
|
|
|
495
408
|
def self.dir
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
409
|
+
# TODO: raise "no"
|
|
410
|
+
paths.home
|
|
411
|
+
end
|
|
412
|
+
|
|
413
|
+
def self.path
|
|
414
|
+
# TODO: raise "no"
|
|
415
|
+
paths.path
|
|
499
416
|
end
|
|
500
417
|
|
|
501
418
|
##
|
|
@@ -504,33 +421,35 @@ module Gem
|
|
|
504
421
|
|
|
505
422
|
def self.each_load_path(partials)
|
|
506
423
|
partials.each do |gp|
|
|
507
|
-
base =
|
|
508
|
-
specfn =
|
|
509
|
-
if
|
|
510
|
-
spec = eval(
|
|
424
|
+
base = gp.basename
|
|
425
|
+
specfn = dir.specifications.add(base + ".gemspec")
|
|
426
|
+
if specfn.exist?
|
|
427
|
+
spec = eval(specfn.read)
|
|
511
428
|
spec.require_paths.each do |rp|
|
|
512
|
-
yield(
|
|
429
|
+
yield(gp.add(rp))
|
|
513
430
|
end
|
|
514
431
|
else
|
|
515
|
-
filename =
|
|
516
|
-
yield(filename) if
|
|
432
|
+
filename = dir.add(gp, 'lib')
|
|
433
|
+
yield(filename) if filename.exist?
|
|
517
434
|
end
|
|
518
435
|
end
|
|
519
436
|
end
|
|
520
437
|
|
|
521
438
|
private_class_method :each_load_path
|
|
522
439
|
|
|
440
|
+
|
|
523
441
|
##
|
|
524
442
|
# Quietly ensure the named Gem directory contains all the proper
|
|
525
443
|
# subdirectories. If we can't create a directory due to a permission
|
|
526
444
|
# problem, then we will silently continue.
|
|
527
445
|
|
|
528
|
-
def self.ensure_gem_subdirectories
|
|
446
|
+
def self.ensure_gem_subdirectories dir = Gem.dir
|
|
529
447
|
require 'fileutils'
|
|
530
448
|
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
449
|
+
%w[cache doc gems specifications].each do |name|
|
|
450
|
+
subdir = File.join dir, name
|
|
451
|
+
next if File.exist? subdir
|
|
452
|
+
FileUtils.mkdir_p subdir rescue nil # in case of perms issues -- lame
|
|
534
453
|
end
|
|
535
454
|
end
|
|
536
455
|
|
|
@@ -555,11 +474,9 @@ module Gem
|
|
|
555
474
|
}.flatten.select { |file| File.file? file.untaint }
|
|
556
475
|
end
|
|
557
476
|
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
files.concat searcher.matching_files(spec, glob)
|
|
562
|
-
end
|
|
477
|
+
files.concat Gem::Specification.map { |spec|
|
|
478
|
+
spec.matches_for_glob("#{glob}#{Gem.suffix_pattern}")
|
|
479
|
+
}.flatten
|
|
563
480
|
|
|
564
481
|
# $LOAD_PATH might contain duplicate entries or reference
|
|
565
482
|
# the spec dirs directly, so we prune.
|
|
@@ -579,25 +496,30 @@ module Gem
|
|
|
579
496
|
# it should fallback to USERPROFILE and HOMEDRIVE + HOMEPATH (at
|
|
580
497
|
# least on Win32).
|
|
581
498
|
#++
|
|
499
|
+
#--
|
|
500
|
+
#
|
|
501
|
+
# FIXME move to pathsupport
|
|
502
|
+
#
|
|
503
|
+
#++
|
|
582
504
|
|
|
583
505
|
def self.find_home
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
506
|
+
windows = File::ALT_SEPARATOR
|
|
507
|
+
if not windows or RUBY_VERSION >= '1.9' then
|
|
508
|
+
File.expand_path "~"
|
|
509
|
+
else
|
|
510
|
+
['HOME', 'USERPROFILE'].each do |key|
|
|
511
|
+
return File.expand_path ENV[key] if ENV[key]
|
|
587
512
|
end
|
|
588
513
|
|
|
589
514
|
if ENV['HOMEDRIVE'] && ENV['HOMEPATH'] then
|
|
590
|
-
|
|
515
|
+
File.expand_path "#{ENV['HOMEDRIVE']}#{ENV['HOMEPATH']}"
|
|
591
516
|
end
|
|
592
517
|
end
|
|
593
|
-
|
|
594
|
-
File.expand_path "~"
|
|
595
518
|
rescue
|
|
596
|
-
if
|
|
597
|
-
|
|
598
|
-
File.join(drive.to_s, '/')
|
|
519
|
+
if windows then
|
|
520
|
+
File.expand_path File.join(ENV['HOMEDRIVE'] || ENV['SystemDrive'], '/')
|
|
599
521
|
else
|
|
600
|
-
"/"
|
|
522
|
+
File.expand_path "/"
|
|
601
523
|
end
|
|
602
524
|
end
|
|
603
525
|
|
|
@@ -663,7 +585,7 @@ module Gem
|
|
|
663
585
|
|
|
664
586
|
Gem.path.each do |gemdir|
|
|
665
587
|
each_load_path(latest_partials(gemdir)) do |load_path|
|
|
666
|
-
result << load_path
|
|
588
|
+
result << gemdir.add(load_path).expand_path
|
|
667
589
|
end
|
|
668
590
|
end
|
|
669
591
|
|
|
@@ -676,8 +598,9 @@ module Gem
|
|
|
676
598
|
def self.latest_partials(gemdir)
|
|
677
599
|
latest = {}
|
|
678
600
|
all_partials(gemdir).each do |gp|
|
|
679
|
-
base =
|
|
680
|
-
|
|
601
|
+
base = gp.basename
|
|
602
|
+
|
|
603
|
+
if base.to_s =~ /(.*)-((\d+\.)*\d+)/ then
|
|
681
604
|
name, version = $1, $2
|
|
682
605
|
ver = Gem::Version.new(version)
|
|
683
606
|
if latest[name].nil? || ver > latest[name][0]
|
|
@@ -742,25 +665,6 @@ module Gem
|
|
|
742
665
|
"#{Marshal::MAJOR_VERSION}.#{Marshal::MINOR_VERSION}"
|
|
743
666
|
end
|
|
744
667
|
|
|
745
|
-
##
|
|
746
|
-
# Array of paths to search for Gems.
|
|
747
|
-
|
|
748
|
-
def self.path
|
|
749
|
-
@gem_path ||= nil
|
|
750
|
-
|
|
751
|
-
unless @gem_path then
|
|
752
|
-
paths = [ENV['GEM_PATH'] || default_path]
|
|
753
|
-
|
|
754
|
-
if defined?(APPLE_GEM_HOME) and not ENV['GEM_PATH'] then
|
|
755
|
-
paths << APPLE_GEM_HOME
|
|
756
|
-
end
|
|
757
|
-
|
|
758
|
-
set_paths paths.compact.join(File::PATH_SEPARATOR)
|
|
759
|
-
end
|
|
760
|
-
|
|
761
|
-
@gem_path
|
|
762
|
-
end
|
|
763
|
-
|
|
764
668
|
##
|
|
765
669
|
# Get the appropriate cache path.
|
|
766
670
|
#
|
|
@@ -769,7 +673,7 @@ module Gem
|
|
|
769
673
|
#
|
|
770
674
|
|
|
771
675
|
def self.cache_dir(custom_dir=false)
|
|
772
|
-
File.join(custom_dir
|
|
676
|
+
File.join(custom_dir || Gem.dir, "cache")
|
|
773
677
|
end
|
|
774
678
|
|
|
775
679
|
##
|
|
@@ -779,7 +683,7 @@ module Gem
|
|
|
779
683
|
# nil/false (default) for Gem.dir.
|
|
780
684
|
|
|
781
685
|
def self.cache_gem(filename, user_dir=false)
|
|
782
|
-
|
|
686
|
+
cache_dir(user_dir).add(filename)
|
|
783
687
|
end
|
|
784
688
|
|
|
785
689
|
##
|
|
@@ -819,6 +723,14 @@ module Gem
|
|
|
819
723
|
@post_install_hooks << hook
|
|
820
724
|
end
|
|
821
725
|
|
|
726
|
+
##
|
|
727
|
+
# Adds a hook that will get run after Gem::Specification.reset is
|
|
728
|
+
# run.
|
|
729
|
+
|
|
730
|
+
def self.post_reset(&hook)
|
|
731
|
+
@post_reset_hooks << hook
|
|
732
|
+
end
|
|
733
|
+
|
|
822
734
|
##
|
|
823
735
|
# Adds a post-uninstall hook that will be passed a Gem::Uninstaller instance
|
|
824
736
|
# and the spec that was uninstalled when Gem::Uninstaller#uninstall is
|
|
@@ -837,6 +749,14 @@ module Gem
|
|
|
837
749
|
@pre_install_hooks << hook
|
|
838
750
|
end
|
|
839
751
|
|
|
752
|
+
##
|
|
753
|
+
# Adds a hook that will get run before Gem::Specification.reset is
|
|
754
|
+
# run.
|
|
755
|
+
|
|
756
|
+
def self.pre_reset(&hook)
|
|
757
|
+
@pre_reset_hooks << hook
|
|
758
|
+
end
|
|
759
|
+
|
|
840
760
|
##
|
|
841
761
|
# Adds a pre-uninstall hook that will be passed an Gem::Uninstaller instance
|
|
842
762
|
# and the spec that will be uninstalled when Gem::Uninstaller#uninstall is
|
|
@@ -873,10 +793,10 @@ module Gem
|
|
|
873
793
|
raise ArgumentError, "gem #{gem_name} is not activated" if gem.nil?
|
|
874
794
|
raise ArgumentError, "gem #{over_name} is not activated" if over.nil?
|
|
875
795
|
|
|
876
|
-
last_gem_path =
|
|
796
|
+
last_gem_path = Gem::Path.path(gem.full_gem_path).add(gem.require_paths.last)
|
|
877
797
|
|
|
878
798
|
over_paths = over.require_paths.map do |path|
|
|
879
|
-
|
|
799
|
+
Gem::Path.path(over.full_gem_path).add(path).to_s
|
|
880
800
|
end
|
|
881
801
|
|
|
882
802
|
over_paths.each do |path|
|
|
@@ -892,8 +812,8 @@ module Gem
|
|
|
892
812
|
# Refresh source_index from disk and clear searcher.
|
|
893
813
|
|
|
894
814
|
def self.refresh
|
|
895
|
-
|
|
896
|
-
|
|
815
|
+
Gem::Specification.reset
|
|
816
|
+
@source_index = nil
|
|
897
817
|
@searcher = nil
|
|
898
818
|
end
|
|
899
819
|
|
|
@@ -910,7 +830,7 @@ module Gem
|
|
|
910
830
|
# any version by the requested name.
|
|
911
831
|
|
|
912
832
|
def self.report_activate_error(gem)
|
|
913
|
-
matches = Gem.
|
|
833
|
+
matches = Gem::Specification.find_by_name(gem.name)
|
|
914
834
|
|
|
915
835
|
if matches.empty? then
|
|
916
836
|
error = Gem::LoadError.new(
|
|
@@ -941,8 +861,8 @@ module Gem
|
|
|
941
861
|
|
|
942
862
|
spec = matches.last
|
|
943
863
|
spec.require_paths.each do |path|
|
|
944
|
-
result =
|
|
945
|
-
return result if
|
|
864
|
+
result = Gem::Path.path(spec.full_gem_path).add(path, libfile)
|
|
865
|
+
return result if result.exist?
|
|
946
866
|
end
|
|
947
867
|
|
|
948
868
|
nil
|
|
@@ -954,11 +874,9 @@ module Gem
|
|
|
954
874
|
def self.ruby
|
|
955
875
|
if @ruby.nil? then
|
|
956
876
|
@ruby = File.join(ConfigMap[:bindir],
|
|
957
|
-
ConfigMap[:ruby_install_name])
|
|
958
|
-
@ruby << ConfigMap[:EXEEXT]
|
|
877
|
+
"#{ConfigMap[:ruby_install_name]}#{ConfigMap[:EXEEXT]}")
|
|
959
878
|
|
|
960
|
-
|
|
961
|
-
@ruby.sub!(/.*\s.*/m, '"\&"')
|
|
879
|
+
@ruby = "\"#{@ruby}\"" if @ruby =~ /\s/
|
|
962
880
|
end
|
|
963
881
|
|
|
964
882
|
@ruby
|
|
@@ -1010,45 +928,13 @@ module Gem
|
|
|
1010
928
|
@searcher ||= Gem::GemPathSearcher.new
|
|
1011
929
|
end
|
|
1012
930
|
|
|
1013
|
-
##
|
|
1014
|
-
# Set the Gem home directory (as reported by Gem.dir).
|
|
1015
|
-
|
|
1016
|
-
def self.set_home(home)
|
|
1017
|
-
home = home.gsub File::ALT_SEPARATOR, File::SEPARATOR if File::ALT_SEPARATOR
|
|
1018
|
-
@gem_home = home
|
|
1019
|
-
end
|
|
1020
|
-
|
|
1021
|
-
private_class_method :set_home
|
|
1022
|
-
|
|
1023
|
-
##
|
|
1024
|
-
# Set the Gem search path (as reported by Gem.path).
|
|
1025
|
-
|
|
1026
|
-
def self.set_paths(gpaths)
|
|
1027
|
-
if gpaths
|
|
1028
|
-
@gem_path = gpaths.split(File::PATH_SEPARATOR)
|
|
1029
|
-
|
|
1030
|
-
if File::ALT_SEPARATOR then
|
|
1031
|
-
@gem_path.map! do |path|
|
|
1032
|
-
path.gsub File::ALT_SEPARATOR, File::SEPARATOR
|
|
1033
|
-
end
|
|
1034
|
-
end
|
|
1035
|
-
|
|
1036
|
-
@gem_path << Gem.dir
|
|
1037
|
-
else
|
|
1038
|
-
# TODO: should this be Gem.default_path instead?
|
|
1039
|
-
@gem_path = [Gem.dir]
|
|
1040
|
-
end
|
|
1041
|
-
|
|
1042
|
-
@gem_path.uniq!
|
|
1043
|
-
end
|
|
1044
|
-
|
|
1045
|
-
private_class_method :set_paths
|
|
1046
|
-
|
|
1047
931
|
##
|
|
1048
932
|
# Returns the Gem::SourceIndex of specifications that are in the Gem.path
|
|
1049
933
|
|
|
1050
934
|
def self.source_index
|
|
1051
|
-
@@source_index ||=
|
|
935
|
+
@@source_index ||= Deprecate.skip_during do
|
|
936
|
+
SourceIndex.new Gem::Specification.dirs
|
|
937
|
+
end
|
|
1052
938
|
end
|
|
1053
939
|
|
|
1054
940
|
##
|
|
@@ -1057,23 +943,14 @@ module Gem
|
|
|
1057
943
|
# default_sources if it is not installed.
|
|
1058
944
|
|
|
1059
945
|
def self.sources
|
|
1060
|
-
|
|
1061
|
-
begin
|
|
1062
|
-
gem 'sources', '> 0.0.1'
|
|
1063
|
-
require 'sources'
|
|
1064
|
-
rescue LoadError
|
|
1065
|
-
@sources = default_sources
|
|
1066
|
-
end
|
|
1067
|
-
end
|
|
1068
|
-
|
|
1069
|
-
@sources
|
|
946
|
+
@sources ||= default_sources
|
|
1070
947
|
end
|
|
1071
948
|
|
|
1072
949
|
##
|
|
1073
950
|
# Need to be able to set the sources without calling
|
|
1074
951
|
# Gem.sources.replace since that would cause an infinite loop.
|
|
1075
952
|
|
|
1076
|
-
def self.sources=
|
|
953
|
+
def self.sources= new_sources
|
|
1077
954
|
@sources = new_sources
|
|
1078
955
|
end
|
|
1079
956
|
|
|
@@ -1135,9 +1012,8 @@ module Gem
|
|
|
1135
1012
|
# by the unit tests to provide environment isolation.
|
|
1136
1013
|
|
|
1137
1014
|
def self.use_paths(home, paths=[])
|
|
1138
|
-
|
|
1139
|
-
|
|
1140
|
-
set_paths(paths.join(File::PATH_SEPARATOR)) if paths
|
|
1015
|
+
self.paths = { "GEM_HOME" => home, "GEM_PATH" => paths }
|
|
1016
|
+
# TODO: self.paths = home, paths
|
|
1141
1017
|
end
|
|
1142
1018
|
|
|
1143
1019
|
##
|
|
@@ -1221,6 +1097,11 @@ module Gem
|
|
|
1221
1097
|
|
|
1222
1098
|
attr_reader :post_install_hooks
|
|
1223
1099
|
|
|
1100
|
+
##
|
|
1101
|
+
# The list of hooks to be run after Gem::Specification.reset is run.
|
|
1102
|
+
|
|
1103
|
+
attr_reader :post_reset_hooks
|
|
1104
|
+
|
|
1224
1105
|
##
|
|
1225
1106
|
# The list of hooks to be run before Gem::Uninstall#uninstall does any
|
|
1226
1107
|
# work
|
|
@@ -1232,11 +1113,15 @@ module Gem
|
|
|
1232
1113
|
|
|
1233
1114
|
attr_reader :pre_install_hooks
|
|
1234
1115
|
|
|
1116
|
+
##
|
|
1117
|
+
# The list of hooks to be run before Gem::Specification.reset is run.
|
|
1118
|
+
|
|
1119
|
+
attr_reader :pre_reset_hooks
|
|
1120
|
+
|
|
1235
1121
|
##
|
|
1236
1122
|
# The list of hooks to be run after Gem::Uninstall#uninstall is finished
|
|
1237
1123
|
|
|
1238
1124
|
attr_reader :pre_uninstall_hooks
|
|
1239
|
-
|
|
1240
1125
|
end
|
|
1241
1126
|
|
|
1242
1127
|
def self.cache # :nodoc:
|
|
@@ -1248,27 +1133,17 @@ module Gem
|
|
|
1248
1133
|
|
|
1249
1134
|
MARSHAL_SPEC_DIR = "quick/Marshal.#{Gem.marshal_version}/"
|
|
1250
1135
|
|
|
1251
|
-
autoload :Version,
|
|
1252
|
-
autoload :Requirement,
|
|
1253
|
-
autoload :Dependency,
|
|
1136
|
+
autoload :Version, 'rubygems/version'
|
|
1137
|
+
autoload :Requirement, 'rubygems/requirement'
|
|
1138
|
+
autoload :Dependency, 'rubygems/dependency'
|
|
1254
1139
|
autoload :GemPathSearcher, 'rubygems/gem_path_searcher'
|
|
1255
|
-
autoload :SpecFetcher,
|
|
1256
|
-
autoload :Specification,
|
|
1257
|
-
autoload :Cache,
|
|
1258
|
-
autoload :SourceIndex,
|
|
1259
|
-
autoload :Platform,
|
|
1260
|
-
autoload :Builder,
|
|
1261
|
-
autoload :ConfigFile,
|
|
1262
|
-
|
|
1263
|
-
class << self
|
|
1264
|
-
extend Deprecate
|
|
1265
|
-
# Can't do this one until I add Specification#activate
|
|
1266
|
-
# deprecate :activate, "Specification#activate", 2011, 10
|
|
1267
|
-
deprecate :all_load_paths, :none, 2011, 10
|
|
1268
|
-
deprecate :latest_load_paths, :none, 2011, 10
|
|
1269
|
-
deprecate :promote_load_path, :none, 2011, 10
|
|
1270
|
-
deprecate :cache, "Gem::source_index", 2011, 8
|
|
1271
|
-
end
|
|
1140
|
+
autoload :SpecFetcher, 'rubygems/spec_fetcher'
|
|
1141
|
+
autoload :Specification, 'rubygems/specification'
|
|
1142
|
+
autoload :Cache, 'rubygems/source_index'
|
|
1143
|
+
autoload :SourceIndex, 'rubygems/source_index'
|
|
1144
|
+
autoload :Platform, 'rubygems/platform'
|
|
1145
|
+
autoload :Builder, 'rubygems/builder'
|
|
1146
|
+
autoload :ConfigFile, 'rubygems/config_file'
|
|
1272
1147
|
end
|
|
1273
1148
|
|
|
1274
1149
|
module Kernel
|
|
@@ -1304,7 +1179,8 @@ module Kernel
|
|
|
1304
1179
|
def gem(gem_name, *requirements) # :doc:
|
|
1305
1180
|
skip_list = (ENV['GEM_SKIP'] || "").split(/:/)
|
|
1306
1181
|
raise Gem::LoadError, "skipping #{gem_name}" if skip_list.include? gem_name
|
|
1307
|
-
Gem.
|
|
1182
|
+
spec = Gem::Dependency.new(gem_name, *requirements).to_spec
|
|
1183
|
+
spec.activate if spec
|
|
1308
1184
|
end
|
|
1309
1185
|
|
|
1310
1186
|
private :gem
|
|
@@ -1325,8 +1201,7 @@ def RbConfig.datadir(package_name)
|
|
|
1325
1201
|
|
|
1326
1202
|
require 'rbconfig/datadir'
|
|
1327
1203
|
|
|
1328
|
-
Gem.datadir(package_name) ||
|
|
1329
|
-
File.join(Gem::ConfigMap[:datadir], package_name)
|
|
1204
|
+
Gem.datadir(package_name) || File.join(Gem::ConfigMap[:datadir], package_name)
|
|
1330
1205
|
end
|
|
1331
1206
|
|
|
1332
1207
|
require 'rubygems/exceptions'
|
|
@@ -1359,3 +1234,25 @@ require 'rubygems/custom_require'
|
|
|
1359
1234
|
|
|
1360
1235
|
Gem.clear_paths
|
|
1361
1236
|
|
|
1237
|
+
module Gem
|
|
1238
|
+
class << self
|
|
1239
|
+
extend Deprecate
|
|
1240
|
+
deprecate :activate_dep, "Specification#activate", 2011, 6
|
|
1241
|
+
deprecate :activate_spec, "Specification#activate", 2011, 6
|
|
1242
|
+
deprecate :cache, "Gem::source_index", 2011, 8
|
|
1243
|
+
deprecate :activate, "Specification#activate", 2011, 10
|
|
1244
|
+
deprecate :all_load_paths, :none, 2011, 10
|
|
1245
|
+
deprecate :all_partials, :none, 2011, 10
|
|
1246
|
+
deprecate :latest_load_paths, :none, 2011, 10
|
|
1247
|
+
deprecate :promote_load_path, :none, 2011, 10
|
|
1248
|
+
deprecate :available?, "Specification::find_by_name", 2011, 11
|
|
1249
|
+
deprecate :cache_dir, "Specification#cache_dir", 2011, 11
|
|
1250
|
+
deprecate :cache_gem, "Specification#cache_file", 2011, 11
|
|
1251
|
+
deprecate :default_system_source_cache_dir, :none, 2011, 11
|
|
1252
|
+
deprecate :default_user_source_cache_dir, :none, 2011, 11
|
|
1253
|
+
deprecate :report_activate_error, :none, 2011, 11
|
|
1254
|
+
deprecate :required_location, :none, 2011, 11
|
|
1255
|
+
deprecate :searcher, "Specification", 2011, 11
|
|
1256
|
+
deprecate :source_index, "Specification", 2011, 11
|
|
1257
|
+
end
|
|
1258
|
+
end
|