Skip to content

Commit 3925579

Browse files
committed
Add relativePath
1 parent fbca3e6 commit 3925579

File tree

7 files changed

+112
-102
lines changed

7 files changed

+112
-102
lines changed

Sources/Commands/PackageCommands/AddDependency.swift

Lines changed: 21 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -93,8 +93,6 @@ extension SwiftPackageCommand {
9393
workspace: Workspace,
9494
url: String
9595
) throws {
96-
let identity = PackageIdentity(url: .init(url))
97-
9896
// Collect all of the possible version requirements.
9997
var requirements: [PackageDependency.SourceControl.Requirement] = []
10098
if let exact {
@@ -144,17 +142,18 @@ extension SwiftPackageCommand {
144142
}
145143
}
146144

147-
let packageDependency: PackageDependency = .sourceControl(
148-
identity: identity,
149-
nameForTargetDependencyResolutionOnly: nil,
150-
location: .remote(.init(url)),
151-
requirement: requirement,
145+
let packageDependency: MappablePackageDependency = .init(
146+
parentPackagePath: packagePath,
147+
kind: .sourceControl(
148+
name: nil,
149+
location: url,
150+
requirement: requirement
151+
),
152152
productFilter: .everything,
153153
traits: []
154154
)
155155

156156
try applyEdits(
157-
packagePath: packagePath,
158157
workspace: workspace,
159158
packageDependency: packageDependency
160159
)
@@ -165,8 +164,6 @@ extension SwiftPackageCommand {
165164
workspace: Workspace,
166165
id: String
167166
) throws {
168-
let identity: PackageIdentity = .plain(id)
169-
170167
// Collect all of the possible version requirements.
171168
var requirements: [PackageDependency.Registry.Requirement] = []
172169
if let exact {
@@ -208,16 +205,17 @@ extension SwiftPackageCommand {
208205
}
209206
}
210207

211-
let packageDependency: PackageDependency = .registry(
212-
identity: identity,
213-
requirement: requirement,
208+
let packageDependency: MappablePackageDependency = .init(
209+
parentPackagePath: packagePath,
210+
kind: .registry(
211+
id: id,
212+
requirement: requirement
213+
),
214214
productFilter: .everything,
215215
traits: []
216216
)
217217

218-
219218
try applyEdits(
220-
packagePath: packagePath,
221219
workspace: workspace,
222220
packageDependency: packageDependency
223221
)
@@ -228,33 +226,29 @@ extension SwiftPackageCommand {
228226
workspace: Workspace,
229227
directory: String
230228
) throws {
231-
guard let path = try? Basics.AbsolutePath(validating: directory) else {
232-
throw StringError("Package path not found")
233-
}
234-
let identity = PackageIdentity(path: path)
235-
let packageDependency: PackageDependency = .fileSystem(
236-
identity: identity,
237-
nameForTargetDependencyResolutionOnly: nil,
238-
path: path,
229+
let packageDependency: MappablePackageDependency = .init(
230+
parentPackagePath: packagePath,
231+
kind: .fileSystem(
232+
name: nil,
233+
path: directory
234+
),
239235
productFilter: .everything,
240236
traits: []
241237
)
242238

243239
try applyEdits(
244-
packagePath: packagePath,
245240
workspace: workspace,
246241
packageDependency: packageDependency
247242
)
248243
}
249244

250245
private func applyEdits(
251-
packagePath: Basics.AbsolutePath,
252246
workspace: Workspace,
253-
packageDependency: PackageDependency
247+
packageDependency: MappablePackageDependency
254248
) throws {
255249
// Load the manifest file
256250
let fileSystem = workspace.fileSystem
257-
let manifestPath = packagePath.appending(component: Manifest.filename)
251+
let manifestPath = packageDependency.parentPackagePath.appending(component: Manifest.filename)
258252
let manifestContents: ByteString
259253
do {
260254
manifestContents = try fileSystem.readFileContents(manifestPath)

Sources/Commands/PackageCommands/AddTarget.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,7 @@ extension SwiftPackageCommand {
114114

115115
let editResult = try PackageModelSyntax.AddTarget.addTarget(
116116
target,
117+
packagePath: packagePath,
117118
to: manifestSyntax,
118119
configuration: .init(testHarness: testingLibrary),
119120
installedSwiftPMConfiguration: swiftCommandState

Sources/PackageModelSyntax/AddPackageDependency.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ public struct AddPackageDependency {
3434
/// Produce the set of source edits needed to add the given package
3535
/// dependency to the given manifest file.
3636
public static func addPackageDependency(
37-
_ dependency: PackageDependency,
37+
_ dependency: MappablePackageDependency,
3838
to manifest: SourceFileSyntax
3939
) throws -> PackageEditResult {
4040
// Make sure we have a suitable tools version in the manifest.
@@ -57,7 +57,7 @@ public struct AddPackageDependency {
5757

5858
/// Implementation of adding a package dependency to an existing call.
5959
static func addPackageDependencyLocal(
60-
_ dependency: PackageDependency,
60+
_ dependency: MappablePackageDependency,
6161
to packageCall: FunctionCallExprSyntax
6262
) throws -> FunctionCallExprSyntax {
6363
try packageCall.appendingToArrayArgument(

Sources/PackageModelSyntax/AddTarget.swift

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@ public struct AddTarget {
6262
/// new target.
6363
public static func addTarget(
6464
_ target: TargetDescription,
65+
packagePath: AbsolutePath,
6566
to manifest: SourceFileSyntax,
6667
configuration: Configuration = .init(),
6768
installedSwiftPMConfiguration: InstalledSwiftPMConfiguration = .default
@@ -135,7 +136,8 @@ public struct AddTarget {
135136
newPackageCall = try AddPackageDependency
136137
.addPackageDependencyLocal(
137138
.swiftSyntax(
138-
configuration: installedSwiftPMConfiguration
139+
packagePath: packagePath,
140+
configuration: installedSwiftPMConfiguration
139141
),
140142
to: newPackageCall
141143
)
@@ -340,25 +342,28 @@ fileprivate let macroTargetDependencies: [TargetDescription.Dependency] = [
340342
]
341343

342344
/// The package dependency for swift-syntax, for use in macros.
343-
fileprivate extension PackageDependency {
345+
fileprivate extension MappablePackageDependency {
344346
/// Source control URL for the swift-syntax package.
345347
static var swiftSyntaxURL: SourceControlURL {
346348
"https://github.com/swiftlang/swift-syntax.git"
347349
}
348350

349351
/// Package dependency on the swift-syntax package.
350352
static func swiftSyntax(
351-
configuration: InstalledSwiftPMConfiguration
352-
) -> PackageDependency {
353+
packagePath: AbsolutePath,
354+
configuration: InstalledSwiftPMConfiguration
355+
) -> MappablePackageDependency {
353356
let swiftSyntaxVersionDefault = configuration
354357
.swiftSyntaxVersionForMacroTemplate
355358
let swiftSyntaxVersion = Version(swiftSyntaxVersionDefault.description)!
356359

357-
return .sourceControl(
358-
identity: PackageIdentity(url: swiftSyntaxURL),
359-
nameForTargetDependencyResolutionOnly: nil,
360-
location: .remote(swiftSyntaxURL),
361-
requirement: .range(.upToNextMajor(from: swiftSyntaxVersion)),
360+
return .init(
361+
parentPackagePath: packagePath,
362+
kind: .sourceControl(
363+
name: nil,
364+
location: swiftSyntaxURL.absoluteString,
365+
requirement: .range(.upToNextMajor(from: swiftSyntaxVersion))
366+
),
362367
productFilter: .everything,
363368
traits: []
364369
)

Sources/PackageModelSyntax/PackageDependency+Syntax.swift renamed to Sources/PackageModelSyntax/MappablePackageDependency+Syntax.swift

Lines changed: 8 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -16,31 +16,15 @@ import SwiftParser
1616
import SwiftSyntax
1717
import struct TSCUtility.Version
1818

19-
extension PackageDependency: ManifestSyntaxRepresentable {
19+
extension MappablePackageDependency: ManifestSyntaxRepresentable {
2020
func asSyntax() -> ExprSyntax {
21-
switch self {
22-
case .fileSystem(let filesystem): filesystem.asSyntax()
23-
case .sourceControl(let sourceControl): sourceControl.asSyntax()
24-
case .registry(let registry): registry.asSyntax()
25-
}
26-
}
27-
}
28-
29-
extension PackageDependency.FileSystem: ManifestSyntaxRepresentable {
30-
func asSyntax() -> ExprSyntax {
31-
".package(path: \(literal: path.description))"
32-
}
33-
}
34-
35-
extension PackageDependency.SourceControl: ManifestSyntaxRepresentable {
36-
func asSyntax() -> ExprSyntax {
37-
// TODO: Not handling identity, nameForTargetDependencyResolutionOnly,
38-
// or productFilter yet.
39-
switch location {
40-
case .local:
41-
fatalError()
42-
case .remote(let url):
43-
".package(url: \(literal: url.description), \(requirement.asSyntax()))"
21+
switch self.kind {
22+
case .fileSystem(_, let path):
23+
".package(path: \(literal: path.description))"
24+
case .sourceControl(_, let location, let requirement):
25+
".package(url: \(literal: location.description), \(requirement.asSyntax()))"
26+
case .registry(let id, let requirement):
27+
".package(id: \(literal: id), \(requirement.asSyntax()))"
4428
}
4529
}
4630
}

Tests/CommandsTests/PackageCommandTests.swift

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -894,7 +894,18 @@ final class PackageCommandTests: CommandsTestCase {
894894
_ = try await execute(
895895
[
896896
"add-dependency",
897-
"/directory",
897+
"/absolute",
898+
"--type",
899+
"path"
900+
901+
],
902+
packagePath: path
903+
)
904+
905+
_ = try await execute(
906+
[
907+
"add-dependency",
908+
"../relative",
898909
"--type",
899910
"path"
900911

@@ -906,7 +917,8 @@ final class PackageCommandTests: CommandsTestCase {
906917
XCTAssertFileExists(manifest)
907918
let contents: String = try fs.readFileContents(manifest)
908919

909-
XCTAssertMatch(contents, .contains(#".package(path: "/directory"),"#))
920+
XCTAssertMatch(contents, .contains(#".package(path: "/absolute"),"#))
921+
XCTAssertMatch(contents, .contains(#".package(path: "../relative"),"#))
910922
}
911923
}
912924

0 commit comments

Comments
 (0)