-
Notifications
You must be signed in to change notification settings - Fork 183
Expand file tree
/
Copy pathDocumentationArchiveOption.swift
More file actions
56 lines (44 loc) · 2 KB
/
Copy pathDocumentationArchiveOption.swift
File metadata and controls
56 lines (44 loc) · 2 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
/*
This source file is part of the Swift.org open source project
Copyright (c) 2021 Apple Inc. and the Swift project authors
Licensed under Apache License v2.0 with Runtime Library Exception
See https://swift.org/LICENSE.txt for license information
See https://swift.org/CONTRIBUTORS.txt for Swift project authors
*/
public import ArgumentParser
public import Foundation
/// Resolves and validates a URL value that provides the path to a documentation archive.
public struct DocCArchiveOption: DirectoryPathOption {
public init(){}
/// The name of the command line argument used to specify a source archive path.
static let argumentValueName = "source-archive-path"
static let expectedContent: Set<String> = ["data"]
/// The path to an archive to be used by DocC.
@Argument(
help: ArgumentHelp(
"Path to the DocC Archive ('.doccarchive') that should be processed.",
valueName: argumentValueName),
transform: URL.init(fileURLWithPath:))
public var url: URL?
public mutating func validate() throws {
// Validate that the URL represents a directory
guard urlOrFallback.hasDirectoryPath else {
throw ValidationError("'\(urlOrFallback.path)' is not a valid DocC Archive. Expected a directory but a path to a file was provided")
}
var archiveContents: [String]
do {
archiveContents = try FileManager.default.contentsOfDirectory(atPath: urlOrFallback.path)
} catch {
throw ValidationError("'\(urlOrFallback.path)' is not a valid DocC Archive: \(error)")
}
let missingContents = Array(Set(DocCArchiveOption.expectedContent).subtracting(archiveContents))
guard missingContents.isEmpty else {
throw ValidationError(
"""
'\(urlOrFallback.path)' is not a valid DocC Archive.
Expected a 'data' directory at the root of the archive.
"""
)
}
}
}