Skip to content

Commit c3860f1

Browse files
committed
Refactor ManagedDependency to remove unnecessary helpers
1 parent 36764e9 commit c3860f1

File tree

4 files changed

+33
-33
lines changed

4 files changed

+33
-33
lines changed

Sources/SPMTestSupport/MockWorkspace.swift

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -464,13 +464,17 @@ public final class MockWorkspace {
464464
}
465465
switch state {
466466
case .checkout(let checkoutState):
467+
guard case .checkout(let dependencyCheckoutState) = dependency.state else {
468+
return XCTFail("Expected checked out dependency; found '\(dependency.state)' instead", file: file, line: line)
469+
}
470+
467471
switch checkoutState {
468472
case .version(let version):
469-
XCTAssertEqual(dependency.checkoutState?.version, version, file: file, line: line)
473+
XCTAssertEqual(dependencyCheckoutState.version, version, file: file, line: line)
470474
case .revision(let revision):
471-
XCTAssertEqual(dependency.checkoutState?.revision.identifier, revision, file: file, line: line)
475+
XCTAssertEqual(dependencyCheckoutState.revision.identifier, revision, file: file, line: line)
472476
case .branch(let branch):
473-
XCTAssertEqual(dependency.checkoutState?.branch, branch, file: file, line: line)
477+
XCTAssertEqual(dependencyCheckoutState.branch, branch, file: file, line: line)
474478
}
475479
case .edited(let path):
476480
if dependency.state != .edited(path) {

Sources/Workspace/ManagedDependency.swift

Lines changed: 9 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@ import TSCUtility
2121
public class ManagedDependency {
2222
/// Represents the state of the managed dependency.
2323
public enum State: Equatable {
24+
// The dependency is a local package.
25+
case local
2426

2527
/// The dependency is a managed checkout.
2628
case checkout(CheckoutState)
@@ -31,15 +33,6 @@ public class ManagedDependency {
3133
/// located at the path. In other words, this dependency is being used
3234
/// for top of the tree style development.
3335
case edited(AbsolutePath?)
34-
35-
// The dependency is a local package.
36-
case local
37-
38-
/// Returns true if state is checkout.
39-
var isCheckout: Bool {
40-
if case .checkout = self { return true }
41-
return false
42-
}
4336
}
4437

4538
/// The package reference.
@@ -48,6 +41,12 @@ public class ManagedDependency {
4841
/// The state of the managed dependency.
4942
public let state: State
5043

44+
/// Returns true if state is checkout.
45+
public var isCheckout: Bool {
46+
if case .checkout = state { return true }
47+
return false
48+
}
49+
5150
/// Returns true if the dependency is edited.
5251
public var isEdited: Bool {
5352
switch state {
@@ -58,13 +57,6 @@ public class ManagedDependency {
5857
}
5958
}
6059

61-
public var checkoutState: CheckoutState? {
62-
if case .checkout(let checkoutState) = state {
63-
return checkoutState
64-
}
65-
return nil
66-
}
67-
6860
/// The checked out path of the dependency on disk, relative to the workspace checkouts path.
6961
public let subpath: RelativePath
7062

@@ -75,10 +67,6 @@ public class ManagedDependency {
7567
/// unedit a package.
7668
public internal(set) var basedOn: ManagedDependency?
7769

78-
public var packageIdentity: PackageIdentity {
79-
self.package.identity
80-
}
81-
8270
public init(
8371
packageRef: PackageReference,
8472
subpath: RelativePath,
@@ -120,7 +108,7 @@ public class ManagedDependency {
120108
subpath: RelativePath,
121109
unmanagedPath: AbsolutePath?
122110
) {
123-
assert(dependency.state.isCheckout)
111+
assert(dependency.isCheckout)
124112
self.basedOn = dependency
125113
self.package = dependency.package
126114
self.subpath = subpath

Sources/Workspace/ResolverPrecomputationProvider.swift

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -122,30 +122,38 @@ private struct LocalPackageContainer: PackageContainer {
122122

123123
func getDependencies(at version: Version, productFilter: ProductFilter) throws -> [PackageContainerConstraint] {
124124
// Because of the implementation of `reversedVersions`, we should only get the exact same version.
125-
guard case .version(version, revision: _) = dependency?.checkoutState else {
126-
throw InternalError("expected version, but checkout state was \(String(describing: dependency?.checkoutState))")
125+
guard case .checkout(let checkoutState) = dependency?.state else {
126+
throw InternalError("expected dependency to be checked out")
127127
}
128+
129+
guard case .version = checkoutState else {
130+
throw InternalError("expected version, but checkout state was \(String(describing: checkoutState))")
131+
}
132+
128133
return try manifest.dependencyConstraints(productFilter: productFilter)
129134
}
130135

131136
func getDependencies(at revisionString: String, productFilter: ProductFilter) throws -> [PackageContainerConstraint] {
132137
// Return the dependencies if the checkout state matches the revision.
133138
let revision = Revision(identifier: revisionString)
134-
switch dependency?.checkoutState {
135-
case .branch(_, revision: revision), .revision(revision):
136-
return try manifest.dependencyConstraints(productFilter: productFilter)
137-
default:
139+
140+
guard case .checkout(let checkoutState) = dependency?.state,
141+
checkoutState.isBranchOrRevisionBased,
142+
checkoutState.revision == revision
143+
else {
138144
throw ResolverPrecomputationError.differentRequirement(
139145
package: self.package,
140146
state: self.dependency?.state,
141147
requirement: .revision(revisionString)
142148
)
143149
}
150+
151+
return try manifest.dependencyConstraints(productFilter: productFilter)
144152
}
145153

146154
func getUnversionedDependencies(productFilter: ProductFilter) throws -> [PackageContainerConstraint] {
147155
// Throw an error when the dependency is not unversioned to fail resolution.
148-
guard dependency?.state.isCheckout != true else {
156+
guard dependency?.isCheckout != true else {
149157
throw ResolverPrecomputationError.differentRequirement(
150158
package: package,
151159
state: dependency?.state,

Sources/Workspace/Workspace.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1147,7 +1147,7 @@ extension Workspace {
11471147
try fileSystem.removeFileTree(self.location.editsDirectory)
11481148
}
11491149

1150-
if let checkoutState = dependency.basedOn?.checkoutState {
1150+
if case .checkout(let checkoutState) = dependency.basedOn?.state {
11511151
// Restore the original checkout.
11521152
//
11531153
// The clone method will automatically update the managed dependency state.
@@ -1343,7 +1343,7 @@ extension Workspace {
13431343
func computePackageURLs() -> (required: Set<PackageReference>, missing: Set<PackageReference>) {
13441344
let manifestsMap: [PackageIdentity: Manifest] = Dictionary(uniqueKeysWithValues:
13451345
self.root.packages.map { ($0.key, $0.value.manifest) } +
1346-
self.dependencies.map { ($0.dependency.packageIdentity, $0.manifest) }
1346+
self.dependencies.map { ($0.dependency.package.identity, $0.manifest) }
13471347
)
13481348

13491349
var inputIdentities: Set<PackageReference> = []

0 commit comments

Comments
 (0)