Sapling/Sources/SaplingGit/MockGitProvider.swift

70 lines
2.4 KiB
Swift

import Foundation
import SaplingCore
public final class MockGitProvider: GitProvider {
public let displayName = "Mock Git"
private let statuses: [GitFileStatus]
public init(
statuses: [GitFileStatus] = [
GitFileStatus(path: "README.md", state: .modified),
GitFileStatus(path: "attachments/architecture.png", state: .untracked)
]
) {
self.statuses = statuses
}
public func initRepository(at path: URL) async throws -> GitRepository {
GitRepository(name: path.lastPathComponent, rootURL: path)
}
public func clone(remoteURL: URL, to destinationURL: URL) async throws -> GitRepository {
GitRepository(
name: destinationURL.lastPathComponent,
rootURL: destinationURL,
remotes: [GitRemote(name: "origin", url: remoteURL)]
)
}
public func repository(at path: URL) -> any Repository {
MockRepository(rootURL: path, statuses: statuses)
}
}
private struct MockRepository: Repository {
let rootURL: URL
let statuses: [GitFileStatus]
func status() async throws -> [GitFileStatus] { statuses }
func add(paths: [String]) async throws {}
func commit(message: String) async throws -> GitCommit {
GitCommit(
id: UUID().uuidString.replacingOccurrences(of: "-", with: "").lowercased(),
shortHash: "mocked",
authorName: "Sapling",
authorEmail: "sapling@example.com",
message: message,
authoredAt: Date()
)
}
func push(remote: String?, branch: String?) async throws {}
func pull(remote: String?, branch: String?) async throws {}
func createBranch(named name: String) async throws -> GitBranch { GitBranch(name: name) }
func switchBranch(named name: String) async throws -> GitBranch { GitBranch(name: name, isCurrent: true) }
func merge(branch name: String) async throws {}
func addSubmodule(remoteURL: URL, path: String) async throws -> Subproject {
Subproject(
name: URL(fileURLWithPath: path).lastPathComponent,
path: path,
repositoryURL: rootURL.appendingPathComponent(path),
remoteURL: remoteURL
)
}
func removeSubmodule(path: String) async throws {}
func updateSubmodules(initSubmodules: Bool, recursive: Bool) async throws {}
func syncSubmodules(recursive: Bool) async throws {}
}