@@ -672,7 +672,7 @@ extension Workspace {
672
672
metadata: packageRef. diagnosticsMetadata
673
673
) . trap {
674
674
switch state {
675
- case . added, . updated, . unchanged:
675
+ case . added, . updated, . unchanged, . usesLibrary :
676
676
break
677
677
case . removed:
678
678
try self . remove ( package : packageRef)
@@ -701,12 +701,27 @@ extension Workspace {
701
701
productFilter: state. products,
702
702
observabilityScope: observabilityScope
703
703
)
704
- case . removed, . unchanged:
704
+ case . removed, . unchanged, . usesLibrary :
705
705
break
706
706
}
707
707
}
708
708
}
709
709
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
+
710
725
// Inform the delegate if nothing was updated.
711
726
if packageStateChanges. filter ( { $0. 1 == . unchanged } ) . count == packageStateChanges. count {
712
727
delegate? . dependenciesUpToDate ( )
@@ -763,19 +778,6 @@ extension Workspace {
763
778
state: . custom( version: version, path: path) ,
764
779
subpath: RelativePath ( validating: " " )
765
780
)
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
-
779
781
self . state. dependencies. add ( dependency)
780
782
try self . state. save ( )
781
783
return path
@@ -960,6 +962,9 @@ extension Workspace {
960
962
/// The package is updated.
961
963
case updated( State )
962
964
965
+ /// The package is replaced with a prebuilt library
966
+ case usesLibrary( ProvidedLibrary )
967
+
963
968
public var description : String {
964
969
switch self {
965
970
case . added( let requirement) :
@@ -970,15 +975,17 @@ extension Workspace {
970
975
return " unchanged "
971
976
case . updated( let requirement) :
972
977
return " updated( \( requirement) ) "
978
+ case . usesLibrary( let library) :
979
+ return " usesLibrary( \( library. metadata. productName) ) "
973
980
}
974
981
}
975
982
976
983
public var isAddedOrUpdated : Bool {
977
984
switch self {
978
985
case . added, . updated:
979
- return true
980
- case . unchanged, . removed:
981
- return false
986
+ true
987
+ case . unchanged, . removed, . usesLibrary :
988
+ false
982
989
}
983
990
}
984
991
}
@@ -1096,18 +1103,20 @@ extension Workspace {
1096
1103
packageStateChanges [ binding. package . identity] = ( binding. package , . added( newState) )
1097
1104
}
1098
1105
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 {
1102
1108
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
1107
1113
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) )
1109
1115
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
+ ) )
1111
1120
}
1112
1121
packageStateChanges [ binding. package . identity] = ( binding. package , stateChange)
1113
1122
}
0 commit comments