Skip to content

Commit 5b7f349

Browse files
Use full metadata struct as previous results
Change is part of #33
1 parent 7ea4528 commit 5b7f349

File tree

3 files changed

+13
-16
lines changed

3 files changed

+13
-16
lines changed

Sources/EvolutionMetadataExtraction/ExtractionJob.swift

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ public struct ExtractionJob: Sendable {
3434
let branchInfo: GitHubBranch?
3535
let proposalListing: [GitHubContentItem]? // Ad-hoc snapshots may not have these
3636
let proposalSpecs: [ProposalSpec]
37-
let previousResults: [Proposal]
37+
let previousResults: EvolutionMetadata?
3838
let expectedResults: EvolutionMetadata?
3939
let forcedExtractionIDs: [String]
4040
let toolVersion: String
@@ -43,7 +43,7 @@ public struct ExtractionJob: Sendable {
4343
let temporarySnapshotDirectory: URL?
4444
var temporaryProposalsDirectory: URL? { temporarySnapshotDirectory?.appending(component: "proposals") }
4545

46-
private init(source: Source, output: Output, branchInfo: GitHubBranch? = nil, proposalListing: [GitHubContentItem]?, proposalSpecs: [ProposalSpec], previousResults: [Proposal], expectedResults: EvolutionMetadata?, forcedExtractionIDs: [String], toolVersion: String, extractionDate: Date = Date()) {
46+
private init(source: Source, output: Output, branchInfo: GitHubBranch? = nil, proposalListing: [GitHubContentItem]?, proposalSpecs: [ProposalSpec], previousResults: EvolutionMetadata?, expectedResults: EvolutionMetadata?, forcedExtractionIDs: [String], toolVersion: String, extractionDate: Date = Date()) {
4747
self.source = source
4848
self.branchInfo = branchInfo
4949
self.proposalListing = proposalListing
@@ -92,8 +92,7 @@ extension ExtractionJob {
9292

9393
assert(source == .network, "makeNetworkExtractionJob() requires network source")
9494

95-
async let previousResults = ignorePreviousResults ? [] : PreviousResultsFetcher.fetchPreviousResults()
96-
95+
async let previousResults = ignorePreviousResults ? nil : PreviousResultsFetcher.fetchPreviousResults()
9796
let mainBranchInfo = try await GitHubFetcher.fetchMainBranch()
9897
let proposalContentItems = try await GitHubFetcher.fetchProposalContentItems(for: mainBranchInfo.commit.sha)
9998

@@ -130,7 +129,7 @@ extension ExtractionJob {
130129
var proposalListing: [GitHubContentItem]? = nil
131130
var directoryContents: [ProposalSpec]
132131
var proposalSpecs: [ProposalSpec] = []
133-
var previousResults: [Proposal] = []
132+
var previousResults: EvolutionMetadata? = nil
134133

135134
let branchInfo = try FileUtilities.decode(GitHubBranch.self, from: branchInfoURL)
136135

@@ -152,7 +151,7 @@ extension ExtractionJob {
152151
}
153152

154153
if !ignorePreviousResults {
155-
if let previous = try FileUtilities.decode([Proposal].self, from: previousResultsURL) {
154+
if let previous = try FileUtilities.decode(EvolutionMetadata.self, from: previousResultsURL) {
156155
previousResults = previous
157156
previousResultsFound = true
158157
}

Sources/EvolutionMetadataExtraction/Extractors/EvolutionMetadataExtractor.swift

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -106,15 +106,14 @@ struct EvolutionMetadataExtractor {
106106

107107
private static func filterProposalSpecs(for extractionJob: ExtractionJob) -> ([ProposalSpec], [SortableProposalWrapper]) {
108108

109-
let sortablePreviousResults = extractionJob.previousResults
109+
// If there are no previous results, there can be no reuse. Return early.
110+
guard let previousResults = extractionJob.previousResults else {
111+
return (extractionJob.proposalSpecs, [SortableProposalWrapper]())
112+
}
113+
114+
let sortablePreviousResults = previousResults.proposals
110115
.enumerated()
111116
.map { SortableProposalWrapper(proposal: $1, sortIndex: $0)}
112-
113-
114-
// If reusableProposals is empty, there can be no reuse. Return early.
115-
guard !extractionJob.previousResults.isEmpty else {
116-
return (extractionJob.proposalSpecs, sortablePreviousResults)
117-
}
118117

119118
var parsedProposalsById = sortablePreviousResults.reduce(into: [String:SortableProposalWrapper]()) { $0[$1.id] = $1 }
120119
var reusableProposals: [SortableProposalWrapper] = []

Sources/EvolutionMetadataExtraction/Utilities/Networking.swift

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,16 +14,15 @@ struct PreviousResultsFetcher {
1414

1515
static let previousResultsURL = URL(string: "https://download.swift.org/swift-evolution/v1/evolution.json")!
1616

17-
static func fetchPreviousResults() async throws -> [Proposal] {
17+
static func fetchPreviousResults() async throws -> EvolutionMetadata {
1818
let request = URLRequest(url: previousResultsURL, cachePolicy: .reloadIgnoringLocalCacheData)
1919
verbosePrint("Fetching with URLRequest:\n\(request.verboseDescription)")
2020
do {
2121
let (data, _) = try await URLSession.customized.data(for: request)
2222

2323
do {
2424
let decoder = JSONDecoder()
25-
let evolutionMetadata = try decoder.decode(EvolutionMetadata.self, from: data)
26-
return evolutionMetadata.proposals
25+
return try decoder.decode(EvolutionMetadata.self, from: data)
2726
} catch {
2827
print("Unable to decode \(EvolutionMetadata.self) from:")
2928
print(String(decoding: data, as: UTF8.self))

0 commit comments

Comments
 (0)