shoesgem 0.1430.0 → 0.1469.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (225) hide show
  1. data/shoes/VERSION.txt +1 -1
  2. data/shoes/freetype6.dll +0 -0
  3. data/shoes/lib/shoes/help.rb +2 -1
  4. data/shoes/libcairo-2.dll +0 -0
  5. data/shoes/libeay32.dll +0 -0
  6. data/shoes/libexpat-1.dll +0 -0
  7. data/shoes/libfontconfig-1.dll +0 -0
  8. data/shoes/libgio-2.0-0.dll +0 -0
  9. data/shoes/libglib-2.0-0.dll +0 -0
  10. data/shoes/libgmodule-2.0-0.dll +0 -0
  11. data/shoes/libgobject-2.0-0.dll +0 -0
  12. data/shoes/libgthread-2.0-0.dll +0 -0
  13. data/shoes/libiconv2.dll +0 -0
  14. data/shoes/libjpeg-8.dll +0 -0
  15. data/shoes/libpango-1.0-0.dll +0 -0
  16. data/shoes/libpangocairo-1.0-0.dll +0 -0
  17. data/shoes/libpangoft2-1.0-0.dll +0 -0
  18. data/shoes/libpangowin32-1.0-0.dll +0 -0
  19. data/shoes/libpng14-14.dll +0 -0
  20. data/shoes/libportaudio-2.dll +0 -0
  21. data/shoes/libshoes.dll +0 -0
  22. data/shoes/libssl32.dll +0 -0
  23. data/shoes/libungif4.dll +0 -0
  24. data/shoes/msvcrt-ruby191.dll +0 -0
  25. data/shoes/nsis/shoes.nsi +1 -1
  26. data/shoes/readline5.dll +0 -0
  27. data/shoes/ruby/gems/1.9.1/gems/hpricot-0.8.1/lib/fast_xs.so +0 -0
  28. data/shoes/ruby/gems/1.9.1/gems/hpricot-0.8.1/lib/hpricot_scan.so +0 -0
  29. data/shoes/ruby/gems/1.9.1/gems/json-shoes-1.1.3/lib/json/ext/generator.so +0 -0
  30. data/shoes/ruby/gems/1.9.1/gems/json-shoes-1.1.3/lib/json/ext/parser.so +0 -0
  31. data/shoes/ruby/gems/1.9.1/gems/{sqlite3-ruby-1.2.5-x86-mswin32 → sqlite3-ruby-1.3.0}/lib/sqlite3/constants.rb +0 -0
  32. data/shoes/ruby/gems/1.9.1/gems/{sqlite3-ruby-1.2.5-x86-mswin32 → sqlite3-ruby-1.3.0}/lib/sqlite3/database.rb +152 -305
  33. data/shoes/ruby/gems/1.9.1/gems/{sqlite3-ruby-1.2.5-x86-mswin32 → sqlite3-ruby-1.3.0}/lib/sqlite3/errors.rb +0 -24
  34. data/shoes/ruby/gems/1.9.1/gems/{sqlite3-ruby-1.2.5-x86-mswin32 → sqlite3-ruby-1.3.0}/lib/sqlite3/pragmas.rb +16 -7
  35. data/shoes/ruby/gems/1.9.1/gems/{sqlite3-ruby-1.2.5-x86-mswin32 → sqlite3-ruby-1.3.0}/lib/sqlite3/resultset.rb +26 -80
  36. data/shoes/ruby/gems/1.9.1/gems/{sqlite3-ruby-1.2.5-x86-mswin32 → sqlite3-ruby-1.3.0}/lib/sqlite3/statement.rb +22 -107
  37. data/shoes/ruby/gems/1.9.1/gems/{sqlite3-ruby-1.2.5-x86-mswin32 → sqlite3-ruby-1.3.0}/lib/sqlite3/translator.rb +6 -1
  38. data/shoes/ruby/gems/1.9.1/gems/{sqlite3-ruby-1.2.5-x86-mswin32 → sqlite3-ruby-1.3.0}/lib/sqlite3/value.rb +0 -0
  39. data/shoes/ruby/gems/1.9.1/gems/{sqlite3-ruby-1.2.5-x86-mswin32 → sqlite3-ruby-1.3.0}/lib/sqlite3/version.rb +3 -3
  40. data/shoes/ruby/gems/1.9.1/gems/sqlite3-ruby-1.3.0/lib/sqlite3.rb +11 -0
  41. data/shoes/ruby/gems/1.9.1/gems/sqlite3-ruby-1.3.0/lib/sqlite3_native.so +0 -0
  42. data/shoes/ruby/gems/1.9.1/specifications/sqlite3-ruby-1.3.0.gemspec +48 -0
  43. data/shoes/ruby/lib/ftsearch/suffix_array_reader.rb +4 -2
  44. data/shoes/ruby/lib/i386-mingw32/bigdecimal.so +0 -0
  45. data/shoes/ruby/lib/i386-mingw32/binject.so +0 -0
  46. data/shoes/ruby/lib/i386-mingw32/bloops.so +0 -0
  47. data/shoes/ruby/lib/i386-mingw32/chipmunk.so +0 -0
  48. data/shoes/ruby/lib/i386-mingw32/continuation.so +0 -0
  49. data/shoes/ruby/lib/i386-mingw32/coverage.so +0 -0
  50. data/shoes/ruby/lib/i386-mingw32/curses.so +0 -0
  51. data/shoes/ruby/lib/i386-mingw32/digest/bubblebabble.so +0 -0
  52. data/shoes/ruby/lib/i386-mingw32/digest/md5.so +0 -0
  53. data/shoes/ruby/lib/i386-mingw32/digest/rmd160.so +0 -0
  54. data/shoes/ruby/lib/i386-mingw32/digest/sha1.so +0 -0
  55. data/shoes/ruby/lib/i386-mingw32/digest/sha2.so +0 -0
  56. data/shoes/ruby/lib/i386-mingw32/digest.so +0 -0
  57. data/shoes/ruby/lib/i386-mingw32/dl.so +0 -0
  58. data/shoes/ruby/lib/i386-mingw32/enc/big5.so +0 -0
  59. data/shoes/ruby/lib/i386-mingw32/enc/cp949.so +0 -0
  60. data/shoes/ruby/lib/i386-mingw32/enc/emacs_mule.so +0 -0
  61. data/shoes/ruby/lib/i386-mingw32/enc/encdb.so +0 -0
  62. data/shoes/ruby/lib/i386-mingw32/enc/euc_jp.so +0 -0
  63. data/shoes/ruby/lib/i386-mingw32/enc/euc_kr.so +0 -0
  64. data/shoes/ruby/lib/i386-mingw32/enc/euc_tw.so +0 -0
  65. data/shoes/ruby/lib/i386-mingw32/enc/gb18030.so +0 -0
  66. data/shoes/ruby/lib/i386-mingw32/enc/gb2312.so +0 -0
  67. data/shoes/ruby/lib/i386-mingw32/enc/gbk.so +0 -0
  68. data/shoes/ruby/lib/i386-mingw32/enc/iso_8859_1.so +0 -0
  69. data/shoes/ruby/lib/i386-mingw32/enc/iso_8859_10.so +0 -0
  70. data/shoes/ruby/lib/i386-mingw32/enc/iso_8859_11.so +0 -0
  71. data/shoes/ruby/lib/i386-mingw32/enc/iso_8859_13.so +0 -0
  72. data/shoes/ruby/lib/i386-mingw32/enc/iso_8859_14.so +0 -0
  73. data/shoes/ruby/lib/i386-mingw32/enc/iso_8859_15.so +0 -0
  74. data/shoes/ruby/lib/i386-mingw32/enc/iso_8859_16.so +0 -0
  75. data/shoes/ruby/lib/i386-mingw32/enc/iso_8859_2.so +0 -0
  76. data/shoes/ruby/lib/i386-mingw32/enc/iso_8859_3.so +0 -0
  77. data/shoes/ruby/lib/i386-mingw32/enc/iso_8859_4.so +0 -0
  78. data/shoes/ruby/lib/i386-mingw32/enc/iso_8859_5.so +0 -0
  79. data/shoes/ruby/lib/i386-mingw32/enc/iso_8859_6.so +0 -0
  80. data/shoes/ruby/lib/i386-mingw32/enc/iso_8859_7.so +0 -0
  81. data/shoes/ruby/lib/i386-mingw32/enc/iso_8859_8.so +0 -0
  82. data/shoes/ruby/lib/i386-mingw32/enc/iso_8859_9.so +0 -0
  83. data/shoes/ruby/lib/i386-mingw32/enc/koi8_r.so +0 -0
  84. data/shoes/ruby/lib/i386-mingw32/enc/koi8_u.so +0 -0
  85. data/shoes/ruby/lib/i386-mingw32/enc/shift_jis.so +0 -0
  86. data/shoes/ruby/lib/i386-mingw32/enc/trans/big5.so +0 -0
  87. data/shoes/ruby/lib/i386-mingw32/enc/trans/chinese.so +0 -0
  88. data/shoes/ruby/lib/i386-mingw32/enc/trans/escape.so +0 -0
  89. data/shoes/ruby/lib/i386-mingw32/enc/trans/gb18030.so +0 -0
  90. data/shoes/ruby/lib/i386-mingw32/enc/trans/gbk.so +0 -0
  91. data/shoes/ruby/lib/i386-mingw32/enc/trans/iso2022.so +0 -0
  92. data/shoes/ruby/lib/i386-mingw32/enc/trans/japanese.so +0 -0
  93. data/shoes/ruby/lib/i386-mingw32/enc/trans/japanese_euc.so +0 -0
  94. data/shoes/ruby/lib/i386-mingw32/enc/trans/japanese_sjis.so +0 -0
  95. data/shoes/ruby/lib/i386-mingw32/enc/trans/korean.so +0 -0
  96. data/shoes/ruby/lib/i386-mingw32/enc/trans/single_byte.so +0 -0
  97. data/shoes/ruby/lib/i386-mingw32/enc/trans/transdb.so +0 -0
  98. data/shoes/ruby/lib/i386-mingw32/enc/trans/utf_16_32.so +0 -0
  99. data/shoes/ruby/lib/i386-mingw32/enc/utf_16be.so +0 -0
  100. data/shoes/ruby/lib/i386-mingw32/enc/utf_16le.so +0 -0
  101. data/shoes/ruby/lib/i386-mingw32/enc/utf_32be.so +0 -0
  102. data/shoes/ruby/lib/i386-mingw32/enc/utf_32le.so +0 -0
  103. data/shoes/ruby/lib/i386-mingw32/enc/windows_1251.so +0 -0
  104. data/shoes/ruby/lib/i386-mingw32/etc.so +0 -0
  105. data/shoes/ruby/lib/i386-mingw32/fcntl.so +0 -0
  106. data/shoes/ruby/lib/i386-mingw32/fiber.so +0 -0
  107. data/shoes/ruby/lib/i386-mingw32/ftsearchrt.so +0 -0
  108. data/shoes/ruby/lib/i386-mingw32/gdbm.so +0 -0
  109. data/shoes/ruby/lib/i386-mingw32/iconv.so +0 -0
  110. data/shoes/ruby/lib/i386-mingw32/io/wait.so +0 -0
  111. data/shoes/ruby/lib/i386-mingw32/json/ext/generator.so +0 -0
  112. data/shoes/ruby/lib/i386-mingw32/json/ext/parser.so +0 -0
  113. data/shoes/ruby/lib/i386-mingw32/mathn/complex.so +0 -0
  114. data/shoes/ruby/lib/i386-mingw32/mathn/rational.so +0 -0
  115. data/shoes/ruby/lib/i386-mingw32/nkf.so +0 -0
  116. data/shoes/ruby/lib/i386-mingw32/openssl.so +0 -0
  117. data/shoes/ruby/lib/i386-mingw32/racc/cparse.so +0 -0
  118. data/shoes/ruby/lib/i386-mingw32/readline.so +0 -0
  119. data/shoes/ruby/lib/i386-mingw32/ripper.so +0 -0
  120. data/shoes/ruby/lib/i386-mingw32/sdbm.so +0 -0
  121. data/shoes/ruby/lib/i386-mingw32/socket.so +0 -0
  122. data/shoes/ruby/lib/i386-mingw32/stringio.so +0 -0
  123. data/shoes/ruby/lib/i386-mingw32/strscan.so +0 -0
  124. data/shoes/ruby/lib/i386-mingw32/syck.so +0 -0
  125. data/shoes/ruby/lib/i386-mingw32/win32ole.so +0 -0
  126. data/shoes/ruby/lib/i386-mingw32/zlib.so +0 -0
  127. data/shoes/ruby/lib/rbconfig/datadir.rb +24 -24
  128. data/shoes/ruby/lib/rubygems/builder.rb +88 -88
  129. data/shoes/ruby/lib/rubygems/command.rb +406 -406
  130. data/shoes/ruby/lib/rubygems/command_manager.rb +146 -146
  131. data/shoes/ruby/lib/rubygems/commands/build_command.rb +53 -53
  132. data/shoes/ruby/lib/rubygems/commands/cert_command.rb +86 -86
  133. data/shoes/ruby/lib/rubygems/commands/check_command.rb +75 -75
  134. data/shoes/ruby/lib/rubygems/commands/cleanup_command.rb +91 -91
  135. data/shoes/ruby/lib/rubygems/commands/contents_command.rb +74 -74
  136. data/shoes/ruby/lib/rubygems/commands/dependency_command.rb +188 -188
  137. data/shoes/ruby/lib/rubygems/commands/environment_command.rb +128 -128
  138. data/shoes/ruby/lib/rubygems/commands/fetch_command.rb +62 -62
  139. data/shoes/ruby/lib/rubygems/commands/generate_index_command.rb +57 -57
  140. data/shoes/ruby/lib/rubygems/commands/help_command.rb +172 -172
  141. data/shoes/ruby/lib/rubygems/commands/install_command.rb +148 -148
  142. data/shoes/ruby/lib/rubygems/commands/list_command.rb +35 -35
  143. data/shoes/ruby/lib/rubygems/commands/lock_command.rb +110 -110
  144. data/shoes/ruby/lib/rubygems/commands/mirror_command.rb +111 -111
  145. data/shoes/ruby/lib/rubygems/commands/outdated_command.rb +33 -33
  146. data/shoes/ruby/lib/rubygems/commands/pristine_command.rb +93 -93
  147. data/shoes/ruby/lib/rubygems/commands/query_command.rb +233 -233
  148. data/shoes/ruby/lib/rubygems/commands/rdoc_command.rb +82 -82
  149. data/shoes/ruby/lib/rubygems/commands/search_command.rb +37 -37
  150. data/shoes/ruby/lib/rubygems/commands/server_command.rb +48 -48
  151. data/shoes/ruby/lib/rubygems/commands/sources_command.rb +152 -152
  152. data/shoes/ruby/lib/rubygems/commands/specification_command.rb +77 -77
  153. data/shoes/ruby/lib/rubygems/commands/stale_command.rb +27 -27
  154. data/shoes/ruby/lib/rubygems/commands/uninstall_command.rb +73 -73
  155. data/shoes/ruby/lib/rubygems/commands/unpack_command.rb +95 -95
  156. data/shoes/ruby/lib/rubygems/commands/update_command.rb +181 -181
  157. data/shoes/ruby/lib/rubygems/commands/which_command.rb +87 -87
  158. data/shoes/ruby/lib/rubygems/config_file.rb +266 -266
  159. data/shoes/ruby/lib/rubygems/custom_require.rb +46 -46
  160. data/shoes/ruby/lib/rubygems/defaults.rb +88 -89
  161. data/shoes/ruby/lib/rubygems/dependency.rb +119 -119
  162. data/shoes/ruby/lib/rubygems/dependency_installer.rb +258 -258
  163. data/shoes/ruby/lib/rubygems/dependency_list.rb +165 -165
  164. data/shoes/ruby/lib/rubygems/digest/digest_adapter.rb +39 -39
  165. data/shoes/ruby/lib/rubygems/digest/md5.rb +23 -23
  166. data/shoes/ruby/lib/rubygems/digest/sha1.rb +16 -16
  167. data/shoes/ruby/lib/rubygems/digest/sha2.rb +17 -17
  168. data/shoes/ruby/lib/rubygems/doc_manager.rb +214 -214
  169. data/shoes/ruby/lib/rubygems/exceptions.rb +84 -84
  170. data/shoes/ruby/lib/rubygems/ext/builder.rb +56 -56
  171. data/shoes/ruby/lib/rubygems/ext/configure_builder.rb +24 -24
  172. data/shoes/ruby/lib/rubygems/ext/ext_conf_builder.rb +23 -23
  173. data/shoes/ruby/lib/rubygems/ext/rake_builder.rb +27 -27
  174. data/shoes/ruby/lib/rubygems/ext.rb +18 -18
  175. data/shoes/ruby/lib/rubygems/format.rb +87 -87
  176. data/shoes/ruby/lib/rubygems/gem_openssl.rb +83 -83
  177. data/shoes/ruby/lib/rubygems/gem_path_searcher.rb +100 -100
  178. data/shoes/ruby/lib/rubygems/gem_runner.rb +58 -58
  179. data/shoes/ruby/lib/rubygems/indexer.rb +370 -370
  180. data/shoes/ruby/lib/rubygems/install_update_options.rb +113 -113
  181. data/shoes/ruby/lib/rubygems/installer.rb +575 -578
  182. data/shoes/ruby/lib/rubygems/local_remote_options.rb +134 -134
  183. data/shoes/ruby/lib/rubygems/old_format.rb +148 -148
  184. data/shoes/ruby/lib/rubygems/package/f_sync_dir.rb +24 -24
  185. data/shoes/ruby/lib/rubygems/package/tar_header.rb +245 -245
  186. data/shoes/ruby/lib/rubygems/package/tar_input.rb +219 -219
  187. data/shoes/ruby/lib/rubygems/package/tar_output.rb +143 -143
  188. data/shoes/ruby/lib/rubygems/package/tar_reader/entry.rb +99 -99
  189. data/shoes/ruby/lib/rubygems/package/tar_reader.rb +86 -86
  190. data/shoes/ruby/lib/rubygems/package/tar_writer.rb +180 -180
  191. data/shoes/ruby/lib/rubygems/package.rb +95 -95
  192. data/shoes/ruby/lib/rubygems/platform.rb +178 -178
  193. data/shoes/ruby/lib/rubygems/remote_fetcher.rb +344 -344
  194. data/shoes/ruby/lib/rubygems/require_paths_builder.rb +14 -14
  195. data/shoes/ruby/lib/rubygems/requirement.rb +163 -163
  196. data/shoes/ruby/lib/rubygems/rubygems_version.rb +6 -6
  197. data/shoes/ruby/lib/rubygems/security.rb +786 -786
  198. data/shoes/ruby/lib/rubygems/server.rb +629 -629
  199. data/shoes/ruby/lib/rubygems/source_index.rb +559 -559
  200. data/shoes/ruby/lib/rubygems/source_info_cache.rb +393 -393
  201. data/shoes/ruby/lib/rubygems/source_info_cache_entry.rb +56 -56
  202. data/shoes/ruby/lib/rubygems/spec_fetcher.rb +249 -249
  203. data/shoes/ruby/lib/rubygems/specification.rb +1264 -1262
  204. data/shoes/ruby/lib/rubygems/test_utilities.rb +131 -131
  205. data/shoes/ruby/lib/rubygems/timer.rb +25 -25
  206. data/shoes/ruby/lib/rubygems/uninstaller.rb +242 -242
  207. data/shoes/ruby/lib/rubygems/user_interaction.rb +360 -360
  208. data/shoes/ruby/lib/rubygems/validator.rb +209 -208
  209. data/shoes/ruby/lib/rubygems/version.rb +167 -167
  210. data/shoes/ruby/lib/rubygems/version_option.rb +48 -48
  211. data/shoes/ruby/lib/rubygems.rb +889 -888
  212. data/shoes/ruby/lib/ubygems.rb +10 -10
  213. data/shoes/samples/simple-sqlite3.rb +13 -0
  214. data/shoes/shoes.exe +0 -0
  215. data/shoes/sqlite3.dll +0 -0
  216. data/shoes/static/manual-en.txt +1 -1
  217. data/shoes/zlib.dll +0 -0
  218. data/shoes/zlib1.dll +0 -0
  219. metadata +17 -19
  220. data/shoes/ruby/gems/1.9.1/gems/sqlite3-ruby-1.2.5-x86-mswin32/lib/sqlite3/driver/dl/api.rb +0 -152
  221. data/shoes/ruby/gems/1.9.1/gems/sqlite3-ruby-1.2.5-x86-mswin32/lib/sqlite3/driver/dl/driver.rb +0 -307
  222. data/shoes/ruby/gems/1.9.1/gems/sqlite3-ruby-1.2.5-x86-mswin32/lib/sqlite3/driver/native/driver.rb +0 -219
  223. data/shoes/ruby/gems/1.9.1/gems/sqlite3-ruby-1.2.5-x86-mswin32/lib/sqlite3.rb +0 -1
  224. data/shoes/ruby/gems/1.9.1/gems/sqlite3-ruby-1.2.5-x86-mswin32/lib/sqlite3_api.so +0 -0
  225. data/shoes/ruby/gems/1.9.1/specifications/sqlite3-ruby-1.2.5-x86-mswin32.gemspec +0 -46
