rubygems-update 3.7.1 → 4.0.0.beta1

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 (219) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +1434 -1317
  3. data/CODE_OF_CONDUCT.md +7 -129
  4. data/Manifest.txt +5 -11
  5. data/README.md +2 -2
  6. data/bundler/CHANGELOG.md +1001 -902
  7. data/bundler/README.md +4 -4
  8. data/bundler/bundler.gemspec +3 -3
  9. data/bundler/lib/bundler/build_metadata.rb +2 -2
  10. data/bundler/lib/bundler/capistrano.rb +1 -19
  11. data/bundler/lib/bundler/checksum.rb +6 -0
  12. data/bundler/lib/bundler/cli/cache.rb +1 -12
  13. data/bundler/lib/bundler/cli/common.rb +21 -4
  14. data/bundler/lib/bundler/cli/config.rb +1 -2
  15. data/bundler/lib/bundler/cli/console.rb +5 -0
  16. data/bundler/lib/bundler/cli/exec.rb +29 -4
  17. data/bundler/lib/bundler/cli/gem.rb +19 -33
  18. data/bundler/lib/bundler/cli/install.rb +7 -84
  19. data/bundler/lib/bundler/cli/issue.rb +2 -2
  20. data/bundler/lib/bundler/cli/list.rb +33 -2
  21. data/bundler/lib/bundler/cli/lock.rb +5 -5
  22. data/bundler/lib/bundler/cli/plugin.rb +5 -1
  23. data/bundler/lib/bundler/cli/show.rb +3 -7
  24. data/bundler/lib/bundler/cli/update.rb +3 -3
  25. data/bundler/lib/bundler/cli.rb +97 -95
  26. data/bundler/lib/bundler/compact_index_client.rb +0 -1
  27. data/bundler/lib/bundler/current_ruby.rb +3 -15
  28. data/bundler/lib/bundler/definition.rb +122 -95
  29. data/bundler/lib/bundler/deployment.rb +1 -64
  30. data/bundler/lib/bundler/digest.rb +1 -1
  31. data/bundler/lib/bundler/dsl.rb +14 -36
  32. data/bundler/lib/bundler/endpoint_specification.rb +0 -22
  33. data/bundler/lib/bundler/errors.rb +1 -5
  34. data/bundler/lib/bundler/feature_flag.rb +0 -33
  35. data/bundler/lib/bundler/fetcher/compact_index.rb +1 -1
  36. data/bundler/lib/bundler/friendly_errors.rb +2 -2
  37. data/bundler/lib/bundler/index.rb +0 -7
  38. data/bundler/lib/bundler/inline.rb +1 -1
  39. data/bundler/lib/bundler/installer/gem_installer.rb +0 -11
  40. data/bundler/lib/bundler/installer.rb +0 -6
  41. data/bundler/lib/bundler/lockfile_generator.rb +1 -1
  42. data/bundler/lib/bundler/lockfile_parser.rb +2 -12
  43. data/bundler/lib/bundler/man/bundle-add.1 +1 -1
  44. data/bundler/lib/bundler/man/bundle-binstubs.1 +3 -6
  45. data/bundler/lib/bundler/man/bundle-binstubs.1.ronn +4 -6
  46. data/bundler/lib/bundler/man/bundle-cache.1 +2 -14
  47. data/bundler/lib/bundler/man/bundle-cache.1.ronn +1 -14
  48. data/bundler/lib/bundler/man/bundle-check.1 +2 -5
  49. data/bundler/lib/bundler/man/bundle-check.1.ronn +0 -5
  50. data/bundler/lib/bundler/man/bundle-clean.1 +1 -1
  51. data/bundler/lib/bundler/man/bundle-config.1 +36 -46
  52. data/bundler/lib/bundler/man/bundle-config.1.ronn +69 -75
  53. data/bundler/lib/bundler/man/bundle-console.1 +1 -1
  54. data/bundler/lib/bundler/man/bundle-doctor.1 +4 -4
  55. data/bundler/lib/bundler/man/bundle-doctor.1.ronn +4 -4
  56. data/bundler/lib/bundler/man/bundle-env.1 +1 -1
  57. data/bundler/lib/bundler/man/bundle-exec.1 +2 -5
  58. data/bundler/lib/bundler/man/bundle-exec.1.ronn +1 -5
  59. data/bundler/lib/bundler/man/bundle-fund.1 +1 -1
  60. data/bundler/lib/bundler/man/bundle-gem.1 +3 -6
  61. data/bundler/lib/bundler/man/bundle-gem.1.ronn +2 -5
  62. data/bundler/lib/bundler/man/bundle-help.1 +1 -1
  63. data/bundler/lib/bundler/man/bundle-info.1 +1 -1
  64. data/bundler/lib/bundler/man/bundle-init.1 +1 -1
  65. data/bundler/lib/bundler/man/bundle-install.1 +8 -59
  66. data/bundler/lib/bundler/man/bundle-install.1.ronn +12 -107
  67. data/bundler/lib/bundler/man/bundle-issue.1 +1 -1
  68. data/bundler/lib/bundler/man/bundle-licenses.1 +1 -1
  69. data/bundler/lib/bundler/man/bundle-list.1 +6 -1
  70. data/bundler/lib/bundler/man/bundle-list.1.ronn +5 -0
  71. data/bundler/lib/bundler/man/bundle-lock.1 +1 -1
  72. data/bundler/lib/bundler/man/bundle-open.1 +1 -1
  73. data/bundler/lib/bundler/man/bundle-outdated.1 +1 -1
  74. data/bundler/lib/bundler/man/bundle-platform.1 +1 -1
  75. data/bundler/lib/bundler/man/bundle-plugin.1 +33 -15
  76. data/bundler/lib/bundler/man/bundle-plugin.1.ronn +36 -15
  77. data/bundler/lib/bundler/man/bundle-pristine.1 +1 -1
  78. data/bundler/lib/bundler/man/bundle-remove.1 +2 -8
  79. data/bundler/lib/bundler/man/bundle-remove.1.ronn +1 -8
  80. data/bundler/lib/bundler/man/bundle-show.1 +2 -5
  81. data/bundler/lib/bundler/man/bundle-show.1.ronn +0 -4
  82. data/bundler/lib/bundler/man/bundle-update.1 +1 -1
  83. data/bundler/lib/bundler/man/bundle-version.1 +1 -1
  84. data/bundler/lib/bundler/man/bundle.1 +1 -10
  85. data/bundler/lib/bundler/man/bundle.1.ronn +0 -9
  86. data/bundler/lib/bundler/man/gemfile.5 +1 -1
  87. data/bundler/lib/bundler/man/index.txt +0 -2
  88. data/bundler/lib/bundler/materialization.rb +1 -1
  89. data/bundler/lib/bundler/plugin/installer.rb +0 -10
  90. data/bundler/lib/bundler/plugin/source_list.rb +1 -1
  91. data/bundler/lib/bundler/plugin.rb +1 -1
  92. data/bundler/lib/bundler/resolver/package.rb +1 -0
  93. data/bundler/lib/bundler/resolver.rb +1 -1
  94. data/bundler/lib/bundler/ruby_dsl.rb +2 -0
  95. data/bundler/lib/bundler/ruby_version.rb +1 -3
  96. data/bundler/lib/bundler/rubygems_ext.rb +1 -1
  97. data/bundler/lib/bundler/rubygems_gem_installer.rb +1 -1
  98. data/bundler/lib/bundler/rubygems_integration.rb +1 -5
  99. data/bundler/lib/bundler/self_manager.rb +1 -1
  100. data/bundler/lib/bundler/settings.rb +8 -27
  101. data/bundler/lib/bundler/shared_helpers.rb +8 -20
  102. data/bundler/lib/bundler/source/gemspec.rb +4 -0
  103. data/bundler/lib/bundler/source/git/git_proxy.rb +3 -11
  104. data/bundler/lib/bundler/source/git.rb +2 -3
  105. data/bundler/lib/bundler/source/path.rb +5 -7
  106. data/bundler/lib/bundler/source/rubygems.rb +11 -17
  107. data/bundler/lib/bundler/source.rb +1 -1
  108. data/bundler/lib/bundler/source_list.rb +4 -45
  109. data/bundler/lib/bundler/source_map.rb +2 -5
  110. data/bundler/lib/bundler/spec_set.rb +6 -15
  111. data/bundler/lib/bundler/templates/newgem/CODE_OF_CONDUCT.md.tt +7 -129
  112. data/bundler/lib/bundler/templates/newgem/circleci/config.yml.tt +12 -0
  113. data/bundler/lib/bundler/templates/newgem/ext/newgem/Cargo.toml.tt +1 -1
  114. data/bundler/lib/bundler/templates/newgem/ext/newgem/extconf-go.rb.tt +11 -0
  115. data/bundler/lib/bundler/templates/newgem/ext/newgem/go.mod.tt +5 -0
  116. data/bundler/lib/bundler/templates/newgem/ext/newgem/newgem-go.c.tt +2 -0
  117. data/bundler/lib/bundler/templates/newgem/ext/newgem/newgem.go.tt +31 -0
  118. data/bundler/lib/bundler/templates/newgem/github/workflows/main.yml.tt +6 -0
  119. data/bundler/lib/bundler/templates/newgem/gitlab-ci.yml.tt +9 -0
  120. data/bundler/lib/bundler/templates/newgem/newgem.gemspec.tt +7 -4
  121. data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool/timed_stack.rb +26 -23
  122. data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool/version.rb +1 -1
  123. data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool.rb +50 -6
  124. data/bundler/lib/bundler/vendor/fileutils/lib/fileutils.rb +57 -52
  125. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb +5 -2
  126. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/file_manipulation.rb +42 -6
  127. data/bundler/lib/bundler/vendor/thor/lib/thor/parser/options.rb +1 -1
  128. data/bundler/lib/bundler/vendor/thor/lib/thor/runner.rb +2 -2
  129. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/basic.rb +3 -7
  130. data/bundler/lib/bundler/vendor/thor/lib/thor/version.rb +1 -1
  131. data/bundler/lib/bundler/vendor/uri/lib/uri/common.rb +57 -15
  132. data/bundler/lib/bundler/vendor/uri/lib/uri/file.rb +1 -1
  133. data/bundler/lib/bundler/vendor/uri/lib/uri/generic.rb +34 -21
  134. data/bundler/lib/bundler/vendor/uri/lib/uri/http.rb +12 -0
  135. data/bundler/lib/bundler/vendor/uri/lib/uri/rfc2396_parser.rb +9 -8
  136. data/bundler/lib/bundler/vendor/uri/lib/uri/version.rb +2 -2
  137. data/bundler/lib/bundler/version.rb +1 -1
  138. data/bundler/lib/bundler/vlad.rb +1 -14
  139. data/bundler/lib/bundler.rb +6 -28
  140. data/doc/MAINTAINERS.txt +0 -7
  141. data/doc/bundler/UPGRADING.md +11 -27
  142. data/doc/rubygems/CONTRIBUTING.md +1 -1
  143. data/lib/rubygems/basic_specification.rb +3 -9
  144. data/lib/rubygems/bundler_version_finder.rb +1 -0
  145. data/lib/rubygems/command.rb +1 -1
  146. data/lib/rubygems/command_manager.rb +3 -4
  147. data/lib/rubygems/commands/build_command.rb +0 -7
  148. data/lib/rubygems/commands/cert_command.rb +1 -1
  149. data/lib/rubygems/commands/install_command.rb +1 -5
  150. data/lib/rubygems/commands/setup_command.rb +5 -3
  151. data/lib/rubygems/commands/sources_command.rb +122 -18
  152. data/lib/rubygems/config_file.rb +1 -1
  153. data/lib/rubygems/defaults.rb +1 -1
  154. data/lib/rubygems/dependency.rb +1 -1
  155. data/lib/rubygems/dependency_installer.rb +0 -77
  156. data/lib/rubygems/dependency_list.rb +1 -2
  157. data/lib/rubygems/deprecate.rb +74 -72
  158. data/lib/rubygems/doctor.rb +1 -1
  159. data/lib/rubygems/errors.rb +1 -1
  160. data/lib/rubygems/exceptions.rb +5 -15
  161. data/lib/rubygems/ext/builder.rb +6 -2
  162. data/lib/rubygems/ext/cargo_builder.rb +2 -2
  163. data/lib/rubygems/ext/cmake_builder.rb +97 -8
  164. data/lib/rubygems/ext/configure_builder.rb +2 -2
  165. data/lib/rubygems/ext/ext_conf_builder.rb +6 -2
  166. data/lib/rubygems/ext/rake_builder.rb +2 -2
  167. data/lib/rubygems/gem_runner.rb +0 -1
  168. data/lib/rubygems/install_update_options.rb +1 -2
  169. data/lib/rubygems/installer.rb +16 -54
  170. data/lib/rubygems/name_tuple.rb +7 -1
  171. data/lib/rubygems/package/tar_header.rb +4 -4
  172. data/lib/rubygems/package/tar_reader.rb +2 -0
  173. data/lib/rubygems/package/tar_writer.rb +1 -1
  174. data/lib/rubygems/package.rb +21 -12
  175. data/lib/rubygems/platform.rb +31 -11
  176. data/lib/rubygems/remote_fetcher.rb +8 -5
  177. data/lib/rubygems/resolver/conflict.rb +1 -1
  178. data/lib/rubygems/resolver.rb +1 -1
  179. data/lib/rubygems/s3_uri_signer.rb +54 -7
  180. data/lib/rubygems/security/signer.rb +1 -1
  181. data/lib/rubygems/source.rb +2 -2
  182. data/lib/rubygems/source_list.rb +36 -0
  183. data/lib/rubygems/spec_fetcher.rb +4 -4
  184. data/lib/rubygems/specification.rb +5 -96
  185. data/lib/rubygems/specification_policy.rb +0 -36
  186. data/lib/rubygems/specification_record.rb +1 -1
  187. data/lib/rubygems/text.rb +1 -1
  188. data/lib/rubygems/uninstaller.rb +17 -6
  189. data/lib/rubygems/user_interaction.rb +6 -9
  190. data/lib/rubygems/util.rb +0 -22
  191. data/lib/rubygems/validator.rb +1 -1
  192. data/lib/rubygems/vendor/net-http/lib/net/http/generic_request.rb +25 -9
  193. data/lib/rubygems/vendor/net-http/lib/net/http/responses.rb +2 -2
  194. data/lib/rubygems/vendor/net-http/lib/net/http.rb +14 -14
  195. data/lib/rubygems/vendor/optparse/lib/optparse.rb +82 -41
  196. data/lib/rubygems/vendor/resolv/lib/resolv.rb +1 -1
  197. data/lib/rubygems/vendor/timeout/lib/timeout.rb +4 -1
  198. data/lib/rubygems/vendor/uri/lib/uri/common.rb +57 -15
  199. data/lib/rubygems/vendor/uri/lib/uri/file.rb +1 -1
  200. data/lib/rubygems/vendor/uri/lib/uri/generic.rb +34 -21
  201. data/lib/rubygems/vendor/uri/lib/uri/http.rb +12 -0
  202. data/lib/rubygems/vendor/uri/lib/uri/rfc2396_parser.rb +9 -8
  203. data/lib/rubygems/vendor/uri/lib/uri/version.rb +2 -2
  204. data/lib/rubygems/version.rb +2 -17
  205. data/lib/rubygems/win_platform.rb +31 -0
  206. data/lib/rubygems.rb +10 -38
  207. data/rubygems-update.gemspec +4 -4
  208. metadata +10 -18
  209. data/bundler/lib/bundler/cli/inject.rb +0 -60
  210. data/bundler/lib/bundler/cli/viz.rb +0 -31
  211. data/bundler/lib/bundler/graph.rb +0 -152
  212. data/bundler/lib/bundler/man/bundle-inject.1 +0 -31
  213. data/bundler/lib/bundler/man/bundle-inject.1.ronn +0 -32
  214. data/bundler/lib/bundler/man/bundle-viz.1 +0 -30
  215. data/bundler/lib/bundler/man/bundle-viz.1.ronn +0 -36
  216. data/bundler/lib/bundler/similarity_detector.rb +0 -63
  217. data/lib/rubygems/commands/query_command.rb +0 -43
  218. data/lib/rubygems/compatibility.rb +0 -41
  219. data/lib/rubygems/install_default_message.rb +0 -13
