Emcee

Форк
0
/
DeployableBundle.swift 
39 строк · 1.9 Кб
1
import Foundation
2
import PathLib
3

4
public final class DeployableBundle: DeployableItem {
5
    
6
    public init(name: String, bundlePath: AbsolutePath) throws {
7
        super.init(
8
            name: name,
9
            files: try DeployableBundle.filesForBundle(bundlePath: bundlePath)
10
        )
11
    }
12
    
13
    public static func filesForBundle(bundlePath: AbsolutePath) throws -> Set<DeployableFile> {
14
        let bundleName = bundlePath.lastComponent
15
        var files: Set<DeployableFile> = [DeployableFile(source: bundlePath, destination: RelativePath(bundleName))]
16
        
17
        guard let enumerator = FileManager.default.enumerator(at: bundlePath.fileUrl.resolvingSymlinksInPath(), includingPropertiesForKeys: nil) else {
18
            throw DeploymentError.failedToEnumerateContentsOfDirectory(bundlePath)
19
        }
20
        
21
        while let url = enumerator.nextObject() as? URL {
22
            let localPath: AbsolutePath
23
            let relativePath: RelativePath
24
            if let computedRelativePath = url.path.stringWithPathRelativeTo(anchorPath: bundlePath.pathString, allowUpwardRelation: false) {
25
                localPath = AbsolutePath(url.path)
26
                relativePath = RelativePath(computedRelativePath)
27
            } else if let computedRelativePath = url.resolvingSymlinksInPath().path.stringWithPathRelativeTo(anchorPath: bundlePath.pathString, allowUpwardRelation: false) {
28
                localPath = AbsolutePath(url.resolvingSymlinksInPath().path)
29
                relativePath = RelativePath(computedRelativePath)
30
            } else {
31
                throw DeploymentError.failedToRelativizePath(AbsolutePath(url.path), anchorPath: bundlePath)
32
            }
33
            let destinationRelativePath = RelativePath(bundleName).appending(relativePath: relativePath)
34
            files.insert(DeployableFile(source: localPath, destination: destinationRelativePath))
35
        }
36
        
37
        return files
38
    }
39
}
40

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

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

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

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