Skip to content

Commit ab43e0b

Browse files
authored
[Collections] Add optional title to package version (#3397)
Motivation: Package release on GitHub has title/name. It would be nice to display it. Modifications: - Add `title` to the `Version` model. - Update `GitHubPackageMetadataProvider` to set `version.title` to `release.name`. We were fetching `release.name` already just didn't have a place for it. - Update package metadata merge logic.
1 parent c776077 commit ab43e0b

9 files changed

+24
-13
lines changed

Sources/PackageCollections/Model/Package.swift

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,9 @@ extension PackageCollectionsModel.Package {
113113
/// The version
114114
public let version: TSCUtility.Version
115115

116+
/// The title or name of the version
117+
public let title: String?
118+
116119
/// Package version description
117120
public let summary: String?
118121

Sources/PackageCollections/PackageCollections.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -532,6 +532,7 @@ public struct PackageCollections: PackageCollectionsProtocol {
532532
var versions = package.versions.map { packageVersion -> Model.Package.Version in
533533
let versionMetadata = basicVersionMetadata[packageVersion.version]
534534
return .init(version: packageVersion.version,
535+
title: versionMetadata?.title ?? packageVersion.title,
535536
summary: versionMetadata?.summary ?? packageVersion.summary,
536537
manifests: packageVersion.manifests,
537538
defaultToolsVersion: packageVersion.defaultToolsVersion,

Sources/PackageCollections/Providers/GitHubPackageMetadataProvider.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,7 @@ struct GitHubPackageMetadataProvider: PackageMetadataProvider {
132132
guard let version = $0.tagName.flatMap(TSCUtility.Version.init(string:)) else {
133133
return nil
134134
}
135-
return Model.PackageBasicVersionMetadata(version: version, summary: $0.body, createdAt: $0.createdAt, publishedAt: $0.publishedAt)
135+
return Model.PackageBasicVersionMetadata(version: version, title: $0.name, summary: $0.body, createdAt: $0.createdAt, publishedAt: $0.publishedAt)
136136
},
137137
watchersCount: metadata.watchersCount,
138138
readmeURL: readme?.downloadURL,

Sources/PackageCollections/Providers/JSONPackageCollectionProvider.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -236,6 +236,7 @@ struct JSONPackageCollectionProvider: PackageCollectionProvider {
236236
let license = version.license.flatMap { Model.License(from: $0) }
237237

238238
return .init(version: parsedVersion,
239+
title: nil,
239240
summary: version.summary,
240241
manifests: manifests,
241242
defaultToolsVersion: defaultToolsVersion,

Sources/PackageCollections/Providers/PackageMetadataProvider.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ extension Model {
4040

4141
struct PackageBasicVersionMetadata: Equatable {
4242
let version: TSCUtility.Version
43+
let title: String?
4344
let summary: String?
4445
let createdAt: Date
4546
let publishedAt: Date?

Tests/PackageCollectionsTests/GitHubPackageMetadataProviderTests.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,7 @@ class GitHubPackageMetadataProviderTests: XCTestCase {
9595
XCTAssertEqual(metadata.summary, "This your first repo!")
9696
XCTAssertEqual(metadata.versions.count, 1)
9797
XCTAssertEqual(metadata.versions[0].version, TSCUtility.Version("1.0.0"))
98+
XCTAssertEqual(metadata.versions[0].title, "1.0.0")
9899
XCTAssertEqual(metadata.versions[0].summary, "Description of the release")
99100
XCTAssertEqual(metadata.authors, [PackageCollectionsModel.Package.Author(username: "octocat",
100101
url: URL(string: "https://api.github.com/users/octocat")!,

Tests/PackageCollectionsTests/PackageCollectionsModelTests.swift

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -23,11 +23,11 @@ final class PackageCollectionsModelTests: XCTestCase {
2323
toolsVersion: toolsVersion, packageName: "FooBar", targets: targets, products: products, minimumPlatformVersions: nil
2424
)]
2525
let versions: [PackageCollectionsModel.Package.Version] = [
26-
.init(version: .init(stringLiteral: "1.2.0"), summary: nil, manifests: manifests, defaultToolsVersion: toolsVersion, verifiedCompatibility: nil, license: nil, createdAt: nil),
27-
.init(version: .init(stringLiteral: "2.0.1"), summary: nil, manifests: manifests, defaultToolsVersion: toolsVersion, verifiedCompatibility: nil, license: nil, createdAt: nil),
28-
.init(version: .init(stringLiteral: "2.1.0-beta.3"), summary: nil, manifests: manifests, defaultToolsVersion: toolsVersion, verifiedCompatibility: nil, license: nil, createdAt: nil),
29-
.init(version: .init(stringLiteral: "2.1.0"), summary: nil, manifests: manifests, defaultToolsVersion: toolsVersion, verifiedCompatibility: nil, license: nil, createdAt: nil),
30-
.init(version: .init(stringLiteral: "3.0.0-beta.1"), summary: nil, manifests: manifests, defaultToolsVersion: toolsVersion, verifiedCompatibility: nil, license: nil, createdAt: nil),
26+
.init(version: .init(stringLiteral: "1.2.0"), title: nil, summary: nil, manifests: manifests, defaultToolsVersion: toolsVersion, verifiedCompatibility: nil, license: nil, createdAt: nil),
27+
.init(version: .init(stringLiteral: "2.0.1"), title: nil, summary: nil, manifests: manifests, defaultToolsVersion: toolsVersion, verifiedCompatibility: nil, license: nil, createdAt: nil),
28+
.init(version: .init(stringLiteral: "2.1.0-beta.3"), title: nil, summary: nil, manifests: manifests, defaultToolsVersion: toolsVersion, verifiedCompatibility: nil, license: nil, createdAt: nil),
29+
.init(version: .init(stringLiteral: "2.1.0"), title: nil, summary: nil, manifests: manifests, defaultToolsVersion: toolsVersion, verifiedCompatibility: nil, license: nil, createdAt: nil),
30+
.init(version: .init(stringLiteral: "3.0.0-beta.1"), title: nil, summary: nil, manifests: manifests, defaultToolsVersion: toolsVersion, verifiedCompatibility: nil, license: nil, createdAt: nil),
3131
]
3232

3333
XCTAssertEqual("2.1.0", versions.latestRelease?.version.description)
@@ -42,8 +42,8 @@ final class PackageCollectionsModelTests: XCTestCase {
4242
toolsVersion: toolsVersion, packageName: "FooBar", targets: targets, products: products, minimumPlatformVersions: nil
4343
)]
4444
let versions: [PackageCollectionsModel.Package.Version] = [
45-
.init(version: .init(stringLiteral: "2.1.0-beta.3"), summary: nil, manifests: manifests, defaultToolsVersion: toolsVersion, verifiedCompatibility: nil, license: nil, createdAt: nil),
46-
.init(version: .init(stringLiteral: "3.0.0-beta.1"), summary: nil, manifests: manifests, defaultToolsVersion: toolsVersion, verifiedCompatibility: nil, license: nil, createdAt: nil),
45+
.init(version: .init(stringLiteral: "2.1.0-beta.3"), title: nil, summary: nil, manifests: manifests, defaultToolsVersion: toolsVersion, verifiedCompatibility: nil, license: nil, createdAt: nil),
46+
.init(version: .init(stringLiteral: "3.0.0-beta.1"), title: nil, summary: nil, manifests: manifests, defaultToolsVersion: toolsVersion, verifiedCompatibility: nil, license: nil, createdAt: nil),
4747
]
4848

4949
XCTAssertNil(versions.latestRelease)
@@ -58,9 +58,9 @@ final class PackageCollectionsModelTests: XCTestCase {
5858
toolsVersion: toolsVersion, packageName: "FooBar", targets: targets, products: products, minimumPlatformVersions: nil
5959
)]
6060
let versions: [PackageCollectionsModel.Package.Version] = [
61-
.init(version: .init(stringLiteral: "1.2.0"), summary: nil, manifests: manifests, defaultToolsVersion: toolsVersion, verifiedCompatibility: nil, license: nil, createdAt: nil),
62-
.init(version: .init(stringLiteral: "2.0.1"), summary: nil, manifests: manifests, defaultToolsVersion: toolsVersion, verifiedCompatibility: nil, license: nil, createdAt: nil),
63-
.init(version: .init(stringLiteral: "2.1.0"), summary: nil, manifests: manifests, defaultToolsVersion: toolsVersion, verifiedCompatibility: nil, license: nil, createdAt: nil),
61+
.init(version: .init(stringLiteral: "1.2.0"), title: nil, summary: nil, manifests: manifests, defaultToolsVersion: toolsVersion, verifiedCompatibility: nil, license: nil, createdAt: nil),
62+
.init(version: .init(stringLiteral: "2.0.1"), title: nil, summary: nil, manifests: manifests, defaultToolsVersion: toolsVersion, verifiedCompatibility: nil, license: nil, createdAt: nil),
63+
.init(version: .init(stringLiteral: "2.1.0"), title: nil, summary: nil, manifests: manifests, defaultToolsVersion: toolsVersion, verifiedCompatibility: nil, license: nil, createdAt: nil),
6464
]
6565

6666
XCTAssertEqual("2.1.0", versions.latestRelease?.version.description)

Tests/PackageCollectionsTests/PackageCollectionsTests.swift

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -591,6 +591,7 @@ final class PackageCollectionsTests: XCTestCase {
591591
)
592592

593593
let mockVersion = PackageCollectionsModel.Package.Version(version: TSCUtility.Version(1, 0, 0),
594+
title: nil,
594595
summary: nil,
595596
manifests: [toolsVersion: mockManifest],
596597
defaultToolsVersion: toolsVersion,
@@ -754,6 +755,7 @@ final class PackageCollectionsTests: XCTestCase {
754755
)
755756

756757
let mockVersion = PackageCollectionsModel.Package.Version(version: TSCUtility.Version(1, 0, 0),
758+
title: nil,
757759
summary: nil,
758760
manifests: [toolsVersion: mockManifest],
759761
defaultToolsVersion: toolsVersion,
@@ -1180,6 +1182,7 @@ final class PackageCollectionsTests: XCTestCase {
11801182

11811183
let versions = (0 ... 3).map {
11821184
PackageCollectionsModel.Package.Version(version: TSCUtility.Version($0, 0, 0),
1185+
title: "\($0) title",
11831186
summary: "\($0) description",
11841187
manifests: [toolsVersion: manifest],
11851188
defaultToolsVersion: toolsVersion,
@@ -1202,7 +1205,7 @@ final class PackageCollectionsTests: XCTestCase {
12021205

12031206
let mockMetadata = PackageCollectionsModel.PackageBasicMetadata(summary: "\(mockPackage.summary!) 2",
12041207
keywords: mockPackage.keywords.flatMap { $0.map { "\($0)-2" } },
1205-
versions: mockPackage.versions.map { PackageCollectionsModel.PackageBasicVersionMetadata(version: $0.version, summary: "\($0.summary!) 2", createdAt: Date(), publishedAt: nil) },
1208+
versions: mockPackage.versions.map { PackageCollectionsModel.PackageBasicVersionMetadata(version: $0.version, title: "\($0.title!) 2", summary: "\($0.summary!) 2", createdAt: Date(), publishedAt: nil) },
12061209
watchersCount: mockPackage.watchersCount! + 1,
12071210
readmeURL: URL(string: "\(mockPackage.readmeURL!.absoluteString)-2")!,
12081211
license: PackageCollectionsModel.License(type: .Apache2_0, url: URL(string: "\(mockPackage.license!.url.absoluteString)-2")!),

Tests/PackageCollectionsTests/Utility.swift

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@ func makeMockCollections(count: Int = Int.random(in: 50 ... 100), maxPackages: I
6767
let license = PackageCollectionsModel.License(type: licenseType, url: URL(string: "http://\(licenseType).license")!)
6868

6969
return PackageCollectionsModel.Package.Version(version: TSCUtility.Version(versionIndex, 0, 0),
70+
title: nil,
7071
summary: "\(versionIndex) description",
7172
manifests: manifests,
7273
defaultToolsVersion: toolsVersion,
@@ -110,7 +111,7 @@ func makeMockCollections(count: Int = Int.random(in: 50 ... 100), maxPackages: I
110111
func makeMockPackageBasicMetadata() -> PackageCollectionsModel.PackageBasicMetadata {
111112
return .init(summary: UUID().uuidString,
112113
keywords: (0 ..< Int.random(in: 1 ... 3)).map { "keyword \($0)" },
113-
versions: (0 ..< Int.random(in: 1 ... 10)).map { .init(version: TSCUtility.Version($0, 0, 0), summary: "description \($0)", createdAt: Date(), publishedAt: nil) },
114+
versions: (0 ..< Int.random(in: 1 ... 10)).map { .init(version: TSCUtility.Version($0, 0, 0), title: "title \($0)", summary: "description \($0)", createdAt: Date(), publishedAt: nil) },
114115
watchersCount: Int.random(in: 0 ... 50),
115116
readmeURL: URL(string: "https://package-readme")!,
116117
license: PackageCollectionsModel.License(type: .Apache2_0, url: URL(string: "https://package-license")!),

0 commit comments

Comments
 (0)