@@ -102,6 +102,31 @@ class Gem::Net::HTTPGenericRequest
102
102
  "\#<#{self.class} #{@method}>"
103
103
  end
104
104
 
105
+ # Returns a string representation of the request with the details for pp:
106
+ #
107
+ # require 'pp'
108
+ # post = Gem::Net::HTTP::Post.new(uri)
109
+ # post.inspect # => "#<Gem::Net::HTTP::Post POST>"
110
+ # post.pretty_inspect
111
+ # # => #<Gem::Net::HTTP::Post
112
+ # POST
113
+ # path="/"
114
+ # headers={"accept-encoding" => ["gzip;q=1.0,deflate;q=0.6,identity;q=0.3"],
115
+ # "accept" => ["*/*"],
116
+ # "user-agent" => ["Ruby"],
117
+ # "host" => ["www.ruby-lang.org"]}>
118
+ #
119
+ def pretty_print(q)
120
+ q.object_group(self) {
121
+ q.breakable
122
+ q.text @method
123
+ q.breakable
124
+ q.text "path="; q.pp @path
125
+ q.breakable
126
+ q.text "headers="; q.pp to_hash
127
+ }
128
+ end
129
+
105
130
  ##
106
131
  # Don't automatically decode response content-encoding if the user indicates
107
132
  # they want to handle it.
