dependabot-uv 0.392.0 → 0.393.0

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: b1c6b85902cc78b5c3624f68a39a32e05a4d5206081bac206d54e8afa732489f
4
- data.tar.gz: 401140b860009a2650a5b96fde815fc50f3813ad60104516d5d50c8f9635799c
3
+ metadata.gz: b0b2c86fecd6361c11d682fd96da7135b08179f251f7a524d045824341ccbe9e
4
+ data.tar.gz: df43361f2dd0a76a17da2a6ea510086da7adadbe859d1d91975be7ebe84a61bc
5
5
  SHA512:
6
- metadata.gz: 399a2740238ae91547e49246a5fd309bfe228d2efbf05f9d8c9699201960158e92e115dd625b940a7a49a7664f683777957a371d9e5326af74823d883947a6f2
7
- data.tar.gz: 7a2307ab70008dcbb760977f20c226e3b659df68cc4adf867f237e8196db5fc7462f18a10ef5cfe5ba008d04641cc009e40b8def58596c70b1bc5346e0bae253
6
+ metadata.gz: 3117ccb8929d12b1caff2b31607e8b459fbb61008495f3f9c5b195e7d4b888cabd0d2b47de2535d130660db0b4fe51fc2aede86b856bcd237d5f3e2eb20da37b
7
+ data.tar.gz: 162286da713782ed33c25c4fcea096c4365edcf219ad4da6bb93812fd64792a569e92e86b3c20d4f8814f10f141b1bf010ba0c3cf44a3c6e553c814e1006aad2
@@ -277,8 +277,8 @@ module Dependabot
277
277
  normalized_directory = directory.gsub(%r{(^/|/$)}, "")
278
278
 
279
279
  repo_contents(dir: base_dir, raise_errors: false)
