@@ -7,7 +7,7 @@ struct PackageDependency: Codable {
77 let dependencies : [ PackageDependency ]
88}
99
10- struct SwiftPUrl : Codable , RawRepresentable {
10+ struct SwiftPUrl : Codable , RawRepresentable , Hashable {
1111 let scheme : String , type : String , source : String , name : String , version : String
1212
1313 var rawValue : String { " \( self . scheme) : \( self . type) / \( self . source) / \( self . name) @ \( self . version) " }
@@ -42,7 +42,7 @@ struct GithubDependencyGraph: Codable {
4242 self . relationship = relationship
4343 }
4444 }
45- let name : String , file : File , resolved : [ SwiftPUrl : Package ]
45+ let name : String , file : File , resolved : [ String : Package ]
4646 }
4747 let version : Int , sha : String , ref : String , job : Job , detector : Detector ,
4848 scanned : Date , manifests : [ String : Manifest ]
@@ -81,14 +81,16 @@ func main() {
8181 var resolved = [ SwiftPUrl: GithubDependencyGraph . Manifest. Package] ( )
8282
8383 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 {
8785 guard let url = URL ( string: dep. url) else {
8886 fail ( " Invalid URL for package \( dep. identity) " )
8987 }
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,
9294 dependencies: dep. dependencies. map {
9395 SwiftPUrl ( with: URL ( string: $0. url) !, version: $0. version) . rawValue
9496 } . sorted ( ) ,
@@ -110,7 +112,7 @@ func main() {
110112 manifests: [ " Package.resolved " : . init(
111113 name: " Package.resolved " ,
112114 file: . init( source_location: " Package.resolved " ) ,
113- resolved: resolved
115+ resolved: . init ( uniqueKeysWithValues : resolved. map { ( $0 . rawValue , $1 ) } )
114116 ) ]
115117 )
116118
0 commit comments