@@ -7,7 +7,7 @@ struct PackageDependency: Codable {
7
7
let dependencies : [ PackageDependency ]
8
8
}
9
9
10
- struct SwiftPUrl : Codable , RawRepresentable {
10
+ struct SwiftPUrl : Codable , RawRepresentable , Hashable {
11
11
let scheme : String , type : String , source : String , name : String , version : String
12
12
13
13
var rawValue : String { " \( self . scheme) : \( self . type) / \( self . source) / \( self . name) @ \( self . version) " }
@@ -42,7 +42,7 @@ struct GithubDependencyGraph: Codable {
42
42
self . relationship = relationship
43
43
}
44
44
}
45
- let name : String , file : File , resolved : [ SwiftPUrl : Package ]
45
+ let name : String , file : File , resolved : [ String : Package ]
46
46
}
47
47
let version : Int , sha : String , ref : String , job : Job , detector : Detector ,
48
48
scanned : Date , manifests : [ String : Manifest ]
@@ -81,14 +81,16 @@ func main() {
81
81
var resolved = [ SwiftPUrl: GithubDependencyGraph . Manifest. Package] ( )
82
82
83
83
func handleDeps( _ dependencies: [ PackageDependency ] ) {
84
- for dep in dependencies where !resolved. keys. contains ( dep. identity) {
85
- handleDeps ( dep. dependencies)
86
- guard !resolved. keys. contains ( dep. identity) else { continue }
84
+ for dep in dependencies {
87
85
guard let url = URL ( string: dep. url) else {
88
86
fail ( " Invalid URL for package \( dep. identity) " )
89
87
}
90
- resolved [ . init( with: url, version: dep. version) ] = . init(
91
- package_url: . init( with: url, version: dep. version) ,
88
+ let purl = SwiftPUrl ( with: url, version: dep. version)
89
+ guard !resolved. keys. contains ( purl) else { continue }
90
+ handleDeps ( dep. dependencies)
91
+ guard !resolved. keys. contains ( purl) else { continue }
92
+ resolved [ purl] = . init(
93
+ package_url: purl,
92
94
dependencies: dep. dependencies. map {
93
95
SwiftPUrl ( with: URL ( string: $0. url) !, version: $0. version) . rawValue
94
96
} . sorted ( ) ,
@@ -110,7 +112,7 @@ func main() {
110
112
manifests: [ " Package.resolved " : . init(
111
113
name: " Package.resolved " ,
112
114
file: . init( source_location: " Package.resolved " ) ,
113
- resolved: resolved
115
+ resolved: . init ( uniqueKeysWithValues : resolved. map { ( $0 . rawValue , $1 ) } )
114
116
) ]
115
117
)
116
118
0 commit comments