@@ -260,7 +285,6 @@ class Gem::Net::HTTPGenericRequest
260
285
  def send_request_with_body(sock, ver, path, body)
261
286
  self.content_length = body.bytesize
262
287
  delete 'Transfer-Encoding'
263
- supply_default_content_type
264
288
  write_header sock, ver, path
265
289
  wait_for_continue sock, ver if sock.continue_timeout
266
290
  sock.write body
@@ -271,7 +295,6 @@ class Gem::Net::HTTPGenericRequest
271
295
  raise ArgumentError,
272
296
  "Content-Length not given and Transfer-Encoding is not `chunked'"
273
297
  end
274
- supply_default_content_type
275
298
  write_header sock, ver, path
276
299
  wait_for_continue sock, ver if sock.continue_timeout
277
300
  if chunked?
@@ -373,12 +396,6 @@ class Gem::Net::HTTPGenericRequest
373
396
  buf.clear
374
397
  end
375
398
 
376
- def supply_default_content_type
377
- return if content_type()
378
- warn 'net/http: Content-Type did not set; using application/x-www-form-urlencoded', uplevel: 1 if $VERBOSE
379
- set_content_type 'application/x-www-form-urlencoded'
380
- end
381
-
382
399
  ##
383
400
  # Waits up to the continue timeout for a response from the server provided
