bundler 2.1.1 → 2.2.0.rc.2

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of bundler might be problematic. Click here for more details.

Files changed (194) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +1543 -1418
  3. data/README.md +6 -8
  4. data/bundler.gemspec +3 -3
  5. data/exe/bundle +3 -0
  6. data/lib/bundler.rb +21 -7
  7. data/lib/bundler/build_metadata.rb +3 -11
  8. data/lib/bundler/cli.rb +54 -20
  9. data/lib/bundler/cli/add.rb +1 -1
  10. data/lib/bundler/cli/cache.rb +1 -7
  11. data/lib/bundler/cli/clean.rb +1 -1
  12. data/lib/bundler/cli/common.rb +14 -0
  13. data/lib/bundler/cli/console.rb +1 -1
  14. data/lib/bundler/cli/doctor.rb +1 -1
  15. data/lib/bundler/cli/exec.rb +1 -1
  16. data/lib/bundler/cli/fund.rb +36 -0
  17. data/lib/bundler/cli/gem.rb +84 -11
  18. data/lib/bundler/cli/info.rb +15 -4
  19. data/lib/bundler/cli/init.rb +2 -2
  20. data/lib/bundler/cli/inject.rb +1 -1
  21. data/lib/bundler/cli/install.rb +12 -18
  22. data/lib/bundler/cli/issue.rb +2 -2
  23. data/lib/bundler/cli/list.rb +12 -10
  24. data/lib/bundler/cli/outdated.rb +89 -66
  25. data/lib/bundler/cli/plugin.rb +10 -0
  26. data/lib/bundler/cli/pristine.rb +5 -0
  27. data/lib/bundler/cli/show.rb +1 -1
  28. data/lib/bundler/cli/update.rb +2 -0
  29. data/lib/bundler/compact_index_client.rb +1 -1
  30. data/lib/bundler/compact_index_client/cache.rb +1 -1
  31. data/lib/bundler/definition.rb +51 -60
  32. data/lib/bundler/dep_proxy.rb +1 -1
  33. data/lib/bundler/dependency.rb +0 -9
  34. data/lib/bundler/dsl.rb +5 -9
  35. data/lib/bundler/endpoint_specification.rb +1 -1
  36. data/lib/bundler/environment_preserver.rb +26 -2
  37. data/lib/bundler/errors.rb +1 -0
  38. data/lib/bundler/feature_flag.rb +0 -2
  39. data/lib/bundler/fetcher.rb +4 -3
  40. data/lib/bundler/fetcher/base.rb +1 -1
  41. data/lib/bundler/fetcher/compact_index.rb +1 -1
  42. data/lib/bundler/fetcher/downloader.rb +1 -1
  43. data/lib/bundler/fetcher/index.rb +1 -1
  44. data/lib/bundler/friendly_errors.rb +7 -13
  45. data/lib/bundler/gem_helper.rb +33 -19
  46. data/lib/bundler/gem_helpers.rb +6 -1
  47. data/lib/bundler/gem_version_promoter.rb +2 -2
  48. data/lib/bundler/graph.rb +1 -1
  49. data/lib/bundler/index.rb +1 -1
  50. data/lib/bundler/injector.rb +15 -4
  51. data/lib/bundler/inline.rb +2 -2
  52. data/lib/bundler/installer.rb +30 -29
  53. data/lib/bundler/installer/gem_installer.rb +3 -3
  54. data/lib/bundler/installer/parallel_installer.rb +10 -10
  55. data/lib/bundler/installer/standalone.rb +2 -2
  56. data/lib/bundler/lazy_specification.rb +19 -6
  57. data/lib/bundler/lockfile_generator.rb +1 -1
  58. data/lib/bundler/lockfile_parser.rb +1 -1
  59. data/lib/bundler/mirror.rb +2 -2
  60. data/lib/bundler/plugin.rb +30 -5
  61. data/lib/bundler/plugin/index.rb +10 -1
  62. data/lib/bundler/plugin/installer.rb +1 -1
  63. data/lib/bundler/plugin/installer/rubygems.rb +1 -1
  64. data/lib/bundler/plugin/source_list.rb +1 -1
  65. data/lib/bundler/psyched_yaml.rb +0 -15
  66. data/lib/bundler/remote_specification.rb +5 -2
  67. data/lib/bundler/resolver.rb +32 -9
  68. data/lib/bundler/resolver/spec_group.rb +27 -6
  69. data/lib/bundler/retry.rb +1 -1
  70. data/lib/bundler/ruby_version.rb +1 -1
  71. data/lib/bundler/rubygems_ext.rb +53 -9
  72. data/lib/bundler/rubygems_gem_installer.rb +3 -9
  73. data/lib/bundler/rubygems_integration.rb +23 -54
  74. data/lib/bundler/runtime.rb +4 -14
  75. data/lib/bundler/settings.rb +49 -45
  76. data/lib/bundler/shared_helpers.rb +2 -2
  77. data/lib/bundler/similarity_detector.rb +1 -1
  78. data/lib/bundler/source.rb +1 -1
  79. data/lib/bundler/source/git.rb +5 -5
  80. data/lib/bundler/source/git/git_proxy.rb +56 -59
  81. data/lib/bundler/source/path.rb +7 -3
  82. data/lib/bundler/source/path/installer.rb +8 -10
  83. data/lib/bundler/source/rubygems.rb +13 -16
  84. data/lib/bundler/source/rubygems/remote.rb +1 -1
  85. data/lib/bundler/source_list.rb +2 -2
  86. data/lib/bundler/spec_set.rb +1 -1
  87. data/lib/bundler/stub_specification.rb +17 -5
  88. data/lib/bundler/templates/newgem/CODE_OF_CONDUCT.md.tt +57 -47
  89. data/lib/bundler/templates/newgem/Gemfile.tt +9 -1
  90. data/lib/bundler/templates/newgem/README.md.tt +1 -1
  91. data/lib/bundler/templates/newgem/Rakefile.tt +19 -5
  92. data/lib/bundler/templates/newgem/bin/console.tt +1 -0
  93. data/lib/bundler/templates/newgem/circleci/config.yml.tt +13 -0
  94. data/lib/bundler/templates/newgem/ext/newgem/extconf.rb.tt +2 -0
  95. data/lib/bundler/templates/newgem/github/workflows/main.yml.tt +18 -0
  96. data/lib/bundler/templates/newgem/gitlab-ci.yml.tt +9 -0
  97. data/lib/bundler/templates/newgem/lib/newgem.rb.tt +2 -0
  98. data/lib/bundler/templates/newgem/lib/newgem/version.rb.tt +2 -0
  99. data/lib/bundler/templates/newgem/newgem.gemspec.tt +8 -6
  100. data/lib/bundler/templates/newgem/rubocop.yml.tt +10 -0
  101. data/lib/bundler/templates/newgem/spec/newgem_spec.rb.tt +2 -0
  102. data/lib/bundler/templates/newgem/spec/spec_helper.rb.tt +2 -1
  103. data/lib/bundler/templates/newgem/test/{newgem_test.rb.tt → minitest/newgem_test.rb.tt} +2 -0
  104. data/lib/bundler/templates/newgem/test/{test_helper.rb.tt → minitest/test_helper.rb.tt} +2 -0
  105. data/lib/bundler/templates/newgem/test/test-unit/newgem_test.rb.tt +15 -0
  106. data/lib/bundler/templates/newgem/test/test-unit/test_helper.rb.tt +6 -0
  107. data/lib/bundler/ui/shell.rb +5 -5
  108. data/lib/bundler/uri_credentials_filter.rb +1 -1
  109. data/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb +79 -212
  110. data/lib/bundler/vendor/thor/lib/thor.rb +0 -7
  111. data/lib/bundler/vendor/thor/lib/thor/actions/create_link.rb +2 -1
  112. data/lib/bundler/vendor/thor/lib/thor/base.rb +9 -0
  113. data/lib/bundler/vendor/thor/lib/thor/version.rb +1 -1
  114. data/lib/bundler/vendored_persistent.rb +0 -7
  115. data/lib/bundler/version.rb +1 -1
  116. data/lib/bundler/worker.rb +1 -1
  117. data/lib/bundler/yaml_serializer.rb +1 -1
  118. data/man/bundle-add.1 +1 -1
  119. data/man/{bundle-add.ronn → bundle-add.1.ronn} +0 -0
  120. data/man/bundle-binstubs.1 +5 -3
  121. data/man/{bundle-binstubs.ronn → bundle-binstubs.1.ronn} +2 -4
  122. data/man/bundle-cache.1 +1 -1
  123. data/man/{bundle-cache.ronn → bundle-cache.1.ronn} +0 -0
  124. data/man/bundle-check.1 +1 -1
  125. data/man/{bundle-check.ronn → bundle-check.1.ronn} +0 -0
  126. data/man/bundle-clean.1 +1 -1
  127. data/man/{bundle-clean.ronn → bundle-clean.1.ronn} +0 -0
  128. data/man/bundle-config.1 +16 -22
  129. data/man/{bundle-config.ronn → bundle-config.1.ronn} +19 -22
  130. data/man/bundle-doctor.1 +1 -1
  131. data/man/{bundle-doctor.ronn → bundle-doctor.1.ronn} +0 -0
  132. data/man/bundle-exec.1 +1 -1
  133. data/man/{bundle-exec.ronn → bundle-exec.1.ronn} +0 -0
  134. data/man/bundle-gem.1 +25 -3
  135. data/man/{bundle-gem.ronn → bundle-gem.1.ronn} +30 -7
  136. data/man/bundle-info.1 +1 -1
  137. data/man/{bundle-info.ronn → bundle-info.1.ronn} +0 -0
  138. data/man/bundle-init.1 +1 -1
  139. data/man/{bundle-init.ronn → bundle-init.1.ronn} +0 -0
  140. data/man/bundle-inject.1 +1 -1
  141. data/man/{bundle-inject.ronn → bundle-inject.1.ronn} +0 -0
  142. data/man/bundle-install.1 +29 -2
  143. data/man/{bundle-install.ronn → bundle-install.1.ronn} +24 -2
  144. data/man/bundle-list.1 +7 -7
  145. data/man/{bundle-list.ronn → bundle-list.1.ronn} +6 -6
  146. data/man/bundle-lock.1 +1 -1
  147. data/man/{bundle-lock.ronn → bundle-lock.1.ronn} +0 -0
  148. data/man/bundle-open.1 +1 -1
  149. data/man/{bundle-open.ronn → bundle-open.1.ronn} +0 -0
  150. data/man/bundle-outdated.1 +1 -1
  151. data/man/{bundle-outdated.ronn → bundle-outdated.1.ronn} +0 -0
  152. data/man/bundle-platform.1 +1 -1
  153. data/man/{bundle-platform.ronn → bundle-platform.1.ronn} +0 -0
  154. data/man/bundle-pristine.1 +1 -1
  155. data/man/{bundle-pristine.ronn → bundle-pristine.1.ronn} +0 -0
  156. data/man/bundle-remove.1 +1 -1
  157. data/man/{bundle-remove.ronn → bundle-remove.1.ronn} +0 -0
  158. data/man/bundle-show.1 +1 -1
  159. data/man/{bundle-show.ronn → bundle-show.1.ronn} +0 -0
  160. data/man/bundle-update.1 +1 -1
  161. data/man/{bundle-update.ronn → bundle-update.1.ronn} +0 -0
  162. data/man/bundle-viz.1 +1 -1
  163. data/man/{bundle-viz.ronn → bundle-viz.1.ronn} +0 -0
  164. data/man/bundle.1 +1 -1
  165. data/man/{bundle.ronn → bundle.1.ronn} +0 -0
  166. data/man/gemfile.5 +4 -4
  167. data/man/gemfile.5.ronn +4 -4
  168. metadata +39 -58
  169. data/man/bundle-add.1.txt +0 -58
  170. data/man/bundle-binstubs.1.txt +0 -48
  171. data/man/bundle-cache.1.txt +0 -78
  172. data/man/bundle-check.1.txt +0 -33
  173. data/man/bundle-clean.1.txt +0 -26
  174. data/man/bundle-config.1.txt +0 -528
  175. data/man/bundle-doctor.1.txt +0 -44
  176. data/man/bundle-exec.1.txt +0 -178
  177. data/man/bundle-gem.1.txt +0 -91
  178. data/man/bundle-info.1.txt +0 -21
  179. data/man/bundle-init.1.txt +0 -34
  180. data/man/bundle-inject.1.txt +0 -32
  181. data/man/bundle-install.1.txt +0 -401
  182. data/man/bundle-list.1.txt +0 -43
  183. data/man/bundle-lock.1.txt +0 -93
  184. data/man/bundle-open.1.txt +0 -29
  185. data/man/bundle-outdated.1.txt +0 -131
  186. data/man/bundle-platform.1.txt +0 -57
  187. data/man/bundle-pristine.1.txt +0 -44
  188. data/man/bundle-remove.1.txt +0 -34
  189. data/man/bundle-show.1.txt +0 -27
  190. data/man/bundle-update.1.txt +0 -390
  191. data/man/bundle-viz.1.txt +0 -39
  192. data/man/bundle.1.txt +0 -116
  193. data/man/gemfile.5.txt +0 -649
  194. data/man/index.txt +0 -25
