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 open source project
//
// Copyright (c) 2025 Apple Inc. and the Swift project authors
// Licensed under Apache License v2.0 with Runtime Library Exception
//
// See http://swift.org/LICENSE.txt for license information
// See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors
//
//===----------------------------------------------------------------------===//
public import SWBCore
import SWBLibc
public import SWBUtil
import Foundation
public final class CreateBuildDirectoryTaskAction: TaskAction {
public override class var toolIdentifier: String {
return "create-build-directory"
}
public static func createBuildDirectory(at directoryPath: Path, fs: any FSProxy, outputDelegate: (any TaskOutputDelegate)? = nil) -> CommandResult {
// Build directory already exists, nothing to do here.
if fs.exists(directoryPath) {
return .succeeded
}
do {
try fs.createDirectory(directoryPath, recursive: true)
try fs.setCreatedByBuildSystemAttribute(directoryPath)
return .succeeded
} catch {
outputDelegate?.emitError(error.localizedDescription)
return .failed
}
}
public override func performTaskAction(
_ task: any ExecutableTask,
dynamicExecutionDelegate: any DynamicTaskExecutionDelegate,
executionDelegate: any TaskExecutionDelegate,
clientDelegate: any TaskExecutionClientDelegate,
outputDelegate: any TaskOutputDelegate
) async -> CommandResult {
let generator = task.commandLineAsStrings.makeIterator()
_ = generator.next() // consume program name
guard let directory = generator.next() else {
outputDelegate.emitError("wrong number of arguments")
return .failed
}
return CreateBuildDirectoryTaskAction.createBuildDirectory(at: Path(directory), fs: executionDelegate.fs, outputDelegate: outputDelegate)
}
}
|