384
401
  # we're speaking HTTP 1.1 and are expecting a 100-continue response.
@@ -411,4 +428,3 @@ class Gem::Net::HTTPGenericRequest
411
428
  end
412
429
 
413
430
  end
414
-
@@ -1104,7 +1104,7 @@ class Gem::Net::HTTPResponse
1104
1104
  '3' => Gem::Net::HTTPRedirection,
1105
1105
  '4' => Gem::Net::HTTPClientError,
1106
1106
  '5' => Gem::Net::HTTPServerError
1107
- }
1107
+ }.freeze
1108
1108
  CODE_TO_OBJ = {
1109
1109
  '100' => Gem::Net::HTTPContinue,
1110
1110
  '101' => Gem::Net::HTTPSwitchProtocol,
@@ -1170,5 +1170,5 @@ class Gem::Net::HTTPResponse
1170
1170
  '508' => Gem::Net::HTTPLoopDetected,
1171
1171
  '510' => Gem::Net::HTTPNotExtended,
1172
1172
  '511' => Gem::Net::HTTPNetworkAuthenticationRequired,
1173
- }
1173
+ }.freeze
1174
1174
  end
@@ -102,14 +102,14 @@ module Gem::Net #:nodoc:
102
102
  #
103
103
  # == URIs
104
104
  #
105
- # On the internet, a URI
105
+ # On the internet, a Gem::URI
106
106
  # ({Universal Resource Identifier}[https://en.wikipedia.org/wiki/Uniform_Resource_Identifier])
107
107
  # is a string that identifies a particular resource.
108
108
  # It consists of some or all of: scheme, hostname, path, query, and fragment;
109
- # see {URI syntax}[https://en.wikipedia.org/wiki/Uniform_Resource_Identifier#Syntax].
109
+ # see {Gem::URI syntax}[https://en.wikipedia.org/wiki/Uniform_Resource_Identifier#Syntax].
110
110
  #
111
- # A Ruby {Gem::URI::Generic}[https://docs.ruby-lang.org/en/master/Gem/URI/Generic.html] object
112
- # represents an internet URI.
111
+ # A Ruby {Gem::URI::Generic}[https://docs.ruby-lang.org/en/master/Gem::URI/Generic.html] object
112
+ # represents an internet Gem::URI.
113
113
  # It provides, among others, methods
114
114
  # +scheme+, +hostname+, +path+, +query+, and +fragment+.
115
115
  #
@@ -144,7 +144,7 @@ module Gem::Net #:nodoc:
144
144
  #
145
145
  # === Queries
146
146
  #
147
- # A host-specific query adds name/value pairs to the URI:
147
+ # A host-specific query adds name/value pairs to the Gem::URI:
148
148
  #
149
149
  # _uri = uri.dup
150
150
  # params = {userId: 1, completed: false}
@@ -154,7 +154,7 @@ module Gem::Net #:nodoc:
154
154
  #
155
155
  # === Fragments
156
156
  #
157
- # A {URI fragment}[https://en.wikipedia.org/wiki/URI_fragment] has no effect
157
+ # A {Gem::URI fragment}[https://en.wikipedia.org/wiki/URI_fragment] has no effect
158
158
  # in \Gem::Net::HTTP;
159
159
  # the same data is returned, regardless of whether a fragment is included.
160
160
  #