@@ -2,73 +2,83 @@
2
2
 
3
3
  ## Our Pledge
4
4
 
5
- In the interest of fostering an open and welcoming environment, we as
6
- contributors and maintainers pledge to making participation in our project and
7
- our community a harassment-free experience for everyone, regardless of age, body
8
- size, disability, ethnicity, gender identity and expression, level of experience,
9
- nationality, personal appearance, race, religion, or sexual identity and
10
- orientation.
5
+ We as members, contributors, and leaders pledge to make participation in our community a harassment-free experience for everyone, regardless of age, body size, visible or invisible disability, ethnicity, sex characteristics, gender identity and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, religion, or sexual identity and orientation.
6
+
7
+ We pledge to act and interact in ways that contribute to an open, welcoming, diverse, inclusive, and healthy community.
11
8
 
12
9
  ## Our Standards
13
10
 
14
- Examples of behavior that contributes to creating a positive environment
15
- include:
11
+ Examples of behavior that contributes to a positive environment for our community include:
16
12
 
17
- * Using welcoming and inclusive language
18
- * Being respectful of differing viewpoints and experiences
19
- * Gracefully accepting constructive criticism
20
- * Focusing on what is best for the community
21
- * Showing empathy towards other community members
13
+ * Demonstrating empathy and kindness toward other people
14
+ * Being respectful of differing opinions, viewpoints, and experiences
15
+ * Giving and gracefully accepting constructive feedback
16
+ * Accepting responsibility and apologizing to those affected by our mistakes, and learning from the experience
17
+ * Focusing on what is best not just for us as individuals, but for the overall community
22
18
 
