libgems 0.0.1
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/ChangeLog +5811 -0
- data/History.txt +887 -0
- data/LICENSE.txt +51 -0
- data/README.md +87 -0
- data/Rakefile +113 -0
- data/lib/gauntlet_libgems.rb +50 -0
- data/lib/libgems.rb +1246 -0
- data/lib/libgems/builder.rb +102 -0
- data/lib/libgems/command.rb +534 -0
- data/lib/libgems/command_manager.rb +182 -0
- data/lib/libgems/commands/build_command.rb +53 -0
- data/lib/libgems/commands/cert_command.rb +86 -0
- data/lib/libgems/commands/check_command.rb +80 -0
- data/lib/libgems/commands/cleanup_command.rb +106 -0
- data/lib/libgems/commands/contents_command.rb +98 -0
- data/lib/libgems/commands/dependency_command.rb +195 -0
- data/lib/libgems/commands/environment_command.rb +133 -0
- data/lib/libgems/commands/fetch_command.rb +67 -0
- data/lib/libgems/commands/generate_index_command.rb +133 -0
- data/lib/libgems/commands/help_command.rb +172 -0
- data/lib/libgems/commands/install_command.rb +178 -0
- data/lib/libgems/commands/list_command.rb +35 -0
- data/lib/libgems/commands/lock_command.rb +110 -0
- data/lib/libgems/commands/mirror_command.rb +111 -0
- data/lib/libgems/commands/outdated_command.rb +33 -0
- data/lib/libgems/commands/owner_command.rb +75 -0
- data/lib/libgems/commands/pristine_command.rb +93 -0
- data/lib/libgems/commands/push_command.rb +56 -0
- data/lib/libgems/commands/query_command.rb +280 -0
- data/lib/libgems/commands/rdoc_command.rb +91 -0
- data/lib/libgems/commands/search_command.rb +31 -0
- data/lib/libgems/commands/server_command.rb +86 -0
- data/lib/libgems/commands/sources_command.rb +157 -0
- data/lib/libgems/commands/specification_command.rb +125 -0
- data/lib/libgems/commands/stale_command.rb +27 -0
- data/lib/libgems/commands/uninstall_command.rb +83 -0
- data/lib/libgems/commands/unpack_command.rb +121 -0
- data/lib/libgems/commands/update_command.rb +160 -0
- data/lib/libgems/commands/which_command.rb +86 -0
- data/lib/libgems/config_file.rb +345 -0
- data/lib/libgems/custom_require.rb +44 -0
- data/lib/libgems/defaults.rb +101 -0
- data/lib/libgems/dependency.rb +227 -0
- data/lib/libgems/dependency_installer.rb +286 -0
- data/lib/libgems/dependency_list.rb +208 -0
- data/lib/libgems/doc_manager.rb +242 -0
- data/lib/libgems/errors.rb +35 -0
- data/lib/libgems/exceptions.rb +91 -0
- data/lib/libgems/ext.rb +18 -0
- data/lib/libgems/ext/builder.rb +56 -0
- data/lib/libgems/ext/configure_builder.rb +25 -0
- data/lib/libgems/ext/ext_conf_builder.rb +24 -0
- data/lib/libgems/ext/rake_builder.rb +39 -0
- data/lib/libgems/format.rb +81 -0
- data/lib/libgems/gem_openssl.rb +92 -0
- data/lib/libgems/gem_path_searcher.rb +100 -0
- data/lib/libgems/gem_runner.rb +79 -0
- data/lib/libgems/gemcutter_utilities.rb +49 -0
- data/lib/libgems/indexer.rb +720 -0
- data/lib/libgems/install_update_options.rb +125 -0
- data/lib/libgems/installer.rb +604 -0
- data/lib/libgems/local_remote_options.rb +135 -0
- data/lib/libgems/old_format.rb +153 -0
- data/lib/libgems/package.rb +97 -0
- data/lib/libgems/package/f_sync_dir.rb +23 -0
- data/lib/libgems/package/tar_header.rb +266 -0
- data/lib/libgems/package/tar_input.rb +222 -0
- data/lib/libgems/package/tar_output.rb +144 -0
- data/lib/libgems/package/tar_reader.rb +106 -0
- data/lib/libgems/package/tar_reader/entry.rb +141 -0
- data/lib/libgems/package/tar_writer.rb +241 -0
- data/lib/libgems/package_task.rb +126 -0
- data/lib/libgems/platform.rb +183 -0
- data/lib/libgems/remote_fetcher.rb +414 -0
- data/lib/libgems/require_paths_builder.rb +18 -0
- data/lib/libgems/requirement.rb +153 -0
- data/lib/libgems/security.rb +814 -0
- data/lib/libgems/server.rb +872 -0
- data/lib/libgems/source_index.rb +597 -0
- data/lib/libgems/source_info_cache.rb +395 -0
- data/lib/libgems/source_info_cache_entry.rb +56 -0
- data/lib/libgems/spec_fetcher.rb +337 -0
- data/lib/libgems/specification.rb +1487 -0
- data/lib/libgems/test_utilities.rb +147 -0
- data/lib/libgems/text.rb +65 -0
- data/lib/libgems/uninstaller.rb +278 -0
- data/lib/libgems/user_interaction.rb +527 -0
- data/lib/libgems/validator.rb +240 -0
- data/lib/libgems/version.rb +316 -0
- data/lib/libgems/version_option.rb +65 -0
- data/lib/rbconfig/datadir.rb +20 -0
- data/test/bogussources.rb +8 -0
- data/test/data/gem-private_key.pem +27 -0
- data/test/data/gem-public_cert.pem +20 -0
- data/test/fake_certlib/openssl.rb +7 -0
- data/test/foo/discover.rb +0 -0
- data/test/gem_installer_test_case.rb +97 -0
- data/test/gem_package_tar_test_case.rb +132 -0
- data/test/gemutilities.rb +605 -0
- data/test/insure_session.rb +43 -0
- data/test/mockgemui.rb +56 -0
- data/test/plugin/exception/libgems_plugin.rb +2 -0
- data/test/plugin/load/libgems_plugin.rb +1 -0
- data/test/plugin/standarderror/libgems_plugin.rb +2 -0
- data/test/private_key.pem +27 -0
- data/test/public_cert.pem +20 -0
- data/test/rubygems_plugin.rb +21 -0
- data/test/simple_gem.rb +66 -0
- data/test/test_config.rb +12 -0
- data/test/test_gem.rb +780 -0
- data/test/test_gem_builder.rb +27 -0
- data/test/test_gem_command.rb +178 -0
- data/test/test_gem_command_manager.rb +207 -0
- data/test/test_gem_commands_build_command.rb +74 -0
- data/test/test_gem_commands_cert_command.rb +124 -0
- data/test/test_gem_commands_check_command.rb +18 -0
- data/test/test_gem_commands_contents_command.rb +156 -0
- data/test/test_gem_commands_dependency_command.rb +216 -0
- data/test/test_gem_commands_environment_command.rb +144 -0
- data/test/test_gem_commands_fetch_command.rb +76 -0
- data/test/test_gem_commands_generate_index_command.rb +135 -0
- data/test/test_gem_commands_install_command.rb +315 -0
- data/test/test_gem_commands_list_command.rb +36 -0
- data/test/test_gem_commands_lock_command.rb +68 -0
- data/test/test_gem_commands_mirror_command.rb +60 -0
- data/test/test_gem_commands_outdated_command.rb +40 -0
- data/test/test_gem_commands_owner_command.rb +105 -0
- data/test/test_gem_commands_pristine_command.rb +108 -0
- data/test/test_gem_commands_push_command.rb +81 -0
- data/test/test_gem_commands_query_command.rb +426 -0
- data/test/test_gem_commands_server_command.rb +59 -0
- data/test/test_gem_commands_sources_command.rb +209 -0
- data/test/test_gem_commands_specification_command.rb +139 -0
- data/test/test_gem_commands_stale_command.rb +38 -0
- data/test/test_gem_commands_uninstall_command.rb +83 -0
- data/test/test_gem_commands_unpack_command.rb +199 -0
- data/test/test_gem_commands_update_command.rb +207 -0
- data/test/test_gem_commands_which_command.rb +66 -0
- data/test/test_gem_config_file.rb +287 -0
- data/test/test_gem_dependency.rb +149 -0
- data/test/test_gem_dependency_installer.rb +661 -0
- data/test/test_gem_dependency_list.rb +230 -0
- data/test/test_gem_doc_manager.rb +31 -0
- data/test/test_gem_ext_configure_builder.rb +84 -0
- data/test/test_gem_ext_ext_conf_builder.rb +173 -0
- data/test/test_gem_ext_rake_builder.rb +81 -0
- data/test/test_gem_format.rb +70 -0
- data/test/test_gem_gem_path_searcher.rb +78 -0
- data/test/test_gem_gem_runner.rb +45 -0
- data/test/test_gem_gemcutter_utilities.rb +103 -0
- data/test/test_gem_indexer.rb +673 -0
- data/test/test_gem_install_update_options.rb +68 -0
- data/test/test_gem_installer.rb +857 -0
- data/test/test_gem_local_remote_options.rb +97 -0
- data/test/test_gem_package_tar_header.rb +130 -0
- data/test/test_gem_package_tar_input.rb +112 -0
- data/test/test_gem_package_tar_output.rb +97 -0
- data/test/test_gem_package_tar_reader.rb +46 -0
- data/test/test_gem_package_tar_reader_entry.rb +109 -0
- data/test/test_gem_package_tar_writer.rb +144 -0
- data/test/test_gem_package_task.rb +59 -0
- data/test/test_gem_platform.rb +264 -0
- data/test/test_gem_remote_fetcher.rb +740 -0
- data/test/test_gem_requirement.rb +292 -0
- data/test/test_gem_server.rb +356 -0
- data/test/test_gem_silent_ui.rb +113 -0
- data/test/test_gem_source_index.rb +461 -0
- data/test/test_gem_spec_fetcher.rb +410 -0
- data/test/test_gem_specification.rb +1334 -0
- data/test/test_gem_stream_ui.rb +218 -0
- data/test/test_gem_text.rb +43 -0
- data/test/test_gem_uninstaller.rb +146 -0
- data/test/test_gem_validator.rb +63 -0
- data/test/test_gem_version.rb +181 -0
- data/test/test_gem_version_option.rb +89 -0
- data/test/test_kernel.rb +59 -0
- metadata +402 -0
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
require 'libgems/command'
|
|
2
|
+
require 'libgems/server'
|
|
3
|
+
|
|
4
|
+
class LibGems::Commands::ServerCommand < LibGems::Command
|
|
5
|
+
|
|
6
|
+
def initialize
|
|
7
|
+
super 'server', 'Documentation and gem repository HTTP server',
|
|
8
|
+
:port => 8808, :gemdir => [], :daemon => false
|
|
9
|
+
|
|
10
|
+
OptionParser.accept :Port do |port|
|
|
11
|
+
if port =~ /\A\d+\z/ then
|
|
12
|
+
port = Integer port
|
|
13
|
+
raise OptionParser::InvalidArgument, "#{port}: not a port number" if
|
|
14
|
+
port > 65535
|
|
15
|
+
|
|
16
|
+
port
|
|
17
|
+
else
|
|
18
|
+
begin
|
|
19
|
+
Socket.getservbyname port
|
|
20
|
+
rescue SocketError
|
|
21
|
+
raise OptionParser::InvalidArgument, "#{port}: no such named service"
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
add_option '-p', '--port=PORT', :Port,
|
|
27
|
+
'port to listen on' do |port, options|
|
|
28
|
+
options[:port] = port
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
add_option '-d', '--dir=GEMDIR',
|
|
32
|
+
'directories from which to serve gems',
|
|
33
|
+
'multiple directories may be provided' do |gemdir, options|
|
|
34
|
+
options[:gemdir] << File.expand_path(gemdir)
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
add_option '--[no-]daemon', 'run as a daemon' do |daemon, options|
|
|
38
|
+
options[:daemon] = daemon
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
add_option '-b', '--bind=HOST,HOST',
|
|
42
|
+
'addresses to bind', Array do |address, options|
|
|
43
|
+
options[:addresses] ||= []
|
|
44
|
+
options[:addresses].push(*address)
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
add_option '-l', '--launch[=COMMAND]',
|
|
48
|
+
'launches a browser window',
|
|
49
|
+
"COMMAND defaults to 'start' on Windows",
|
|
50
|
+
"and 'open' on all other platforms" do |launch, options|
|
|
51
|
+
launch ||= LibGems.win_platform? ? 'start' : 'open'
|
|
52
|
+
options[:launch] = launch
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
def defaults_str # :nodoc:
|
|
57
|
+
"--port 8808 --dir #{LibGems.dir} --no-daemon"
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
def description # :nodoc:
|
|
61
|
+
<<-EOF
|
|
62
|
+
The server command starts up a web server that hosts the RDoc for your
|
|
63
|
+
installed gems and can operate as a server for installation of gems on other
|
|
64
|
+
machines.
|
|
65
|
+
|
|
66
|
+
The cache files for installed gems must exist to use the server as a source
|
|
67
|
+
for gem installation.
|
|
68
|
+
|
|
69
|
+
To install gems from a running server, use `gem install GEMNAME --source
|
|
70
|
+
http://gem_server_host:8808`
|
|
71
|
+
|
|
72
|
+
You can set up a shortcut to gem server documentation using the URL:
|
|
73
|
+
|
|
74
|
+
http://localhost:8808/rdoc?q=%s - Firefox
|
|
75
|
+
http://localhost:8808/rdoc?q=* - LaunchBar
|
|
76
|
+
|
|
77
|
+
EOF
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
def execute
|
|
81
|
+
options[:gemdir] << LibGems.dir if options[:gemdir].empty?
|
|
82
|
+
LibGems::Server.run options
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
end
|
|
86
|
+
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
require 'fileutils'
|
|
2
|
+
require 'libgems/command'
|
|
3
|
+
require 'libgems/remote_fetcher'
|
|
4
|
+
require 'libgems/source_info_cache'
|
|
5
|
+
require 'libgems/spec_fetcher'
|
|
6
|
+
require 'libgems/local_remote_options'
|
|
7
|
+
|
|
8
|
+
class LibGems::Commands::SourcesCommand < LibGems::Command
|
|
9
|
+
|
|
10
|
+
include LibGems::LocalRemoteOptions
|
|
11
|
+
|
|
12
|
+
def initialize
|
|
13
|
+
super 'sources',
|
|
14
|
+
"Manage the sources and cache file #{LibGems::NAME} uses to search for gems"
|
|
15
|
+
|
|
16
|
+
add_option '-a', '--add SOURCE_URI', 'Add source' do |value, options|
|
|
17
|
+
options[:add] = value
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
add_option '-l', '--list', 'List sources' do |value, options|
|
|
21
|
+
options[:list] = value
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
add_option '-r', '--remove SOURCE_URI', 'Remove source' do |value, options|
|
|
25
|
+
options[:remove] = value
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
add_option '-c', '--clear-all',
|
|
29
|
+
'Remove all sources (clear the cache)' do |value, options|
|
|
30
|
+
options[:clear_all] = value
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
add_option '-u', '--update', 'Update source cache' do |value, options|
|
|
34
|
+
options[:update] = value
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
add_proxy_option
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def defaults_str
|
|
41
|
+
'--list'
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def execute
|
|
45
|
+
options[:list] = !(options[:add] ||
|
|
46
|
+
options[:clear_all] ||
|
|
47
|
+
options[:remove] ||
|
|
48
|
+
options[:update])
|
|
49
|
+
|
|
50
|
+
if options[:clear_all] then
|
|
51
|
+
path = LibGems::SpecFetcher.fetcher.dir
|
|
52
|
+
FileUtils.rm_rf path
|
|
53
|
+
|
|
54
|
+
if not File.exist?(path) then
|
|
55
|
+
say "*** Removed specs cache ***"
|
|
56
|
+
elsif not File.writable?(path) then
|
|
57
|
+
say "*** Unable to remove source cache (write protected) ***"
|
|
58
|
+
else
|
|
59
|
+
say "*** Unable to remove source cache ***"
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
sic = LibGems::SourceInfoCache
|
|
63
|
+
remove_cache_file 'user', sic.user_cache_file
|
|
64
|
+
remove_cache_file 'latest user', sic.latest_user_cache_file
|
|
65
|
+
remove_cache_file 'system', sic.system_cache_file
|
|
66
|
+
remove_cache_file 'latest system', sic.latest_system_cache_file
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
if options[:add] then
|
|
70
|
+
source_uri = options[:add]
|
|
71
|
+
uri = URI.parse source_uri
|
|
72
|
+
|
|
73
|
+
begin
|
|
74
|
+
LibGems::SpecFetcher.fetcher.load_specs uri, 'specs'
|
|
75
|
+
LibGems.sources << source_uri
|
|
76
|
+
LibGems.configuration.write
|
|
77
|
+
|
|
78
|
+
say "#{source_uri} added to sources"
|
|
79
|
+
rescue URI::Error, ArgumentError
|
|
80
|
+
say "#{source_uri} is not a URI"
|
|
81
|
+
rescue LibGems::RemoteFetcher::FetchError => e
|
|
82
|
+
yaml_uri = uri + 'yaml'
|
|
83
|
+
gem_repo = LibGems::RemoteFetcher.fetcher.fetch_size yaml_uri rescue false
|
|
84
|
+
|
|
85
|
+
if e.uri =~ /specs\.#{Regexp.escape LibGems.marshal_version}\.gz$/ and
|
|
86
|
+
gem_repo then
|
|
87
|
+
|
|
88
|
+
alert_warning <<-EOF
|
|
89
|
+
#{LibGems::NAME} 1.2+ index not found for:
|
|
90
|
+
\t#{source_uri}
|
|
91
|
+
|
|
92
|
+
Will cause #{LibGems::NAME} to revert to legacy indexes, degrading performance.
|
|
93
|
+
EOF
|
|
94
|
+
|
|
95
|
+
say "#{source_uri} added to sources"
|
|
96
|
+
else
|
|
97
|
+
say "Error fetching #{source_uri}:\n\t#{e.message}"
|
|
98
|
+
end
|
|
99
|
+
end
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
if options[:remove] then
|
|
103
|
+
source_uri = options[:remove]
|
|
104
|
+
|
|
105
|
+
unless LibGems.sources.include? source_uri then
|
|
106
|
+
say "source #{source_uri} not present in cache"
|
|
107
|
+
else
|
|
108
|
+
LibGems.sources.delete source_uri
|
|
109
|
+
LibGems.configuration.write
|
|
110
|
+
|
|
111
|
+
say "#{source_uri} removed from sources"
|
|
112
|
+
end
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
if options[:update] then
|
|
116
|
+
fetcher = LibGems::SpecFetcher.fetcher
|
|
117
|
+
|
|
118
|
+
if fetcher.legacy_repos.empty? then
|
|
119
|
+
LibGems.sources.each do |update_uri|
|
|
120
|
+
update_uri = URI.parse update_uri
|
|
121
|
+
fetcher.load_specs update_uri, 'specs'
|
|
122
|
+
fetcher.load_specs update_uri, 'latest_specs'
|
|
123
|
+
end
|
|
124
|
+
else
|
|
125
|
+
LibGems::SourceInfoCache.cache true
|
|
126
|
+
LibGems::SourceInfoCache.cache.flush
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
say "source cache successfully updated"
|
|
130
|
+
end
|
|
131
|
+
|
|
132
|
+
if options[:list] then
|
|
133
|
+
say "*** CURRENT SOURCES ***"
|
|
134
|
+
say
|
|
135
|
+
|
|
136
|
+
LibGems.sources.each do |source|
|
|
137
|
+
say source
|
|
138
|
+
end
|
|
139
|
+
end
|
|
140
|
+
end
|
|
141
|
+
|
|
142
|
+
private
|
|
143
|
+
|
|
144
|
+
def remove_cache_file(desc, path)
|
|
145
|
+
FileUtils.rm_rf path
|
|
146
|
+
|
|
147
|
+
if not File.exist?(path) then
|
|
148
|
+
say "*** Removed #{desc} source cache ***"
|
|
149
|
+
elsif not File.writable?(path) then
|
|
150
|
+
say "*** Unable to remove #{desc} source cache (write protected) ***"
|
|
151
|
+
else
|
|
152
|
+
say "*** Unable to remove #{desc} source cache ***"
|
|
153
|
+
end
|
|
154
|
+
end
|
|
155
|
+
|
|
156
|
+
end
|
|
157
|
+
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
require 'libgems/command'
|
|
2
|
+
require 'libgems/local_remote_options'
|
|
3
|
+
require 'libgems/version_option'
|
|
4
|
+
require 'libgems/source_info_cache'
|
|
5
|
+
require 'libgems/format'
|
|
6
|
+
|
|
7
|
+
class LibGems::Commands::SpecificationCommand < LibGems::Command
|
|
8
|
+
|
|
9
|
+
include LibGems::LocalRemoteOptions
|
|
10
|
+
include LibGems::VersionOption
|
|
11
|
+
|
|
12
|
+
def initialize
|
|
13
|
+
LibGems.load_yaml
|
|
14
|
+
|
|
15
|
+
super 'specification', 'Display gem specification (in yaml)',
|
|
16
|
+
:domain => :local, :version => LibGems::Requirement.default,
|
|
17
|
+
:format => :yaml
|
|
18
|
+
|
|
19
|
+
add_version_option('examine')
|
|
20
|
+
add_platform_option
|
|
21
|
+
|
|
22
|
+
add_option('--all', 'Output specifications for all versions of',
|
|
23
|
+
'the gem') do |value, options|
|
|
24
|
+
options[:all] = true
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
add_option('--ruby', 'Output ruby format') do |value, options|
|
|
28
|
+
options[:format] = :ruby
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
add_option('--yaml', 'Output RUBY format') do |value, options|
|
|
32
|
+
options[:format] = :yaml
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
add_option('--marshal', 'Output Marshal format') do |value, options|
|
|
36
|
+
options[:format] = :marshal
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
add_local_remote_options
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def arguments # :nodoc:
|
|
43
|
+
<<-ARGS
|
|
44
|
+
GEMFILE name of gem to show the gemspec for
|
|
45
|
+
FIELD name of gemspec field to show
|
|
46
|
+
ARGS
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def defaults_str # :nodoc:
|
|
50
|
+
"--local --version '#{LibGems::Requirement.default}' --yaml"
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
def usage # :nodoc:
|
|
54
|
+
"#{program_name} [GEMFILE] [FIELD]"
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
def execute
|
|
58
|
+
specs = []
|
|
59
|
+
gem = options[:args].shift
|
|
60
|
+
|
|
61
|
+
unless gem then
|
|
62
|
+
raise LibGems::CommandLineError,
|
|
63
|
+
"Please specify a gem name or file on the command line"
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
dep = LibGems::Dependency.new gem, options[:version]
|
|
67
|
+
|
|
68
|
+
field = get_one_optional_argument
|
|
69
|
+
|
|
70
|
+
if field then
|
|
71
|
+
field = field.intern
|
|
72
|
+
|
|
73
|
+
if options[:format] == :ruby then
|
|
74
|
+
raise LibGems::CommandLineError, "--ruby and FIELD are mutually exclusive"
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
unless LibGems::Specification.attribute_names.include? field then
|
|
78
|
+
raise LibGems::CommandLineError,
|
|
79
|
+
"no field %p on LibGems::Specification" % field.to_s
|
|
80
|
+
end
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
if local? then
|
|
84
|
+
if File.exist? gem then
|
|
85
|
+
specs << LibGems::Format.from_file_by_path(gem).spec rescue nil
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
if specs.empty? then
|
|
89
|
+
specs.push(*LibGems.source_index.search(dep))
|
|
90
|
+
end
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
if remote? then
|
|
94
|
+
found = LibGems::SpecFetcher.fetcher.fetch dep
|
|
95
|
+
|
|
96
|
+
specs.push(*found.map { |spec,| spec })
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
if specs.empty? then
|
|
100
|
+
alert_error "Unknown gem '#{gem}'"
|
|
101
|
+
terminate_interaction 1
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
output = lambda do |s|
|
|
105
|
+
s = s.send field if field
|
|
106
|
+
|
|
107
|
+
say case options[:format]
|
|
108
|
+
when :ruby then s.to_ruby
|
|
109
|
+
when :marshal then Marshal.dump s
|
|
110
|
+
else s.to_yaml
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
say "\n"
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
if options[:all] then
|
|
117
|
+
specs.each(&output)
|
|
118
|
+
else
|
|
119
|
+
spec = specs.sort_by { |s| s.version }.last
|
|
120
|
+
output[spec]
|
|
121
|
+
end
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
end
|
|
125
|
+
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
require 'libgems/command'
|
|
2
|
+
|
|
3
|
+
class LibGems::Commands::StaleCommand < LibGems::Command
|
|
4
|
+
def initialize
|
|
5
|
+
super('stale', 'List gems along with access times')
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
def usage # :nodoc:
|
|
9
|
+
"#{program_name}"
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def execute
|
|
13
|
+
gem_to_atime = {}
|
|
14
|
+
LibGems.source_index.each do |name, spec|
|
|
15
|
+
Dir["#{spec.full_gem_path}/**/*.*"].each do |file|
|
|
16
|
+
next if File.directory?(file)
|
|
17
|
+
stat = File.stat(file)
|
|
18
|
+
gem_to_atime[name] ||= stat.atime
|
|
19
|
+
gem_to_atime[name] = stat.atime if gem_to_atime[name] < stat.atime
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
gem_to_atime.sort_by { |_, atime| atime }.each do |name, atime|
|
|
24
|
+
say "#{name} at #{atime.strftime '%c'}"
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
require 'libgems/command'
|
|
2
|
+
require 'libgems/version_option'
|
|
3
|
+
require 'libgems/uninstaller'
|
|
4
|
+
|
|
5
|
+
##
|
|
6
|
+
# LibGems uninstaller command line tool
|
|
7
|
+
#
|
|
8
|
+
# See `gem help uninstall`
|
|
9
|
+
|
|
10
|
+
class LibGems::Commands::UninstallCommand < LibGems::Command
|
|
11
|
+
|
|
12
|
+
include LibGems::VersionOption
|
|
13
|
+
|
|
14
|
+
def initialize
|
|
15
|
+
super 'uninstall', 'Uninstall gems from the local repository',
|
|
16
|
+
:version => LibGems::Requirement.default, :user_install => true
|
|
17
|
+
|
|
18
|
+
add_option('-a', '--[no-]all',
|
|
19
|
+
'Uninstall all matching versions'
|
|
20
|
+
) do |value, options|
|
|
21
|
+
options[:all] = value
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
add_option('-I', '--[no-]ignore-dependencies',
|
|
25
|
+
'Ignore dependency requirements while',
|
|
26
|
+
'uninstalling') do |value, options|
|
|
27
|
+
options[:ignore] = value
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
add_option('-x', '--[no-]executables',
|
|
31
|
+
'Uninstall applicable executables without',
|
|
32
|
+
'confirmation') do |value, options|
|
|
33
|
+
options[:executables] = value
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
add_option('-i', '--install-dir DIR',
|
|
37
|
+
'Directory to uninstall gem from') do |value, options|
|
|
38
|
+
options[:install_dir] = File.expand_path(value)
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
add_option('-n', '--bindir DIR',
|
|
42
|
+
'Directory to remove binaries from') do |value, options|
|
|
43
|
+
options[:bin_dir] = File.expand_path(value)
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
add_option('--[no-]user-install',
|
|
47
|
+
'Uninstall from user\'s home directory',
|
|
48
|
+
'in addition to GEM_HOME.') do |value, options|
|
|
49
|
+
options[:user_install] = value
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
add_version_option
|
|
53
|
+
add_platform_option
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
def arguments # :nodoc:
|
|
57
|
+
"GEMNAME name of gem to uninstall"
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
def defaults_str # :nodoc:
|
|
61
|
+
"--version '#{LibGems::Requirement.default}' --no-force " \
|
|
62
|
+
"--install-dir #{LibGems.dir}\n" \
|
|
63
|
+
"--user-install"
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
def usage # :nodoc:
|
|
67
|
+
"#{program_name} GEMNAME [GEMNAME ...]"
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
def execute
|
|
71
|
+
get_all_gem_names.each do |gem_name|
|
|
72
|
+
begin
|
|
73
|
+
LibGems::Uninstaller.new(gem_name, options).uninstall
|
|
74
|
+
rescue LibGems::GemNotInHomeException => e
|
|
75
|
+
spec = e.spec
|
|
76
|
+
alert("In order to remove #{spec.name}, please execute:\n" \
|
|
77
|
+
"\tgem uninstall #{spec.name} --install-dir=#{spec.installation_path}")
|
|
78
|
+
end
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
end
|
|
83
|
+
|