Skip to content

Commit c370381

Browse files
committed
adopt swift-collections
motivation: replace TSC versions of ordered collections with the new ones from swift-collections changes: * pull in swift-collections as a dependency * update bootstrap script * adapt call-sites to swift-collections
1 parent 62c3458 commit c370381

File tree

13 files changed

+90
-47
lines changed

13 files changed

+90
-47
lines changed

CMakeLists.txt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ string(COMPARE EQUAL ${CMAKE_SYSTEM_NAME} Windows CMAKE_INSTALL_DEFAULT)
3737
option(USE_CMAKE_INSTALL
3838
"Install build products using cmake's install() instead of the bootstrap script's install()"
3939
${CMAKE_INSTALL_DEFAULT})
40-
40+
4141
if(BUILD_SHARED_LIBS)
4242
set(CMAKE_POSITION_INDEPENDENT_CODE YES)
4343
endif()
@@ -53,6 +53,7 @@ if(FIND_PM_DEPS)
5353
find_package(ArgumentParser CONFIG REQUIRED)
5454
find_package(SwiftCrypto CONFIG REQUIRED)
5555
find_package(SwiftDriver CONFIG REQUIRED)
56+
find_package(SwiftCollections CONFIG REQUIRED)
5657
endif()
5758

5859
find_package(dispatch QUIET)

CONTRIBUTING.md