23
- Examples of unacceptable behavior by participants include:
19
+ Examples of unacceptable behavior include:
24
20
 
25
- * The use of sexualized language or imagery and unwelcome sexual attention or
26
- advances
27
- * Trolling, insulting/derogatory comments, and personal or political attacks
21
+ * The use of sexualized language or imagery, and sexual attention or
22
+ advances of any kind
23
+ * Trolling, insulting or derogatory comments, and personal or political attacks
28
24
  * Public or private harassment
29
- * Publishing others' private information, such as a physical or electronic
30
- address, without explicit permission
25
+ * Publishing others' private information, such as a physical or email
26
+ address, without their explicit permission
31
27
  * Other conduct which could reasonably be considered inappropriate in a
32
28
  professional setting
33
29
 
34
- ## Our Responsibilities
30
+ ## Enforcement Responsibilities
35
31
 
36
- Project maintainers are responsible for clarifying the standards of acceptable
37
- behavior and are expected to take appropriate and fair corrective action in
38
- response to any instances of unacceptable behavior.
32
+ Community leaders are responsible for clarifying and enforcing our standards of acceptable behavior and will take appropriate and fair corrective action in response to any behavior that they deem inappropriate, threatening, offensive, or harmful.
39
33
 
40
- Project maintainers have the right and responsibility to remove, edit, or
41
- reject comments, commits, code, wiki edits, issues, and other contributions
42
- that are not aligned to this Code of Conduct, or to ban temporarily or
43
- permanently any contributor for other behaviors that they deem inappropriate,
44
- threatening, offensive, or harmful.
34
+ Community leaders have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, and will communicate reasons for moderation decisions when appropriate.
45
35
 
46
36
  ## Scope
47
37
 
48
- This Code of Conduct applies both within project spaces and in public spaces
49
- when an individual is representing the project or its community. Examples of
50
- representing a project or community include using an official project e-mail
51
- address, posting via an official social media account, or acting as an appointed
52
- representative at an online or offline event. Representation of a project may be
53
- further defined and clarified by project maintainers.
38
+ This Code of Conduct applies within all community spaces, and also applies when an individual is officially representing the community in public spaces. Examples of representing our community include using an official e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event.
54
39
 
55
40
  ## Enforcement
56
41
 
57
- Instances of abusive, harassing, or otherwise unacceptable behavior may be
58
- reported by contacting the project team at <%= config[:email] %>. All
59
- complaints will be reviewed and investigated and will result in a response that
60
- is deemed necessary and appropriate to the circumstances. The project team is
61
- obligated to maintain confidentiality with regard to the reporter of an incident.
62
- Further details of specific enforcement policies may be posted separately.
42
+ Instances of abusive, harassing, or otherwise unacceptable behavior may be reported to the community leaders responsible for enforcement at <%= config[:email] %>. All complaints will be reviewed and investigated promptly and fairly.
43
+
44
+ All community leaders are obligated to respect the privacy and security of the reporter of any incident.
45
+
46
+ ## Enforcement Guidelines
47
+
48
+ Community leaders will follow these Community Impact Guidelines in determining the consequences for any action they deem in violation of this Code of Conduct:
49
+
50
+ ### 1. Correction
51
+
52
+ **Community Impact**: Use of inappropriate language or other behavior deemed unprofessional or unwelcome in the community.
53
+
54
+ **Consequence**: A private, written warning from community leaders, providing clarity around the nature of the violation and an explanation of why the behavior was inappropriate. A public apology may be requested.
55
+
56
+ ### 2. Warning
57
+
58
+ **Community Impact**: A violation through a single incident or series of actions.
63
59
 
64
- Project maintainers who do not follow or enforce the Code of Conduct in good
65
- faith may face temporary or permanent repercussions as determined by other
66
- members of the project's leadership.
60
+ **Consequence**: A warning with consequences for continued behavior. No interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, for a specified period of time. This includes avoiding interactions in community spaces as well as external channels like social media. Violating these terms may lead to a temporary or permanent ban.
61
+
62
+ ### 3. Temporary Ban
63
+
64
+ **Community Impact**: A serious violation of community standards, including sustained inappropriate behavior.
65
+
66
+ **Consequence**: A temporary ban from any sort of interaction or public communication with the community for a specified period of time. No public or private interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, is allowed during this period. Violating these terms may lead to a permanent ban.
67
+
68
+ ### 4. Permanent Ban
69
+
70
+ **Community Impact**: Demonstrating a pattern of violation of community standards, including sustained inappropriate behavior, harassment of an individual, or aggression toward or disparagement of classes of individuals.
71
+
72
+ **Consequence**: A permanent ban from any sort of public interaction within the community.
67
73
 
68
74
  ## Attribution
69
75
 
