diff --git a/Package.resolved b/Package.resolved index cc72fd6..0b9655d 100644 --- a/Package.resolved +++ b/Package.resolved @@ -1,5 +1,5 @@ { - "originHash" : "c5371137580239f6928cf64425e754e77680bf24430b50f02dad5558c23f68b0", + "originHash" : "668bad809d4882f75f097e66a12a6dbc8e61ec998f1800a7e09439c854fadda1", "pins" : [ { "identity" : "antlr4", @@ -78,8 +78,8 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/apple/swift-argument-parser", "state" : { - "revision" : "41982a3656a71c768319979febd796c6fd111d5c", - "version" : "1.5.0" + "revision" : "309a47b2b1d9b5e991f36961c983ecec72275be3", + "version" : "1.6.1" } }, { diff --git a/Package.swift b/Package.swift index 2df2560..69ce3cf 100644 --- a/Package.swift +++ b/Package.swift @@ -10,7 +10,7 @@ let package = Package( .executable(name: "tart", targets: ["tart"]) ], dependencies: [ - .package(url: "https://github.com/apple/swift-argument-parser", from: "1.3.1"), + .package(url: "https://github.com/apple/swift-argument-parser", from: "1.6.1"), .package(url: "https://github.com/mhdhejazi/Dynamic", branch: "master"), .package(url: "https://github.com/apple/swift-algorithms", from: "1.2.0"), .package(url: "https://github.com/malcommac/SwiftDate", from: "7.0.0"), diff --git a/Sources/tart/Commands/Run.swift b/Sources/tart/Commands/Run.swift index 1f3e142..fd7a851 100644 --- a/Sources/tart/Commands/Run.swift +++ b/Sources/tart/Commands/Run.swift @@ -116,10 +116,6 @@ struct Run: AsyncParsableCommand { #endif var vncExperimental: Bool = false - // Note that the valueName here should really be "path[:options]" instead of just "path", - // see ArgumentParser issue[1] for more details. - // - // [1]: https://github.com/apple/swift-argument-parser/issues/761 @Option(help: ArgumentHelp(""" Additional disk attachments with an optional read-only and synchronization options in the form of path[:options] (e.g. --disk="disk.bin", --disk="ubuntu.iso:ro", --disk="/dev/disk0", --disk "ghcr.io/cirruslabs/xcode:16.0:ro" or --disk="nbd://localhost:10809/myDisk:sync=none") """, discussion: """ @@ -143,7 +139,7 @@ struct Run: AsyncParsableCommand { To work around this pass TART_HOME explicitly: sudo TART_HOME="$HOME/.tart" tart run sequoia --disk=/dev/disk0 - """, valueName: "path"), completion: .file()) + """, valueName: "path[:options]"), completion: .file()) var disk: [String] = [] #if arch(arm64) @@ -162,10 +158,6 @@ struct Run: AsyncParsableCommand { #endif var rosettaTag: String? - // Note that the valueName here should really be "[name:]path[:options]" instead of just "path", - // see ArgumentParser issue[1] for more details. - // - // [1]: https://github.com/apple/swift-argument-parser/issues/761 @Option(help: ArgumentHelp("Additional directory shares with an optional read-only and mount tag options in the form of [name:]path[:options] (e.g. --dir=\"~/src/build\" or --dir=\"~/src/sources:ro\")", discussion: """ Requires host to be macOS 13.0 (Ventura) or newer. macOS guests must be running macOS 13.0 (Ventura) or newer too. @@ -178,7 +170,7 @@ struct Run: AsyncParsableCommand { Mount tag can be overridden by appending tag property to the directory share (e.g. --dir=\"~/src/build:tag=build\" or --dir=\"~/src/build:ro,tag=build\"). Then it can be mounted via "mount_virtiofs build ~/build" inside guest macOS and "mount -t virtiofs build ~/build" inside guest Linux. In case of passing multiple directories per mount tag it is required to prefix them with names e.g. --dir=\"build:~/src/build\" --dir=\"sources:~/src/sources:ro\". These names will be used as directory names under the mounting point inside guests. For the example above it will be "/Volumes/My Shared Files/build" and "/Volumes/My Shared Files/sources" respectively. - """, valueName: "path"), completion: .directory) + """, valueName: "[name:]path[:options]"), completion: .directory) var dir: [String] = [] @Flag(help: ArgumentHelp("Enable nested virtualization if possible")) diff --git a/Sources/tart/ShellCompletions/ShellCompletions.swift b/Sources/tart/ShellCompletions/ShellCompletions.swift index 39aa3c7..4b7f399 100644 --- a/Sources/tart/ShellCompletions/ShellCompletions.swift +++ b/Sources/tart/ShellCompletions/ShellCompletions.swift @@ -5,7 +5,7 @@ fileprivate func normalizeName(_ name: String) -> String { return name.replacingOccurrences(of: ":", with: "\\:") } -func completeMachines(_ arguments: [String]) -> [String] { +func completeMachines(_ arguments: [String], _ argumentIdx: Int, _ argumentPrefix: String) -> [String] { let localVMs = (try? VMStorageLocal().list().map { name, _ in normalizeName(name) }) ?? [] @@ -15,12 +15,12 @@ func completeMachines(_ arguments: [String]) -> [String] { return (localVMs + ociVMs) } -func completeLocalMachines(_ arguments: [String]) -> [String] { +func completeLocalMachines(_ arguments: [String], _ argumentIdx: Int, _ argumentPrefix: String) -> [String] { let localVMs = (try? VMStorageLocal().list()) ?? [] return localVMs.map { name, _ in normalizeName(name) } } -func completeRunningMachines(_ arguments: [String]) -> [String] { +func completeRunningMachines(_ arguments: [String], _ argumentIdx: Int, _ argumentPrefix: String) -> [String] { let localVMs = (try? VMStorageLocal().list()) ?? [] return localVMs .filter { _, vmDir in (try? vmDir.state() == .Running) ?? false}