Skip to content

Commit df47d1b

Browse files
refactor(deps): move dependencies to package (fanal#535)
Co-authored-by: knqyf263 <[email protected]>
1 parent ef8d773 commit df47d1b

File tree

4 files changed

+35
-58
lines changed

4 files changed

+35
-58
lines changed

analyzer/language/analyze.go

Lines changed: 16 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -20,27 +20,32 @@ func Analyze(fileType, filePath string, r dio.ReadSeekerAt, parser godeptypes.Pa
2020
return ToAnalysisResult(fileType, filePath, "", parsedLibs, parsedDependencies), nil
2121
}
2222

23-
func ToAnalysisResult(fileType, filePath, libFilePath string, libs []godeptypes.Library, deps []godeptypes.Dependency) *analyzer.AnalysisResult {
23+
func ToAnalysisResult(fileType, filePath, libFilePath string, libs []godeptypes.Library, depGraph []godeptypes.Dependency) *analyzer.AnalysisResult {
2424
if len(libs) == 0 {
2525
return nil
2626
}
2727

28+
deps := make(map[string][]string)
29+
for _, dep := range depGraph {
30+
deps[dep.ID] = dep.DependsOn
31+
}
32+
2833
var pkgs []types.Package
2934
for _, lib := range libs {
3035
pkgs = append(pkgs, types.Package{
31-
ID: lib.ID,
32-
Name: lib.Name,
33-
Version: lib.Version,
34-
FilePath: libFilePath,
35-
Indirect: lib.Indirect,
36-
License: lib.License,
36+
ID: lib.ID,
37+
Name: lib.Name,
38+
Version: lib.Version,
39+
FilePath: libFilePath,
40+
Indirect: lib.Indirect,
41+
License: lib.License,
42+
DependsOn: deps[lib.ID],
3743
})
3844
}
3945
apps := []types.Application{{
40-
Type: fileType,
41-
FilePath: filePath,
42-
Libraries: pkgs,
43-
Dependencies: deps,
46+
Type: fileType,
47+
FilePath: filePath,
48+
Libraries: pkgs,
4449
}}
4550

4651
return &analyzer.AnalysisResult{Applications: apps}

test/integration/library_test.go

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -294,15 +294,9 @@ func checkLangPkgs(detail types.ArtifactDetail, t *testing.T, tc testCase) {
294294
sort.Slice(app.Libraries, func(i, j int) bool {
295295
return app.Libraries[i].FilePath < app.Libraries[j].FilePath
296296
})
297-
298-
sort.Slice(app.Dependencies, func(i, j int) bool {
299-
return strings.Compare(app.Dependencies[i].ID, app.Dependencies[j].ID) < 0
300-
})
301-
302-
for i := range app.Dependencies {
303-
sort.Strings(app.Dependencies[i].DependsOn)
297+
for i := range app.Libraries {
298+
sort.Strings(app.Libraries[i].DependsOn)
304299
}
305-
306300
}
307301

308302
// Do not compare layers

test/integration/testdata/goldens/vuln-image1.2.3.expectedlibs.golden

Lines changed: 12 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -759,7 +759,8 @@
759759
760760
"Name": "loose-envify",
761761
"Version": "1.4.0",
762-
"Layer": {}
762+
"Layer": {},
763+
"DependsOn": ["[email protected]"]
763764
},
764765
{
765766
@@ -771,19 +772,22 @@
771772
772773
"Name": "promise",
773774
"Version": "8.0.3",
774-
"Layer": {}
775+
"Layer": {},
776+
"DependsOn": ["[email protected]"]
775777
},
776778
{
777779
778780
"Name": "prop-types",
779781
"Version": "15.7.2",
780-
"Layer": {}
782+
"Layer": {},
783+
781784
},
782785
{
783786
784787
"Name": "react",
785788
"Version": "16.8.6",
786-
"Layer": {}
789+
"Layer": {},
790+
787791
},
788792
{
789793
@@ -795,46 +799,22 @@
795799
796800
"Name": "redux",
797801
"Version": "4.0.1",
798-
"Layer": {}
802+
"Layer": {},
803+
799804
},
800805
{
801806
802807
"Name": "scheduler",
803808
"Version": "0.13.6",
804-
"Layer": {}
809+
"Layer": {},
810+
805811
},
806812
{
807813
808814
"Name": "symbol-observable",
809815
"Version": "1.2.0",
810816
"Layer": {}
811817
}
812-
],
813-
"Dependencies" : [
814-
{
815-
816-
"DependsOn": ["[email protected]"]
817-
},
818-
{
819-
820-
"DependsOn": ["[email protected]"]
821-
},
822-
{
823-
824-
825-
},
826-
{
827-
828-
829-
},
830-
{
831-
832-
833-
},
834-
{
835-
836-
837-
}
838818
]
839819
},
840820
{

types/artifact.go

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ package types
33
import (
44
"time"
55

6-
godeptypes "github.com/aquasecurity/go-dep-parser/pkg/types"
76
v1 "github.com/google/go-containerregistry/pkg/v1"
87
)
98

@@ -38,9 +37,11 @@ type Package struct {
3837
Modularitylabel string `json:",omitempty"` // only for Red Hat based distributions
3938
BuildInfo *BuildInfo `json:",omitempty"` // only for Red Hat
4039

41-
Indirect bool `json:",omitempty"`
42-
License string `json:",omitempty"`
43-
Layer Layer `json:",omitempty"`
40+
Indirect bool `json:",omitempty"` // this package is direct dependency of the project or not
41+
DependsOn []string `json:",omitempty"` // dependencies of this package
42+
43+
License string `json:",omitempty"`
44+
Layer Layer `json:",omitempty"`
4445

4546
// Each package metadata have the file path, while the package from lock files does not have.
4647
FilePath string `json:",omitempty"`
@@ -77,9 +78,6 @@ type Application struct {
7778

7879
// Libraries is a list of lang-specific packages
7980
Libraries []Package
80-
81-
// Dependencies represents dependency graph
82-
Dependencies []godeptypes.Dependency `json:",omitempty"`
8381
}
8482

8583
type File struct {

0 commit comments

Comments
 (0)