| Class | Gem::Commands::SourcesCommand |
| In: |
lib/rubygems/commands/sources_command.rb
|
| Parent: | Gem::Command |
# File lib/rubygems/commands/sources_command.rb, line 9
9: def initialize
10: super 'sources',
11: 'Manage the sources and cache file RubyGems uses to search for gems'
12:
13: add_option '-a', '--add SOURCE_URI', 'Add source' do |value, options|
14: options[:add] = value
15: end
16:
17: add_option '-l', '--list', 'List sources' do |value, options|
18: options[:list] = value
19: end
20:
21: add_option '-r', '--remove SOURCE_URI', 'Remove source' do |value, options|
22: options[:remove] = value
23: end
24:
25: add_option '-c', '--clear-all',
26: 'Remove all sources (clear the cache)' do |value, options|
27: options[:clear_all] = value
28: end
29:
30: add_option '-u', '--update', 'Update source cache' do |value, options|
31: options[:update] = value
32: end
33: end
# File lib/rubygems/commands/sources_command.rb, line 39
39: def execute
40: options[:list] = !(options[:add] ||
41: options[:clear_all] ||
42: options[:remove] ||
43: options[:update])
44:
45: if options[:clear_all] then
46: path = Gem::SpecFetcher.fetcher.dir
47: FileUtils.rm_rf path
48:
49: if not File.exist?(path) then
50: say "*** Removed specs cache ***"
51: elsif not File.writable?(path) then
52: say "*** Unable to remove source cache (write protected) ***"
53: else
54: say "*** Unable to remove source cache ***"
55: end
56:
57: sic = Gem::SourceInfoCache
58: remove_cache_file 'user', sic.user_cache_file
59: remove_cache_file 'latest user', sic.latest_user_cache_file
60: remove_cache_file 'system', sic.system_cache_file
61: remove_cache_file 'latest system', sic.latest_system_cache_file
62: end
63:
64: if options[:add] then
65: source_uri = options[:add]
66: uri = URI.parse source_uri
67:
68: begin
69: Gem::SpecFetcher.fetcher.load_specs uri, 'specs'
70: Gem.sources << source_uri
71: Gem.configuration.write
72:
73: say "#{source_uri} added to sources"
74: rescue URI::Error, ArgumentError
75: say "#{source_uri} is not a URI"
76: rescue Gem::RemoteFetcher::FetchError => e
77: yaml_uri = uri + 'yaml'
78: gem_repo = Gem::RemoteFetcher.fetcher.fetch_size yaml_uri rescue false
79:
80: if e.uri =~ /specs\.#{Regexp.escape Gem.marshal_version}\.gz$/ and
81: gem_repo then
82:
83: alert_warning "RubyGems 1.2+ index not found for:\n\\t\#{source_uri}\n\nWill cause RubyGems to revert to legacy indexes, degrading performance.\n"
84:
85: say "#{source_uri} added to sources"
86: else
87: say "Error fetching #{source_uri}:\n\t#{e.message}"
88: end
89: end
90: end
91:
92: if options[:remove] then
93: source_uri = options[:remove]
94:
95: unless Gem.sources.include? source_uri then
96: say "source #{source_uri} not present in cache"
97: else
98: Gem.sources.delete source_uri
99: Gem.configuration.write
100:
101: say "#{source_uri} removed from sources"
102: end
103: end
104:
105: if options[:update] then
106: fetcher = Gem::SpecFetcher.fetcher
107:
108: if fetcher.legacy_repos.empty? then
109: Gem.sources.each do |update_uri|
110: update_uri = URI.parse update_uri
111: fetcher.load_specs update_uri, 'specs'
112: fetcher.load_specs update_uri, 'latest_specs'
113: end
114: else
115: Gem::SourceInfoCache.cache true
116: Gem::SourceInfoCache.cache.flush
117: end
118:
119: say "source cache successfully updated"
120: end
121:
122: if options[:list] then
123: say "*** CURRENT SOURCES ***"
124: say
125:
126: Gem.sources.each do |source|
127: say source
128: end
129: end
130: end