CommandLineToolkit

Форк
0
/
ChildProcessLogsContainerProvider.swift 
45 строк · 1.5 Кб
1
/*
2
 * Copyright (c) Avito Tech LLC
3
 */
4

5
import Foundation
6
import FileSystem
7
import PathLib
8
import Tmp
9

10
public protocol ChildProcessLogsContainerProvider {
11
    func paths(subprocessName: String) throws -> (stdout: AbsolutePath, stderr: AbsolutePath)
12
}
13

14
public final class ChildProcessLogsContainerProviderImpl: ChildProcessLogsContainerProvider {
15
    private let fileSystem: FileSystem
16
    private let mainContainerPath: AbsolutePath
17
    
18
    public init(
19
        fileSystem: FileSystem,
20
        mainContainerPath: AbsolutePath
21
    ) {
22
        self.fileSystem = fileSystem
23
        self.mainContainerPath = mainContainerPath
24
    }
25
    
26
    public func paths(subprocessName: String) throws -> (stdout: AbsolutePath, stderr: AbsolutePath) {
27
        let subprocessSpecificContainer = mainContainerPath.appending(
28
            components: ["subprocesses", subprocessName]
29
        )
30
        let processContainer = try TemporaryFolder(
31
            containerPath: subprocessSpecificContainer,
32
            prefix: subprocessName,
33
            deleteOnDealloc: false
34
        ).absolutePath
35
        
36
        let stdoutPath = processContainer.appending("stdout.log")
37
        let stderrPath = processContainer.appending("stderr.log")
38
        
39
        try fileSystem.createDirectory(path: processContainer, withIntermediateDirectories: true)
40
        try fileSystem.createFile(path: stdoutPath, data: nil)
41
        try fileSystem.createFile(path: stderrPath, data: nil)
42
        
43
        return (stdout: stdoutPath, stderr: stderrPath)
44
    }
45
}
46

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.