feat: Integrates precedence with command-line options, needs documentation.
All checks were successful
CI / Ubuntu (push) Successful in 2m31s

This commit is contained in:
2024-12-28 23:43:56 -05:00
parent f1eb883b93
commit 9dd30a1745
6 changed files with 44 additions and 4 deletions

View File

@@ -60,6 +60,7 @@ extension ConfigCommand {
@OptionGroup var globals: ConfigCommandOptions
func run() async throws {
@Dependency(\.logger) var logger
let configuration = try await globals
.shared(command: Self.commandName)
.runClient(\.parsedConfiguration)
@@ -183,7 +184,11 @@ private extension ConfigCommand.DumpConfig {
private extension ConfigCommand.ConfigCommandOptions {
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 {

View File

@@ -173,5 +173,19 @@ struct SemVarOptions: ParsableArguments {
)
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
}
extension Configuration.SemVar.Precedence: ExpressibleByArgument {
public init?(argument: String) {
self.init(rawValue: argument)
}
}

View File

@@ -136,8 +136,11 @@ extension SemVarOptions {
""")
}
logger.trace("precedence: \(String(describing: precedence))")
return try .init(
allowPreRelease: !preRelease.disablePreRelease,
precedence: precedence,
preRelease: customCommand ? nil : preRelease.configPreReleaseStrategy(
includeCommitSha: includeCommitSha,
extraOptions: extraOptions

View File

@@ -95,6 +95,11 @@ extension CurrentVersionContainer where Version == String {
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.
static func load(semvar: Configuration.SemVar, gitDirectory: String?, url: URL) async throws -> Self {
@Dependency(\.fileClient) var fileClient

View File

@@ -1,6 +1,7 @@
import Dependencies
import FileClient
import Foundation
import LoggingExtensions
@_spi(Internal)
public extension Configuration {
@@ -44,8 +45,12 @@ public extension Configuration.Branch {
@_spi(Internal)
public extension Configuration.SemVar {
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,
precedence: other?.precedence ?? precedence,
preRelease: preRelease == nil ? other?.preRelease : preRelease!.merging(other?.preRelease),
requireExistingFile: other?.requireExistingFile ?? requireExistingFile,
requireExistingSemVar: other?.requireExistingSemVar ?? requireExistingSemVar,

View File

@@ -145,6 +145,7 @@ public extension Configuration {
case semvar(
allowPreRelease: Bool? = nil,
precedence: SemVar.Precedence? = nil,
preRelease: PreRelease? = nil,
requireExistingFile: Bool? = nil,
requireExistingSemVar: Bool? = nil,
@@ -159,10 +160,16 @@ public extension Configuration {
}
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 }
return .init(
allowPreRelease: allowPreRelease,
precedence: precedence,
preRelease: preRelease,
requireExistingFile: requireExistingFile ?? false,
requireExistingSemVar: requireExistingSemVar ?? false,
@@ -177,6 +184,7 @@ public extension Configuration {
public static func semvar(_ value: SemVar) -> Self {
.semvar(
allowPreRelease: value.allowPreRelease,
precedence: value.precedence,
preRelease: value.preRelease,
requireExistingFile: value.requireExistingFile,
requireExistingSemVar: value.requireExistingSemVar,
@@ -285,7 +293,7 @@ public extension Configuration {
case gitTag(exactMatch: Bool? = false)
}
public enum Precedence: String, Codable, Equatable, Sendable {
public enum Precedence: String, CaseIterable, Codable, Equatable, Sendable {
case file
case strategy