diff --git a/Sources/ContainerVersion/ReleaseVersion.swift b/Sources/ContainerVersion/ReleaseVersion.swift index 99e9ad2b9..b34b0d4e8 100644 --- a/Sources/ContainerVersion/ReleaseVersion.swift +++ b/Sources/ContainerVersion/ReleaseVersion.swift @@ -20,12 +20,19 @@ import Foundation public struct ReleaseVersion { public static func singleLine(appName: String) -> String { var versionDetails: [String: String] = ["build": buildType()] - versionDetails["commit"] = gitCommit().map { String($0.prefix(7)) } ?? "unspecified" + versionDetails["commit"] = displayCommit(gitCommit()) let extras: String = versionDetails.map { "\($0): \($1)" }.sorted().joined(separator: ", ") return "\(appName) version \(version()) (\(extras))" } + static func displayCommit(_ commit: String?) -> String { + guard let commit, !commit.isEmpty, commit != "unspecified" else { + return "unspecified" + } + return String(commit.prefix(7)) + } + public static func buildType() -> String { #if DEBUG return "debug" diff --git a/Tests/ContainerVersionTests/ReleaseVersionTests.swift b/Tests/ContainerVersionTests/ReleaseVersionTests.swift new file mode 100644 index 000000000..331330140 --- /dev/null +++ b/Tests/ContainerVersionTests/ReleaseVersionTests.swift @@ -0,0 +1,31 @@ +//===----------------------------------------------------------------------===// +// Copyright © 2026 Apple Inc. and the container project authors. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +//===----------------------------------------------------------------------===// + +import Testing + +@testable import ContainerVersion + +struct ReleaseVersionTests { + @Test func displayCommitKeepsUnspecifiedPlaceholder() { + #expect(ReleaseVersion.displayCommit(nil) == "unspecified") + #expect(ReleaseVersion.displayCommit("") == "unspecified") + #expect(ReleaseVersion.displayCommit("unspecified") == "unspecified") + } + + @Test func displayCommitShortensGitCommit() { + #expect(ReleaseVersion.displayCommit("1234567890abcdef") == "1234567") + } +}