@@ -327,9 +327,9 @@ module Gem::Net #:nodoc:
327
327
  # res = http.request(req)
328
328
  # end
329
329
  #
330
- # Or if you simply want to make a GET request, you may pass in a URI
330
+ # Or if you simply want to make a GET request, you may pass in a Gem::URI
331
331
  # object that has an \HTTPS URL. \Gem::Net::HTTP automatically turns on TLS
332
- # verification if the URI object has a 'https' :URI scheme:
332
+ # verification if the Gem::URI object has a 'https' Gem::URI scheme:
333
333
  #
334
334
  # uri # => #<Gem::URI::HTTPS https://jsonplaceholder.typicode.com/>
335
335
  # Gem::Net::HTTP.get(uri)
@@ -374,7 +374,7 @@ module Gem::Net #:nodoc:
374
374
  #
375
375
  # When environment variable <tt>'http_proxy'</tt>
376
376
  # is set to a \Gem::URI string,
377
- # the returned +http+ will have the server at that URI as its proxy;
377
+ # the returned +http+ will have the server at that Gem::URI as its proxy;
378
378
  # note that the \Gem::URI string must have a protocol
379
379
  # such as <tt>'http'</tt> or <tt>'https'</tt>:
380
380
  #
@@ -724,7 +724,7 @@ module Gem::Net #:nodoc:
724
724
  class HTTP < Protocol
725
725
 
726
726
  # :stopdoc:
727
- VERSION = "0.6.0"
727
+ VERSION = "0.7.0"
728
728
  HTTPVersion = '1.1'
729
729
  begin
730
730
  require 'zlib'
@@ -790,7 +790,7 @@ module Gem::Net #:nodoc:
790
790
  # "completed": false
791
791
  # }
792
792
  #
793
- # With URI object +uri+ and optional hash argument +headers+:
793
+ # With Gem::URI object +uri+ and optional hash argument +headers+:
794
794
  #
795
795
  # uri = Gem::URI('https://jsonplaceholder.typicode.com/todos/1')
796
796
  # headers = {'Content-type' => 'application/json; charset=UTF-8'}
@@ -863,7 +863,7 @@ module Gem::Net #:nodoc:
863
863
 
864
864
  # Posts data to a host; returns a Gem::Net::HTTPResponse object.
865
865
  #
866
- # Argument +url+ must be a URI;
866
+ # Argument +url+ must be a Gem::URI;
867
867
  # argument +data+ must be a hash:
868
868
  #
869
869
  # _uri = uri.dup
@@ -1529,7 +1529,7 @@ module Gem::Net #:nodoc:
1529
1529
  :verify_hostname,
1530
1530
  ] # :nodoc:
1531
1531
 
1532
- SSL_IVNAMES = SSL_ATTRIBUTES.map { |a| "@#{a}".to_sym } # :nodoc:
1532
+ SSL_IVNAMES = SSL_ATTRIBUTES.map { |a| "@#{a}".to_sym }.freeze # :nodoc:
1533
1533
 
1534
1534
  # Sets or returns the path to a CA certification file in PEM format.
1535
1535
  attr_accessor :ca_file
@@ -1860,7 +1860,7 @@ module Gem::Net #:nodoc:
1860
1860
  @proxy_from_env
1861
1861
  end
1862
1862
 
1863
- # The proxy URI determined from the environment for this connection.
1863
+ # The proxy Gem::URI determined from the environment for this connection.
1864
1864
  def proxy_uri # :nodoc:
1865
1865
  return if @proxy_uri == false
1866
1866
  @proxy_uri ||= Gem::URI::HTTP.new(
@@ -7,6 +7,7 @@
7
7
  #
8
8
  # See Gem::OptionParser for documentation.
9
9
  #
10
+ require 'set' unless defined?(Set)
10
11
 
11
12
  #--
12
13
  # == Developer Documentation (not for RDoc output)
@@ -142,7 +143,7 @@
142
143
  # Used:
143
144
  #
144
145
  # $ ruby optparse-test.rb -r
145
- # optparse-test.rb:9:in `<main>': missing argument: -r (Gem::OptionParser::MissingArgument)
146
+ # optparse-test.rb:9:in '<main>': missing argument: -r (Gem::OptionParser::MissingArgument)
146
147
  # $ ruby optparse-test.rb -r my-library
147
148
  # You required my-library!
148
149
  #
@@ -235,7 +236,7 @@
235
236
  # $ ruby optparse-test.rb --user 2
236
237
  # #<struct User id=2, name="Gandalf">
237
238
  # $ ruby optparse-test.rb --user 3
238
- # optparse-test.rb:15:in `block in find_user': No User Found for id 3 (RuntimeError)
239
+ # optparse-test.rb:15:in 'block in find_user': No User Found for id 3 (RuntimeError)
239
240
  #
240
241
  # === Store options to a Hash
241
242
  #
@@ -425,7 +426,8 @@
425
426
  #
426
427
  class Gem::OptionParser
427
428
  # The version string
428
- Gem::OptionParser::Version = "0.6.0"
429
+ VERSION = "0.8.0"
430
+ Version = VERSION # for compatibility
429
431
 
430
432
  # :stopdoc:
431
433
  NoArgument = [NO_ARGUMENT = :NONE, nil].freeze
@@ -461,6 +463,10 @@ class Gem::OptionParser
461
463
  candidates
462
464
  end
463
465
 
466
+ def self.completable?(key)
467
+ String.try_convert(key) or defined?(key.id2name)
468
+ end
469
+
464
470
  def candidate(key, icase = false, pat = nil, &_)
465
471
  Completion.candidate(key, icase, pat, &method(:each))
466
472
  end
@@ -496,7 +502,6 @@ class Gem::OptionParser
496
502
  end
497
503
  end
498
504
 
499
-
500
505
  #
501
506
  # Map from option/keyword string to object with completion.
502
507
  #
@@ -504,7 +509,6 @@ class Gem::OptionParser
504
509
  include Completion
505
510
  end
506
511
 
507
-
508
512
  #
509
513
  # Individual switch class. Not important to the user.
510
514
  #
@@ -546,11 +550,11 @@ class Gem::OptionParser
546
550
 
547
551
  def initialize(pattern = nil, conv = nil,
548
552
  short = nil, long = nil, arg = nil,
549
- desc = ([] if short or long), block = nil, &_block)
553
+ desc = ([] if short or long), block = nil, values = nil, &_block)
550
554
  raise if Array === pattern
