Skip to content

Commit

Permalink
Add relativePath
Browse files Browse the repository at this point in the history
  • Loading branch information
hi2gage committed Aug 10, 2024
1 parent 74f06f8 commit c9073bd
Show file tree
Hide file tree
Showing 7 changed files with 123 additions and 109 deletions.
48 changes: 21 additions & 27 deletions Sources/Commands/PackageCommands/AddDependency.swift
Original file line number Diff line number Diff line change
Expand Up @@ -93,8 +93,6 @@ extension SwiftPackageCommand {
workspace: Workspace,
url: String
) throws {
let identity = PackageIdentity(url: .init(url))

// Collect all of the possible version requirements.
var requirements: [PackageDependency.SourceControl.Requirement] = []
if let exact {
Expand Down Expand Up @@ -144,17 +142,18 @@ extension SwiftPackageCommand {
}
}

let packageDependency: PackageDependency = .sourceControl(
identity: identity,
nameForTargetDependencyResolutionOnly: nil,
location: .remote(.init(url)),
requirement: requirement,
let packageDependency: MappablePackageDependency = .init(
parentPackagePath: packagePath,
kind: .sourceControl(
name: nil,
location: url,
requirement: requirement
),
productFilter: .everything,
traits: []
)

try applyEdits(
packagePath: packagePath,
workspace: workspace,
packageDependency: packageDependency
)
Expand All @@ -165,8 +164,6 @@ extension SwiftPackageCommand {
workspace: Workspace,
id: String
) throws {
let identity: PackageIdentity = .plain(id)

// Collect all of the possible version requirements.
var requirements: [PackageDependency.Registry.Requirement] = []
if let exact {
Expand Down Expand Up @@ -208,16 +205,17 @@ extension SwiftPackageCommand {
}
}

let packageDependency: PackageDependency = .registry(
identity: identity,
requirement: requirement,
let packageDependency: MappablePackageDependency = .init(
parentPackagePath: packagePath,
kind: .registry(
id: id,
requirement: requirement
),
productFilter: .everything,
traits: []
)


try applyEdits(
packagePath: packagePath,
workspace: workspace,
packageDependency: packageDependency
)
Expand All @@ -228,33 +226,29 @@ extension SwiftPackageCommand {
workspace: Workspace,
directory: String
) throws {
guard let path = try? Basics.AbsolutePath(validating: directory) else {
throw StringError("Package path not found")
}
let identity = PackageIdentity(path: path)
let packageDependency: PackageDependency = .fileSystem(
identity: identity,
nameForTargetDependencyResolutionOnly: nil,
path: path,
let packageDependency: MappablePackageDependency = .init(
parentPackagePath: packagePath,
kind: .fileSystem(
name: nil,
path: directory
),
productFilter: .everything,
traits: []
)

try applyEdits(
packagePath: packagePath,
workspace: workspace,
packageDependency: packageDependency
)
}

private func applyEdits(
packagePath: Basics.AbsolutePath,
workspace: Workspace,
packageDependency: PackageDependency
packageDependency: MappablePackageDependency
) throws {
// Load the manifest file
let fileSystem = workspace.fileSystem
let manifestPath = packagePath.appending(component: Manifest.filename)
let manifestPath = packageDependency.parentPackagePath.appending(component: Manifest.filename)
let manifestContents: ByteString
do {
manifestContents = try fileSystem.readFileContents(manifestPath)
Expand Down
1 change: 1 addition & 0 deletions Sources/Commands/PackageCommands/AddTarget.swift
Original file line number Diff line number Diff line change
Expand Up @@ -114,6 +114,7 @@ extension SwiftPackageCommand {

let editResult = try PackageModelSyntax.AddTarget.addTarget(
target,
packagePath: packagePath,
to: manifestSyntax,
configuration: .init(testHarness: testingLibrary),
installedSwiftPMConfiguration: swiftCommandState
Expand Down
4 changes: 2 additions & 2 deletions Sources/PackageModelSyntax/AddPackageDependency.swift
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ public struct AddPackageDependency {
/// Produce the set of source edits needed to add the given package
/// dependency to the given manifest file.
public static func addPackageDependency(
_ dependency: PackageDependency,
_ dependency: MappablePackageDependency,
to manifest: SourceFileSyntax
) throws -> PackageEditResult {
// Make sure we have a suitable tools version in the manifest.
Expand All @@ -57,7 +57,7 @@ public struct AddPackageDependency {

/// Implementation of adding a package dependency to an existing call.
static func addPackageDependencyLocal(
_ dependency: PackageDependency,
_ dependency: MappablePackageDependency,
to packageCall: FunctionCallExprSyntax
) throws -> FunctionCallExprSyntax {
try packageCall.appendingToArrayArgument(
Expand Down
41 changes: 25 additions & 16 deletions Sources/PackageModelSyntax/AddTarget.swift
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,7 @@ public struct AddTarget {
/// new target.
public static func addTarget(
_ target: TargetDescription,
packagePath: AbsolutePath,
to manifest: SourceFileSyntax,
configuration: Configuration = .init(),
installedSwiftPMConfiguration: InstalledSwiftPMConfiguration = .default
Expand Down Expand Up @@ -140,7 +141,8 @@ public struct AddTarget {
newPackageCall = try AddPackageDependency
.addPackageDependencyLocal(
.swiftSyntax(
configuration: installedSwiftPMConfiguration
packagePath: packagePath,
configuration: installedSwiftPMConfiguration
),
to: newPackageCall
)
Expand Down Expand Up @@ -168,6 +170,7 @@ public struct AddTarget {
newPackageCall = try AddPackageDependency
.addPackageDependencyLocal(
.swiftTesting(
packagePath: packagePath,
configuration: installedSwiftPMConfiguration
),
to: newPackageCall
Expand Down Expand Up @@ -357,25 +360,28 @@ fileprivate let macroTargetDependencies: [TargetDescription.Dependency] = [
]

/// The package dependency for swift-syntax, for use in macros.
fileprivate extension PackageDependency {
fileprivate extension MappablePackageDependency {
/// Source control URL for the swift-syntax package.
static var swiftSyntaxURL: SourceControlURL {
"https://github.com/swiftlang/swift-syntax.git"
}

/// Package dependency on the swift-syntax package.
static func swiftSyntax(
configuration: InstalledSwiftPMConfiguration
) -> PackageDependency {
packagePath: AbsolutePath,
configuration: InstalledSwiftPMConfiguration
) -> MappablePackageDependency {
let swiftSyntaxVersionDefault = configuration
.swiftSyntaxVersionForMacroTemplate
let swiftSyntaxVersion = Version(swiftSyntaxVersionDefault.description)!

return .sourceControl(
identity: PackageIdentity(url: swiftSyntaxURL),
nameForTargetDependencyResolutionOnly: nil,
location: .remote(swiftSyntaxURL),
requirement: .range(.upToNextMajor(from: swiftSyntaxVersion)),
return .init(
parentPackagePath: packagePath,
kind: .sourceControl(
name: nil,
location: swiftSyntaxURL.absoluteString,
requirement: .range(.upToNextMajor(from: swiftSyntaxVersion))
),
productFilter: .everything,
traits: []
)
Expand All @@ -390,25 +396,28 @@ fileprivate let swiftTestingTestTargetDependencies: [TargetDescription.Dependenc


/// The package dependency for swift-testing, for use in test files.
fileprivate extension PackageDependency {
fileprivate extension MappablePackageDependency {
/// Source control URL for the swift-syntax package.
static var swiftTestingURL: SourceControlURL {
"https://github.com/apple/swift-testing.git"
}

/// Package dependency on the swift-testing package.
static func swiftTesting(
packagePath: AbsolutePath,
configuration: InstalledSwiftPMConfiguration
) -> PackageDependency {
) -> MappablePackageDependency {
let swiftTestingVersionDefault =
configuration.swiftTestingVersionForTestTemplate
let swiftTestingVersion = Version(swiftTestingVersionDefault.description)!

return .sourceControl(
identity: PackageIdentity(url: swiftTestingURL),
nameForTargetDependencyResolutionOnly: nil,
location: .remote(swiftTestingURL),
requirement: .range(.upToNextMajor(from: swiftTestingVersion)),
return .init(
parentPackagePath: packagePath,
kind: .sourceControl(
name: nil,
location: swiftTestingURL.absoluteString,
requirement: .range(.upToNextMajor(from: swiftTestingVersion))
),
productFilter: .everything,
traits: []
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,31 +16,15 @@ import SwiftParser
import SwiftSyntax
import struct TSCUtility.Version

extension PackageDependency: ManifestSyntaxRepresentable {
extension MappablePackageDependency: ManifestSyntaxRepresentable {
func asSyntax() -> ExprSyntax {
switch self {
case .fileSystem(let filesystem): filesystem.asSyntax()
case .sourceControl(let sourceControl): sourceControl.asSyntax()
case .registry(let registry): registry.asSyntax()
}
}
}

extension PackageDependency.FileSystem: ManifestSyntaxRepresentable {
func asSyntax() -> ExprSyntax {
".package(path: \(literal: path.description))"
}
}

extension PackageDependency.SourceControl: ManifestSyntaxRepresentable {
func asSyntax() -> ExprSyntax {
// TODO: Not handling identity, nameForTargetDependencyResolutionOnly,
// or productFilter yet.
switch location {
case .local:
fatalError()
case .remote(let url):
".package(url: \(literal: url.description), \(requirement.asSyntax()))"
switch self.kind {
case .fileSystem(_, let path):
".package(path: \(literal: path.description))"
case .sourceControl(_, let location, let requirement):
".package(url: \(literal: location.description), \(requirement.asSyntax()))"
case .registry(let id, let requirement):
".package(id: \(literal: id), \(requirement.asSyntax()))"
}
}
}
Expand Down
16 changes: 14 additions & 2 deletions Tests/CommandsTests/PackageCommandTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -894,7 +894,18 @@ final class PackageCommandTests: CommandsTestCase {
_ = try await execute(
[
"add-dependency",
"/directory",
"/absolute",
"--type",
"path"

],
packagePath: path
)

_ = try await execute(
[
"add-dependency",
"../relative",
"--type",
"path"

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

XCTAssertMatch(contents, .contains(#".package(path: "/directory"),"#))
XCTAssertMatch(contents, .contains(#".package(path: "/absolute"),"#))
XCTAssertMatch(contents, .contains(#".package(path: "../relative"),"#))
}
}

Expand Down
Loading

0 comments on commit c9073bd

Please sign in to comment.