Skip to content

Commit cb5f0df

Browse files
Add source property to ExtractionJob
1 parent f9f750f commit cb5f0df

File tree

1 file changed

+19
-10
lines changed

1 file changed

+19
-10
lines changed

Sources/EvolutionMetadataExtraction/ExtractionJob.swift

Lines changed: 19 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -18,18 +18,19 @@ import EvolutionMetadataModel
1818
An `ExtractionJob` captures all of the required inputs and potential output locations.
1919
*/
2020
public struct ExtractionJob: Sendable {
21-
public enum Source: Sendable, Codable {
21+
public enum Source: Sendable, Codable, Equatable {
2222
case network
2323
case snapshot(URL)
2424
}
2525

26-
public enum Output: Sendable, Codable {
26+
public enum Output: Sendable, Codable, Equatable {
2727
case metadataJSON(URL)
2828
case snapshot(URL)
2929
case validationReport
3030
case none
3131
}
3232

33+
let source: Source
3334
let branchInfo: GitHubBranch?
3435
let proposalListing: [GitHubContentItem]? // Ad-hoc snapshots may not have these
3536
let proposalSpecs: [ProposalSpec]
@@ -41,7 +42,8 @@ public struct ExtractionJob: Sendable {
4142
let output: Output
4243
let temporaryProposalsDirectory: URL?
4344

44-
private init(output: Output, branchInfo: GitHubBranch? = nil, proposalListing: [GitHubContentItem]?, proposalSpecs: [ProposalSpec], previousResults: [Proposal], expectedResults: [Proposal]?, forcedExtractionIDs: [String], toolVersion: String, extractionDate: Date = Date()) {
45+
private init(source: Source, output: Output, branchInfo: GitHubBranch? = nil, proposalListing: [GitHubContentItem]?, proposalSpecs: [ProposalSpec], previousResults: [Proposal], expectedResults: [Proposal]?, forcedExtractionIDs: [String], toolVersion: String, extractionDate: Date = Date()) {
46+
self.source = source
4547
self.branchInfo = branchInfo
4648
self.proposalListing = proposalListing
4749
self.proposalSpecs = proposalSpecs
@@ -74,13 +76,17 @@ public struct ExtractionJob: Sendable {
7476
public static func makeExtractionJob(from source: Source, output: Output, ignorePreviousResults: Bool = false, forcedExtractionIDs: [String] = [], toolVersion: String = "", extractionDate: Date = Date()) async throws -> ExtractionJob {
7577
switch source {
7678
case .network:
77-
try await networkExtractionJob(output: output, ignorePreviousResults: ignorePreviousResults, forcedExtractionIDs: forcedExtractionIDs, toolVersion: toolVersion, extractionDate: extractionDate)
78-
case .snapshot(let snapshotURL):
79-
try snapshotExtractionJob(from: snapshotURL, output: output, ignorePreviousResults: ignorePreviousResults, forcedExtractionIDs: forcedExtractionIDs, toolVersion: toolVersion, extractionDate: extractionDate)
79+
try await networkExtractionJob(source: source, output: output, ignorePreviousResults: ignorePreviousResults, forcedExtractionIDs: forcedExtractionIDs, toolVersion: toolVersion, extractionDate: extractionDate)
80+
case .snapshot:
81+
try snapshotExtractionJob(source: source, output: output, ignorePreviousResults: ignorePreviousResults, forcedExtractionIDs: forcedExtractionIDs, toolVersion: toolVersion, extractionDate: extractionDate)
8082
}
8183
}
8284

83-
private static func snapshotExtractionJob(from snapshotURL: URL, output: Output, ignorePreviousResults: Bool, forcedExtractionIDs: [String], toolVersion: String, extractionDate: Date) throws -> ExtractionJob {
85+
private static func snapshotExtractionJob(source: Source, output: Output, ignorePreviousResults: Bool, forcedExtractionIDs: [String], toolVersion: String, extractionDate: Date) throws -> ExtractionJob {
86+
87+
guard case let .snapshot(snapshotURL) = source else {
88+
fatalError("snapshotExtractionJob() requires snapshot source")
89+
}
8490

8591
// Argument validation should ensure correct values. Assert to catch problems in usage in tests.
8692
assert(snapshotURL.pathExtension == "evosnapshot", "Snapshot URL must be a directory with 'evosnapshot' extension.")
@@ -146,18 +152,21 @@ public struct ExtractionJob: Sendable {
146152
// previous-results.json : Previous results. If present, will reuse found proposal entries.
147153
// proposal-listing.json : Results of GitHub query of proposals directory. Contains proposal SHA values.
148154

149-
return ExtractionJob(output: output, branchInfo: branchInfo, proposalListing: proposalListing, proposalSpecs: proposalSpecs, previousResults: previousResults, expectedResults: expectedResults, forcedExtractionIDs: forcedExtractionIDs, toolVersion: toolVersion, extractionDate: extractionDate)
155+
return ExtractionJob(source: source, output: output, branchInfo: branchInfo, proposalListing: proposalListing, proposalSpecs: proposalSpecs, previousResults: previousResults, expectedResults: expectedResults, forcedExtractionIDs: forcedExtractionIDs, toolVersion: toolVersion, extractionDate: extractionDate)
150156
}
151157

152-
private static func networkExtractionJob(output: Output, ignorePreviousResults: Bool, forcedExtractionIDs: [String] = [], toolVersion: String = "", extractionDate: Date = Date()) async throws -> ExtractionJob {
158+
private static func networkExtractionJob(source: Source, output: Output, ignorePreviousResults: Bool, forcedExtractionIDs: [String] = [], toolVersion: String = "", extractionDate: Date = Date()) async throws -> ExtractionJob {
159+
160+
assert(source == .network, "networkExtractionJob() requires network source")
161+
153162
async let previousResults = ignorePreviousResults ? [] : PreviousResultsFetcher.fetchPreviousResults()
154163

155164
let mainBranchInfo = try await GitHubFetcher.fetchMainBranch()
156165
async let proposalContentItems = GitHubFetcher.fetchProposalContentItems(for: mainBranchInfo.commit.sha)
157166

158167
let proposalSpecs = try await proposalContentItems.enumerated().map { $1.proposalSpec(sortIndex: $0) }
159168

160-
return await ExtractionJob(output: output, branchInfo: mainBranchInfo, proposalListing: try proposalContentItems, proposalSpecs: proposalSpecs, previousResults: try await previousResults, expectedResults: nil, forcedExtractionIDs: forcedExtractionIDs, toolVersion: toolVersion, extractionDate: extractionDate)
169+
return await ExtractionJob(source: source, output: output, branchInfo: mainBranchInfo, proposalListing: try proposalContentItems, proposalSpecs: proposalSpecs, previousResults: try await previousResults, expectedResults: nil, forcedExtractionIDs: forcedExtractionIDs, toolVersion: toolVersion, extractionDate: extractionDate)
161170
}
162171

163172

0 commit comments

Comments
 (0)