@@ -1,393 +1,393 @@
1
- require 'fileutils'
2
-
3
- require 'rubygems'
4
- require 'rubygems/source_info_cache_entry'
5
- require 'rubygems/user_interaction'
6
-
7
- ##
8
- # SourceInfoCache stores a copy of the gem index for each gem source.
9
- #
10
- # There are two possible cache locations, the system cache and the user cache:
11
- # * The system cache is preferred if it is writable or can be created.
12
- # * The user cache is used otherwise
13
- #
14
- # Once a cache is selected, it will be used for all operations.
15
- # SourceInfoCache will not switch between cache files dynamically.
16
- #
17
- # Cache data is a Hash mapping a source URI to a SourceInfoCacheEntry.
18
- #
19
- #--
20
- # To keep things straight, this is how the cache objects all fit together:
21
- #
22
- # Gem::SourceInfoCache
23
- # @cache_data = {
24
- # source_uri => Gem::SourceInfoCacheEntry
25
- # @size = source index size
26
- # @source_index = Gem::SourceIndex
27
- # ...
28
- # }
29
-
30
- class Gem::SourceInfoCache
31
-
32
- include Gem::UserInteraction
33
-
34
- ##
35
- # The singleton Gem::SourceInfoCache. If +all+ is true, a full refresh will
36
- # be performed if the singleton instance is being initialized.
37
-
38
- def self.cache(all = false)
39
- return @cache if @cache
40
- @cache = new
41
- @cache.refresh all if Gem.configuration.update_sources
42
- @cache
43
- end
44
-
45
- def self.cache_data
46
- cache.cache_data
47
- end
48
-
49
- ##
50
- # The name of the system cache file.
51
-
52
- def self.latest_system_cache_file
53
- File.join File.dirname(system_cache_file),
54
- "latest_#{File.basename system_cache_file}"
55
- end
56
-
57
- ##
58
- # The name of the latest user cache file.
59
-
60
- def self.latest_user_cache_file
61
- File.join File.dirname(user_cache_file),
62
- "latest_#{File.basename user_cache_file}"
63
- end
64
-
65
- ##
66
- # Reset all singletons, discarding any changes.
67
-
68
- def self.reset
69
- @cache = nil
70
- @system_cache_file = nil
71
- @user_cache_file = nil
72
- end
73
-
74
- ##
75
- # Search all source indexes. See Gem::SourceInfoCache#search.
76
-
77
- def self.search(*args)
78
- cache.search(*args)
79
- end
80
-
81
- ##
82
- # Search all source indexes returning the source_uri. See
83
- # Gem::SourceInfoCache#search_with_source.
84
-
85
- def self.search_with_source(*args)
86
- cache.search_with_source(*args)
87
- end
88
-
89
- ##
90
- # The name of the system cache file. (class method)
91
-
92
- def self.system_cache_file
93
- @system_cache_file ||= Gem.default_system_source_cache_dir
94
- end
95
-
96
- ##
97
- # The name of the user cache file.
98
-
99
- def self.user_cache_file
100
- @user_cache_file ||=
101
- ENV['GEMCACHE'] || Gem.default_user_source_cache_dir
102
- end
103
-
104
- def initialize # :nodoc:
105
- @cache_data = nil
106
- @cache_file = nil
107
- @dirty = false
108
- @only_latest = true
109
- end
110
-
111
- ##
112
- # The most recent cache data.
113
-
114
- def cache_data
115
- return @cache_data if @cache_data
116
- cache_file # HACK writable check
117
-
118
- @only_latest = true
119
-
120
- @cache_data = read_cache_data latest_cache_file
121
-
122
- @cache_data
123
- end
124
-
125
- ##
126
- # The name of the cache file.
127
-
128
- def cache_file
129
- return @cache_file if @cache_file
130
- @cache_file = (try_file(system_cache_file) or
131
- try_file(user_cache_file) or
132
- raise "unable to locate a writable cache file")
133
- end
134
-
135
- ##
136
- # Write the cache to a local file (if it is dirty).
137
-
138
- def flush
139
- write_cache if @dirty
140
- @dirty = false
141
- end
142
-
143
- def latest_cache_data
144
- latest_cache_data = {}
145
-
146
- cache_data.each do |repo, sice|
147
- latest = sice.source_index.latest_specs
148
-
149
- new_si = Gem::SourceIndex.new
150
- new_si.add_specs(*latest)
151
-
152
- latest_sice = Gem::SourceInfoCacheEntry.new new_si, sice.size
153
- latest_cache_data[repo] = latest_sice
154
- end
155
-
156
- latest_cache_data
157
- end
158
-
159
- ##
160
- # The name of the latest cache file.
161
-
162
- def latest_cache_file
163
- File.join File.dirname(cache_file), "latest_#{File.basename cache_file}"
164
- end
165
-
166
- ##
167
- # The name of the latest system cache file.
168
-
169
- def latest_system_cache_file
170
- self.class.latest_system_cache_file
171
- end
172
-
173
- ##
174
- # The name of the latest user cache file.
175
-
176
- def latest_user_cache_file
177
- self.class.latest_user_cache_file
178
- end
179
-
180
- ##
181
- # Merges the complete cache file into this Gem::SourceInfoCache.
182
-
183
- def read_all_cache_data
184
- if @only_latest then
185
- @only_latest = false
186
- all_data = read_cache_data cache_file
187
-
188
- cache_data.update all_data do |source_uri, latest_sice, all_sice|
189
- all_sice.source_index.gems.update latest_sice.source_index.gems
190
-
191
- Gem::SourceInfoCacheEntry.new all_sice.source_index, latest_sice.size
192
- end
193
-
194
- begin
195
- refresh true
196
- rescue Gem::RemoteFetcher::FetchError
197
- end
198
- end
199
- end
200
-
201
- ##
202
- # Reads cached data from +file+.
203
-
204
- def read_cache_data(file)
205
- # Marshal loads 30-40% faster from a String, and 2MB on 20061116 is small
206
- data = open file, 'rb' do |fp| fp.read end
207
- cache_data = Marshal.load data
208
-
209
- cache_data.each do |url, sice|
210
- next unless sice.is_a?(Hash)
211
- update
212
-
213
- cache = sice['cache']
214
- size = sice['size']
215
-
216
- if cache.is_a?(Gem::SourceIndex) and size.is_a?(Numeric) then
217
- new_sice = Gem::SourceInfoCacheEntry.new cache, size
218
- cache_data[url] = new_sice
219
- else # irreperable, force refetch.
220
- reset_cache_for url, cache_data
221
- end
222
- end
223
-
224
- cache_data
225
- rescue Errno::ENOENT
226
- {}
227
- rescue => e
228
- if Gem.configuration.really_verbose then
229
- say "Exception during cache_data handling: #{e.class} - #{e}"
230
- say "Cache file was: #{file}"
231
- say "\t#{e.backtrace.join "\n\t"}"
232
- end
233
-
234
- {}
235
- end
236
-
237
- ##
238
- # Refreshes each source in the cache from its repository. If +all+ is
239
- # false, only latest gems are updated.
240
-
241
- def refresh(all)
242
- Gem.sources.each do |source_uri|
243
- cache_entry = cache_data[source_uri]
244
- if cache_entry.nil? then
245
- cache_entry = Gem::SourceInfoCacheEntry.new nil, 0
246
- cache_data[source_uri] = cache_entry
247
- end
248
-
249
- update if cache_entry.refresh source_uri, all
250
- end
251
-
252
- flush
253
- end
254
-
255
- def reset_cache_for(url, cache_data)
256
- say "Reseting cache for #{url}" if Gem.configuration.really_verbose
257
-
258
- sice = Gem::SourceInfoCacheEntry.new Gem::SourceIndex.new, 0
259
- sice.refresh url, false # HACK may be unnecessary, see ::cache and #refresh
260
-
261
- cache_data[url] = sice
262
- cache_data
263
- end
264
-
265
- def reset_cache_data
266
- @cache_data = nil
267
- @only_latest = true
268
- end
269
-
270
- ##
271
- # Force cache file to be reset, useful for integration testing of rubygems
272
-
273
- def reset_cache_file
274
- @cache_file = nil
275
- end
276
-
277
- ##
278
- # Searches all source indexes. See Gem::SourceIndex#search for details on
279
- # +pattern+ and +platform_only+. If +all+ is set to true, the full index
280
- # will be loaded before searching.
281
-
282
- def search(pattern, platform_only = false, all = false)
283
- read_all_cache_data if all
284
-
285
- cache_data.map do |source_uri, sic_entry|
286
- next unless Gem.sources.include? source_uri
287
- # TODO - Remove this gunk after 2008/11
288
- unless pattern.kind_of?(Gem::Dependency)
289
- pattern = Gem::Dependency.new(pattern, Gem::Requirement.default)
290
- end
291
- sic_entry.source_index.search pattern, platform_only
292
- end.flatten.compact
293
- end
294
-
295
- # Searches all source indexes for +pattern+. If +only_platform+ is true,
296
- # only gems matching Gem.platforms will be selected. Returns an Array of
297
- # pairs containing the Gem::Specification found and the source_uri it was
298
- # found at.
299
- def search_with_source(pattern, only_platform = false, all = false)
300
- read_all_cache_data if all
301
-
302
- results = []
303
-
304
- cache_data.map do |source_uri, sic_entry|
305
- next unless Gem.sources.include? source_uri
306
-
307
- # TODO - Remove this gunk after 2008/11
308
- unless pattern.kind_of?(Gem::Dependency)
309
- pattern = Gem::Dependency.new(pattern, Gem::Requirement.default)
310
- end
311
-
312
- sic_entry.source_index.search(pattern, only_platform).each do |spec|
313
- results << [spec, source_uri]
314
- end
315
- end
316
-
317
- results
318
- end
319
-
320
- ##
321
- # Set the source info cache data directly. This is mainly used for unit
322
- # testing when we don't want to read a file system to grab the cached source
323
- # index information. The +hash+ should map a source URL into a
324
- # SourceInfoCacheEntry.
325
-
326
- def set_cache_data(hash)
327
- @cache_data = hash
328
- update
329
- end
330
-
331
- ##
332
- # The name of the system cache file.
333
-
334
- def system_cache_file
335
- self.class.system_cache_file
336
- end
337
-
338
- ##
339
- # Determine if +path+ is a candidate for a cache file. Returns +path+ if
340
- # it is, nil if not.
341
-
342
- def try_file(path)
343
- return path if File.writable? path
344
- return nil if File.exist? path
345
-
346
- dir = File.dirname path
347
-
348
- unless File.exist? dir then
349
- begin
350
- FileUtils.mkdir_p dir
351
- rescue RuntimeError, SystemCallError
352
- return nil
353
- end
354
- end
355
-
356
- return path if File.writable? dir
357
-
358
- nil
359
- end
360
-
361
- ##
362
- # Mark the cache as updated (i.e. dirty).
363
-
364
- def update
365
- @dirty = true
366
- end
367
-
368
- ##
369
- # The name of the user cache file.
370
-
371
- def user_cache_file
372
- self.class.user_cache_file
373
- end
374
-
375
- ##
376
- # Write data to the proper cache files.
377
-
378
- def write_cache
379
- if not File.exist?(cache_file) or not @only_latest then
380
- open cache_file, 'wb' do |io|
381
- io.write Marshal.dump(cache_data)
382
- end
383
- end
384
-
385
- open latest_cache_file, 'wb' do |io|
386
- io.write Marshal.dump(latest_cache_data)
387
- end
388
- end
389
-
390
- reset
391
-
392
- end
393
-
1
+ require 'fileutils'
2
+
3
+ require 'rubygems'
4
+ require 'rubygems/source_info_cache_entry'
5
+ require 'rubygems/user_interaction'
6
+
7
+ ##
8
+ # SourceInfoCache stores a copy of the gem index for each gem source.
9
+ #
10
+ # There are two possible cache locations, the system cache and the user cache:
11
+ # * The system cache is preferred if it is writable or can be created.
12
+ # * The user cache is used otherwise
13
+ #
14
+ # Once a cache is selected, it will be used for all operations.
15
+ # SourceInfoCache will not switch between cache files dynamically.
16
+ #
17
+ # Cache data is a Hash mapping a source URI to a SourceInfoCacheEntry.
18
+ #
19
+ #--
20
+ # To keep things straight, this is how the cache objects all fit together:
21
+ #
22
+ # Gem::SourceInfoCache
23
+ # @cache_data = {
24
+ # source_uri => Gem::SourceInfoCacheEntry
25
+ # @size = source index size
26
+ # @source_index = Gem::SourceIndex
27
+ # ...
28
+ # }
29
+
30
+ class Gem::SourceInfoCache
31
+
32
+ include Gem::UserInteraction
33
+
34
+ ##
35
+ # The singleton Gem::SourceInfoCache. If +all+ is true, a full refresh will
36
+ # be performed if the singleton instance is being initialized.
37
+
38
+ def self.cache(all = false)
39
+ return @cache if @cache
40
+ @cache = new
41
+ @cache.refresh all if Gem.configuration.update_sources
42
+ @cache
43
+ end
44
+
45
+ def self.cache_data
46
+ cache.cache_data
47
+ end
48
+
49
+ ##
50
+ # The name of the system cache file.
51
+
52
+ def self.latest_system_cache_file
53
+ File.join File.dirname(system_cache_file),
54
+ "latest_#{File.basename system_cache_file}"
55
+ end
56
+
57
+ ##
58
+ # The name of the latest user cache file.
59
+
60
+ def self.latest_user_cache_file
61
+ File.join File.dirname(user_cache_file),
62
+ "latest_#{File.basename user_cache_file}"
63
+ end
64
+
65
+ ##
66
+ # Reset all singletons, discarding any changes.
67
+
68
+ def self.reset
69
+ @cache = nil
70
+ @system_cache_file = nil
71
+ @user_cache_file = nil
72
+ end
73
+
74
+ ##
75
+ # Search all source indexes. See Gem::SourceInfoCache#search.
76
+
77
+ def self.search(*args)
78
+ cache.search(*args)
79
+ end
80
+
81
+ ##
82
+ # Search all source indexes returning the source_uri. See
83
+ # Gem::SourceInfoCache#search_with_source.
84
+
85
+ def self.search_with_source(*args)
86
+ cache.search_with_source(*args)
87
+ end
88
+
89
+ ##
90
+ # The name of the system cache file. (class method)
91
+
92
+ def self.system_cache_file
93
+ @system_cache_file ||= Gem.default_system_source_cache_dir
94
+ end
95
+
96
+ ##
97
+ # The name of the user cache file.
98
+
99
+ def self.user_cache_file
100
+ @user_cache_file ||=
101
+ ENV['GEMCACHE'] || Gem.default_user_source_cache_dir
102
+ end
103
+
104
+ def initialize # :nodoc:
105
+ @cache_data = nil
106
+ @cache_file = nil
107
+ @dirty = false
108
+ @only_latest = true
109
+ end
110
+
111
+ ##
112
+ # The most recent cache data.
113
+
114
+ def cache_data
115
+ return @cache_data if @cache_data
116
+ cache_file # HACK writable check
117
+
118
+ @only_latest = true
119
+
120
+ @cache_data = read_cache_data latest_cache_file
121
+
122
+ @cache_data
123
+ end
124
+
125
+ ##
126
+ # The name of the cache file.
127
+
128
+ def cache_file
129
+ return @cache_file if @cache_file
130
+ @cache_file = (try_file(system_cache_file) or
131
+ try_file(user_cache_file) or
132
+ raise "unable to locate a writable cache file")
133
+ end
134
+
135
+ ##
136
+ # Write the cache to a local file (if it is dirty).
137
+
138
+ def flush
139
+ write_cache if @dirty
140
+ @dirty = false
141
+ end
142
+
143
+ def latest_cache_data
144
+ latest_cache_data = {}
145
+
146
+ cache_data.each do |repo, sice|
147
+ latest = sice.source_index.latest_specs
148
+
149
+ new_si = Gem::SourceIndex.new
150
+ new_si.add_specs(*latest)
151
+
152
+ latest_sice = Gem::SourceInfoCacheEntry.new new_si, sice.size
153
+ latest_cache_data[repo] = latest_sice
154
+ end
155
+
156
+ latest_cache_data
157
+ end
158
+
159
+ ##
160
+ # The name of the latest cache file.
161
+
162
+ def latest_cache_file
163
+ File.join File.dirname(cache_file), "latest_#{File.basename cache_file}"
164
+ end
165
+
166
+ ##
167
+ # The name of the latest system cache file.
168
+
169
+ def latest_system_cache_file
170
+ self.class.latest_system_cache_file
171
+ end
172
+
173
+ ##
174
+ # The name of the latest user cache file.
175
+
176
+ def latest_user_cache_file
177
+ self.class.latest_user_cache_file
178
+ end
179
+
180
+ ##
181
+ # Merges the complete cache file into this Gem::SourceInfoCache.
182
+
183
+ def read_all_cache_data
184
+ if @only_latest then
185
+ @only_latest = false
186
+ all_data = read_cache_data cache_file
187
+
188
+ cache_data.update all_data do |source_uri, latest_sice, all_sice|
189
+ all_sice.source_index.gems.update latest_sice.source_index.gems
190
+
191
+ Gem::SourceInfoCacheEntry.new all_sice.source_index, latest_sice.size
192
+ end
193
+
194
+ begin
195
+ refresh true
196
+ rescue Gem::RemoteFetcher::FetchError
197
+ end
198
+ end
199
+ end
200
+
201
+ ##
202
+ # Reads cached data from +file+.
203
+
204
+ def read_cache_data(file)
205
+ # Marshal loads 30-40% faster from a String, and 2MB on 20061116 is small
206
+ data = open file, 'rb' do |fp| fp.read end
207
+ cache_data = Marshal.load data
208
+
209
+ cache_data.each do |url, sice|
210
+ next unless sice.is_a?(Hash)
211
+ update
212
+
213
+ cache = sice['cache']
214
+ size = sice['size']
215
+
216
+ if cache.is_a?(Gem::SourceIndex) and size.is_a?(Numeric) then
217
+ new_sice = Gem::SourceInfoCacheEntry.new cache, size
218
+ cache_data[url] = new_sice
219
+ else # irreperable, force refetch.
220
+ reset_cache_for url, cache_data
221
+ end
222
+ end
223
+
224
+ cache_data
225
+ rescue Errno::ENOENT
226
+ {}
227
+ rescue => e
228
+ if Gem.configuration.really_verbose then
229
+ say "Exception during cache_data handling: #{e.class} - #{e}"
230
+ say "Cache file was: #{file}"
231
+ say "\t#{e.backtrace.join "\n\t"}"
232
+ end
233
+
234
+ {}
235
+ end
236
+
237
+ ##
238
+ # Refreshes each source in the cache from its repository. If +all+ is
239
+ # false, only latest gems are updated.
240
+
241
+ def refresh(all)
242
+ Gem.sources.each do |source_uri|
243
+ cache_entry = cache_data[source_uri]
244
+ if cache_entry.nil? then
245
+ cache_entry = Gem::SourceInfoCacheEntry.new nil, 0
246
+ cache_data[source_uri] = cache_entry
247
+ end
248
+
249
+ update if cache_entry.refresh source_uri, all
250
+ end
251
+
252
+ flush
253
+ end
254
+
255
+ def reset_cache_for(url, cache_data)
256
+ say "Reseting cache for #{url}" if Gem.configuration.really_verbose
257
+
258
+ sice = Gem::SourceInfoCacheEntry.new Gem::SourceIndex.new, 0
259
+ sice.refresh url, false # HACK may be unnecessary, see ::cache and #refresh
260
+
261
+ cache_data[url] = sice
262
+ cache_data
263
+ end
264
+
265
+ def reset_cache_data
266
+ @cache_data = nil
267
+ @only_latest = true
268
+ end
269
+
270
+ ##
271
+ # Force cache file to be reset, useful for integration testing of rubygems
272
+
273
+ def reset_cache_file
274
+ @cache_file = nil
275
+ end
276
+
277
+ ##
278
+ # Searches all source indexes. See Gem::SourceIndex#search for details on
279
+ # +pattern+ and +platform_only+. If +all+ is set to true, the full index
280
+ # will be loaded before searching.
281
+
282
+ def search(pattern, platform_only = false, all = false)
283
+ read_all_cache_data if all
284
+
285
+ cache_data.map do |source_uri, sic_entry|
286
+ next unless Gem.sources.include? source_uri
287
+ # TODO - Remove this gunk after 2008/11
288
+ unless pattern.kind_of?(Gem::Dependency)
289
+ pattern = Gem::Dependency.new(pattern, Gem::Requirement.default)
290
+ end
291
+ sic_entry.source_index.search pattern, platform_only
292
+ end.flatten.compact
293
+ end
294
+
295
+ # Searches all source indexes for +pattern+. If +only_platform+ is true,
296
+ # only gems matching Gem.platforms will be selected. Returns an Array of
297
+ # pairs containing the Gem::Specification found and the source_uri it was
298
+ # found at.
299
+ def search_with_source(pattern, only_platform = false, all = false)
300
+ read_all_cache_data if all
301
+
302
+ results = []
303
+
304
+ cache_data.map do |source_uri, sic_entry|
305
+ next unless Gem.sources.include? source_uri
306
+
307
+ # TODO - Remove this gunk after 2008/11
308
+ unless pattern.kind_of?(Gem::Dependency)
309
+ pattern = Gem::Dependency.new(pattern, Gem::Requirement.default)
310
+ end
311
+
312
+ sic_entry.source_index.search(pattern, only_platform).each do |spec|
313
+ results << [spec, source_uri]
314
+ end
315
+ end
316
+
317
+ results
318
+ end
319
+
320
+ ##
321
+ # Set the source info cache data directly. This is mainly used for unit
322
+ # testing when we don't want to read a file system to grab the cached source
323
+ # index information. The +hash+ should map a source URL into a
324
+ # SourceInfoCacheEntry.
325
+
326
+ def set_cache_data(hash)
327
+ @cache_data = hash
328
+ update
329
+ end
330
+
331
+ ##
332
+ # The name of the system cache file.
333
+
334
+ def system_cache_file
335
+ self.class.system_cache_file
336
+ end
337
+
338
+ ##
339
+ # Determine if +path+ is a candidate for a cache file. Returns +path+ if
340
+ # it is, nil if not.
341
+
342
+ def try_file(path)
343
+ return path if File.writable? path
344
+ return nil if File.exist? path
345
+
346
+ dir = File.dirname path
347
+
348
+ unless File.exist? dir then
349
+ begin
350
+ FileUtils.mkdir_p dir
351
+ rescue RuntimeError, SystemCallError
352
+ return nil
353
+ end
354
+ end
355
+
356
+ return path if File.writable? dir
357
+
358
+ nil
359
+ end
360
+
361
+ ##
362
+ # Mark the cache as updated (i.e. dirty).
363
+
364
+ def update
365
+ @dirty = true
366
+ end
367
+
368
+ ##
369
+ # The name of the user cache file.
370
+
371
+ def user_cache_file
372
+ self.class.user_cache_file
373
+ end
374
+
375
+ ##
376
+ # Write data to the proper cache files.
377
+
378
+ def write_cache
379
+ if not File.exist?(cache_file) or not @only_latest then
380
+ open cache_file, 'wb' do |io|
381
+ io.write Marshal.dump(cache_data)
382
+ end
383
+ end
384
+
385
+ open latest_cache_file, 'wb' do |io|
386
+ io.write Marshal.dump(latest_cache_data)
387
+ end
388
+ end
389
+
390
+ reset
391
+
392
+ end
393
+