280
- .select { |file| T.unsafe(file).type == "dir" }
281
- .map { |f| T.unsafe(f).path.gsub(%r{^/?#{Regexp.escape(normalized_directory)}/?}, "") }
280
+ .select { |file| file.type == "dir" }
281
+ .map { |file| file.path.gsub(%r{^/?#{Regexp.escape(normalized_directory)}/?}, "") }
282
282
  end
283
283
 
284
284
  sig { params(paths: T::Array[String], pattern: String).returns(T::Array[String]) }
@@ -276,7 +276,7 @@ module Dependabot
276
276
  def req_files_for_dir(requirements_dir)
277
277
  dir = directory.gsub(%r{(^/|/$)}, "")
278
278
  relative_reqs_dir =
279
- requirements_dir.path&.gsub(%r{^/?#{Regexp.escape(dir)}/?}, "")
279
+ requirements_dir.path.gsub(%r{^/?#{Regexp.escape(dir)}/?}, "")
280
280
 
281
281
  fetch_requirement_files_from_path(relative_reqs_dir)
282
282
  end
@@ -321,7 +321,7 @@ module Dependabot
321
321
  sig { returns(T::Array[Dependabot::DependencyFile]) }
322
322
  def fetch_requirement_files_from_dirs
323
323
  repo_contents
324
- .select { |f| T.unsafe(f).type == "dir" }
324
+ .select { |f| f.type == "dir" }
325
325
  .flat_map { |dir| req_files_for_dir(dir) }
326
326
  end
327
327
 
@@ -333,10 +333,10 @@ module Dependabot
333
333
  end
334
334
  def filter_requirement_files(contents, base_path: nil)
335
335
  contents
336
- .select { |f| T.unsafe(f).type == "file" }
337
- .select { |f| file_matches_requirement_pattern?(T.unsafe(f).name) }
338
- .reject { |f| T.unsafe(f).size > MAX_FILE_SIZE }
339
- .map { |f| fetch_file_with_path(T.unsafe(f).name, base_path) }
336
+ .select { |f| f.type == "file" }
337
+ .select { |f| file_matches_requirement_pattern?(f.name) }
338
+ .reject { |f| f.size > MAX_FILE_SIZE }
339
+ .map { |f| fetch_file_with_path(f.name, base_path) }
340
340
  .select { |f| T.must(REQUIREMENT_FILE_PATTERNS[:filenames]).include?(f.name) || requirements_file?(f) }
341
341
  end
342
342
 
@@ -109,7 +109,53 @@ module Dependabot
109
109
 
110
110
  sig { returns(T::Array[Dependabot::DependencyFile]) }
111
111
  def workspace_member_pyproject_files
112
- dependency_files.select { |file| file.support_file? && file.name.end_with?("pyproject.toml") }
112
+ return [] if workspace_member_patterns.empty?
113
+
114
+ dependency_files.select do |file|
115
+ next false unless file.support_file? && file.name.end_with?("pyproject.toml")
116
+
117
+ workspace_member_file?(file)
118
+ end
119
+ end
120
+
121
+ # Only pyprojects declared under `[tool.uv.workspace].members` in the root
122
+ # manifest are true workspace members whose requirements should be updated.
123
+ # Editable `[tool.uv.sources]` path dependencies are separate packages that
124
+ # are fetched as support files for resolution but must not be modified.
125
+ sig { returns(T::Array[String]) }
126
+ def workspace_member_patterns
127
+ workspace_globs("members")
128
+ end
129
+
130
+ # uv removes paths matching `[tool.uv.workspace].exclude` after expanding
131
+ # `members`, so an excluded directory is not a workspace member even when it
132
+ # matches a `members` glob.
133
+ sig { returns(T::Array[String]) }
134
+ def workspace_exclude_patterns
135
+ workspace_globs("exclude")
136
+ end
137
+
138
+ sig { params(key: String).returns(T::Array[String]) }
139
+ def workspace_globs(key)
140
+ return [] unless pyproject
141
+
142
+ globs = parsed_pyproject.dig("tool", "uv", "workspace", key)
143
+ globs.is_a?(Array) ? globs.grep(String) : []
144
+ end
145
+
146
+ sig { params(file: Dependabot::DependencyFile).returns(T::Boolean) }
147
+ def workspace_member_file?(file)
148
+ member_dir = File.dirname(file.name)
149
+
150
+ return false if workspace_exclude_patterns.any? { |pattern| glob_matches_dir?(pattern, member_dir) }
151
+
152
+ workspace_member_patterns.any? { |pattern| glob_matches_dir?(pattern, member_dir) }
153
+ end
154
+
155
+ sig { params(pattern: String, dir: String).returns(T::Boolean) }
156
+ def glob_matches_dir?(pattern, dir)
157
+ normalized_pattern = pattern.gsub(%r{^\./}, "").chomp("/")
158
+ File.fnmatch?(normalized_pattern, dir, File::FNM_PATHNAME)
113
159
  end
114
160
 
115
161
  sig { returns(Dependabot::FileParsers::Base::DependencySet) }
@@ -213,29 +213,6 @@ module Dependabot
213
213
  )
214
214
  end
215
215
 
216
- sig { override.returns(T::Boolean) }
217
- def library?
218
- return false unless updating_pyproject?
219
- return false unless library_details
220
-
221
- return false if T.must(library_details)["name"].nil?
222
-
223
- # Hit PyPi and check whether there are details for a library with a
224
- # matching name and description
225
- index_response = Dependabot::RegistryClient.get(
226
- url: "https://pypi.org/pypi/#{normalised_name(T.must(library_details)['name'])}/json/"
227
- )
228
-
229
- return false unless index_response.status == 200
230
-
231
- pypi_info = JSON.parse(index_response.body)["info"] || {}
232
- pypi_info["summary"] == T.must(library_details)["description"]
233
- rescue Excon::Error::Timeout, Excon::Error::Socket
234
- false
235
- rescue URI::InvalidURIError
236
- false
237
- end
238
-
239
216
  sig { returns(T::Boolean) }
240
217
  def updating_pyproject?
241
218
  requirement_files.any? { |file| file.end_with?("pyproject.toml") }
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dependabot-uv
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.392.0
4
+ version: 0.393.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dependabot
@@ -15,28 +15,28 @@ dependencies:
15
15
  requirements:
16
16
  - - '='
17
17
  - !ruby/object:Gem::Version
18
- version: 0.392.0
18
+ version: 0.393.0
19
19
  type: :runtime
20
20
  prerelease: false
21
21
  version_requirements: !ruby/object:Gem::Requirement
22
22
  requirements:
23
23
  - - '='
24
24
  - !ruby/object:Gem::Version
25
- version: 0.392.0
25
+ version: 0.393.0
26
26
  - !ruby/object:Gem::Dependency
27
27
  name: dependabot-python
28
28
  requirement: !ruby/object:Gem::Requirement
29
29
  requirements:
30
30
  - - '='
31
31
  - !ruby/object:Gem::Version
32
- version: 0.392.0
32
+ version: 0.393.0
33
33
  type: :runtime
34
34
  prerelease: false
35
35
  version_requirements: !ruby/object:Gem::Requirement
36
36
  requirements:
37
37
  - - '='
38
38
  - !ruby/object:Gem::Version
39
- version: 0.392.0
39
+ version: 0.393.0
40
40
  - !ruby/object:Gem::Dependency
41
41
  name: debug
42
42
  requirement: !ruby/object:Gem::Requirement
@@ -301,7 +301,7 @@ licenses:
301
301
  - MIT
302
302
  metadata:
303
303
  bug_tracker_uri: https://github.com/dependabot/dependabot-core/issues
304
- changelog_uri: https://github.com/dependabot/dependabot-core/releases/tag/v0.392.0
304
+ changelog_uri: https://github.com/dependabot/dependabot-core/releases/tag/v0.393.0
305
305
  rdoc_options: []
306
306
  require_paths:
307
307
  - lib