dependabot-core 0.86.2 → 0.86.3

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 3fb583a981c621530496015f73a782429b0568609b5f31d09ed89c5838293aba
4
- data.tar.gz: a222bd74ffef9dbac2666a0d0d6497d5acb8c021193901c9527b0f7389c3a709
3
+ metadata.gz: 79480d8761aa9ae5e22a3d197b8c81770866eaf147d8b245c64d57d3b9134e12
4
+ data.tar.gz: 1c955f487998a185bb77262a1b442b098ad72c68b2cd8be0352bf81a6a31f616
5
5
  SHA512:
6
- metadata.gz: fc857dd517079e25d749762439b309b1804fc527b5ed5bfa5a42c8876107912b04c435569c5727576e29b1d4d17b32f6d487c9a02ac1576127fdc7c369064f09
7
- data.tar.gz: 7921325dfc09e1f68188ea80e1ed324c6ff0a1c3540bcf9e37f716da3aafedb24b929353b84a93aadc6241aed3277e73eca70e5c36399fffde1ed28193aed193
6
+ metadata.gz: edb02105ebee6e2d9285b927833e0de0e51f752a9033f963baa4b627c0242f5445c9522f526ef8952a8cc8cf7c6a5d4d11eb7d0e90e9fe7659f32aa84934c7cb
7
+ data.tar.gz: 46e9c2785aa3148c36b59ee9a3eb518317bbcfa54668f859ad84b6d30887c58a90698004fa0abb5513d349304164a45678fb79f960648c88ffb9445cf44f79e4
data/CHANGELOG.md CHANGED
@@ -1,3 +1,7 @@
1
+ ## v0.86.3, 19 December 2018
2
+
3
+ - Ruby: Fetch gemspec to look for source if API is not available
4
+
1
5
  ## v0.86.2, 18 December 2018
2
6
 
3
7
  - Allow .NET repos with a src directory through
@@ -19,21 +19,18 @@ module Dependabot
19
19
  ).freeze
20
20
 
21
21
  def homepage_url
22
- if new_source_type == "default" || new_source_type == "rubygems"
23
- if rubygems_listing["homepage_uri"]
24
- return rubygems_listing["homepage_uri"]
25
- end
26
- end
22
+ return super unless %w(default rubygems).include?(new_source_type)
23
+ return super unless rubygems_api_response["homepage_uri"]
27
24
 
28
- super
25
+ rubygems_api_response["homepage_uri"]
29
26
  end
30
27
 
31
28
  private
32
29
 
33
30
  def look_up_source
34
31
  case new_source_type
35
- when "default", "rubygems" then find_source_from_rubygems_listing
36
32
  when "git" then find_source_from_git_url
33
+ when "default", "rubygems" then find_source_from_rubygems
37
34
  else raise "Unexpected source type: #{new_source_type}"
38
35
  end
39
36
  end
@@ -48,8 +45,15 @@ module Dependabot
48
45
  sources.first[:type] || sources.first.fetch("type")
49
46
  end
50
47
 
51
- def find_source_from_rubygems_listing
52
- source_url = rubygems_listing.
48
+ def find_source_from_rubygems
49
+ api_source = find_source_from_rubygems_api_response
50
+ return api_source if api_source || new_source_type == "default"
51
+
52
+ find_source_from_gemspec_download
53
+ end
54
+
55
+ def find_source_from_rubygems_api_response
56
+ source_url = rubygems_api_response.
53
57
  values_at(*SOURCE_KEYS).
54
58
  compact.
55
59
  find { |url| Source.from_url(url) }
@@ -64,8 +68,54 @@ module Dependabot
64
68
  Source.from_url(url)
65
69
  end
66
70
 
67
- def rubygems_listing
68
- return @rubygems_listing unless @rubygems_listing.nil?
71
+ def find_source_from_gemspec_download
72
+ github_urls = []
73
+ return unless rubygems_marshalled_gemspec_response
74
+
75
+ rubygems_marshalled_gemspec_response.scan(Source::SOURCE_REGEX) do
76
+ github_urls << Regexp.last_match.to_s
77
+ end
78
+
79
+ source_url = github_urls.find do |url|
80
+ repo = Source.from_url(url).repo
81
+ repo.downcase.end_with?(dependency.name)
82
+ end
83
+ return unless source_url
84
+
85
+ Source.from_url(source_url)
86
+ end
87
+
88
+ # Note: This response MUST NOT be unmarshalled
89
+ # (as calling Marshal.load is unsafe)
90
+ def rubygems_marshalled_gemspec_response
91
+ if defined?(@rubygems_marshalled_gemspec_response)
92
+ return @rubygems_marshalled_gemspec_response
93
+ end
94
+
95
+ gemspec_uri =
96
+ "#{registry_url}quick/Marshal.4.8/"\
97
+ "#{dependency.name}-#{dependency.version}.gemspec.rz"
98
+
99
+ response =
100
+ Excon.get(
101
+ gemspec_uri,
102
+ headers: registry_auth_headers,
103
+ idempotent: true,
104
+ **SharedHelpers.excon_defaults
105
+ )
106
+
107
+ if response.status >= 400
108
+ return @rubygems_marshalled_gemspec_response = nil
109
+ end
110
+
111
+ @rubygems_marshalled_gemspec_response =
112
+ Zlib::Inflate.inflate(response.body)
113
+ rescue Zlib::DataError
114
+ @rubygems_marshalled_gemspec_response = nil
115
+ end
116
+
117
+ def rubygems_api_response
118
+ return @rubygems_api_response if defined?(@rubygems_api_response)
69
119
 
70
120
  response =
71
121
  Excon.get(
@@ -74,13 +124,15 @@ module Dependabot
74
124
  idempotent: true,
75
125
  **SharedHelpers.excon_defaults
76
126
  )
127
+ return @rubygems_api_response = {} if response.status >= 400
128
+
77
129
  response_body = response.body
78
130
  response_body = augment_private_response_if_appropriate(response_body)
79
131
 
80
- @rubygems_listing = JSON.parse(response_body)
81
- append_slash_to_source_code_uri(@rubygems_listing)
132
+ @rubygems_api_response = JSON.parse(response_body)
133
+ append_slash_to_source_code_uri(@rubygems_api_response)
82
134
  rescue JSON::ParserError, Excon::Error::Timeout
83
- @rubygems_listing = {}
135
+ @rubygems_api_response = {}
84
136
  end
85
137
 
86
138
  def append_slash_to_source_code_uri(listing)
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Dependabot
4
- VERSION = "0.86.2"
4
+ VERSION = "0.86.3"
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dependabot-core
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.86.2
4
+ version: 0.86.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dependabot
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-12-18 00:00:00.000000000 Z
11
+ date: 2018-12-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: aws-sdk-ecr