Something went wrong. Try again.
This repository has no description
Something went wrong. Try again.
9.9 kB · 388 lines
Swift
at main
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389import Foundationimport Tagged
public enum RemoteNameTag {}public typealias RemoteName = Tagged<RemoteNameTag, String>
public enum RemoteURLTag {}public typealias RemoteURL = Tagged<RemoteURLTag, String>
public enum BranchNameTag {}public typealias BranchName = Tagged<BranchNameTag, String>
public enum RefNameTag {}public typealias RefName = Tagged<RefNameTag, String>
public enum CommitIDTag {}public typealias CommitID = Tagged<CommitIDTag, String>
public enum CommitMessageTag {}public typealias CommitMessage = Tagged<CommitMessageTag, String>
public enum PersonNameTag {}public typealias PersonName = Tagged<PersonNameTag, String>
public enum EmailAddressTag {}public typealias EmailAddress = Tagged<EmailAddressTag, String>
public enum SSHUsernameTag {}public typealias SSHUsername = Tagged<SSHUsernameTag, String>
public enum SSHPrivateKeyTag {}public typealias SSHPrivateKey = Tagged<SSHPrivateKeyTag, String>
public enum SSHPublicKeyTag {}public typealias SSHPublicKey = Tagged<SSHPublicKeyTag, String>
public enum SSHKeyPassphraseTag {}public typealias SSHKeyPassphrase = Tagged<SSHKeyPassphraseTag, String>
public enum HostKeySHA256Tag {}public typealias HostKeySHA256 = Tagged<HostKeySHA256Tag, String>
public enum RepositoryPathTag {}public typealias RepositoryPath = Tagged<RepositoryPathTag, String>
public struct SourceControlFileMergeRequest: Equatable, Sendable { public var path: RepositoryPath public var baseContents: Data? public var localContents: Data? public var upstreamContents: Data?
public init( path: RepositoryPath, baseContents: Data?, localContents: Data?, upstreamContents: Data? ) { self.path = path self.baseContents = baseContents self.localContents = localContents self.upstreamContents = upstreamContents }}
public enum SourceControlFileMergeResult: Equatable, Sendable { case merged(contents: Data?) case conflicted}
public struct Repository: Equatable, Sendable { public var url: URL
public init(url: URL) { self.url = url.standardizedFileURL }}
public struct Remote: Equatable, Sendable { public var name: RemoteName public var url: RemoteURL
public init(name: RemoteName = "origin", url: RemoteURL) { self.name = name self.url = url }}
public struct Branch: Equatable, Sendable { public var name: BranchName
public init(name: BranchName) { self.name = name }}
public struct Commit: Equatable, Sendable { public var id: CommitID
public init(id: CommitID) { self.id = id }}
public struct Author: Equatable, Sendable { public var name: PersonName public var email: EmailAddress
public init(name: PersonName, email: EmailAddress) { self.name = name self.email = email }}
public enum SSHCredentialSource: Equatable, Sendable { case agent case memory( publicKey: SSHPublicKey?, privateKey: SSHPrivateKey, passphrase: SSHKeyPassphrase? )}
public struct SSHCredentials: Equatable, Sendable { public var username: SSHUsername public var source: SSHCredentialSource
public init( username: SSHUsername = "git", publicKey: SSHPublicKey? = nil, privateKey: SSHPrivateKey, passphrase: SSHKeyPassphrase? = nil ) { self.username = username self.source = .memory( publicKey: publicKey, privateKey: privateKey, passphrase: passphrase ) }
public init( username: SSHUsername = "git", source: SSHCredentialSource ) { self.username = username self.source = source }}
public enum HostKeyPolicy: Equatable, Sendable { case defaultValidation case pinnedSHA256(HostKeySHA256) case acceptForTesting}
public struct Credentials: Equatable, Sendable { public var ssh: SSHCredentials public var hostKeyPolicy: HostKeyPolicy
public init( ssh: SSHCredentials, hostKeyPolicy: HostKeyPolicy = .defaultValidation ) { self.ssh = ssh self.hostKeyPolicy = hostKeyPolicy }}
public extension Credentials { static func sshAgent( username: SSHUsername = "git", hostKeyPolicy: HostKeyPolicy = .defaultValidation ) -> Self { Self( ssh: SSHCredentials(username: username, source: .agent), hostKeyPolicy: hostKeyPolicy ) }}
public struct CloneRequest: Equatable, Sendable { public var remote: Remote public var destinationURL: URL public var checkout: RefName? public var depth: Int? public var credentials: Credentials?
public init( remote: Remote, destinationURL: URL, checkout: RefName? = nil, depth: Int? = nil, credentials: Credentials? = nil ) { if let depth { precondition(depth > 0, "Clone depth must be positive.") } self.remote = remote self.destinationURL = destinationURL.standardizedFileURL self.checkout = checkout self.depth = depth self.credentials = credentials }}
public struct FetchRequest: Equatable, Sendable { public var repository: Repository public var remote: RemoteName public var credentials: Credentials?
public init( repository: Repository, remote: RemoteName = "origin", credentials: Credentials? = nil ) { self.repository = repository self.remote = remote self.credentials = credentials }}
public struct CheckoutRequest: Equatable, Sendable { public var repository: Repository public var ref: RefName
public init(repository: Repository, ref: RefName) { self.repository = repository self.ref = ref }}
public struct ResolveRevisionRequest: Equatable, Sendable { public var repository: Repository public var ref: RefName
public init(repository: Repository, ref: RefName = "HEAD") { self.repository = repository self.ref = ref }}
public struct CreateBranchRequest: Equatable, Sendable { public var repository: Repository public var name: BranchName public var startPoint: RefName public var checkout: Bool
public init( repository: Repository, name: BranchName, startPoint: RefName = "HEAD", checkout: Bool = true ) { self.repository = repository self.name = name self.startPoint = startPoint self.checkout = checkout }}
public struct StageRequest: Equatable, Sendable { public var repository: Repository public var paths: [RepositoryPath]
public init(repository: Repository, paths: [RepositoryPath]) { self.repository = repository self.paths = paths }}
public struct CommitRequest: Equatable, Sendable { public var repository: Repository public var message: CommitMessage public var author: Author
public init( repository: Repository, message: CommitMessage, author: Author ) { self.repository = repository self.message = message self.author = author }}
public struct FormatPatchRequest: Equatable, Sendable { public var repository: Repository public var commit: CommitID
public init(repository: Repository, commit: CommitID) { self.repository = repository self.commit = commit }}
public struct EmailPatchRequest: Equatable, Sendable { public var repository: Repository public var commit: CommitID public var baseCommit: CommitID
public init( repository: Repository, commit: CommitID, baseCommit: CommitID ) { self.repository = repository self.commit = commit self.baseCommit = baseCommit }}
public struct PushRequest: Equatable, Sendable { public var repository: Repository public var remote: RemoteName public var localBranch: BranchName public var remoteBranch: BranchName public var credentials: Credentials?
public init( repository: Repository, remote: RemoteName = "origin", localBranch: BranchName, remoteBranch: BranchName, credentials: Credentials? = nil ) { self.repository = repository self.remote = remote self.localBranch = localBranch self.remoteBranch = remoteBranch self.credentials = credentials }}
public struct StatusEntry: Equatable, Sendable { public enum Kind: Equatable, Sendable { case added case modified case deleted case renamed case untracked case conflicted }
public var path: RepositoryPath public var kind: Kind
public init(path: RepositoryPath, kind: Kind) { self.path = path self.kind = kind }}
public struct SourceControlRemoteFailure: Equatable, Sendable { public enum Kind: Equatable, Sendable { case authentication case connection case timedOut case unknown }
public var kind: Kind public var message: String
public init(kind: Kind, message: String) { self.kind = kind self.message = message }}
public enum SourceControlError: Equatable, Error, Sendable { case notConfigured case operationFailed(String) case remoteOperationFailed(SourceControlRemoteFailure)}
extension SourceControlError: LocalizedError { public var errorDescription: String? { switch self { case .notConfigured: "Source control is not configured." case let .operationFailed(message): message case let .remoteOperationFailed(failure): failure.message } }}