Lines changed: 25 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -131,38 +131,45 @@ Please refer to the [_Get Started_ guide](https://github.com/apple/swift/blob/ma
131131

132132
1. Clone [llbuild](https://github.com/apple/swift-llbuild) beside the SwiftPM directory.
133133

134-
```bash
135-
$> git clone https://github.com/apple/swift-llbuild llbuild
136-
```
134+
```bash
135+
$> git clone https://github.com/apple/swift-llbuild llbuild
136+
```
137137

138138
Note: Make sure the directory for llbuild is called "llbuild" and not
139139
"swift-llbuild".
140140

141141
2. Clone [Yams](https://github.com/jpsim/yams) beside the SwiftPM directory.
142142

143-
```bash
144-
$> git clone https://github.com/jpsim/yams
145-
```
143+
```bash
144+
$> git clone https://github.com/jpsim/yams
145+
```
146146

147147
3. Clone [swift-driver](https://github.com/apple/swift-driver) beside the SwiftPM directory.
148148

149-
```bash
150-
$> git clone https://github.com/apple/swift-driver
151-
```
149+
```bash
150+
$> git clone https://github.com/apple/swift-driver
151+
```
152152

153153
4. Clone [swift-argument-parser](https://github.com/apple/swift-argument-parser) beside the SwiftPM directory and check out tag with the [latest version](https://github.com/apple/swift-argument-parser/tags).
154154

155-
For example, if the latest tag is 0.3.1:
156-
```bash
157-
$> git clone https://github.com/apple/swift-argument-parser --branch 0.3.1
158-
```
155+
For example, if the latest tag is 0.4.3:
156+
```bash
157+
$> git clone https://github.com/apple/swift-argument-parser --branch 0.4.3
158+
```
159159

160160
5. Clone [swift-crypto](https://github.com/apple/swift-crypto) beside the SwiftPM directory and check out tag with the [latest version](https://github.com/apple/swift-crypto/tags).
161-
162-
For example, if the latest tag is 1.1.3:
163-
```bash
164-
$> git clone https://github.com/apple/swift-crypto --branch 1.1.3
165-
```
161+
162+
For example, if the latest tag is 1.1.4:
163+
```bash
164+
$> git clone https://github.com/apple/swift-crypto --branch 1.1.4
165+
```
166+
167+
6. Clone [swift-collections](https://github.com/apple/swift-collections) beside the SwiftPM directory and check out tag with the [latest version](https://github.com/apple/swift-collections/tags).
168+
169+
For example, if the latest tag is 0.0.3:
170+
```bash
171+
$> git clone https://github.com/apple/swift-collections --branch 0.0.3
172+
```
166173

167174
#### Building
168175

Package.swift

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ import class Foundation.ProcessInfo
1515

1616

1717
/** SwiftPMDataModel is the subset of SwiftPM product that includes just its data model.
18-
This allowis some clients (such as IDEs) that use SwiftPM's data model but not its build system
18+
This allows some clients (such as IDEs) that use SwiftPM's data model but not its build system
1919
to not have to depend on SwiftDriver, SwiftLLBuild, etc. We should probably have better names here,
2020
though that could break some clients.
2121
*/
@@ -33,7 +33,7 @@ let swiftPMDataModelProduct = (
3333
]
3434
)
3535

36-
/** The `libSwiftPM` set of interfaces to programatically work with Swift
36+
/** The `libSwiftPM` set of interfaces to programmatically work with Swift
3737
packages. `libSwiftPM` includes all of the SwiftPM code except the
3838
command line tools, while `libSwiftPMDataModel` includes only the data model.
3939

@@ -126,7 +126,10 @@ let package = Package(
126126

127127
.target(
128128
name: "Basics",
129-
dependencies: ["SwiftToolsSupport-auto"]),
129+
dependencies: [
130+
.product(name: "OrderedCollections", package: "swift-collections"),
131+
"SwiftToolsSupport-auto"
132+
]),
130133

131134
.target(
132135
/** The llbuild manifest model */
@@ -356,12 +359,14 @@ if ProcessInfo.processInfo.environment["SWIFTCI_USE_LOCAL_DEPS"] == nil {
356359
.package(url: "https://github.com/apple/swift-argument-parser.git", .upToNextMinor(from: "0.4.3")),
357360
.package(url: "https://github.com/apple/swift-driver.git", .branch(relatedDependenciesBranch)),
358361
.package(url: "https://github.com/apple/swift-crypto.git", .upToNextMinor(from: "1.1.4")),
362+
.package(url: "https://github.com/apple/swift-collections.git", .upToNextMinor(from: "0.0.3")),
359363
]
360364
} else {
361365
package.dependencies += [
362366
.package(path: "../swift-tools-support-core"),
363367
.package(path: "../swift-argument-parser"),
364368
.package(path: "../swift-driver"),
365369
.package(path: "../swift-crypto"),
370+
.package(path: "../swift-collections"),
366371
]
367372
}

Sources/Basics/CMakeLists.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ add_library(Basics
1212
Dictionary+Extensions.swift
1313
DispatchTimeInterval+Extensions.swift
1414
Errors.swift
15+
Exports.swift
1516
FileSystem+Extensions.swift
1617
HTPClient+URLSession.swift
1718
HTTPClient.swift
@@ -21,6 +22,7 @@ add_library(Basics
2122
SQLiteBackedCache.swift
2223
Version+Extensions.swift)
2324
target_link_libraries(Basics PUBLIC
25+
OrderedCollections
2426
TSCBasic
2527
TSCUtility)
2628
target_link_libraries(Basics PRIVATE

Sources/Basics/Exports.swift

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
/*
2+
This source file is part of the Swift.org open source project
3+
4+
Copyright (c) 2021 Apple Inc. and the Swift project authors
5+
Licensed under Apache License v2.0 with Runtime Library Exception
6+
7+
See http://swift.org/LICENSE.txt for license information
8+
See http://swift.org/CONTRIBUTORS.txt for Swift project authors
9+
*/
10+
11+
import OrderedCollections
12+
13+
public typealias OrderedDictionary = OrderedCollections.OrderedDictionary
14+
public typealias OrderedSet = OrderedCollections.OrderedSet

Sources/Build/BuildPlan.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1987,7 +1987,7 @@ public class BuildPlan {
19871987
}
19881988

19891989
// Build cache
1990-
var cflagsCache: OrderedSet<String> = []
1990+
var cflagsCache: Basics.OrderedSet<String> = []
19911991
var libsCache: [String] = []
19921992
for tuple in ret {
19931993
for cFlag in tuple.cFlags {

Sources/PackageGraph/PackageGraph+Loading.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -603,7 +603,7 @@ fileprivate func findCycle(
603603
successors: (GraphLoadingNode) throws -> [GraphLoadingNode]
604604
) rethrows -> (path: [Manifest], cycle: [Manifest])? {
605605
// Ordered set to hold the current traversed path.
606-
var path = OrderedSet<Manifest>()
606+
var path = Basics.OrderedSet<Manifest>()
607607

608608
// Function to visit nodes recursively.
609609
// FIXME: Convert to stack.
@@ -612,7 +612,7 @@ fileprivate func findCycle(
612612
_ successors: (GraphLoadingNode) throws -> [GraphLoadingNode]
613613
) rethrows -> (path: [Manifest], cycle: [Manifest])? {
614614
// If this node is already in the current path then we have found a cycle.
615-
if !path.append(node.manifest) {
615+
if !path.append(node.manifest).inserted {
616616
let index = path.firstIndex(of: node.manifest)! // forced unwrap safe
617617
return (Array(path[path.startIndex..<index]), Array(path[index..<path.endIndex]))
618618
}

Sources/PackageGraph/Pubgrub/Incompatibility.swift

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,20 +16,20 @@ import PackageModel
1616
/// all be true at the same time. In dependency resolution, these are derived
1717
/// from version requirements and when running into unresolvable situations.
1818
public struct Incompatibility: Equatable, Hashable {
19-
public let terms: OrderedSet<Term>
19+
public let terms: Basics.OrderedSet<Term>
2020
public let cause: Cause
2121

22-
public init(terms: OrderedSet<Term>, cause: Cause) {
22+
public init(terms: Basics.OrderedSet<Term>, cause: Cause) {
2323
self.terms = terms
2424
self.cause = cause
2525
}
2626

2727
public init(_ terms: Term..., root: DependencyResolutionNode, cause: Cause = .root) throws {
28-
let termSet = OrderedSet(terms)
28+
let termSet = Basics.OrderedSet(terms)
2929
try self.init(termSet, root: root, cause: cause)
3030
}
3131

32-
public init(_ terms: OrderedSet<Term>, root: DependencyResolutionNode, cause: Cause) throws {
32+
public init(_ terms: Basics.OrderedSet<Term>, root: DependencyResolutionNode, cause: Cause) throws {
3333
if terms.isEmpty {
3434
self.init(terms: terms, cause: cause)
3535
return
@@ -43,7 +43,7 @@ public struct Incompatibility: Equatable, Hashable {
4343
terms = OrderedSet(terms.filter { !$0.isPositive || $0.node != root })
4444
}
4545

46-
let normalizedTerms = try normalize(terms: terms.contents)
46+
let normalizedTerms = try normalize(terms: terms.elements)
4747
assert(normalizedTerms.count > 0,
4848
"An incompatibility must contain at least one term after normalization.")
4949
self.init(terms: OrderedSet(normalizedTerms), cause: cause)
@@ -134,7 +134,7 @@ extension Incompatibility {
134134
/// requirements to a^1.5.0.
135135
fileprivate func normalize(terms: [Term]) throws -> [Term] {
136136

137-
let dict = try terms.reduce(into: OrderedDictionary<DependencyResolutionNode, (req: VersionSetSpecifier, polarity: Bool)>()) {
137+
let dict = try terms.reduce(into: Basics.OrderedDictionary<DependencyResolutionNode, (req: VersionSetSpecifier, polarity: Bool)>()) {
138138
res, term in
139139
// Don't try to intersect if this is the first time we're seeing this package.
140140
guard let previous = res[term.node] else {

Sources/PackageGraph/Pubgrub/PartialSolution.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ public struct PartialSolution {
2525

2626
/// The intersection of all positive assignments for each package, minus any
2727
/// negative assignments that refer to that package.
28-
public private(set) var _positive: OrderedDictionary<DependencyResolutionNode, Term> = [:]
28+
public private(set) var _positive: Basics.OrderedDictionary<DependencyResolutionNode, Term> = [:]
2929

3030
/// Union of all negative assignments for a package.
3131
///

Sources/PackageGraph/Pubgrub/PubgrubDependencyResolver.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -445,7 +445,7 @@ public struct PubgrubDependencyResolver {
445445
/// If a conflict is found, the conflicting incompatibility is returned to
446446
/// resolve the conflict on.
447447
internal func propagate(state: State, node: DependencyResolutionNode) throws {
448-
var changed: OrderedSet<DependencyResolutionNode> = [node]
448+
var changed: Basics.OrderedSet<DependencyResolutionNode> = [node]
449449

450450
while !changed.isEmpty {
451451
let package = changed.removeFirst()
@@ -1209,7 +1209,7 @@ private final class PubGrubPackageContainer {
12091209
throw InternalError("Unexpected unversioned requirement: \(constraint)")
12101210
}
12111211
return try constraint.nodes().map { dependencyNode in
1212-
var terms: OrderedSet<Term> = []
1212+
var terms: Basics.OrderedSet<Term> = []
12131213
terms.append(Term(node, .exact(version)))
12141214
terms.append(Term(not: dependencyNode, vs))
12151215
return try Incompatibility(terms, root: root, cause: .dependency(node: node))
@@ -1223,7 +1223,7 @@ private final class PubGrubPackageContainer {
12231223
products: node.productFilter)
12241224

12251225
return try constraints.map { constraint in
1226-
var terms: OrderedSet<Term> = []
1226+
var terms: Basics.OrderedSet<Term> = []
12271227
let lowerBound = lowerBounds[constraint.package] ?? "0.0.0"
12281228
let upperBound = upperBounds[constraint.package] ?? Version(version.major + 1, 0, 0)
12291229
assert(lowerBound < upperBound)

0 commit comments

Comments
 (0)