Skip to content

Commit adb61b3

Browse files
committed
refactor ManagedDependencies
motivation: ManagedDependencies are based on location instead of on identity, refactor them to be based on identity as part of the transition to identity based logic changes: * transition ManagedDependencies underlying hashmap to be based on identity * update the ManagedDependencies edit state to include the "basedOn" property which is only relevant to that state * update callsites to use package identity instead of location when reading/writing managed depedencies * refactor related call-sites to handle edited state more safely and correctly * adjust tests where needed
1 parent 9ccbfdf commit adb61b3

File tree

6 files changed

+342
-295
lines changed

6 files changed

+342
-295
lines changed

Sources/SPMTestSupport/MockWorkspace.swift

Lines changed: 27 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -378,7 +378,7 @@ public final class MockWorkspace {
378378

379379
public func set(
380380
pins: [PackageReference: CheckoutState] = [:],
381-
managedDependencies: [ManagedDependency] = [],
381+
managedDependencies: [Workspace.ManagedDependency] = [],
382382
managedArtifacts: [Workspace.ManagedArtifact] = []
383383
) throws {
384384
let workspace = try self.getOrCreateWorkspace()
@@ -399,7 +399,7 @@ public final class MockWorkspace {
399399
workspace.state.artifacts.add(artifact)
400400
}
401401

402-
try workspace.state.saveState()
402+
try workspace.state.save()
403403
}
404404

405405
public func resetState() throws {
@@ -420,24 +420,32 @@ public final class MockWorkspace {
420420
}
421421

422422
public struct ManagedDependencyResult {
423-
public let managedDependencies: ManagedDependencies
423+
public let managedDependencies: Workspace.ManagedDependencies
424424

425-
public init(_ managedDependencies: ManagedDependencies) {
425+
public init(_ managedDependencies: Workspace.ManagedDependencies) {
426426
self.managedDependencies = managedDependencies
427427
}
428428

429429
public func check(notPresent name: String, file: StaticString = #file, line: UInt = #line) {
430-
let dependency = self.managedDependencies[forNameOrIdentity: name]
431-
XCTAssert(dependency == nil, "Unexpectedly found \(name) in managed dependencies", file: file, line: line)
430+
self.check(notPresent: .plain(name), file: file, line: line)
431+
}
432+
433+
public func check(notPresent dependencyId: PackageIdentity, file: StaticString = #file, line: UInt = #line) {
434+
let dependency = self.managedDependencies[dependencyId]
435+
XCTAssertNil(dependency, "Unexpectedly found \(dependencyId) in managed dependencies", file: file, line: line)
432436
}
433437

434438
public func checkEmpty(file: StaticString = #file, line: UInt = #line) {
435439
XCTAssertEqual(self.managedDependencies.count, 0, file: file, line: line)
436440
}
437441

438442
public func check(dependency name: String, at state: State, file: StaticString = #file, line: UInt = #line) {
439-
guard let dependency = managedDependencies[forNameOrIdentity: name] else {
440-
XCTFail("\(name) does not exists", file: file, line: line)
443+
self.check(dependency: .plain(name), at: state, file: file, line: line)
444+
}
445+
446+
public func check(dependency dependencyId: PackageIdentity, at state: State, file: StaticString = #file, line: UInt = #line) {
447+
guard let dependency = managedDependencies[dependencyId] else {
448+
XCTFail("\(dependencyId) does not exists", file: file, line: line)
441449
return
442450
}
443451
switch state {
@@ -451,8 +459,9 @@ public final class MockWorkspace {
451459
XCTAssertEqual(dependency.checkoutState?.branch, branch, file: file, line: line)
452460
}
453461
case .edited(let path):
454-
if dependency.state != .edited(path) {
462+
guard case .edited(_, unmanagedPath: path) = dependency.state else {
455463
XCTFail("Expected edited dependency; found '\(dependency.state)' instead", file: file, line: line)
464+
return
456465
}
457466
case .local:
458467
if dependency.state != .local {
@@ -726,3 +735,12 @@ extension CheckoutState {
726735
}
727736
}
728737
}
738+
739+
extension Workspace.ManagedDependency {
740+
public var checkoutState: CheckoutState? {
741+
if case .checkout(let checkoutState) = state {
742+
return checkoutState
743+
}
744+
return nil
745+
}
746+
}

0 commit comments

Comments
 (0)