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.
Files changed (177) hide show
  1. data/ChangeLog +5811 -0
  2. data/History.txt +887 -0
  3. data/LICENSE.txt +51 -0
  4. data/README.md +87 -0
  5. data/Rakefile +113 -0
  6. data/lib/gauntlet_libgems.rb +50 -0
  7. data/lib/libgems.rb +1246 -0
  8. data/lib/libgems/builder.rb +102 -0
  9. data/lib/libgems/command.rb +534 -0
  10. data/lib/libgems/command_manager.rb +182 -0
  11. data/lib/libgems/commands/build_command.rb +53 -0
  12. data/lib/libgems/commands/cert_command.rb +86 -0
  13. data/lib/libgems/commands/check_command.rb +80 -0
  14. data/lib/libgems/commands/cleanup_command.rb +106 -0
  15. data/lib/libgems/commands/contents_command.rb +98 -0
  16. data/lib/libgems/commands/dependency_command.rb +195 -0
  17. data/lib/libgems/commands/environment_command.rb +133 -0
  18. data/lib/libgems/commands/fetch_command.rb +67 -0
  19. data/lib/libgems/commands/generate_index_command.rb +133 -0
  20. data/lib/libgems/commands/help_command.rb +172 -0
  21. data/lib/libgems/commands/install_command.rb +178 -0
  22. data/lib/libgems/commands/list_command.rb +35 -0
  23. data/lib/libgems/commands/lock_command.rb +110 -0
  24. data/lib/libgems/commands/mirror_command.rb +111 -0
  25. data/lib/libgems/commands/outdated_command.rb +33 -0
  26. data/lib/libgems/commands/owner_command.rb +75 -0
  27. data/lib/libgems/commands/pristine_command.rb +93 -0
  28. data/lib/libgems/commands/push_command.rb +56 -0
  29. data/lib/libgems/commands/query_command.rb +280 -0
  30. data/lib/libgems/commands/rdoc_command.rb +91 -0
  31. data/lib/libgems/commands/search_command.rb +31 -0
  32. data/lib/libgems/commands/server_command.rb +86 -0
  33. data/lib/libgems/commands/sources_command.rb +157 -0
  34. data/lib/libgems/commands/specification_command.rb +125 -0
  35. data/lib/libgems/commands/stale_command.rb +27 -0
  36. data/lib/libgems/commands/uninstall_command.rb +83 -0
  37. data/lib/libgems/commands/unpack_command.rb +121 -0
  38. data/lib/libgems/commands/update_command.rb +160 -0
  39. data/lib/libgems/commands/which_command.rb +86 -0
  40. data/lib/libgems/config_file.rb +345 -0
  41. data/lib/libgems/custom_require.rb +44 -0
  42. data/lib/libgems/defaults.rb +101 -0
  43. data/lib/libgems/dependency.rb +227 -0
  44. data/lib/libgems/dependency_installer.rb +286 -0
  45. data/lib/libgems/dependency_list.rb +208 -0
  46. data/lib/libgems/doc_manager.rb +242 -0
  47. data/lib/libgems/errors.rb +35 -0
  48. data/lib/libgems/exceptions.rb +91 -0
  49. data/lib/libgems/ext.rb +18 -0
  50. data/lib/libgems/ext/builder.rb +56 -0
  51. data/lib/libgems/ext/configure_builder.rb +25 -0
  52. data/lib/libgems/ext/ext_conf_builder.rb +24 -0
  53. data/lib/libgems/ext/rake_builder.rb +39 -0
  54. data/lib/libgems/format.rb +81 -0
  55. data/lib/libgems/gem_openssl.rb +92 -0
  56. data/lib/libgems/gem_path_searcher.rb +100 -0
  57. data/lib/libgems/gem_runner.rb +79 -0
  58. data/lib/libgems/gemcutter_utilities.rb +49 -0
  59. data/lib/libgems/indexer.rb +720 -0
  60. data/lib/libgems/install_update_options.rb +125 -0
  61. data/lib/libgems/installer.rb +604 -0
  62. data/lib/libgems/local_remote_options.rb +135 -0
  63. data/lib/libgems/old_format.rb +153 -0
  64. data/lib/libgems/package.rb +97 -0
  65. data/lib/libgems/package/f_sync_dir.rb +23 -0
  66. data/lib/libgems/package/tar_header.rb +266 -0
  67. data/lib/libgems/package/tar_input.rb +222 -0
  68. data/lib/libgems/package/tar_output.rb +144 -0
  69. data/lib/libgems/package/tar_reader.rb +106 -0
  70. data/lib/libgems/package/tar_reader/entry.rb +141 -0
  71. data/lib/libgems/package/tar_writer.rb +241 -0
  72. data/lib/libgems/package_task.rb +126 -0
  73. data/lib/libgems/platform.rb +183 -0
  74. data/lib/libgems/remote_fetcher.rb +414 -0
  75. data/lib/libgems/require_paths_builder.rb +18 -0
  76. data/lib/libgems/requirement.rb +153 -0
  77. data/lib/libgems/security.rb +814 -0
  78. data/lib/libgems/server.rb +872 -0
  79. data/lib/libgems/source_index.rb +597 -0
  80. data/lib/libgems/source_info_cache.rb +395 -0
  81. data/lib/libgems/source_info_cache_entry.rb +56 -0
  82. data/lib/libgems/spec_fetcher.rb +337 -0
  83. data/lib/libgems/specification.rb +1487 -0
  84. data/lib/libgems/test_utilities.rb +147 -0
  85. data/lib/libgems/text.rb +65 -0
  86. data/lib/libgems/uninstaller.rb +278 -0
  87. data/lib/libgems/user_interaction.rb +527 -0
  88. data/lib/libgems/validator.rb +240 -0
  89. data/lib/libgems/version.rb +316 -0
  90. data/lib/libgems/version_option.rb +65 -0
  91. data/lib/rbconfig/datadir.rb +20 -0
  92. data/test/bogussources.rb +8 -0
  93. data/test/data/gem-private_key.pem +27 -0
  94. data/test/data/gem-public_cert.pem +20 -0
  95. data/test/fake_certlib/openssl.rb +7 -0
  96. data/test/foo/discover.rb +0 -0
  97. data/test/gem_installer_test_case.rb +97 -0
  98. data/test/gem_package_tar_test_case.rb +132 -0
  99. data/test/gemutilities.rb +605 -0
  100. data/test/insure_session.rb +43 -0
  101. data/test/mockgemui.rb +56 -0
  102. data/test/plugin/exception/libgems_plugin.rb +2 -0
  103. data/test/plugin/load/libgems_plugin.rb +1 -0
  104. data/test/plugin/standarderror/libgems_plugin.rb +2 -0
  105. data/test/private_key.pem +27 -0
  106. data/test/public_cert.pem +20 -0
  107. data/test/rubygems_plugin.rb +21 -0
  108. data/test/simple_gem.rb +66 -0
  109. data/test/test_config.rb +12 -0
  110. data/test/test_gem.rb +780 -0
  111. data/test/test_gem_builder.rb +27 -0
  112. data/test/test_gem_command.rb +178 -0
  113. data/test/test_gem_command_manager.rb +207 -0
  114. data/test/test_gem_commands_build_command.rb +74 -0
  115. data/test/test_gem_commands_cert_command.rb +124 -0
  116. data/test/test_gem_commands_check_command.rb +18 -0
  117. data/test/test_gem_commands_contents_command.rb +156 -0
  118. data/test/test_gem_commands_dependency_command.rb +216 -0
  119. data/test/test_gem_commands_environment_command.rb +144 -0
  120. data/test/test_gem_commands_fetch_command.rb +76 -0
  121. data/test/test_gem_commands_generate_index_command.rb +135 -0
  122. data/test/test_gem_commands_install_command.rb +315 -0
  123. data/test/test_gem_commands_list_command.rb +36 -0
  124. data/test/test_gem_commands_lock_command.rb +68 -0
  125. data/test/test_gem_commands_mirror_command.rb +60 -0
  126. data/test/test_gem_commands_outdated_command.rb +40 -0
  127. data/test/test_gem_commands_owner_command.rb +105 -0
  128. data/test/test_gem_commands_pristine_command.rb +108 -0
  129. data/test/test_gem_commands_push_command.rb +81 -0
  130. data/test/test_gem_commands_query_command.rb +426 -0
  131. data/test/test_gem_commands_server_command.rb +59 -0
  132. data/test/test_gem_commands_sources_command.rb +209 -0
  133. data/test/test_gem_commands_specification_command.rb +139 -0
  134. data/test/test_gem_commands_stale_command.rb +38 -0
  135. data/test/test_gem_commands_uninstall_command.rb +83 -0
  136. data/test/test_gem_commands_unpack_command.rb +199 -0
  137. data/test/test_gem_commands_update_command.rb +207 -0
  138. data/test/test_gem_commands_which_command.rb +66 -0
  139. data/test/test_gem_config_file.rb +287 -0
  140. data/test/test_gem_dependency.rb +149 -0
  141. data/test/test_gem_dependency_installer.rb +661 -0
  142. data/test/test_gem_dependency_list.rb +230 -0
  143. data/test/test_gem_doc_manager.rb +31 -0
  144. data/test/test_gem_ext_configure_builder.rb +84 -0
  145. data/test/test_gem_ext_ext_conf_builder.rb +173 -0
  146. data/test/test_gem_ext_rake_builder.rb +81 -0
  147. data/test/test_gem_format.rb +70 -0
  148. data/test/test_gem_gem_path_searcher.rb +78 -0
  149. data/test/test_gem_gem_runner.rb +45 -0
  150. data/test/test_gem_gemcutter_utilities.rb +103 -0
  151. data/test/test_gem_indexer.rb +673 -0
  152. data/test/test_gem_install_update_options.rb +68 -0
  153. data/test/test_gem_installer.rb +857 -0
  154. data/test/test_gem_local_remote_options.rb +97 -0
  155. data/test/test_gem_package_tar_header.rb +130 -0
  156. data/test/test_gem_package_tar_input.rb +112 -0
  157. data/test/test_gem_package_tar_output.rb +97 -0
  158. data/test/test_gem_package_tar_reader.rb +46 -0
  159. data/test/test_gem_package_tar_reader_entry.rb +109 -0
  160. data/test/test_gem_package_tar_writer.rb +144 -0
  161. data/test/test_gem_package_task.rb +59 -0
  162. data/test/test_gem_platform.rb +264 -0
  163. data/test/test_gem_remote_fetcher.rb +740 -0
  164. data/test/test_gem_requirement.rb +292 -0
  165. data/test/test_gem_server.rb +356 -0
  166. data/test/test_gem_silent_ui.rb +113 -0
  167. data/test/test_gem_source_index.rb +461 -0
  168. data/test/test_gem_spec_fetcher.rb +410 -0
  169. data/test/test_gem_specification.rb +1334 -0
  170. data/test/test_gem_stream_ui.rb +218 -0
  171. data/test/test_gem_text.rb +43 -0
  172. data/test/test_gem_uninstaller.rb +146 -0
  173. data/test/test_gem_validator.rb +63 -0
  174. data/test/test_gem_version.rb +181 -0
  175. data/test/test_gem_version_option.rb +89 -0
  176. data/test/test_kernel.rb +59 -0
  177. metadata +402 -0