70
- This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,
71
- available at [https://contributor-covenant.org/version/1/4][version]
76
+ This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 2.0,
77
+ available at https://www.contributor-covenant.org/version/2/0/code_of_conduct.html.
78
+
79
+ Community Impact Guidelines were inspired by [Mozilla's code of conduct enforcement ladder](https://github.com/mozilla/diversity).
80
+
81
+ [homepage]: https://www.contributor-covenant.org
72
82
 
73
- [homepage]: https://contributor-covenant.org
74
- [version]: https://contributor-covenant.org/version/1/4/
83
+ For answers to common questions about this code of conduct, see the FAQ at
84
+ https://www.contributor-covenant.org/faq. Translations are available at https://www.contributor-covenant.org/translations.
@@ -1,12 +1,20 @@
1
+ # frozen_string_literal: true
2
+
1
3
  source "https://rubygems.org"
2
4
 
3
5
  # Specify your gem's dependencies in <%= config[:name] %>.gemspec
4
6
  gemspec
5
7
 
6
- gem "rake", "~> 12.0"
8
+ gem "rake", "~> 13.0"
7
9
  <%- if config[:ext] -%>
10
+
8
11
  gem "rake-compiler"
9
12
  <%- end -%>
10
13
  <%- if config[:test] -%>
14
+
11
15
  gem "<%= config[:test] %>", "~> <%= config[:test_framework_version] %>"
12
16
  <%- end -%>
17
+ <%- if config[:rubocop] -%>
18
+
19
+ gem "rubocop", "~> 0.80"
20
+ <%- end -%>
@@ -28,7 +28,7 @@ TODO: Write usage instructions here
28
28
 
29
29
  After checking out the repo, run `bin/setup` to install dependencies.<% if config[:test] %> Then, run `rake <%= config[:test].sub('mini', '').sub('rspec', 'spec') %>` to run the tests.<% end %> You can also run `bin/console` for an interactive prompt that will allow you to experiment.<% if config[:bin] %> Run `bundle exec <%= config[:name] %>` to use the gem in this directory, ignoring other installed copies of this gem.<% end %>
30
30
 
31
- To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
31
+ To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and the created tag, and push the `.gem` file to [rubygems.org](https://rubygems.org).
32
32
 
33
33
  ## Contributing
34
34
 
@@ -1,5 +1,9 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "bundler/gem_tasks"
2
- <% if config[:test] == "minitest" -%>
4
+ <% default_task_names = [config[:test_task]].compact -%>
5
+ <% case config[:test] -%>
6
+ <% when "minitest", "test-unit" -%>
3
7
  require "rake/testtask"
4
8
 
5
9
  Rake::TestTask.new(:test) do |t|
@@ -8,22 +12,32 @@ Rake::TestTask.new(:test) do |t|
8
12
  t.test_files = FileList["test/**/*_test.rb"]
9
13
  end
10
14
 
11
- <% elsif config[:test] == "rspec" -%>
15
+ <% when "rspec" -%>
12
16
  require "rspec/core/rake_task"
13
17
 
14
18
  RSpec::Core::RakeTask.new(:spec)
15
19
 
20
+ <% end -%>
21
+ <% if config[:rubocop] -%>
22
+ <% default_task_names << :rubocop -%>
23
+ require "rubocop/rake_task"
24
+
25
+ RuboCop::RakeTask.new
26
+
16
27
  <% end -%>
17
28
  <% if config[:ext] -%>
29
+ <% default_task_names.unshift(:clobber, :compile) -%>
18
30
  require "rake/extensiontask"
19
31
 
20
- task :build => :compile
32
+ task build: :compile
21
33
 
22
34
  Rake::ExtensionTask.new("<%= config[:underscored_name] %>") do |ext|
23
35
  ext.lib_dir = "lib/<%= config[:namespaced_path] %>"
24
36
  end
25
37
 
26
- task :default => [:clobber, :compile, :<%= config[:test_task] %>]
38
+ <% end -%>
39
+ <% if default_task_names.size == 1 -%>
40
+ task default: <%= default_task_names.first.inspect %>
27
41
  <% else -%>
28
- task :default => :<%= config[:test_task] %>
42
+ task default: %i[<%= default_task_names.join(" ") %>]
29
43
  <% end -%>
@@ -1,4 +1,5 @@
1
1
  #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
2
3
 
3
4
  require "bundler/setup"
4
5
  require "<%= config[:namespaced_path] %>"
@@ -0,0 +1,13 @@
1
+ version: 2.1
2
+ jobs:
3
+ build:
4
+ docker:
5
+ - image: ruby:<%= RUBY_VERSION %>
6
+ steps:
7
+ - checkout
8
+ - run:
9
+ name: Run the default task
10
+ command: |
11
+ gem install bundler -v <%= Bundler::VERSION %>
12
+ bundle install
13
+ bundle exec rake
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "mkmf"
2
4
 
3
5
  create_makefile(<%= config[:makefile_path].inspect %>)
@@ -0,0 +1,18 @@
1
+ name: Ruby
2
+
3
+ on: [push,pull_request]
4
+
5
+ jobs:
6
+ build:
7
+ runs-on: ubuntu-latest
8
+ steps:
9
+ - uses: actions/checkout@v2
10
+ - name: Set up Ruby
11
+ uses: ruby/setup-ruby@v1
12
+ with:
13
+ ruby-version: <%= RUBY_VERSION %>
14
+ - name: Run the default task
15
+ run: |
16
+ gem install bundler -v <%= Bundler::VERSION %>
17
+ bundle install
18
+ bundle exec rake
@@ -0,0 +1,9 @@
1
+ image: ruby:<%= RUBY_VERSION %>
2
+
3
+ before_script:
4
+ - gem install bundler -v <%= Bundler::VERSION %>
5
+ - bundle install
6
+
7
+ example_job:
8
+ script:
9
+ - bundle exec rake
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "<%= config[:namespaced_path] %>/version"
2
4
  <%- if config[:ext] -%>
3
5
  require "<%= config[:namespaced_path] %>/<%= config[:underscored_name] %>"
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  <%- config[:constant_array].each_with_index do |c, i| -%>
2
4
  <%= " " * i %>module <%= c %>
3
5
  <%- end -%>
@@ -1,4 +1,6 @@
1
- require_relative 'lib/<%=config[:namespaced_path]%>/version'
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "lib/<%=config[:namespaced_path]%>/version"
2
4
 
3
5
  Gem::Specification.new do |spec|
4
6
  spec.name = <%= config[:name].inspect %>
@@ -6,8 +8,8 @@ Gem::Specification.new do |spec|
6
8
  spec.authors = [<%= config[:author].inspect %>]
7
9
  spec.email = [<%= config[:email].inspect %>]
8
10
 
9
- spec.summary = %q{TODO: Write a short summary, because RubyGems requires one.}
10
- spec.description = %q{TODO: Write a longer description or delete this line.}
11
+ spec.summary = "TODO: Write a short summary, because RubyGems requires one."
12
+ spec.description = "TODO: Write a longer description or delete this line."
11
13
  spec.homepage = "TODO: Put your gem's website or public repo URL here."
12
14
  <%- if config[:mit] -%>
13
15
  spec.license = "MIT"
@@ -22,11 +24,11 @@ Gem::Specification.new do |spec|
22
24
 
23
25
  # Specify which files should be added to the gem when it is released.
24
26
  # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
25
- spec.files = Dir.chdir(File.expand_path('..', __FILE__)) do
26
- `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
27
+ spec.files = Dir.chdir(File.expand_path(__dir__)) do
28
+ `git ls-files -z`.split("\x0").reject { |f| f.match(%r{\A(?:test|spec|features)/}) }
27
29
  end
28
30
  spec.bindir = "exe"
29
- spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
31
+ spec.executables = spec.files.grep(%r{\Aexe/}) { |f| File.basename(f) }
30
32
  spec.require_paths = ["lib"]
31
33
  <%- if config[:ext] -%>
32
34
  spec.extensions = ["ext/<%= config[:underscored_name] %>/extconf.rb"]
@@ -0,0 +1,10 @@
1
+ Style/StringLiterals:
2
+ Enabled: true
3
+ EnforcedStyle: double_quotes
4
+
5
+ Style/StringLiteralsInInterpolation:
6
+ Enabled: true
7
+ EnforcedStyle: double_quotes
8
+
9
+ Layout/LineLength:
10
+ Max: 120
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  RSpec.describe <%= config[:constant_name] %> do
2
4
  it "has a version number" do
3
5
  expect(<%= config[:constant_name] %>::VERSION).not_to be nil
@@ -1,4 +1,5 @@
1
- require "bundler/setup"
1
+ # frozen_string_literal: true
2
+
2
3
  require "<%= config[:namespaced_path] %>"
3
4
 
4
5
  RSpec.configure do |config|
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "test_helper"
2
4
 
3
5
  class <%= config[:constant_name] %>Test < Minitest::Test
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  $LOAD_PATH.unshift File.expand_path("../lib", __dir__)
2
4
  require "<%= config[:namespaced_path] %>"
3
5
 
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "test_helper"
4
+
5
+ class <%= config[:constant_name] %>Test < Test::Unit::TestCase
6
+ test "VERSION" do
7
+ assert do
8
+ ::<%= config[:constant_name] %>.const_defined?(:VERSION)
9
+ end
10
+ end
11
+
12
+ test "something useful" do
13
+ assert_equal("expected", "actual")
14
+ end
15
+ end
@@ -0,0 +1,6 @@
1
+ # frozen_string_literal: true
2
+
3
+ $LOAD_PATH.unshift File.expand_path("../lib", __dir__)
4
+ require "<%= config[:namespaced_path] %>"
5
+
6
+ require "test-unit"
@@ -28,17 +28,17 @@ module Bundler
28
28
  tell_me(msg, :green, newline) if level("confirm")
29
29
  end
30
30
 
31
- def warn(msg, newline = nil)
31
+ def warn(msg, newline = nil, color = :yellow)
32
32
  return unless level("warn")
33
33
  return if @warning_history.include? msg
34
34
  @warning_history << msg
35
35
 
36
- tell_err(msg, :yellow, newline)
36
+ tell_err(msg, color, newline)
37
37
  end
38
38
 
39
- def error(msg, newline = nil)
39
+ def error(msg, newline = nil, color = :red)
40
40
  return unless level("error")
41
- tell_err(msg, :red, newline)
41
+ tell_err(msg, color, newline)
42
42
  end
43
43
 
44
44
  def debug(msg, newline = nil)
@@ -92,7 +92,7 @@ module Bundler
92
92
  []
93
93
  end
94
94
 
95
- private
95
+ private
96
96
 
97
97
  # valimism
98
98
  def tell_me(msg, color = nil, newline = nil)
@@ -2,7 +2,7 @@
2
2
 
3
3
  module Bundler
4
4
  module URICredentialsFilter
5
- module_function
5
+ module_function
6
6
 
7
7
  def credential_filtered_uri(uri_to_anonymize)
8
8
  return uri_to_anonymize if uri_to_anonymize.nil?
@@ -3,13 +3,6 @@ require_relative '../../../../uri/lib/uri'
3
3
  require 'cgi' # for escaping
4
4
  require_relative '../../../../connection_pool/lib/connection_pool'
5
5
 
6
- begin
7
- require 'net/http/pipeline'
8
- rescue LoadError
9
- end
10
-
11
- autoload :OpenSSL, 'openssl'
12
-
13
6
  ##
14
7
  # Persistent connections for Net::HTTP
15
8
  #
@@ -17,15 +10,11 @@ autoload :OpenSSL, 'openssl'
17
10
  # servers you wish to talk to. For each host:port you communicate with a
18
11
  # single persistent connection is created.
19
12
  #
20
- # Multiple Bundler::Persistent::Net::HTTP::Persistent objects will share the same set of
21
- # connections.
13
+ # Connections will be shared across threads through a connection pool to
14
+ # increase reuse of connections.
22
15
  #
23
- # For each thread you start a new connection will be created. A
24
- # Bundler::Persistent::Net::HTTP::Persistent connection will not be shared across threads.
25
- #
26
- # You can shut down the HTTP connections when done by calling #shutdown. You
27
- # should name your Bundler::Persistent::Net::HTTP::Persistent object if you intend to call this
28
- # method.
16
+ # You can shut down any remaining HTTP connections when done by calling
17
+ # #shutdown.
29
18
  #
30
19
  # Example:
31
20
  #
@@ -33,7 +22,7 @@ autoload :OpenSSL, 'openssl'
33
22
  #
34
23
  # uri = Bundler::URI 'http://example.com/awesome/web/service'
35
24
  #
36
- # http = Bundler::Persistent::Net::HTTP::Persistent.new name: 'my_app_name'
25
+ # http = Bundler::Persistent::Net::HTTP::Persistent.new
37
26
  #
38
27
  # # perform a GET
39
28
  # response = http.request uri
@@ -55,14 +44,14 @@ autoload :OpenSSL, 'openssl'
55
44
  # to use Bundler::URI#request_uri not Bundler::URI#path. The request_uri contains the query
56
45
  # params which are sent in the body for other requests.
57
46
  #
58
- # == SSL
47
+ # == TLS/SSL
59
48
  #
60
- # SSL connections are automatically created depending upon the scheme of the
61
- # Bundler::URI. SSL connections are automatically verified against the default
49
+ # TLS connections are automatically created depending upon the scheme of the
50
+ # Bundler::URI. TLS connections are automatically verified against the default
62
51
  # certificate store for your computer. You can override this by changing
63
52
  # verify_mode or by specifying an alternate cert_store.
64
53
  #
65
- # Here are the SSL settings, see the individual methods for documentation:
54
+ # Here are the TLS settings, see the individual methods for documentation:
66
55
  #
67
56
  # #certificate :: This client's certificate
68
57
  # #ca_file :: The certificate-authorities
@@ -72,7 +61,7 @@ autoload :OpenSSL, 'openssl'
72
61
  # #private_key :: The client's SSL private key
73
62
  # #reuse_ssl_sessions :: Reuse a previously opened SSL session for a new
74
63
  # connection
75
- # #ssl_timeout :: SSL session lifetime
64
+ # #ssl_timeout :: Session lifetime
76
65
  # #ssl_version :: Which specific SSL version to use
77
66
  # #verify_callback :: For server certificate verification
78
67
  # #verify_depth :: Depth of certificate verification
@@ -101,14 +90,15 @@ autoload :OpenSSL, 'openssl'
101
90
  #
102
91
  # === Segregation
103
92
  #
104
- # By providing an application name to ::new you can separate your connections
105
- # from the connections of other applications.
93
+ # Each Bundler::Persistent::Net::HTTP::Persistent instance has its own pool of connections. There
94
+ # is no sharing with other instances (as was true in earlier versions).
106
95
  #
107
96
  # === Idle Timeout
108
97
  #
109
- # If a connection hasn't been used for this number of seconds it will automatically be
110
- # reset upon the next use to avoid attempting to send to a closed connection.
111
- # The default value is 5 seconds. nil means no timeout. Set through #idle_timeout.
98
+ # If a connection hasn't been used for this number of seconds it will
99
+ # automatically be reset upon the next use to avoid attempting to send to a
100
+ # closed connection. The default value is 5 seconds. nil means no timeout.
101
+ # Set through #idle_timeout.
112
102
  #
113
103
  # Reducing this value may help avoid the "too many connection resets" error
114
104
  # when sending non-idempotent requests while increasing this value will cause
@@ -123,8 +113,9 @@ autoload :OpenSSL, 'openssl'
123
113
  #
124
114
  # The number of requests that should be made before opening a new connection.
125
115
  # Typically many keep-alive capable servers tune this to 100 or less, so the
126
- # 101st request will fail with ECONNRESET. If unset (default), this value has no
127
- # effect, if set, connections will be reset on the request after max_requests.
116
+ # 101st request will fail with ECONNRESET. If unset (default), this value has
117
+ # no effect, if set, connections will be reset on the request after
118
+ # max_requests.
128
119
  #
129
120
  # === Open Timeout
130
121
  #
@@ -136,45 +127,6 @@ autoload :OpenSSL, 'openssl'
136
127
  # Socket options may be set on newly-created connections. See #socket_options
137
128
  # for details.
138
129
  #
139
- # === Non-Idempotent Requests
140
- #
141
- # By default non-idempotent requests will not be retried per RFC 2616. By
142
- # setting retry_change_requests to true requests will automatically be retried
143
- # once.
144
- #
145
- # Only do this when you know that retrying a POST or other non-idempotent
146
- # request is safe for your application and will not create duplicate
147
- # resources.
148
- #
149
- # The recommended way to handle non-idempotent requests is the following:
150
- #
151
- # require 'bundler/vendor/net-http-persistent/lib/net/http/persistent'
152
- #
153
- # uri = Bundler::URI 'http://example.com/awesome/web/service'
154
- # post_uri = uri + 'create'
155
- #
156
- # http = Bundler::Persistent::Net::HTTP::Persistent.new name: 'my_app_name'
157
- #
158
- # post = Net::HTTP::Post.new post_uri.path
159
- # # ... fill in POST request
160
- #
161
- # begin
162
- # response = http.request post_uri, post
163
- # rescue Bundler::Persistent::Net::HTTP::Persistent::Error
164
- #
165
- # # POST failed, make a new request to verify the server did not process
166
- # # the request
167
- # exists_uri = uri + '...'
168
- # response = http.get exists_uri
169
- #
170
- # # Retry if it failed
171
- # retry if response.code == '404'
172
- # end
173
- #
174
- # The method of determining if the resource was created or not is unique to
175
- # the particular service you are using. Of course, you will want to add
176
- # protection from infinite looping.
177
- #
178
130
  # === Connection Termination
179
131
  #
180
132
  # If you are done using the Bundler::Persistent::Net::HTTP::Persistent instance you may shut down
@@ -195,38 +147,30 @@ class Bundler::Persistent::Net::HTTP::Persistent
195
147
  EPOCH = Time.at 0 # :nodoc:
196
148
 
197
149
  ##
198
- # Is OpenSSL available? This test works with autoload
150
+ # Is OpenSSL available?
199
151
 
200
- HAVE_OPENSSL = defined? OpenSSL::SSL # :nodoc:
152
+ HAVE_OPENSSL = begin # :nodoc:
153
+ require 'openssl'
154
+ true
155
+ rescue LoadError
156
+ false
157
+ end
201
158
 
202
159
  ##
203
- # The default connection pool size is 1/4 the allowed open files.
160
+ # The default connection pool size is 1/4 the allowed open files
161
+ # (<code>ulimit -n</code>) or 256 if your OS does not support file handle
162
+ # limits (typically windows).
204
163
 
205
- if Gem.win_platform? then
206
- DEFAULT_POOL_SIZE = 256
207
- else
164
+ if Process.const_defined? :RLIMIT_NOFILE
208
165
  DEFAULT_POOL_SIZE = Process.getrlimit(Process::RLIMIT_NOFILE).first / 4
166
+ else
167
+ DEFAULT_POOL_SIZE = 256
209
168
  end
210
169
 
211
170
  ##
212
171
  # The version of Bundler::Persistent::Net::HTTP::Persistent you are using
213
172
 
214
- VERSION = '3.1.0'
215
-
216
- ##
217
- # Exceptions rescued for automatic retry on ruby 2.0.0. This overlaps with
218
- # the exception list for ruby 1.x.
219
-
220
- RETRIED_EXCEPTIONS = [ # :nodoc:
221
- (Net::ReadTimeout if Net.const_defined? :ReadTimeout),
222
- IOError,
223
- EOFError,
224
- Errno::ECONNRESET,
225
- Errno::ECONNABORTED,
226
- Errno::EPIPE,
227
- (OpenSSL::SSL::SSLError if HAVE_OPENSSL),
228
- Timeout::Error,
229
- ].compact
173
+ VERSION = '4.0.0'
230
174
 
231
175
  ##
232
176
  # Error class for errors raised by Bundler::Persistent::Net::HTTP::Persistent. Various
@@ -353,6 +297,13 @@ class Bundler::Persistent::Net::HTTP::Persistent
353
297
 
354
298
  attr_accessor :max_requests
355
299
 
300
+ ##
301
+ # Number of retries to perform if a request fails.
302
+ #
303
+ # See also #max_retries=, Net::HTTP#max_retries=.
304
+
305
+ attr_reader :max_retries
306
+
356
307
  ##
357
308
  # The value sent in the Keep-Alive header. Defaults to 30. Not needed for
358
309
  # HTTP/1.1 servers.
@@ -365,8 +316,7 @@ class Bundler::Persistent::Net::HTTP::Persistent
365
316
  attr_accessor :keep_alive
366
317
 
367
318
  ##
368
- # A name for this connection. Allows you to keep your connections apart
369
- # from everybody else's.
319
+ # The name for this collection of persistent connections.
370
320
 
371
321
  attr_reader :name
372
322
 
@@ -495,23 +445,11 @@ class Bundler::Persistent::Net::HTTP::Persistent
495
445
 
496
446
  attr_reader :verify_mode
497
447
 
498
- ##
499
- # Enable retries of non-idempotent requests that change data (e.g. POST
500
- # requests) when the server has disconnected.
501
- #
502
- # This will in the worst case lead to multiple requests with the same data,
503
- # but it may be useful for some applications. Take care when enabling
504
- # this option to ensure it is safe to POST or perform other non-idempotent
505
- # requests to the server.
506
-
507
- attr_accessor :retry_change_requests
508
-
509
448
  ##
510
449
  # Creates a new Bundler::Persistent::Net::HTTP::Persistent.
511
450
  #
512
- # Set +name+ to keep your connections apart from everybody else's. Not
513
- # required currently, but highly recommended. Your library name should be
514
- # good enough. This parameter will be required in a future version.
451
+ # Set a +name+ for fun. Your library name should be good enough, but this
452
+ # otherwise has no purpose.
515
453
  #
516
454
  # +proxy+ may be set to a Bundler::URI::HTTP or :ENV to pick up proxy options from
517
455
  # the environment. See proxy_from_env for details.
@@ -524,8 +462,9 @@ class Bundler::Persistent::Net::HTTP::Persistent
524
462
  # proxy.password = 'hunter2'
525
463
  #
526
464
  # Set +pool_size+ to limit the maximum number of connections allowed.
527
- # Defaults to 1/4 the number of allowed file handles. You can have no more
528
- # than this many threads with active HTTP transactions.
465
+ # Defaults to 1/4 the number of allowed file handles or 256 if your OS does
466
+ # not support a limit on allowed file handles. You can have no more than
467
+ # this many threads with active HTTP transactions.
529
468
 
530
469
  def initialize name: nil, proxy: nil, pool_size: DEFAULT_POOL_SIZE
531
470
  @name = name
@@ -542,6 +481,7 @@ class Bundler::Persistent::Net::HTTP::Persistent
542
481
  @write_timeout = nil
543
482
  @idle_timeout = 5
544
483
  @max_requests = nil
484
+ @max_retries = 1
545
485
  @socket_options = []
546
486
  @ssl_generation = 0 # incremented when SSL session variables change
547
487
 
@@ -573,8 +513,6 @@ class Bundler::Persistent::Net::HTTP::Persistent
573
513
  @reuse_ssl_sessions = OpenSSL::SSL.const_defined? :Session
574
514
  end
575
515
 
576
- @retry_change_requests = false
577
-
578
516
  self.proxy = proxy if proxy
579
517
  end
580
518
 
@@ -635,7 +573,9 @@ class Bundler::Persistent::Net::HTTP::Persistent
635
573
 
636
574
  net_http_args = [uri.hostname, uri.port]
637
575
 
638
- if @proxy_uri and not proxy_bypass? uri.hostname, uri.port then
576
+ # I'm unsure if uri.host or uri.hostname should be checked against
577
+ # the proxy bypass list.
578
+ if @proxy_uri and not proxy_bypass? uri.host, uri.port then
639
579
  net_http_args.concat @proxy_args
640
580
  else
641
581
  net_http_args.concat [nil, nil, nil, nil]
@@ -655,9 +595,11 @@ class Bundler::Persistent::Net::HTTP::Persistent
655
595
  reset connection
656
596
  end
657
597
 
658
- http.read_timeout = @read_timeout if @read_timeout
659
- http.write_timeout = @write_timeout if @write_timeout && http.respond_to?(:write_timeout=)
660
- http.keep_alive_timeout = @idle_timeout if @idle_timeout
598
+ http.keep_alive_timeout = @idle_timeout if @idle_timeout
599
+ http.max_retries = @max_retries if http.respond_to?(:max_retries=)
600
+ http.read_timeout = @read_timeout if @read_timeout
601
+ http.write_timeout = @write_timeout if
602
+ @write_timeout && http.respond_to?(:write_timeout=)
661
603
 
662
604
  return yield connection
663
605
  rescue Errno::ECONNREFUSED
@@ -675,27 +617,14 @@ class Bundler::Persistent::Net::HTTP::Persistent
675
617
  end
676
618
 
677
619
  ##
678
- # Returns an error message containing the number of requests performed on
679
- # this connection
680
-
681
- def error_message connection
682
- connection.requests -= 1 # fixup
683
-
684
- age = Time.now - connection.last_use
685
-
686
- "after #{connection.requests} requests on #{connection.http.object_id}, " \
687
- "last used #{age} seconds ago"
688
- end
689
-
690
- ##
691
- # Bundler::URI::escape wrapper
620
+ # CGI::escape wrapper
692
621
 
693
622
  def escape str
694
623
  CGI.escape str if str
695
624
  end
696
625
 
697
626
  ##
698
- # Bundler::URI::unescape wrapper
627
+ # CGI::unescape wrapper
699
628
 
700
629
  def unescape str
701
630
  CGI.unescape str if str
@@ -738,6 +667,7 @@ class Bundler::Persistent::Net::HTTP::Persistent
738
667
  def finish connection
739
668
  connection.finish
740
669
 
670
+ connection.http.instance_variable_set :@last_communicated, nil
741
671
  connection.http.instance_variable_set :@ssl_session, nil unless
742
672
  @reuse_ssl_sessions
743
673
  end
@@ -746,24 +676,7 @@ class Bundler::Persistent::Net::HTTP::Persistent
746
676
  # Returns the HTTP protocol version for +uri+
747
677
 
748
678
  def http_version uri
749
- @http_versions["#{uri.host}:#{uri.port}"]
750
- end
751
-
752
- ##
753
- # Is +req+ idempotent according to RFC 2616?
754
-
755
- def idempotent? req
756
- case req.method
757
- when 'DELETE', 'GET', 'HEAD', 'OPTIONS', 'PUT', 'TRACE' then
758
- true
759
- end
760
- end
761
-
762
- ##
763
- # Is the request +req+ idempotent or is retry_change_requests allowed.
764
-
765
- def can_retry? req
766
- @retry_change_requests && !idempotent?(req)
679
+ @http_versions["#{uri.hostname}:#{uri.port}"]
767
680
  end
768
681
 
769
682
  ##
@@ -774,20 +687,20 @@ class Bundler::Persistent::Net::HTTP::Persistent
774
687
  end
775
688
 
776
689
  ##
777
- # Pipelines +requests+ to the HTTP server at +uri+ yielding responses if a
778
- # block is given. Returns all responses received.
690
+ # Set the maximum number of retries for a request.
779
691
  #
780
- # See
781
- # Net::HTTP::Pipeline[http://docs.seattlerb.org/net-http-pipeline/Net/HTTP/Pipeline.html]
782
- # for further details.
692
+ # Defaults to one retry.
783
693
  #
784
- # Only if <tt>net-http-pipeline</tt> was required before
785
- # <tt>net-http-persistent</tt> #pipeline will be present.
694
+ # Set this to 0 to disable retries.
786
695
 
787
- def pipeline uri, requests, &block # :yields: responses
788
- connection_for uri do |connection|
789
- connection.http.pipeline requests, &block
790
- end
696
+ def max_retries= retries
697
+ retries = retries.to_int
698
+
699
+ raise ArgumentError, "max_retries must be positive" if retries < 0
700
+
701
+ @max_retries = retries
702
+
703
+ reconnect
791
704
  end
792
705
 
793
706
  ##
@@ -828,7 +741,7 @@ class Bundler::Persistent::Net::HTTP::Persistent
828
741
 
829
742
  if @proxy_uri then
830
743
  @proxy_args = [
831
- @proxy_uri.host,
744
+ @proxy_uri.hostname,
832
745
  @proxy_uri.port,
833
746
  unescape(@proxy_uri.user),
834
747
  unescape(@proxy_uri.password),
@@ -903,14 +816,15 @@ class Bundler::Persistent::Net::HTTP::Persistent
903
816
  end
904
817
 
905
818
  ##
906
- # Forces reconnection of HTTP connections.
819
+ # Forces reconnection of all HTTP connections, including TLS/SSL
820
+ # connections.
907
821
 
908
822
  def reconnect
909
823
  @generation += 1
910
824
  end
911
825
 
912
826
  ##
913
- # Forces reconnection of SSL connections.
827
+ # Forces reconnection of only TLS/SSL connections.
914
828
 
915
829
  def reconnect_ssl
916
830
  @ssl_generation += 1
@@ -943,14 +857,8 @@ class Bundler::Persistent::Net::HTTP::Persistent
943
857
  # the response will not have been read).
944
858
  #
945
859
  # +req+ must be a Net::HTTPGenericRequest subclass (see Net::HTTP for a list).
946
- #
947
- # If there is an error and the request is idempotent according to RFC 2616
948
- # it will be retried automatically.
949
860
 
950
861
  def request uri, req = nil, &block
951
- retried = false
952
- bad_response = false
953
-
954
862
  uri = Bundler::URI uri
955
863
  req = request_setup req || uri
956
864
  response = nil
@@ -964,37 +872,12 @@ class Bundler::Persistent::Net::HTTP::Persistent
964
872
  response = http.request req, &block
965
873
 
966
874
  if req.connection_close? or
967
- (response.http_version <= '1.0' and
875
+ (response.http_version <= '1.0' and
968
876
  not response.connection_keep_alive?) or
969
- response.connection_close? then
877
+ response.connection_close? then
970
878
  finish connection
971
879
  end
972
- rescue Net::HTTPBadResponse => e
973
- message = error_message connection
974
-
975
- finish connection
976
-
977
- raise Error, "too many bad responses #{message}" if
978
- bad_response or not can_retry? req
979
-
980
- bad_response = true
981
- retry
982
- rescue *RETRIED_EXCEPTIONS => e
983
- request_failed e, req, connection if
984
- retried or not can_retry? req
985
-
986
- reset connection
987
-
988
- retried = true
989
- retry
990
- rescue Errno::EINVAL, Errno::ETIMEDOUT => e # not retried on ruby 2
991
- request_failed e, req, connection if retried or not can_retry? req
992
-
993
- reset connection
994
-
995
- retried = true
996
- retry
997
- rescue Exception => e
880
+ rescue Exception # make sure to close the connection when it was interrupted
998
881
  finish connection
999
882
 
1000
883
  raise
@@ -1003,26 +886,11 @@ class Bundler::Persistent::Net::HTTP::Persistent
1003
886
  end
1004
887
  end
1005
888
 
1006
- @http_versions["#{uri.host}:#{uri.port}"] ||= response.http_version
889
+ @http_versions["#{uri.hostname}:#{uri.port}"] ||= response.http_version
1007
890
 
1008
891
  response
1009
892
  end
1010
893
 
1011
- ##
1012
- # Raises an Error for +exception+ which resulted from attempting the request
1013
- # +req+ on the +connection+.
1014
- #
1015
- # Finishes the +connection+.
1016
-
1017
- def request_failed exception, req, connection # :nodoc:
1018
- due_to = "(due to #{exception.message} - #{exception.class})"
1019
- message = "too many connection resets #{due_to} #{error_message connection}"
1020
-
1021
- finish connection
1022
-
1023
- raise Error, message, exception.backtrace
1024
- end
1025
-
1026
894
  ##
1027
895
  # Creates a GET request if +req_or_uri+ is a Bundler::URI and adds headers to the
1028
896
  # request.
@@ -1030,7 +898,7 @@ class Bundler::Persistent::Net::HTTP::Persistent
1030
898
  # Returns the request.
1031
899
 
1032
900
  def request_setup req_or_uri # :nodoc:
1033
- req = if Bundler::URI === req_or_uri then
901
+ req = if req_or_uri.respond_to? 'request_uri' then
1034
902
  Net::HTTP::Get.new req_or_uri.request_uri
1035
903
  else
1036
904
  req_or_uri
@@ -1194,7 +1062,6 @@ application:
1194
1062
 
1195
1063
  reconnect_ssl
1196
1064
  end
1197
-
1198
1065
  end
1199
1066
 
1200
1067
  require_relative 'persistent/connection'