@@ -672,7 +672,7 @@ extension Workspace {
672672 metadata: packageRef. diagnosticsMetadata
673673 ) . trap {
674674 switch state {
675- case . added, . updated, . unchanged:
675+ case . added, . updated, . unchanged, . usesLibrary :
676676 break
677677 case . removed:
678678 try self . remove ( package : packageRef)
@@ -701,12 +701,27 @@ extension Workspace {
701701 productFilter: state. products,
702702 observabilityScope: observabilityScope
703703 )
704- case . removed, . unchanged:
704+ case . removed, . unchanged, . usesLibrary :
705705 break
706706 }
707707 }
708708 }
709709
710+ // Handle provided libraries
711+ for (packageRef, state) in packageStateChanges {
712+ observabilityScope. makeChildScope (
713+ description: " adding provided libraries " ,
714+ metadata: packageRef. diagnosticsMetadata
715+ ) . trap {
716+ if case . usesLibrary( let library) = state {
717+ try self . state. dependencies. add (
718+ . providedLibrary( packageRef: packageRef, library: library)
719+ )
720+ try self . state. save ( )
721+ }
722+ }
723+ }
724+
710725 // Inform the delegate if nothing was updated.
711726 if packageStateChanges. filter ( { $0. 1 == . unchanged } ) . count == packageStateChanges. count {
712727 delegate? . dependenciesUpToDate ( )
@@ -763,19 +778,6 @@ extension Workspace {
763778 state: . custom( version: version, path: path) ,
764779 subpath: RelativePath ( validating: " " )
765780 )
766- self . state. dependencies. add ( dependency)
767- try self . state. save ( )
768- return path
769- } else if let libraryContainer = container as? ProvidedLibraryPackageContainer {
770- guard case . providedLibrary( _, let path) = libraryContainer. package . kind else {
771- throw InternalError ( " invalid container for \( package . identity) of type \( package . kind) " )
772- }
773-
774- let dependency : ManagedDependency = try . providedLibrary(
775- packageRef: libraryContainer. package ,
776- version: version
777- )
778-
779781 self . state. dependencies. add ( dependency)
780782 try self . state. save ( )
781783 return path
@@ -960,6 +962,9 @@ extension Workspace {
960962 /// The package is updated.
961963 case updated( State )
962964
965+ /// The package is replaced with a prebuilt library
966+ case usesLibrary( ProvidedLibrary )
967+
963968 public var description : String {
964969 switch self {
965970 case . added( let requirement) :
@@ -970,15 +975,17 @@ extension Workspace {
970975 return " unchanged "
971976 case . updated( let requirement) :
972977 return " updated( \( requirement) ) "
978+ case . usesLibrary( let library) :
979+ return " usesLibrary( \( library. metadata. productName) ) "
973980 }
974981 }
975982
976983 public var isAddedOrUpdated : Bool {
977984 switch self {
978985 case . added, . updated:
979- return true
980- case . unchanged, . removed:
981- return false
986+ true
987+ case . unchanged, . removed, . usesLibrary :
988+ false
982989 }
983990 }
984991 }
@@ -1096,18 +1103,20 @@ extension Workspace {
10961103 packageStateChanges [ binding. package . identity] = ( binding. package , . added( newState) )
10971104 }
10981105
1099- case . version( let version, _) :
1100- let stateChange : PackageStateChange
1101- switch currentDependency? . state {
1106+ case . version( let version, let library) :
1107+ let stateChange : PackageStateChange = switch currentDependency? . state {
11021108 case . sourceControlCheckout( . version( version, _) ) ,
1103- . registryDownload( version) ,
1104- . providedLibrary( _, version: version) ,
1105- . custom( version, _) :
1106- stateChange = . unchanged
1109+ . registryDownload( version) ,
1110+ . providedLibrary( _, version: version) ,
1111+ . custom( version, _) :
1112+ library . flatMap { . usesLibrary ( $0 ) } ?? . unchanged
11071113 case . edited, . fileSystem, . sourceControlCheckout, . registryDownload, . providedLibrary, . custom:
1108- stateChange = . updated( . init( requirement: . version( version) , products: binding. products) )
1114+ . updated( . init( requirement: . version( version) , products: binding. products) )
11091115 case nil :
1110- stateChange = . added( . init( requirement: . version( version) , products: binding. products) )
1116+ library. flatMap { . usesLibrary( $0) } ?? . added( . init(
1117+ requirement: . version( version) ,
1118+ products: binding. products
1119+ ) )
11111120 }
11121121 packageStateChanges [ binding. package . identity] = ( binding. package , stateChange)
11131122 }
0 commit comments