Skip to content

Commit 5fc328e

Browse files
authored
Merge pull request #12837 from dependabot/phillmv/attach-dependencies-to-dep-file-in-go
Attach `dependencies` to the `DependencyFile` in `go_modules`'s `FileParser`
2 parents 6aa9a2b + d34f592 commit 5fc328e

File tree

2 files changed

+38
-4
lines changed

2 files changed

+38
-4
lines changed

go_modules/lib/dependabot/go_modules/file_parser.rb

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,14 @@ class FileParser < Dependabot::FileParsers::Base
2424
def parse
2525
dependency_set = Dependabot::FileParsers::Base::DependencySet.new
2626

27-
required_packages.each do |dep|
28-
dependency_set << dependency_from_details(dep) unless skip_dependency?(dep)
27+
required_packages.each do |hsh|
28+
unless skip_dependency?(hsh) # rubocop:disable Style/Next
29+
30+
dep = dependency_from_details(hsh)
31+
32+
T.must(go_mod).dependencies << dep
33+
dependency_set << dep
34+
end
2935
end
3036

3137
dependency_set.dependencies
@@ -96,11 +102,14 @@ def dependency_from_details(details)
96102
groups: []
97103
}]
98104

105+
is_indirect = details["Indirect"]
106+
99107
Dependency.new(
100108
name: details["Path"],
101109
version: version,
102-
requirements: details["Indirect"] ? [] : reqs,
103-
package_manager: "go_modules"
110+
requirements: is_indirect ? [] : reqs,
111+
package_manager: "go_modules",
112+
direct_relationship: !is_indirect
104113
)
105114
end
106115

go_modules/spec/dependabot/go_modules/file_parser_spec.rb

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -305,6 +305,31 @@
305305
its(:length) { is_expected.to eq(0) }
306306
end
307307

308+
context "with features needed to support DependencySubmission" do
309+
it "attaches the list of dependencies to the go_mod DependencyFile" do
310+
expect(parser.dependency_files.count).to eq(1)
311+
dep_file = parser.dependency_files.first
312+
expect(dep_file).to equal(go_mod)
313+
314+
# assert that the dependencies got correctly attached to the dep file
315+
dep_set = dependencies.to_set
316+
expect(dep_file.dependencies).to eq(dep_set)
317+
end
318+
319+
it "marks indirect dependencies accordingly" do
320+
# there are only 2 top-level dependencies
321+
expect(dependencies.count(&:direct?)).to eq(2)
322+
323+
# and 2 indirect dependencies
324+
indirect_deps = dependencies.reject(&:direct?)
325+
expect(indirect_deps.count).to eq(2)
326+
327+
indirect_deps_names = indirect_deps.map(&:name)
328+
expect(indirect_deps_names).to include("github.com/mattn/go-isatty")
329+
expect(indirect_deps_names).to include("github.com/mattn/go-colorable")
330+
end
331+
end
332+
308333
context "when using a monorepo" do
309334
let(:project_name) { "monorepo" }
310335
let(:repo_contents_path) { build_tmp_repo(project_name) }

0 commit comments

Comments
 (0)