Skip to content

Commit 8692398

Browse files
committed
Add RelativePath
1 parent 4011c7c commit 8692398

File tree

8 files changed

+160
-167
lines changed

8 files changed

+160
-167
lines changed

Package.swift

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -279,6 +279,7 @@ let package = Package(
279279
name: "PackageModelSyntax",
280280
dependencies: [
281281
"Basics",
282+
"PackageDescription",
282283
"PackageLoading",
283284
"PackageModel",
284285
.product(name: "SwiftBasicFormat", package: "swift-syntax"),
@@ -290,6 +291,7 @@ let package = Package(
290291
],
291292
exclude: ["CMakeLists.txt"],
292293
swiftSettings: [
294+
.unsafeFlags(["-package-description-version", "999.0"]),
293295
.unsafeFlags(["-static"]),
294296
]
295297
),
@@ -508,6 +510,7 @@ let package = Package(
508510
"Basics",
509511
"Build",
510512
"CoreCommands",
513+
"PackageDescription",
511514
"PackageGraph",
512515
"PackageModelSyntax",
513516
"SourceControl",
@@ -516,6 +519,7 @@ let package = Package(
516519
],
517520
exclude: ["CMakeLists.txt", "README.md"],
518521
swiftSettings: [
522+
.unsafeFlags(["-package-description-version", "999.0"]),
519523
.unsafeFlags(["-static"]),
520524
]
521525
),

Sources/Commands/PackageCommands/AddDependency.swift

Lines changed: 35 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,12 @@
1313
import ArgumentParser
1414
import Basics
1515
import CoreCommands
16-
import PackageModel
16+
import PackageDescription
17+
import class PackageModel.Manifest
1718
import PackageModelSyntax
1819
import SwiftParser
1920
import SwiftSyntax
2021
import TSCBasic
21-
import TSCUtility
2222
import Workspace
2323

2424
extension SwiftPackageCommand {
@@ -93,10 +93,8 @@ 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.
99-
var requirements: [PackageDependency.SourceControl.Requirement] = []
97+
var requirements: [PackageDescription.Package.Dependency.SourceControlRequirement] = []
10098
if let exact {
10199
requirements.append(.exact(exact))
102100
}
@@ -129,30 +127,24 @@ extension SwiftPackageCommand {
129127
)
130128
}
131129

132-
let requirement: PackageDependency.SourceControl.Requirement
133-
if case .range(let range) = firstRequirement {
134-
if let to {
135-
requirement = .range(range.lowerBound ..< to)
136-
} else {
137-
requirement = .range(range)
138-
}
139-
} else {
140-
requirement = firstRequirement
141-
142-
if self.to != nil {
143-
throw StringError("--to can only be specified with --from or --up-to-next-minor-from")
144-
}
130+
let packageDependency: PackageDescription.Package.Dependency
131+
switch (firstRequirement, to) {
132+
case (let .exact(version), nil):
133+
packageDependency = .package(url: self.dependency, exact: version)
134+
case (let .range(range), let to?):
135+
packageDependency = .package(url: self.dependency, (range.lowerBound ..< to))
136+
case (let .range(range), nil):
137+
packageDependency = .package(url: self.dependency, range)
138+
case (let .revision(revision), nil):
139+
packageDependency = .package(url: self.dependency, revision: revision)
140+
case (let .branch(branch), nil):
141+
packageDependency = .package(url: self.dependency, branch: branch)
142+
case (.branch, _?), (.revision, _?), (.exact, _?):
143+
throw StringError("--to can only be specified with --from or --up-to-next-minor-from")
144+
case (_, _):
145+
throw StringError("unknown requirement")
145146
}
146147

147-
let packageDependency: PackageDependency = .sourceControl(
148-
identity: identity,
149-
nameForTargetDependencyResolutionOnly: nil,
150-
location: .remote(.init(url)),
151-
requirement: requirement,
152-
productFilter: .everything,
153-
traits: []
154-
)
155-
156148
try applyEdits(
157149
packagePath: packagePath,
158150
workspace: workspace,
@@ -165,10 +157,8 @@ extension SwiftPackageCommand {
165157
workspace: Workspace,
166158
id: String
167159
) throws {
168-
let identity: PackageIdentity = .plain(id)
169-
170160
// Collect all of the possible version requirements.
171-
var requirements: [PackageDependency.Registry.Requirement] = []
161+
var requirements: [Package.Dependency.RegistryRequirement] = []
172162
if let exact {
173163
requirements.append(.exact(exact))
174164
}
@@ -193,29 +183,20 @@ extension SwiftPackageCommand {
193183
)
194184
}
195185

196-
let requirement: PackageDependency.Registry.Requirement
197-
if case .range(let range) = firstRequirement {
198-
if let to {
199-
requirement = .range(range.lowerBound ..< to)
200-
} else {
201-
requirement = .range(range)
202-
}
203-
} else {
204-
requirement = firstRequirement
205-
206-
if self.to != nil {
207-
throw StringError("--to can only be specified with --from or --up-to-next-minor-from")
208-
}
186+
let packageDependency: PackageDescription.Package.Dependency
187+
switch (firstRequirement, to) {
188+
case (let .exact(version), nil):
189+
packageDependency = .package(id: self.dependency, exact: version)
190+
case (let .range(range), let to?):
191+
packageDependency = .package(id: self.dependency, range.lowerBound ..< to)
192+
case (let .range(range), nil):
193+
packageDependency = .package(id: self.dependency, range)
194+
case (.exact, _?):
195+
throw StringError("--to can only be specified with --from or --up-to-next-minor-from")
196+
case (_, _):
197+
throw StringError("unknown requirement")
209198
}
210199

211-
let packageDependency: PackageDependency = .registry(
212-
identity: identity,
213-
requirement: requirement,
214-
productFilter: .everything,
215-
traits: []
216-
)
217-
218-
219200
try applyEdits(
220201
packagePath: packagePath,
221202
workspace: workspace,
@@ -228,19 +209,9 @@ extension SwiftPackageCommand {
228209
workspace: Workspace,
229210
directory: String
230211
) 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,
239-
productFilter: .everything,
240-
traits: []
241-
)
212+
let packageDependency: PackageDescription.Package.Dependency = .package(path: directory)
242213

243-
try applyEdits(
214+
try self.applyEdits(
244215
packagePath: packagePath,
245216
workspace: workspace,
246217
packageDependency: packageDependency
@@ -250,7 +221,7 @@ extension SwiftPackageCommand {
250221
private func applyEdits(
251222
packagePath: Basics.AbsolutePath,
252223
workspace: Workspace,
253-
packageDependency: PackageDependency
224+
packageDependency: PackageDescription.Package.Dependency
254225
) throws {
255226
// Load the manifest file
256227
let fileSystem = workspace.fileSystem

Sources/CoreCommands/Options.swift

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ import struct SPMBuildCore.BuildSystemProvider
3434

3535
import struct TSCBasic.StringError
3636

37+
import struct PackageDescription.Version
3738
import struct TSCUtility.Version
3839

3940
import class Workspace.Workspace
@@ -752,7 +753,8 @@ extension AbsolutePath: ExpressibleByArgument {}
752753
extension WorkspaceConfiguration.CheckingMode: ExpressibleByArgument {}
753754
extension Sanitizer: ExpressibleByArgument {}
754755
extension BuildSystemProvider.Kind: ExpressibleByArgument {}
755-
extension Version: ExpressibleByArgument {}
756+
extension PackageDescription.Version: ExpressibleByArgument {}
757+
extension TSCUtility.Version: ExpressibleByArgument {}
756758
extension PackageIdentity: ExpressibleByArgument {}
757759
extension URL: ExpressibleByArgument {}
758760
#else
@@ -761,7 +763,8 @@ extension AbsolutePath: @retroactive ExpressibleByArgument {}
761763
extension WorkspaceConfiguration.CheckingMode: @retroactive ExpressibleByArgument {}
762764
extension Sanitizer: @retroactive ExpressibleByArgument {}
763765
extension BuildSystemProvider.Kind: @retroactive ExpressibleByArgument {}
764-
extension Version: @retroactive ExpressibleByArgument {}
766+
extension PackageDescription.Version: @retroactive ExpressibleByArgument {}
767+
extension TSCUtility.Version: @retroactive ExpressibleByArgument {}
765768
extension PackageIdentity: @retroactive ExpressibleByArgument {}
766769
extension URL: @retroactive ExpressibleByArgument {}
767770
#endif

Sources/PackageModelSyntax/AddPackageDependency.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,8 @@
1111
//===----------------------------------------------------------------------===//
1212

1313
import Basics
14+
import PackageDescription
1415
import PackageLoading
15-
import PackageModel
1616
import SwiftParser
1717
import SwiftSyntax
1818
import SwiftSyntaxBuilder
@@ -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: PackageDescription.Package.Dependency,
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: PackageDescription.Package.Dependency,
6161
to packageCall: FunctionCallExprSyntax
6262
) throws -> FunctionCallExprSyntax {
6363
try packageCall.appendingToArrayArgument(

Sources/PackageModelSyntax/AddTarget.swift

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
//===----------------------------------------------------------------------===//
1212

1313
import Basics
14+
import PackageDescription
1415
import PackageModel
1516
import SwiftParser
1617
import SwiftSyntax
@@ -340,7 +341,7 @@ fileprivate let macroTargetDependencies: [TargetDescription.Dependency] = [
340341
]
341342

342343
/// The package dependency for swift-syntax, for use in macros.
343-
fileprivate extension PackageDependency {
344+
fileprivate extension PackageDescription.Package.Dependency {
344345
/// Source control URL for the swift-syntax package.
345346
static var swiftSyntaxURL: SourceControlURL {
346347
"https://github.com/swiftlang/swift-syntax.git"
@@ -349,18 +350,14 @@ fileprivate extension PackageDependency {
349350
/// Package dependency on the swift-syntax package.
350351
static func swiftSyntax(
351352
configuration: InstalledSwiftPMConfiguration
352-
) -> PackageDependency {
353+
) -> PackageDescription.Package.Dependency {
353354
let swiftSyntaxVersionDefault = configuration
354355
.swiftSyntaxVersionForMacroTemplate
355-
let swiftSyntaxVersion = Version(swiftSyntaxVersionDefault.description)!
356-
357-
return .sourceControl(
358-
identity: PackageIdentity(url: swiftSyntaxURL),
359-
nameForTargetDependencyResolutionOnly: nil,
360-
location: .remote(swiftSyntaxURL),
361-
requirement: .range(.upToNextMajor(from: swiftSyntaxVersion)),
362-
productFilter: .everything,
363-
traits: []
356+
let swiftSyntaxVersion = PackageDescription.Version(swiftSyntaxVersionDefault.description)!
357+
358+
return .package(
359+
url: swiftSyntaxURL.absoluteString,
360+
.upToNextMajor(from: swiftSyntaxVersion)
364361
)
365362
}
366363
}

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

Lines changed: 19 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -11,47 +11,26 @@
1111
//===----------------------------------------------------------------------===//
1212

1313
import Basics
14-
import PackageModel
14+
import PackageDescription
1515
import SwiftParser
1616
import SwiftSyntax
17-
import struct TSCUtility.Version
1817

19-
extension PackageDependency: ManifestSyntaxRepresentable {
18+
extension PackageDescription.Package.Dependency: ManifestSyntaxRepresentable {
2019
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:
20+
switch self.kind {
21+
case .fileSystem(name: _, path: let path):
22+
".package(path: \(literal: path.description))"
23+
case .sourceControl(name: _, location: let location, requirement: let requirement):
24+
".package(url: \(literal: location.description), \(requirement.asSyntax()))"
25+
case .registry(id: let id, requirement: let requirement):
26+
".package(id: \(literal: id.description), \(requirement.asSyntax()))"
27+
@unknown default:
4128
fatalError()
42-
case .remote(let url):
43-
".package(url: \(literal: url.description), \(requirement.asSyntax()))"
4429
}
4530
}
4631
}
4732

48-
extension PackageDependency.Registry: ManifestSyntaxRepresentable {
49-
func asSyntax() -> ExprSyntax {
50-
".package(id: \(literal: identity.description), \(requirement.asSyntax()))"
51-
}
52-
}
53-
54-
extension PackageDependency.SourceControl.Requirement: ManifestSyntaxRepresentable {
33+
extension PackageDescription.Package.Dependency.SourceControlRequirement: ManifestSyntaxRepresentable {
5534
func asSyntax() -> LabeledExprSyntax {
5635
switch self {
5736
case .exact(let version):
@@ -82,11 +61,14 @@ extension PackageDependency.SourceControl.Requirement: ManifestSyntaxRepresentab
8261
label: "branch",
8362
expression: "\(literal: branch)" as ExprSyntax
8463
)
64+
65+
@unknown default:
66+
fatalError()
8567
}
8668
}
8769
}
8870

89-
extension PackageDependency.Registry.Requirement: ManifestSyntaxRepresentable {
71+
extension PackageDescription.Package.Dependency.RegistryRequirement: ManifestSyntaxRepresentable {
9072
func asSyntax() -> LabeledExprSyntax {
9173
switch self {
9274
case .exact(let version):
@@ -105,11 +87,14 @@ extension PackageDependency.Registry.Requirement: ManifestSyntaxRepresentable {
10587
LabeledExprSyntax(
10688
expression: "\(range.lowerBound.asSyntax())..<\(range.upperBound.asSyntax())" as ExprSyntax
10789
)
90+
91+
@unknown default:
92+
fatalError()
10893
}
10994
}
11095
}
11196

112-
extension Version: ManifestSyntaxRepresentable {
97+
extension PackageDescription.Version: ManifestSyntaxRepresentable {
11398
func asSyntax() -> ExprSyntax {
11499
"\(literal: description)"
115100
}

0 commit comments

Comments
 (0)