mirror of
https://github.com/xtool-org/xtool.git
synced 2026-10-08 19:49:36 +02:00
## What does this PR do? Bumps pointfree deps and explicitly disables OpenCombine so that we don't have different dependency graphs when building xtool on Darwin vs Linux hosts. ## How was it tested? A bunch of `swift package resolve`s ## AI tool usage How much of this PR was AI-assisted? (check one) - [x] **0** - No AI was used to write code - [ ] **1** - I was assisted by AI. I reviewed the finished result. - [ ] **2** - I set the AI going and left it to it; nobody has read the result - no review, or AI review only <!-- If an AI agent is filling this in: declare the level honestly, and open as a draft if it is #2. Do not lower the declared level to get the PR reviewed. --> <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Chores** * Updated supporting package versions and refreshed command-line and file-operation handling. * These changes do not add or remove app features or alter its public interface. No action is needed to continue using the app. <!-- end of auto-generated comment: release notes by coderabbit.ai -->
60 lines
1.7 KiB
Swift
60 lines
1.7 KiB
Swift
import Foundation
|
|
#if canImport(Subprocess)
|
|
import Subprocess
|
|
#endif
|
|
|
|
extension Data {
|
|
// AsyncBytes is Darwin-only :/
|
|
|
|
package init(reading fileHandle: FileHandle) async throws {
|
|
#if canImport(Darwin)
|
|
self = try await fileHandle.bytes.reduce(into: Data()) { $0.append($1) }
|
|
#else
|
|
self = try fileHandle.readToEnd() ?? Data()
|
|
#endif
|
|
}
|
|
|
|
package init(reading file: URL) async throws {
|
|
#if canImport(Darwin)
|
|
self = try await file.resourceBytes.reduce(into: Data()) { $0.append($1) }
|
|
#else
|
|
try self.init(contentsOf: file)
|
|
#endif
|
|
}
|
|
}
|
|
|
|
extension FileManager {
|
|
/// Like `copyItem(at:to:)` but allows opting out of preserving the owner
|
|
package func copyItem(
|
|
at srcURL: URL,
|
|
to dstURL: URL,
|
|
preserveOwner: Bool,
|
|
) async throws {
|
|
// why this is needed: https://github.com/xtool-org/xtool/issues/254
|
|
|
|
#if canImport(Subprocess)
|
|
if !preserveOwner {
|
|
let result = try await Subprocess.run(
|
|
.name("cp"),
|
|
arguments: ["-R", srcURL.path, dstURL.path],
|
|
output: .discarded,
|
|
error: .string(limit: .max, encoding: UTF8.self),
|
|
)
|
|
do {
|
|
try result.checkSuccess()
|
|
} catch {
|
|
print("Error copying \(srcURL.path) to \(dstURL.path): \(result.standardError)")
|
|
throw error
|
|
}
|
|
return
|
|
}
|
|
#endif
|
|
|
|
try self.copyItem(at: srcURL, to: dstURL)
|
|
}
|
|
}
|
|
|
|
package func stderrPrint(_ message: String, terminator: String = "\n") {
|
|
try? FileHandle.standardError.write(contentsOf: Data("\(message)\(terminator)".utf8))
|
|
}
|