551
555
  block ||= _block
552
- @pattern, @conv, @short, @long, @arg, @desc, @block =
553
- pattern, conv, short, long, arg, desc, block
556
+ @pattern, @conv, @short, @long, @arg, @desc, @block, @values =
557
+ pattern, conv, short, long, arg, desc, block, values
554
558
  end
555
559
 
556
560
  #
@@ -583,11 +587,15 @@ class Gem::OptionParser
583
587
  # exception.
584
588
  #
585
589
  def conv_arg(arg, val = []) # :nodoc:
590
+ v, = *val
586
591
  if conv
587
592
  val = conv.call(*val)
588
593
  else
589
594
  val = proc {|v| v}.call(*val)
590
595
  end
596
+ if @values
597
+ @values.include?(val) or raise InvalidArgument, v
598
+ end
591
599
  return arg, block, val
592
600
  end
593
601
  private :conv_arg
@@ -668,7 +676,7 @@ class Gem::OptionParser
668
676
 
669
677
  (sopts+lopts).each do |opt|
670
678
  # "(-x -c -r)-l[left justify]"
671
- if /^--\[no-\](.+)$/ =~ opt
679
+ if /\A--\[no-\](.+)$/ =~ opt
672
680
  o = $1
673
681
  yield("--#{o}", desc.join(""))
674
682
  yield("--no-#{o}", desc.join(""))
@@ -1032,7 +1040,6 @@ class Gem::OptionParser
1032
1040
  DefaultList.short['-'] = Switch::NoArgument.new {}
1033
1041
  DefaultList.long[''] = Switch::NoArgument.new {throw :terminate}
1034
1042
 
1035
-
1036
1043
  COMPSYS_HEADER = <<'XXX' # :nodoc:
1037
1044
 
1038
1045
  typeset -A opt_args
@@ -1051,16 +1058,16 @@ XXX
1051
1058
  end
1052
1059
 
1053
1060
  def help_exit
1054
- if STDOUT.tty? && (pager = ENV.values_at(*%w[RUBY_PAGER PAGER]).find {|e| e && !e.empty?})
1061
+ if $stdout.tty? && (pager = ENV.values_at(*%w[RUBY_PAGER PAGER]).find {|e| e && !e.empty?})
1055
1062
  less = ENV["LESS"]
1056
- args = [{"LESS" => "#{!less || less.empty? ? '-' : less}Fe"}, pager, "w"]
1063
+ args = [{"LESS" => "#{less} -Fe"}, pager, "w"]
1057
1064
  print = proc do |f|
1058
1065
  f.puts help
1059
1066
  rescue Errno::EPIPE
1060
1067
  # pager terminated
1061
1068
  end
1062
1069
  if Process.respond_to?(:fork) and false
1063
- IO.popen("-") {|f| f ? Process.exec(*args, in: f) : print.call(STDOUT)}
1070
+ IO.popen("-") {|f| f ? Process.exec(*args, in: f) : print.call($stdout)}
1064
1071
  # unreachable
1065
1072
  end
1066
1073
  IO.popen(*args, &print)
@@ -1102,7 +1109,7 @@ XXX
1102
1109
  #
1103
1110
  Officious['*-completion-zsh'] = proc do |parser|
1104
1111
  Switch::OptionalArgument.new do |arg|
1105
- parser.compsys(STDOUT, arg)
1112
+ parser.compsys($stdout, arg)
1106
1113
  exit
1107
1114
  end
1108
1115
  end
@@ -1288,7 +1295,15 @@ XXX
1288
1295
  # to $0.
1289
1296
  #
1290
1297
  def program_name
1291
- @program_name || File.basename($0, '.*')
1298
+ @program_name || strip_ext(File.basename($0))
1299
+ end
1300
+
1301
+ private def strip_ext(name) # :nodoc:
1302
+ exts = /#{
1303
+ require "rbconfig"
1304
+ Regexp.union(*RbConfig::CONFIG["EXECUTABLE_EXTS"]&.split(" "))
1305
+ }\z/o
1306
+ name.sub(exts, "")
1292
1307
  end
1293
1308
 
1294
1309
  # for experimental cascading :-)
@@ -1467,6 +1482,7 @@ XXX
1467
1482
  klass = nil
1468
1483
  q, a = nil
1469
1484
  has_arg = false
1485
+ values = nil
1470
1486
 
1471
1487
  opts.each do |o|
1472
1488
  # argument class
@@ -1480,7 +1496,7 @@ XXX
1480
1496
  end
1481
1497
 
1482
1498
  # directly specified pattern(any object possible to match)
1483
- if (!(String === o || Symbol === o)) and o.respond_to?(:match)
1499
+ if !Completion.completable?(o) and o.respond_to?(:match)
1484
1500
  pattern = notwice(o, pattern, 'pattern')
1485
1501
  if pattern.respond_to?(:convert)
1486
1502
  conv = pattern.method(:convert).to_proc