@@ -0,0 +1,208 @@
1
+ #--
2
+ # Copyright 2006 by Chad Fowler, Rich Kilmer, Jim Weirich and others.
3
+ # All rights reserved.
4
+ # See LICENSE.txt for permissions.
5
+ #++
6
+
7
+ require 'tsort'
8
+
9
+ ##
10
+ # LibGems::DependencyList is used for installing and uninstalling gems in the
11
+ # correct order to avoid conflicts.
12
+
13
+ class LibGems::DependencyList
14
+
15
+ include Enumerable
16
+ include TSort
17
+
18
+ ##
19
+ # Allows enabling/disabling use of development dependencies
20
+
21
+ attr_accessor :development
22
+
23
+ ##
24
+ # Creates a DependencyList from a LibGems::SourceIndex +source_index+
25
+
26
+ def self.from_source_index(source_index)
27
+ list = new
28
+
29
+ source_index.each do |full_name, spec|
30
+ list.add spec
31
+ end
32
+
33
+ list
34
+ end
35
+
36
+ ##
37
+ # Creates a new DependencyList. If +development+ is true, development
38
+ # dependencies will be included.
39
+
40
+ def initialize development = false
41
+ @specs = []
42
+
43
+ @development = development
44
+ end
45
+
46
+ ##
47
+ # Adds +gemspecs+ to the dependency list.
48
+
49
+ def add(*gemspecs)
50
+ @specs.push(*gemspecs)
51
+ end
52
+
53
+ ##
54
+ # Return a list of the gem specifications in the dependency list, sorted in
55
+ # order so that no gemspec in the list depends on a gemspec earlier in the
56
+ # list.
57
+ #
58
+ # This is useful when removing gems from a set of installed gems. By
59
+ # removing them in the returned order, you don't get into as many dependency
60
+ # issues.
61
+ #
62
+ # If there are circular dependencies (yuck!), then gems will be returned in
63
+ # order until only the circular dependents and anything they reference are
64
+ # left. Then arbitrary gemspecs will be returned until the circular
65
+ # dependency is broken, after which gems will be returned in dependency
66
+ # order again.
67
+
68
+ def dependency_order
69
+ sorted = strongly_connected_components.flatten
70
+
71
+ result = []
72
+ seen = {}
73
+
74
+ sorted.each do |spec|
75
+ if index = seen[spec.name] then
76
+ if result[index].version < spec.version then
77
+ result[index] = spec
78
+ end
79
+ else
80
+ seen[spec.name] = result.length
81
+ result << spec
82
+ end
83
+ end
84
+
85
+ result.reverse
86
+ end
87
+
88
+ ##
89
+ # Iterator over dependency_order
90
+
91
+ def each(&block)
92
+ dependency_order.each(&block)
93
+ end
94
+
95
+ def find_name(full_name)
96
+ @specs.find { |spec| spec.full_name == full_name }
97
+ end
98
+
99
+ def inspect # :nodoc:
100
+ "#<%s:0x%x %p>" % [self.class, object_id, map { |s| s.full_name }]
101
+ end
102
+
103
+ ##
104
+ # Are all the dependencies in the list satisfied?
105
+
106
+ def ok?
107
+ @specs.all? do |spec|
108
+ spec.runtime_dependencies.all? do |dep|
109
+ @specs.find { |s| s.satisfies_requirement? dep }
110
+ end
111
+ end
112
+ end
113
+
114
+ ##
115
+ # Is is ok to remove a gemspec from the dependency list?
116
+ #
117
+ # If removing the gemspec creates breaks a currently ok dependency, then it
118
+ # is NOT ok to remove the gemspec.
119
+
120
+ def ok_to_remove?(full_name)
121
+ gem_to_remove = find_name full_name
122
+
123
+ siblings = @specs.find_all { |s|
124
+ s.name == gem_to_remove.name &&
125
+ s.full_name != gem_to_remove.full_name
126
+ }
127
+
128
+ deps = []
129
+
130
+ @specs.each do |spec|
131
+ spec.dependencies.each do |dep|
132
+ deps << dep if gem_to_remove.satisfies_requirement?(dep)
133
+ end
134
+ end
135
+
136
+ deps.all? { |dep|
137
+ siblings.any? { |s|
138
+ s.satisfies_requirement? dep
139
+ }
140
+ }
141
+ end
142
+
143
+ ##
144
+ # Removes the gemspec matching +full_name+ from the dependency list
145
+
146
+ def remove_by_name(full_name)
147
+ @specs.delete_if { |spec| spec.full_name == full_name }
148
+ end
149
+
150
+ ##
151
+ # Return a hash of predecessors. <tt>result[spec]</tt> is an Array of
152
+ # gemspecs that have a dependency satisfied by the named gemspec.
153
+
154
+ def spec_predecessors
155
+ result = Hash.new { |h,k| h[k] = [] }
156
+
157
+ specs = @specs.sort.reverse
158
+
159
+ specs.each do |spec|
160
+ specs.each do |other|
161
+ next if spec == other
162
+
163
+ other.dependencies.each do |dep|
164
+ if spec.satisfies_requirement? dep then
165
+ result[spec] << other
166
+ end
167
+ end
168
+ end
169
+ end
170
+
171
+ result
172
+ end
173
+
174
+ def tsort_each_node(&block)
175
+ @specs.each(&block)
176
+ end
177
+
178
+ def tsort_each_child(node, &block)
179
+ specs = @specs.sort.reverse
180
+
181
+ dependencies = node.runtime_dependencies
182
+ dependencies.push(*node.development_dependencies) if @development
183
+
184
+ dependencies.each do |dep|
185
+ specs.each do |spec|
186
+ if spec.satisfies_requirement? dep then
187
+ begin
188
+ yield spec
189
+ rescue TSort::Cyclic
190
+ end
191
+ break
192
+ end
193
+ end
194
+ end
195
+ end
196
+
197
+ private
198
+
199
+ ##
200
+ # Count the number of gemspecs in the list +specs+ that are not in
201
+ # +ignored+.
202
+
203
+ def active_count(specs, ignored)
204
+ specs.count { |spec| ignored[spec.full_name].nil? }
205
+ end
206
+
207
+ end
208
+
@@ -0,0 +1,242 @@
1
+ #--
2
+ # Copyright 2006 by Chad Fowler, Rich Kilmer, Jim Weirich and others.
3
+ # All rights reserved.
4
+ # See LICENSE.txt for permissions.
5
+ #++
6
+
7
+ require 'fileutils'
8
+ require 'libgems'
9
+
10
+ ##
11
+ # The documentation manager generates RDoc and RI for SlimGems.
12
+
13
+ class LibGems::DocManager
14
+
15
+ include LibGems::UserInteraction
16
+
17
+ @configured_args = []
18
+
19
+ def self.configured_args
20
+ @configured_args ||= []
21
+ end
22
+
23
+ def self.configured_args=(args)
24
+ case args
25
+ when Array
26
+ @configured_args = args
27
+ when String
28
+ @configured_args = args.split
29
+ end
30
+ end
31
+
32
+ ##
33
+ # Load RDoc from a gem if it is available, otherwise from Ruby's stdlib
34
+
35
+ def self.load_rdoc
36
+ begin
37
+ gem 'rdoc'
38
+ rescue LibGems::LoadError
39
+ # use built-in RDoc
40
+ end
41
+
42
+ begin
43
+ require 'rdoc/rdoc'
44
+
45
+ @rdoc_version = if defined? RDoc::VERSION then
46
+ LibGems::Version.new RDoc::VERSION
47
+ else
48
+ LibGems::Version.new '1.0.1' # HACK parsing is hard
49
+ end
50
+
51
+ rescue LoadError => e
52
+ raise LibGems::DocumentError,
53
+ "ERROR: RDoc documentation generator not installed: #{e}"
54
+ end
55
+ end
56
+
57
+ def self.rdoc_version
58
+ @rdoc_version
59
+ end
60
+
61
+ ##
62
+ # Updates the RI cache for RDoc 2 if it is installed
63
+
64
+ def self.update_ri_cache
65
+ load_rdoc rescue return
66
+
67
+ return unless defined? RDoc::VERSION # RDoc 1 does not have VERSION
68
+
69
+ require 'rdoc/ri/driver'
70
+
71
+ options = {
72
+ :use_cache => true,
73
+ :use_system => true,
74
+ :use_site => true,
75
+ :use_home => true,
76
+ :use_gems => true,
77
+ :formatter => RDoc::RI::Formatter,
78
+ }
79
+
80
+ RDoc::RI::Driver.new(options).class_cache
81
+ end
82
+
83
+ ##
84
+ # Create a document manager for +spec+. +rdoc_args+ contains arguments for
85
+ # RDoc (template etc.) as a String.
86
+
87
+ def initialize(spec, rdoc_args="")
88
+ @spec = spec
89
+ @doc_dir = File.join(spec.installation_path, "doc", spec.full_name)
90
+ @rdoc_args = rdoc_args.nil? ? [] : rdoc_args.split
91
+ end
92
+
93
+ ##
94
+ # Is the RDoc documentation installed?
95
+
96
+ def rdoc_installed?
97
+ File.exist?(File.join(@doc_dir, "rdoc"))
98
+ end
99
+
100
+ ##
101
+ # Is the RI documentation installed?
102
+
103
+ def ri_installed?
104
+ File.exist?(File.join(@doc_dir, "ri"))
105
+ end
106
+
107
+ ##
108
+ # Generate the RI documents for this gem spec.
109
+ #
110
+ # Note that if both RI and RDoc documents are generated from the same
111
+ # process, the RI docs should be done first (a likely bug in RDoc will cause
112
+ # RI docs generation to fail if run after RDoc).
113
+
114
+ def generate_ri
115
+ setup_rdoc
116
+ install_ri # RDoc bug, ri goes first
117
+
118
+ FileUtils.mkdir_p @doc_dir unless File.exist?(@doc_dir)
119
+ end
120
+
121
+ ##
122
+ # Generate the RDoc documents for this gem spec.
123
+ #
124
+ # Note that if both RI and RDoc documents are generated from the same
125
+ # process, the RI docs should be done first (a likely bug in RDoc will cause
126
+ # RI docs generation to fail if run after RDoc).
127
+
128
+ def generate_rdoc
129
+ setup_rdoc
130
+ install_rdoc
131
+
132
+ FileUtils.mkdir_p @doc_dir unless File.exist?(@doc_dir)
133
+ end
134
+
135
+ ##
136
+ # Generate and install RDoc into the documentation directory
137
+
138
+ def install_rdoc
139
+ rdoc_dir = File.join @doc_dir, 'rdoc'
140
+
141
+ FileUtils.rm_rf rdoc_dir
142
+
143
+ say "Installing RDoc documentation for #{@spec.full_name}..."
144
+ run_rdoc '--op', rdoc_dir
145
+ end
146
+
147
+ ##
148
+ # Generate and install RI into the documentation directory
149
+
150
+ def install_ri
151
+ ri_dir = File.join @doc_dir, 'ri'
152
+
153
+ FileUtils.rm_rf ri_dir
154
+
155
+ say "Installing ri documentation for #{@spec.full_name}..."
156
+ run_rdoc '--ri', '--op', ri_dir
157
+ end
158
+
159
+ ##
160
+ # Run RDoc with +args+, which is an ARGV style argument list
161
+
162
+ def run_rdoc(*args)
163
+ args << @spec.rdoc_options
164
+ args << self.class.configured_args
165
+ args << '--quiet'
166
+ args << @spec.require_paths.clone
167
+ args << @spec.extra_rdoc_files
168
+ args << '--title' << "#{@spec.full_name} Documentation"
169
+ args = args.flatten.map do |arg| arg.to_s end
170
+
171
+ if self.class.rdoc_version >= LibGems::Version.new('2.4.0') then
172
+ args.delete '--inline-source'
173
+ args.delete '--promiscuous'
174
+ args.delete '-p'
175
+ args.delete '--one-file'
176
+ # HACK more
177
+ end
178
+
179
+ r = RDoc::RDoc.new
180
+
181
+ old_pwd = Dir.pwd
182
+ Dir.chdir @spec.full_gem_path
183
+
184
+ say "rdoc #{args.join ' '}" if LibGems.configuration.really_verbose
185
+
186
+ begin
187
+ r.document args
188
+ rescue Errno::EACCES => e
189
+ dirname = File.dirname e.message.split("-")[1].strip
190
+ raise LibGems::FilePermissionError.new(dirname)
191
+ rescue Interrupt => e
192
+ raise e
193
+ rescue Exception => ex
194
+ alert_error "While generating documentation for #{@spec.full_name}"
195
+ ui.errs.puts "... MESSAGE: #{ex}"
196
+ ui.errs.puts "... RDOC args: #{args.join(' ')}"
197
+ ui.errs.puts "\t#{ex.backtrace.join "\n\t"}" if
198
+ LibGems.configuration.backtrace
199
+ ui.errs.puts "(continuing with the rest of the installation)"
200
+ ensure
201
+ Dir.chdir old_pwd
202
+ end
203
+ end
204
+
205
+ def setup_rdoc
206
+ if File.exist?(@doc_dir) && !File.writable?(@doc_dir) then
207
+ raise LibGems::FilePermissionError.new(@doc_dir)
208
+ end
209
+
210
+ FileUtils.mkdir_p @doc_dir unless File.exist?(@doc_dir)
211
+
212
+ self.class.load_rdoc
213
+ end
214
+
215
+ ##
216
+ # Remove RDoc and RI documentation
217
+
218
+ def uninstall_doc
219
+ raise LibGems::FilePermissionError.new(@spec.installation_path) unless
220
+ File.writable? @spec.installation_path
221
+
222
+ original_name = [
223
+ @spec.name, @spec.version, @spec.original_platform].join '-'
224
+
225
+ doc_dir = File.join @spec.installation_path, 'doc', @spec.full_name
226
+ unless File.directory? doc_dir then
227
+ doc_dir = File.join @spec.installation_path, 'doc', original_name
228
+ end
229
+
230
+ FileUtils.rm_rf doc_dir
231
+
232
+ ri_dir = File.join @spec.installation_path, 'ri', @spec.full_name
233
+
234
+ unless File.directory? ri_dir then
235
+ ri_dir = File.join @spec.installation_path, 'ri', original_name
236
+ end
237
+
238
+ FileUtils.rm_rf ri_dir
239
+ end
240
+
241
+ end
242
+
@@ -0,0 +1,35 @@
1
+ class LibGems::ErrorReason; end
2
+
3
+ # Generated when trying to lookup a gem to indicate that the gem
4
+ # was found, but that it isn't usable on the current platform.
5
+ #
6
+ # fetch and install read these and report them to the user to aid
7
+ # in figuring out why a gem couldn't be installed.
8
+ #
9
+ class LibGems::PlatformMismatch < LibGems::ErrorReason
10
+
11
+ attr_reader :name
12
+ attr_reader :version
13
+ attr_reader :platforms
14
+
15
+ def initialize(name, version)
16
+ @name = name
17
+ @version = version
18
+ @platforms = []
19
+ end
20
+
21
+ def add_platform(platform)
22
+ @platforms << platform
23
+ end
24
+
25
+ def wordy
26
+ prefix = "Found #{@name} (#{@version})"
27
+
28
+ if @platforms.size == 1
29
+ "#{prefix}, but was for platform #{@platforms[0]}"
30
+ else
31
+ "#{prefix}, but was for platforms #{@platforms.join(' ,')}"
32
+ end
33
+ end
34
+
35
+ end