feat: Integrates precedence with command-line options, needs documentation.
All checks were successful
CI / Ubuntu (push) Successful in 2m31s
All checks were successful
CI / Ubuntu (push) Successful in 2m31s
This commit is contained in:
@@ -60,6 +60,7 @@ extension ConfigCommand {
|
|||||||
@OptionGroup var globals: ConfigCommandOptions
|
@OptionGroup var globals: ConfigCommandOptions
|
||||||
|
|
||||||
func run() async throws {
|
func run() async throws {
|
||||||
|
@Dependency(\.logger) var logger
|
||||||
let configuration = try await globals
|
let configuration = try await globals
|
||||||
.shared(command: Self.commandName)
|
.shared(command: Self.commandName)
|
||||||
.runClient(\.parsedConfiguration)
|
.runClient(\.parsedConfiguration)
|
||||||
@@ -183,7 +184,11 @@ private extension ConfigCommand.DumpConfig {
|
|||||||
private extension ConfigCommand.ConfigCommandOptions {
|
private extension ConfigCommand.ConfigCommandOptions {
|
||||||
|
|
||||||
func shared(command: String) throws -> CliClient.SharedOptions {
|
func shared(command: String) throws -> CliClient.SharedOptions {
|
||||||
try configOptions.shared(command: command, extraOptions: extraOptions, verbose: verbose)
|
try configOptions.shared(
|
||||||
|
command: command,
|
||||||
|
extraOptions: extraOptions,
|
||||||
|
verbose: verbose
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
func handlePrintJson(_ configuration: Configuration) throws {
|
func handlePrintJson(_ configuration: Configuration) throws {
|
||||||
|
|||||||
@@ -173,5 +173,19 @@ struct SemVarOptions: ParsableArguments {
|
|||||||
)
|
)
|
||||||
var customCommand: Bool = false
|
var customCommand: Bool = false
|
||||||
|
|
||||||
|
@Option(
|
||||||
|
name: .long,
|
||||||
|
help: """
|
||||||
|
Set the precence to prefer version from file or strategy.
|
||||||
|
"""
|
||||||
|
)
|
||||||
|
var precedence: Configuration.SemVar.Precedence?
|
||||||
|
|
||||||
@OptionGroup var preRelease: PreReleaseOptions
|
@OptionGroup var preRelease: PreReleaseOptions
|
||||||
}
|
}
|
||||||
|
|
||||||
|
extension Configuration.SemVar.Precedence: ExpressibleByArgument {
|
||||||
|
public init?(argument: String) {
|
||||||
|
self.init(rawValue: argument)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -136,8 +136,11 @@ extension SemVarOptions {
|
|||||||
""")
|
""")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
logger.trace("precedence: \(String(describing: precedence))")
|
||||||
|
|
||||||
return try .init(
|
return try .init(
|
||||||
allowPreRelease: !preRelease.disablePreRelease,
|
allowPreRelease: !preRelease.disablePreRelease,
|
||||||
|
precedence: precedence,
|
||||||
preRelease: customCommand ? nil : preRelease.configPreReleaseStrategy(
|
preRelease: customCommand ? nil : preRelease.configPreReleaseStrategy(
|
||||||
includeCommitSha: includeCommitSha,
|
includeCommitSha: includeCommitSha,
|
||||||
extraOptions: extraOptions
|
extraOptions: extraOptions
|
||||||
|
|||||||
@@ -95,6 +95,11 @@ extension CurrentVersionContainer where Version == String {
|
|||||||
|
|
||||||
extension CurrentVersionContainer where Version == SemVar {
|
extension CurrentVersionContainer where Version == SemVar {
|
||||||
|
|
||||||
|
// var preferredSemvar: SemVar? {
|
||||||
|
// switch precedence {
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
// TODO: Update to use precedence and not fetch `nextVersion` if we loaded a file version.
|
// TODO: Update to use precedence and not fetch `nextVersion` if we loaded a file version.
|
||||||
static func load(semvar: Configuration.SemVar, gitDirectory: String?, url: URL) async throws -> Self {
|
static func load(semvar: Configuration.SemVar, gitDirectory: String?, url: URL) async throws -> Self {
|
||||||
@Dependency(\.fileClient) var fileClient
|
@Dependency(\.fileClient) var fileClient
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
import Dependencies
|
import Dependencies
|
||||||
import FileClient
|
import FileClient
|
||||||
import Foundation
|
import Foundation
|
||||||
|
import LoggingExtensions
|
||||||
|
|
||||||
@_spi(Internal)
|
@_spi(Internal)
|
||||||
public extension Configuration {
|
public extension Configuration {
|
||||||
@@ -44,8 +45,12 @@ public extension Configuration.Branch {
|
|||||||
@_spi(Internal)
|
@_spi(Internal)
|
||||||
public extension Configuration.SemVar {
|
public extension Configuration.SemVar {
|
||||||
func merging(_ other: Self?) -> Self {
|
func merging(_ other: Self?) -> Self {
|
||||||
.init(
|
@Dependency(\.logger) var logger
|
||||||
|
logger.dump(other, level: .trace) { "Merging semvar:\n\($0)" }
|
||||||
|
|
||||||
|
return .init(
|
||||||
allowPreRelease: other?.allowPreRelease ?? allowPreRelease,
|
allowPreRelease: other?.allowPreRelease ?? allowPreRelease,
|
||||||
|
precedence: other?.precedence ?? precedence,
|
||||||
preRelease: preRelease == nil ? other?.preRelease : preRelease!.merging(other?.preRelease),
|
preRelease: preRelease == nil ? other?.preRelease : preRelease!.merging(other?.preRelease),
|
||||||
requireExistingFile: other?.requireExistingFile ?? requireExistingFile,
|
requireExistingFile: other?.requireExistingFile ?? requireExistingFile,
|
||||||
requireExistingSemVar: other?.requireExistingSemVar ?? requireExistingSemVar,
|
requireExistingSemVar: other?.requireExistingSemVar ?? requireExistingSemVar,
|
||||||
|
|||||||
@@ -145,6 +145,7 @@ public extension Configuration {
|
|||||||
|
|
||||||
case semvar(
|
case semvar(
|
||||||
allowPreRelease: Bool? = nil,
|
allowPreRelease: Bool? = nil,
|
||||||
|
precedence: SemVar.Precedence? = nil,
|
||||||
preRelease: PreRelease? = nil,
|
preRelease: PreRelease? = nil,
|
||||||
requireExistingFile: Bool? = nil,
|
requireExistingFile: Bool? = nil,
|
||||||
requireExistingSemVar: Bool? = nil,
|
requireExistingSemVar: Bool? = nil,
|
||||||
@@ -159,10 +160,16 @@ public extension Configuration {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public var semvar: SemVar? {
|
public var semvar: SemVar? {
|
||||||
guard case let .semvar(allowPreRelease, preRelease, requireExistingFile, requireExistingSemVar, strategy) = self
|
guard case let .semvar(
|
||||||
|
allowPreRelease,
|
||||||
|
precedence,
|
||||||
|
preRelease,
|
||||||
|
requireExistingFile, requireExistingSemVar, strategy
|
||||||
|
) = self
|
||||||
else { return nil }
|
else { return nil }
|
||||||
return .init(
|
return .init(
|
||||||
allowPreRelease: allowPreRelease,
|
allowPreRelease: allowPreRelease,
|
||||||
|
precedence: precedence,
|
||||||
preRelease: preRelease,
|
preRelease: preRelease,
|
||||||
requireExistingFile: requireExistingFile ?? false,
|
requireExistingFile: requireExistingFile ?? false,
|
||||||
requireExistingSemVar: requireExistingSemVar ?? false,
|
requireExistingSemVar: requireExistingSemVar ?? false,
|
||||||
@@ -177,6 +184,7 @@ public extension Configuration {
|
|||||||
public static func semvar(_ value: SemVar) -> Self {
|
public static func semvar(_ value: SemVar) -> Self {
|
||||||
.semvar(
|
.semvar(
|
||||||
allowPreRelease: value.allowPreRelease,
|
allowPreRelease: value.allowPreRelease,
|
||||||
|
precedence: value.precedence,
|
||||||
preRelease: value.preRelease,
|
preRelease: value.preRelease,
|
||||||
requireExistingFile: value.requireExistingFile,
|
requireExistingFile: value.requireExistingFile,
|
||||||
requireExistingSemVar: value.requireExistingSemVar,
|
requireExistingSemVar: value.requireExistingSemVar,
|
||||||
@@ -285,7 +293,7 @@ public extension Configuration {
|
|||||||
case gitTag(exactMatch: Bool? = false)
|
case gitTag(exactMatch: Bool? = false)
|
||||||
}
|
}
|
||||||
|
|
||||||
public enum Precedence: String, Codable, Equatable, Sendable {
|
public enum Precedence: String, CaseIterable, Codable, Equatable, Sendable {
|
||||||
case file
|
case file
|
||||||
case strategy
|
case strategy
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user