@@ -1494,7 +1510,12 @@ XXX
1494
1510
  case o
1495
1511
  when Proc, Method
1496
1512
  block = notwice(o, block, 'block')
1497
- when Array, Hash
1513
+ when Array, Hash, Set
1514
+ if Array === o
1515
+ o, v = o.partition {|v,| Completion.completable?(v)}
1516
+ values = notwice(v, values, 'values') unless v.empty?
1517
+ next if o.empty?
1518
+ end
1498
1519
  case pattern
1499
1520
  when CompletingHash
1500
1521
  when nil
@@ -1504,11 +1525,13 @@ XXX
1504
1525
  raise ArgumentError, "argument pattern given twice"
1505
1526
  end
1506
1527
  o.each {|pat, *v| pattern[pat] = v.fetch(0) {pat}}
1528
+ when Range
1529
+ values = notwice(o, values, 'values')
1507
1530
  when Module
1508
1531
  raise ArgumentError, "unsupported argument type: #{o}", ParseError.filter_backtrace(caller(4))
1509
1532
  when *ArgumentStyle.keys
1510
1533
  style = notwice(ArgumentStyle[o], style, 'style')
1511
- when /^--no-([^\[\]=\s]*)(.+)?/
1534
+ when /\A--no-([^\[\]=\s]*)(.+)?/
1512
1535
  q, a = $1, $2
1513
1536
  o = notwice(a ? Object : TrueClass, klass, 'type')
1514
1537
  not_pattern, not_conv = search(:atype, o) unless not_style
@@ -1519,7 +1542,7 @@ XXX
1519
1542
  (q = q.downcase).tr!('_', '-')
1520
1543
  long << "no-#{q}"
1521
1544
  nolong << q
1522
- when /^--\[no-\]([^\[\]=\s]*)(.+)?/
1545
+ when /\A--\[no-\]([^\[\]=\s]*)(.+)?/
1523
1546
  q, a = $1, $2
1524
1547
  o = notwice(a ? Object : TrueClass, klass, 'type')
1525
1548
  if a
@@ -1532,7 +1555,7 @@ XXX
1532
1555
  not_pattern, not_conv = search(:atype, FalseClass) unless not_style
1533
1556
  not_style = Switch::NoArgument
1534
1557
  nolong << "no-#{o}"
1535
- when /^--([^\[\]=\s]*)(.+)?/
1558
+ when /\A--([^\[\]=\s]*)(.+)?/
1536
1559
  q, a = $1, $2
1537
1560
  if a
1538
1561
  o = notwice(NilClass, klass, 'type')
@@ -1542,7 +1565,7 @@ XXX
1542
1565
  ldesc << "--#{q}"
1543
1566
  (o = q.downcase).tr!('_', '-')
1544
1567
  long << o
1545
- when /^-(\[\^?\]?(?:[^\\\]]|\\.)*\])(.+)?/
1568
+ when /\A-(\[\^?\]?(?:[^\\\]]|\\.)*\])(.+)?/
1546
1569
  q, a = $1, $2
1547
1570
  o = notwice(Object, klass, 'type')
1548
1571
  if a
@@ -1553,7 +1576,7 @@ XXX
1553
1576
  end
1554
1577
  sdesc << "-#{q}"
1555
1578
  short << Regexp.new(q)
1556
- when /^-(.)(.+)?/
1579
+ when /\A-(.)(.+)?/
1557
1580
  q, a = $1, $2
1558
1581
  if a
1559
1582
  o = notwice(NilClass, klass, 'type')
@@ -1562,7 +1585,7 @@ XXX
1562
1585
  end
1563
1586
  sdesc << "-#{q}"
1564
1587
  short << q
1565
- when /^=/
1588
+ when /\A=/
1566
1589
  style = notwice(default_style.guess(arg = o), style, 'style')
1567
1590
  default_pattern, conv = search(:atype, Object) unless default_pattern
1568
1591
  else
@@ -1571,12 +1594,18 @@ XXX
1571
1594
  end
1572
1595
 
1573
1596
  default_pattern, conv = search(:atype, default_style.pattern) unless default_pattern
1597
+ if Range === values and klass
1598
+ unless (!values.begin or klass === values.begin) and
1599
+ (!values.end or klass === values.end)
1600
+ raise ArgumentError, "range does not match class"
1601
+ end
1602
+ end
1574
1603
  if !(short.empty? and long.empty?)
1575
1604
  if has_arg and default_style == Switch::NoArgument
1576
1605
  default_style = Switch::RequiredArgument
1577
1606
  end
1578
1607
  s = (style || default_style).new(pattern || default_pattern,
1579
- conv, sdesc, ldesc, arg, desc, block)
1608
+ conv, sdesc, ldesc, arg, desc, block, values)
1580
1609
  elsif !block
1581
1610
  if style or pattern
1582
1611
  raise ArgumentError, "no switch given", ParseError.filter_backtrace(caller)
@@ -1585,7 +1614,7 @@ XXX
1585
1614
  else
1586
1615
  short << pattern
1587
1616
  s = (style || default_style).new(pattern,
1588
- conv, nil, nil, arg, desc, block)
1617
+ conv, nil, nil, arg, desc, block, values)
1589
1618
  end
1590
1619
  return s, short, long,
1591
1620
  (not_style.new(not_pattern, not_conv, sdesc, ldesc, nil, desc, block) if not_style),
@@ -1827,7 +1856,7 @@ XXX
1827
1856
  #
1828
1857
  def permute!(argv = default_argv, **keywords)
1829
1858
  nonopts = []
1830
- order!(argv, **keywords, &nonopts.method(:<<))
1859
+ order!(argv, **keywords) {|nonopt| nonopts << nonopt}
1831
1860
  argv[0, 0] = nonopts
