@@ -314,26 +314,26 @@ public struct PackageCollections: PackageCollectionsProtocol {
314
314
case . failure( let error) :
315
315
callback ( . failure( error) )
316
316
case . success( let collections) :
317
- var packageCollections = [ PackageReference : ( package : Model . Package , collections: Set < Model . CollectionIdentifier > ) ] ( )
317
+ var packageCollections = [ PackageIdentity : ( package : Model . Package , collections: Set < Model . CollectionIdentifier > ) ] ( )
318
318
// Use package data from the most recently processed collection
319
319
collections. sorted ( by: { $0. lastProcessedAt > $1. lastProcessedAt } ) . forEach { collection in
320
320
collection. packages. forEach { package in
321
- var entry = packageCollections. removeValue ( forKey: package . reference )
321
+ var entry = packageCollections. removeValue ( forKey: package . identity )
322
322
if entry == nil {
323
323
entry = ( package , . init( ) )
324
324
}
325
325
326
326
if var entry = entry {
327
327
entry. collections. insert ( collection. identifier)
328
- packageCollections [ package . reference ] = entry
328
+ packageCollections [ package . identity ] = entry
329
329
}
330
330
}
331
331
}
332
332
333
333
let result = PackageCollectionsModel . PackageSearchResult (
334
334
items: packageCollections. sorted { $0. value. package . displayName < $1. value. package . displayName }
335
335
. map { entry in
336
- . init( package : entry. value. package , collections: Array ( entry. value. collections) )
336
+ . init( package : entry. value. package , collections: Array ( entry. value. collections) )
337
337
}
338
338
)
339
339
callback ( . success( result) )
@@ -343,32 +343,46 @@ public struct PackageCollections: PackageCollectionsProtocol {
343
343
344
344
// MARK: - Package Metadata
345
345
346
+ @available ( * , deprecated, message: " user identity based API instead " )
346
347
public func getPackageMetadata( _ reference: PackageReference ,
347
348
callback: @escaping ( Result < PackageCollectionsModel . PackageMetadata , Error > ) -> Void ) {
348
349
self . getPackageMetadata ( reference, collections: nil , callback: callback)
349
350
}
350
351
352
+ @available ( * , deprecated, message: " user identity based API instead " )
351
353
public func getPackageMetadata( _ reference: PackageReference ,
352
354
collections: Set < PackageCollectionsModel . CollectionIdentifier > ? ,
353
355
callback: @escaping ( Result < PackageCollectionsModel . PackageMetadata , Error > ) -> Void ) {
356
+ self . getPackageMetadata ( reference. identity, collections: nil , callback: callback)
357
+ }
358
+
359
+ public func getPackageMetadata( _ identity: PackageIdentity ,
360
+ callback: @escaping ( Result < PackageCollectionsModel . PackageMetadata , Error > ) -> Void ) {
361
+ self . getPackageMetadata ( identity, collections: nil , callback: callback)
362
+ }
363
+
364
+ public func getPackageMetadata( _ identity: PackageIdentity ,
365
+ collections: Set < PackageCollectionsModel . CollectionIdentifier > ? ,
366
+ callback: @escaping ( Result < PackageCollectionsModel . PackageMetadata , Error > ) -> Void ) {
354
367
guard Self . isSupportedPlatform else {
355
368
return callback ( . failure( PackageCollectionError . unsupportedPlatform) )
356
369
}
357
370
358
371
// first find in storage
359
- self . findPackage ( reference : reference , collections: collections) { result in
372
+ self . findPackage ( identity : identity , collections: collections) { result in
360
373
switch result {
361
374
case . failure( let error) :
362
375
callback ( . failure( error) )
363
376
case . success( let packageSearchResult) :
377
+
364
378
// then try to get more metadata from provider (optional)
365
- let authTokenType = self . metadataProvider. getAuthTokenType ( for: reference )
379
+ let authTokenType = self . metadataProvider. getAuthTokenType ( for: packageSearchResult . package . location )
366
380
let isAuthTokenConfigured = authTokenType. flatMap { self . configuration. authTokens ( ) ? [ $0] } != nil
367
381
368
- self . metadataProvider. get ( reference ) { result in
382
+ self . metadataProvider. get ( identity : packageSearchResult . package . identity , location : packageSearchResult . package . location ) { result in
369
383
switch result {
370
384
case . failure( let error) :
371
- self . diagnosticsEngine? . emit ( warning: " Failed fetching information about \( reference ) from \( self . metadataProvider. name) : \( error) " )
385
+ self . diagnosticsEngine? . emit ( warning: " Failed fetching information about \( identity ) from \( self . metadataProvider. name) : \( error) " )
372
386
373
387
let provider : PackageMetadataProviderContext ?
374
388
switch error {
@@ -517,7 +531,7 @@ public struct PackageCollections: PackageCollectionsProtocol {
517
531
}
518
532
}
519
533
520
- func findPackage( reference : PackageReference ,
534
+ func findPackage( identity : PackageIdentity ,
521
535
collections: Set < PackageCollectionsModel . CollectionIdentifier > ? ,
522
536
callback: @escaping ( Result < PackageCollectionsModel . PackageSearchResult . Item , Error > ) -> Void ) {
523
537
self . storage. sources. list { result in
@@ -530,17 +544,17 @@ public struct PackageCollections: PackageCollectionsProtocol {
530
544
collectionIdentifiers = collectionIdentifiers. filter { collections. contains ( $0) }
531
545
}
532
546
if collectionIdentifiers. isEmpty {
533
- return callback ( . failure( NotFoundError ( " \( reference ) " ) ) )
547
+ return callback ( . failure( NotFoundError ( " \( identity ) " ) ) )
534
548
}
535
- self . storage. collections. findPackage ( identifier: reference . identity, collectionIdentifiers: collectionIdentifiers) { findPackageResult in
549
+ self . storage. collections. findPackage ( identifier: identity, collectionIdentifiers: collectionIdentifiers) { findPackageResult in
536
550
switch findPackageResult {
537
551
case . failure( let error) :
538
552
callback ( . failure( error) )
539
553
case . success( let packagesCollections) :
540
554
// A package identity can be associated with multiple repository URLs
541
- let matches = packagesCollections. packages. filter { $0. reference . canonicalLocation == reference . canonicalLocation }
555
+ let matches = packagesCollections. packages. filter { $0. identity == identity }
542
556
guard let package = matches. first else {
543
- return callback ( . failure( NotFoundError ( " \( reference ) " ) ) )
557
+ return callback ( . failure( NotFoundError ( " \( identity ) " ) ) )
544
558
}
545
559
callback ( . success( . init( package : package , collections: packagesCollections. collections) ) )
546
560
}
@@ -550,22 +564,22 @@ public struct PackageCollections: PackageCollectionsProtocol {
550
564
}
551
565
552
566
private func targetListResultFromCollections( _ collections: [ Model . Collection ] ) -> Model . TargetListResult {
553
- var packageCollections = [ PackageReference : ( package : Model . Package , collections: Set < Model . CollectionIdentifier > ) ] ( )
554
- var targetsPackages = [ String : ( target: Model . Target , packages: Set < PackageReference > ) ] ( )
567
+ var packageCollections = [ PackageIdentity : ( package : Model . Package , collections: Set < Model . CollectionIdentifier > ) ] ( )
568
+ var targetsPackages = [ String : ( target: Model . Target , packages: Set < PackageIdentity > ) ] ( )
555
569
556
570
collections. forEach { collection in
557
571
collection. packages. forEach { package in
558
572
// Avoid copy-on-write: remove entry from dictionary before mutating
559
- var entry = packageCollections. removeValue ( forKey: package . reference ) ?? ( package , . init( ) )
573
+ var entry = packageCollections. removeValue ( forKey: package . identity ) ?? ( package , . init( ) )
560
574
entry. collections. insert ( collection. identifier)
561
- packageCollections [ package . reference ] = entry
575
+ packageCollections [ package . identity ] = entry
562
576
563
577
package . versions. forEach { version in
564
578
version. manifests. values. forEach { manifest in
565
579
manifest. targets. forEach { target in
566
580
// Avoid copy-on-write: remove entry from dictionary before mutating
567
581
var entry = targetsPackages. removeValue ( forKey: target. name) ?? ( target: target, packages: . init( ) )
568
- entry. packages. insert ( package . reference )
582
+ entry. packages. insert ( package . identity )
569
583
targetsPackages [ target. name] = entry
570
584
}
571
585
}
@@ -586,7 +600,8 @@ public struct PackageCollections: PackageCollectionsProtocol {
586
600
)
587
601
}
588
602
}
589
- return . init( repository: pair. package . repository,
603
+ return . init( identity: pair. package . identity,
604
+ location: pair. package . location,
590
605
summary: pair. package . summary,
591
606
versions: versions,
592
607
collections: Array ( pair. collections) )
@@ -614,7 +629,8 @@ public struct PackageCollections: PackageCollectionsProtocol {
614
629
versions. sort ( by: > )
615
630
616
631
return Model . Package (
617
- repository: package . repository,
632
+ identity: package . identity,
633
+ location: package . location,
618
634
summary: basicMetadata? . summary ?? package . summary,
619
635
keywords: basicMetadata? . keywords ?? package . keywords,
620
636
versions: versions,
@@ -634,9 +650,3 @@ private struct UnknownProvider: Error {
634
650
self . sourceType = sourceType
635
651
}
636
652
}
637
-
638
- private extension PackageReference {
639
- var canonicalLocation : String {
640
- ( self . location. hasSuffix ( " .git " ) ? String ( self . location. dropLast ( 4 ) ) : self . location) . lowercased ( )
641
- }
642
- }
0 commit comments