CommandLineToolkit
45 строк · 1.5 Кб
1/*
2* Copyright (c) Avito Tech LLC
3*/
4
5import Foundation
6import FileSystem
7import PathLib
8import Tmp
9
10public protocol ChildProcessLogsContainerProvider {
11func paths(subprocessName: String) throws -> (stdout: AbsolutePath, stderr: AbsolutePath)
12}
13
14public final class ChildProcessLogsContainerProviderImpl: ChildProcessLogsContainerProvider {
15private let fileSystem: FileSystem
16private let mainContainerPath: AbsolutePath
17
18public init(
19fileSystem: FileSystem,
20mainContainerPath: AbsolutePath
21) {
22self.fileSystem = fileSystem
23self.mainContainerPath = mainContainerPath
24}
25
26public func paths(subprocessName: String) throws -> (stdout: AbsolutePath, stderr: AbsolutePath) {
27let subprocessSpecificContainer = mainContainerPath.appending(
28components: ["subprocesses", subprocessName]
29)
30let processContainer = try TemporaryFolder(
31containerPath: subprocessSpecificContainer,
32prefix: subprocessName,
33deleteOnDealloc: false
34).absolutePath
35
36let stdoutPath = processContainer.appending("stdout.log")
37let stderrPath = processContainer.appending("stderr.log")
38
39try fileSystem.createDirectory(path: processContainer, withIntermediateDirectories: true)
40try fileSystem.createFile(path: stdoutPath, data: nil)
41try fileSystem.createFile(path: stderrPath, data: nil)
42
43return (stdout: stdoutPath, stderr: stderrPath)
44}
45}
46