1832
1861
  argv
1833
1862
  end
@@ -1880,13 +1909,16 @@ XXX
1880
1909
  single_options, *long_options = *args
1881
1910
 
1882
1911
  result = {}
1912
+ setter = (symbolize_names ?
1913
+ ->(name, val) {result[name.to_sym] = val}
1914
+ : ->(name, val) {result[name] = val})
1883
1915
 
1884
1916
  single_options.scan(/(.)(:)?/) do |opt, val|
1885
1917
  if val
1886
- result[opt] = nil
1918
+ setter[opt, nil]
1887
1919
  define("-#{opt} VAL")
1888
1920
  else
1889
- result[opt] = false
1921
+ setter[opt, false]
1890
1922
  define("-#{opt}")
1891
1923
  end
1892
1924
  end if single_options
@@ -1895,16 +1927,16 @@ XXX
1895
1927
  arg, desc = arg.split(';', 2)
1896
1928
  opt, val = arg.split(':', 2)
1897
1929
  if val
1898
- result[opt] = val.empty? ? nil : val
1930
+ setter[opt, (val unless val.empty?)]
1899
1931
  define("--#{opt}=#{result[opt] || "VAL"}", *[desc].compact)
1900
1932
  else
1901
- result[opt] = false
1933
+ setter[opt, false]
1902
1934
  define("--#{opt}", *[desc].compact)
1903
1935
  end
1904
1936
  end
1905
1937
 
1906
- parse_in_order(argv, result.method(:[]=), **keywords)
1907
- symbolize_names ? result.transform_keys(&:to_sym) : result
1938
+ parse_in_order(argv, setter, **keywords)
1939
+ result
1908
1940
  end
1909
1941
 
1910
1942
  #
@@ -1954,7 +1986,7 @@ XXX
1954
1986
  visit(:complete, typ, opt, icase, *pat) {|o, *sw| return sw}
1955
1987
  }
1956
1988
  exc = ambiguous ? AmbiguousOption : InvalidOption
1957
- raise exc.new(opt, additional: self.method(:additional_message).curry[typ])
1989
+ raise exc.new(opt, additional: proc {|o| additional_message(typ, o)})
1958
1990
  end
1959
1991
  private :complete
1960
1992
 
@@ -2019,19 +2051,27 @@ XXX
2019
2051
  def load(filename = nil, **keywords)
2020
2052
  unless filename
2021
2053
  basename = File.basename($0, '.*')
2022
- return true if load(File.expand_path(basename, '~/.options'), **keywords) rescue nil
2054
+ return true if load(File.expand_path("~/.options/#{basename}"), **keywords) rescue nil
2023
2055
  basename << ".options"
2056
+ if !(xdg = ENV['XDG_CONFIG_HOME']) or xdg.empty?
2057
+ # https://specifications.freedesktop.org/basedir-spec/latest/#variables
2058
+ #
2059
+ # If $XDG_CONFIG_HOME is either not set or empty, a default
2060
+ # equal to $HOME/.config should be used.
2061
+ xdg = ['~/.config', true]
2062
+ end
2024
2063
  return [
2025
- # XDG
2026
- ENV['XDG_CONFIG_HOME'],
2027
- '~/.config',
2064
+ xdg,
2065
+
2028
2066
  *ENV['XDG_CONFIG_DIRS']&.split(File::PATH_SEPARATOR),
2029
2067
 
2030
2068
  # Haiku
2031
- '~/config/settings',
2032
- ].any? {|dir|
2069
+ ['~/config/settings', true],
2070
+ ].any? {|dir, expand|
2033
2071
  next if !dir or dir.empty?
2034
- load(File.expand_path(basename, dir), **keywords) rescue nil
2072
+ filename = File.join(dir, basename)
2073
+ filename = File.expand_path(filename) if expand
2074
+ load(filename, **keywords) rescue nil
2035
2075
  }
2036
2076
  end
2037
2077
  begin
@@ -2237,9 +2277,10 @@ XXX
2237
2277
  argv
2238
2278
  end
2239
2279
 
2280
+ DIR = File.join(__dir__, '')
2240
2281
  def self.filter_backtrace(array)
2241
2282
  unless $DEBUG
2242
- array.delete_if(&%r"\A#{Regexp.quote(__FILE__)}:"o.method(:=~))
2283
+ array.delete_if {|bt| bt.start_with?(DIR)}
2243
2284
  end
2244
2285
  array
2245
2286
  end
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'socket'
4
- require_relative '../../timeout/lib/timeout'
4
+ require_relative '../../../vendored_timeout'
5
5
  require 'io/wait'
6
6
  require_relative '../../../vendored_securerandom'
7
7
 
@@ -20,7 +20,7 @@
20
20
 
21
21
  module Gem::Timeout
22
22
  # The version
23
- VERSION = "0.4.3"
23
+ VERSION = "0.4.4"
24
24
 
25
25
  # Internal error raised to when a timeout is triggered.
26
26
  class ExitException < Exception
@@ -123,6 +123,9 @@ module Gem::Timeout
123
123
 
124
124
  def self.ensure_timeout_thread_created
125
125
  unless @timeout_thread and @timeout_thread.alive?
126
+ # If the Mutex is already owned we are in a signal handler.
127
+ # In that case, just return and let the main thread create the @timeout_thread.
128
+ return if TIMEOUT_THREAD_MUTEX.owned?
126
129
  TIMEOUT_THREAD_MUTEX.synchronize do
127
130
  unless @timeout_thread and @timeout_thread.alive?
128
131
  @timeout_thread = create_timeout_thread