From 929ea76131ba055f40a67a1ba11aaadcba5b2391 Mon Sep 17 00:00:00 2001 From: Oliver Drobnik Date: Tue, 9 Jun 2026 22:33:41 +0200 Subject: [PATCH] Revert "Use Cocoanetics/GitKit instead of the odrobnik/libgit2 fork" This reverts commit 409438d4c1d2864091412556b66433147baef7f0. --- Package.swift | 20 +++++++++---------- .../Subcommands/Stash/StashPush.swift | 2 +- .../SwiftGit/GitCommand/VersionCommand.swift | 2 +- Sources/SwiftGit/Lib/CallbacksPayload.swift | 2 +- Sources/SwiftGit/Lib/Credentials.swift | 2 +- Sources/SwiftGit/Lib/CredentialsBridge.swift | 2 +- Sources/SwiftGit/Lib/GitClient+Apply.swift | 2 +- Sources/SwiftGit/Lib/GitClient+Archive.swift | 2 +- Sources/SwiftGit/Lib/GitClient+Blame.swift | 2 +- Sources/SwiftGit/Lib/GitClient+CatFile.swift | 2 +- Sources/SwiftGit/Lib/GitClient+Checkout.swift | 2 +- .../SwiftGit/Lib/GitClient+CherryPick.swift | 2 +- Sources/SwiftGit/Lib/GitClient+Config.swift | 2 +- Sources/SwiftGit/Lib/GitClient+Describe.swift | 2 +- Sources/SwiftGit/Lib/GitClient+Diff.swift | 2 +- Sources/SwiftGit/Lib/GitClient+Grep.swift | 2 +- Sources/SwiftGit/Lib/GitClient+Init.swift | 2 +- .../SwiftGit/Lib/GitClient+Inspection.swift | 2 +- Sources/SwiftGit/Lib/GitClient+Log.swift | 2 +- Sources/SwiftGit/Lib/GitClient+Merge.swift | 2 +- Sources/SwiftGit/Lib/GitClient+MvRm.swift | 2 +- Sources/SwiftGit/Lib/GitClient+Rebase.swift | 2 +- Sources/SwiftGit/Lib/GitClient+Reflog.swift | 2 +- Sources/SwiftGit/Lib/GitClient+Reset.swift | 2 +- Sources/SwiftGit/Lib/GitClient+RevParse.swift | 2 +- Sources/SwiftGit/Lib/GitClient+Stash.swift | 2 +- Sources/SwiftGit/Lib/GitClient+Status.swift | 2 +- Sources/SwiftGit/Lib/GitClient+Tag.swift | 2 +- Sources/SwiftGit/Lib/GitClient+Tree.swift | 2 +- Sources/SwiftGit/Lib/GitClient.swift | 2 +- Sources/SwiftGit/Lib/Libgit2.swift | 2 +- Sources/SwiftGit/Lib/Libgit2Error.swift | 2 +- Sources/SwiftGit/Lib/Libgit2Sandboxing.swift | 2 +- Sources/SwiftGit/Lib/ProgressReporter.swift | 2 +- Sources/SwiftGit/Lib/SignatureResolver.swift | 2 +- Tests/SwiftGitTests/CredentialsTests.swift | 2 +- Tests/SwiftGitTests/Tier2EnvBridgeTests.swift | 2 +- 37 files changed, 46 insertions(+), 46 deletions(-) diff --git a/Package.swift b/Package.swift index 1b5e564..c1bb87a 100644 --- a/Package.swift +++ b/Package.swift @@ -286,13 +286,13 @@ let package = Package( "LZMASupport", "ZstdSupport"]), - // libgit2, packaged for SwiftPM by Cocoanetics/GitKit: a pristine - // libgit2 submodule compiled directly, exposing the curated, - // Windows-safe C module `CGitKit` (the git2.h API). GitKit's version - // tracks libgit2's 1:1 (1.9.4 ⇒ libgit2 v1.9.4). This replaces our - // former odrobnik/libgit2 fork pin; GitKit covers all five CI platforms. - .package(url: "https://github.com/Cocoanetics/GitKit", - from: "1.9.4"), + // libgit2 1.9.x packaged as a SwiftPM C target. We pin to our + // own fork while https://github.com/ibrahimcetin/libgit2/pull/ + // is open — it adds Windows + Android arms to Package.swift so + // the SwiftPM build covers all five of our CI platforms. Roll + // back to upstream once the PR lands. + .package(url: "https://github.com/odrobnik/libgit2", + branch: "windows-android-platforms"), // ShellKit owns the virtualised shell-environment surface // (IO sinks, Environment, Sandbox URL gate, NetworkConfig, @@ -936,7 +936,7 @@ let package = Package( .target( name: "CLibgit2Shim", dependencies: [ - .product(name: "CGitKit", package: "GitKit"), + .product(name: "libgit2", package: "libgit2"), ], path: "Sources/CLibgit2Shim", publicHeadersPath: "include" @@ -949,7 +949,7 @@ let package = Package( "CLibgit2Shim", "ForgeKit", .product(name: "ShellKit", package: "ShellKit"), - .product(name: "CGitKit", package: "GitKit"), + .product(name: "libgit2", package: "libgit2"), // For `git archive` — libarchive's writer is the // backend so the operation runs in-process and works // under sandboxed iOS / tvOS / watchOS. @@ -964,7 +964,7 @@ let package = Package( "ForgeKit", .product(name: "ShellKit", package: "ShellKit"), .product(name: "ArgumentParser", package: "swift-argument-parser"), - .product(name: "CGitKit", package: "GitKit"), + .product(name: "libgit2", package: "libgit2"), ], path: "Sources/SwiftGit/GitCommand" ), diff --git a/Sources/SwiftGit/GitCommand/Subcommands/Stash/StashPush.swift b/Sources/SwiftGit/GitCommand/Subcommands/Stash/StashPush.swift index dc2844b..903a558 100644 --- a/Sources/SwiftGit/GitCommand/Subcommands/Stash/StashPush.swift +++ b/Sources/SwiftGit/GitCommand/Subcommands/Stash/StashPush.swift @@ -1,7 +1,7 @@ import ArgumentParser import ShellKit import SwiftGit -import CGitKit +import libgit2 struct StashPush: AsyncParsableCommand { static let configuration = CommandConfiguration( diff --git a/Sources/SwiftGit/GitCommand/VersionCommand.swift b/Sources/SwiftGit/GitCommand/VersionCommand.swift index 733fba6..c473442 100644 --- a/Sources/SwiftGit/GitCommand/VersionCommand.swift +++ b/Sources/SwiftGit/GitCommand/VersionCommand.swift @@ -1,6 +1,6 @@ import ArgumentParser import ShellKit -import CGitKit +import libgit2 struct VersionCommand: ParsableCommand { static let configuration = CommandConfiguration( diff --git a/Sources/SwiftGit/Lib/CallbacksPayload.swift b/Sources/SwiftGit/Lib/CallbacksPayload.swift index 55d3238..f274dda 100644 --- a/Sources/SwiftGit/Lib/CallbacksPayload.swift +++ b/Sources/SwiftGit/Lib/CallbacksPayload.swift @@ -1,5 +1,5 @@ import Foundation -import CGitKit +import libgit2 /// Combined heap-allocated box held by every libgit2 callback during a /// fetch/clone/push. libgit2's `git_remote_callbacks` has one `payload` diff --git a/Sources/SwiftGit/Lib/Credentials.swift b/Sources/SwiftGit/Lib/Credentials.swift index d112dbe..2765d6f 100644 --- a/Sources/SwiftGit/Lib/Credentials.swift +++ b/Sources/SwiftGit/Lib/Credentials.swift @@ -1,5 +1,5 @@ import Foundation -import CGitKit +import libgit2 /// What an auth challenge is asking for. Mirrors libgit2's /// `GIT_CREDENTIAL_*` flags. The transport may permit several at once diff --git a/Sources/SwiftGit/Lib/CredentialsBridge.swift b/Sources/SwiftGit/Lib/CredentialsBridge.swift index 3acf5ff..c79a640 100644 --- a/Sources/SwiftGit/Lib/CredentialsBridge.swift +++ b/Sources/SwiftGit/Lib/CredentialsBridge.swift @@ -1,5 +1,5 @@ import Foundation -import CGitKit +import libgit2 /// Heap-allocated box holding the Swift `CredentialProvider`. We pass a /// raw pointer to this box as libgit2's `payload`, then unbox it inside diff --git a/Sources/SwiftGit/Lib/GitClient+Apply.swift b/Sources/SwiftGit/Lib/GitClient+Apply.swift index 63d0156..38f4323 100644 --- a/Sources/SwiftGit/Lib/GitClient+Apply.swift +++ b/Sources/SwiftGit/Lib/GitClient+Apply.swift @@ -1,6 +1,6 @@ import Foundation import ForgeKit -import CGitKit +import libgit2 /// Where to land an applied patch. Mirrors libgit2's /// `git_apply_location_t` 1:1. diff --git a/Sources/SwiftGit/Lib/GitClient+Archive.swift b/Sources/SwiftGit/Lib/GitClient+Archive.swift index c0719d2..fca183e 100644 --- a/Sources/SwiftGit/Lib/GitClient+Archive.swift +++ b/Sources/SwiftGit/Lib/GitClient+Archive.swift @@ -1,6 +1,6 @@ import Foundation import ShellKit -import CGitKit +import libgit2 // Selective imports — the libarchive wrapper module is named `Archive` // and its own `enum Archive` / `ArchiveFormat` / `ArchiveFilter` would diff --git a/Sources/SwiftGit/Lib/GitClient+Blame.swift b/Sources/SwiftGit/Lib/GitClient+Blame.swift index 912b689..f5023b1 100644 --- a/Sources/SwiftGit/Lib/GitClient+Blame.swift +++ b/Sources/SwiftGit/Lib/GitClient+Blame.swift @@ -1,6 +1,6 @@ import Foundation import ForgeKit -import CGitKit +import libgit2 /// One hunk returned by ``GitClient/blame(path:)``. Each line in a /// blamed file falls into exactly one hunk; `linesInHunk` tells you diff --git a/Sources/SwiftGit/Lib/GitClient+CatFile.swift b/Sources/SwiftGit/Lib/GitClient+CatFile.swift index 4fa2c8f..86cb0f4 100644 --- a/Sources/SwiftGit/Lib/GitClient+CatFile.swift +++ b/Sources/SwiftGit/Lib/GitClient+CatFile.swift @@ -1,5 +1,5 @@ import Foundation -import CGitKit +import libgit2 /// Compact metadata about a git object — what `cat-file -t/-s/-e` reads. public struct ObjectMetadata: Sendable { diff --git a/Sources/SwiftGit/Lib/GitClient+Checkout.swift b/Sources/SwiftGit/Lib/GitClient+Checkout.swift index 350f00b..80923c6 100644 --- a/Sources/SwiftGit/Lib/GitClient+Checkout.swift +++ b/Sources/SwiftGit/Lib/GitClient+Checkout.swift @@ -1,6 +1,6 @@ import Foundation import ForgeKit -import CGitKit +import libgit2 /// What `git checkout -b` did. Real git distinguishes "switched to a /// new branch 'X'" (created fresh) from "switched to and reset diff --git a/Sources/SwiftGit/Lib/GitClient+CherryPick.swift b/Sources/SwiftGit/Lib/GitClient+CherryPick.swift index eb6e36a..33e6218 100644 --- a/Sources/SwiftGit/Lib/GitClient+CherryPick.swift +++ b/Sources/SwiftGit/Lib/GitClient+CherryPick.swift @@ -1,6 +1,6 @@ import Foundation import ForgeKit -import CGitKit +import libgit2 /// Result of a `git cherry-pick`. public enum CherryPickOutcome: Sendable { diff --git a/Sources/SwiftGit/Lib/GitClient+Config.swift b/Sources/SwiftGit/Lib/GitClient+Config.swift index f8021d7..98e8e7e 100644 --- a/Sources/SwiftGit/Lib/GitClient+Config.swift +++ b/Sources/SwiftGit/Lib/GitClient+Config.swift @@ -1,6 +1,6 @@ import Foundation import ForgeKit -import CGitKit +import libgit2 /// Where to read/write a config entry. Mirrors `git config`'s scope flags. public enum ConfigScope: Sendable { diff --git a/Sources/SwiftGit/Lib/GitClient+Describe.swift b/Sources/SwiftGit/Lib/GitClient+Describe.swift index 433d617..b00c0fc 100644 --- a/Sources/SwiftGit/Lib/GitClient+Describe.swift +++ b/Sources/SwiftGit/Lib/GitClient+Describe.swift @@ -1,5 +1,5 @@ import Foundation -import CGitKit +import libgit2 extension GitClient { diff --git a/Sources/SwiftGit/Lib/GitClient+Diff.swift b/Sources/SwiftGit/Lib/GitClient+Diff.swift index 63257af..472de68 100644 --- a/Sources/SwiftGit/Lib/GitClient+Diff.swift +++ b/Sources/SwiftGit/Lib/GitClient+Diff.swift @@ -1,5 +1,5 @@ import Foundation -import CGitKit +import libgit2 /// Output mode for ``GitClient/diff(_:format:paths:contextLines:)``. public enum DiffFormat: Sendable { diff --git a/Sources/SwiftGit/Lib/GitClient+Grep.swift b/Sources/SwiftGit/Lib/GitClient+Grep.swift index 0497e5b..2534358 100644 --- a/Sources/SwiftGit/Lib/GitClient+Grep.swift +++ b/Sources/SwiftGit/Lib/GitClient+Grep.swift @@ -1,6 +1,6 @@ import Foundation import ForgeKit -import CGitKit +import libgit2 extension GitClient { diff --git a/Sources/SwiftGit/Lib/GitClient+Init.swift b/Sources/SwiftGit/Lib/GitClient+Init.swift index 24da896..9949c88 100644 --- a/Sources/SwiftGit/Lib/GitClient+Init.swift +++ b/Sources/SwiftGit/Lib/GitClient+Init.swift @@ -1,6 +1,6 @@ import Foundation import ShellKit -import CGitKit +import libgit2 extension GitClient { diff --git a/Sources/SwiftGit/Lib/GitClient+Inspection.swift b/Sources/SwiftGit/Lib/GitClient+Inspection.swift index 316b69c..94f3bd5 100644 --- a/Sources/SwiftGit/Lib/GitClient+Inspection.swift +++ b/Sources/SwiftGit/Lib/GitClient+Inspection.swift @@ -1,6 +1,6 @@ import Foundation import ShellKit -import CGitKit +import libgit2 /// Rich result returned by ``GitClient/commitDetailed(message:author:allowEmpty:)``. /// The CLI uses this to format `git commit`'s `[branch sha] message` line diff --git a/Sources/SwiftGit/Lib/GitClient+Log.swift b/Sources/SwiftGit/Lib/GitClient+Log.swift index d5f86ed..36547ce 100644 --- a/Sources/SwiftGit/Lib/GitClient+Log.swift +++ b/Sources/SwiftGit/Lib/GitClient+Log.swift @@ -1,6 +1,6 @@ import Foundation import ForgeKit -import CGitKit +import libgit2 /// One commit returned by ``GitClient/log(query:)``. public struct LogEntry: Sendable { diff --git a/Sources/SwiftGit/Lib/GitClient+Merge.swift b/Sources/SwiftGit/Lib/GitClient+Merge.swift index f524a2b..b268e7f 100644 --- a/Sources/SwiftGit/Lib/GitClient+Merge.swift +++ b/Sources/SwiftGit/Lib/GitClient+Merge.swift @@ -1,6 +1,6 @@ import Foundation import ForgeKit -import CGitKit +import libgit2 /// What `git merge`'s fast-forward decision was. Mirrors libgit2's /// `git_merge_analysis_t` filtered through the user's `--ff` choice. diff --git a/Sources/SwiftGit/Lib/GitClient+MvRm.swift b/Sources/SwiftGit/Lib/GitClient+MvRm.swift index 802f0bd..bf94455 100644 --- a/Sources/SwiftGit/Lib/GitClient+MvRm.swift +++ b/Sources/SwiftGit/Lib/GitClient+MvRm.swift @@ -1,6 +1,6 @@ import Foundation import ForgeKit -import CGitKit +import libgit2 import ShellKit extension GitClient { diff --git a/Sources/SwiftGit/Lib/GitClient+Rebase.swift b/Sources/SwiftGit/Lib/GitClient+Rebase.swift index fb30ed7..ff37a10 100644 --- a/Sources/SwiftGit/Lib/GitClient+Rebase.swift +++ b/Sources/SwiftGit/Lib/GitClient+Rebase.swift @@ -1,6 +1,6 @@ import Foundation import ForgeKit -import CGitKit +import libgit2 /// Result of a rebase invocation. public enum RebaseOutcome: Sendable { diff --git a/Sources/SwiftGit/Lib/GitClient+Reflog.swift b/Sources/SwiftGit/Lib/GitClient+Reflog.swift index 35cf41d..28667ff 100644 --- a/Sources/SwiftGit/Lib/GitClient+Reflog.swift +++ b/Sources/SwiftGit/Lib/GitClient+Reflog.swift @@ -1,6 +1,6 @@ import Foundation import ForgeKit -import CGitKit +import libgit2 /// One entry in a ref's reflog. Refs have a per-ref reflog stored in /// `.git/logs/refs/heads/` (or `.git/logs/HEAD` for HEAD). diff --git a/Sources/SwiftGit/Lib/GitClient+Reset.swift b/Sources/SwiftGit/Lib/GitClient+Reset.swift index f808920..7a277f3 100644 --- a/Sources/SwiftGit/Lib/GitClient+Reset.swift +++ b/Sources/SwiftGit/Lib/GitClient+Reset.swift @@ -1,6 +1,6 @@ import Foundation import ForgeKit -import CGitKit +import libgit2 /// Mode for whole-tree resets. Mirrors libgit2's `git_reset_t` 1:1. public enum ResetMode: Sendable { diff --git a/Sources/SwiftGit/Lib/GitClient+RevParse.swift b/Sources/SwiftGit/Lib/GitClient+RevParse.swift index 4a21e4e..95ec6ff 100644 --- a/Sources/SwiftGit/Lib/GitClient+RevParse.swift +++ b/Sources/SwiftGit/Lib/GitClient+RevParse.swift @@ -1,6 +1,6 @@ import Foundation import ForgeKit -import CGitKit +import libgit2 extension GitClient { diff --git a/Sources/SwiftGit/Lib/GitClient+Stash.swift b/Sources/SwiftGit/Lib/GitClient+Stash.swift index 4039c89..92edcf4 100644 --- a/Sources/SwiftGit/Lib/GitClient+Stash.swift +++ b/Sources/SwiftGit/Lib/GitClient+Stash.swift @@ -1,6 +1,6 @@ import Foundation import ForgeKit -import CGitKit +import libgit2 /// Single entry returned by ``GitClient/stashList()``. public struct Libgit2StashEntry: Sendable { diff --git a/Sources/SwiftGit/Lib/GitClient+Status.swift b/Sources/SwiftGit/Lib/GitClient+Status.swift index f1713dc..ed0aeeb 100644 --- a/Sources/SwiftGit/Lib/GitClient+Status.swift +++ b/Sources/SwiftGit/Lib/GitClient+Status.swift @@ -1,6 +1,6 @@ import Foundation import ForgeKit -import CGitKit +import libgit2 /// One entry in a `git status` report. We preserve both the index-side /// state (HEAD ↔ index) and the workdir-side state (index ↔ working diff --git a/Sources/SwiftGit/Lib/GitClient+Tag.swift b/Sources/SwiftGit/Lib/GitClient+Tag.swift index 8df8298..1042ed6 100644 --- a/Sources/SwiftGit/Lib/GitClient+Tag.swift +++ b/Sources/SwiftGit/Lib/GitClient+Tag.swift @@ -1,6 +1,6 @@ import Foundation import ForgeKit -import CGitKit +import libgit2 /// One entry returned by ``GitClient/tagList(pattern:)``. Annotated /// tags carry a `message` + `tagger`; lightweight tags don't. diff --git a/Sources/SwiftGit/Lib/GitClient+Tree.swift b/Sources/SwiftGit/Lib/GitClient+Tree.swift index 22a74f6..28afab9 100644 --- a/Sources/SwiftGit/Lib/GitClient+Tree.swift +++ b/Sources/SwiftGit/Lib/GitClient+Tree.swift @@ -1,5 +1,5 @@ import Foundation -import CGitKit +import libgit2 /// One entry produced by `lsTree`. Mirrors a single line of `git /// ls-tree`'s default output: ` \t`. diff --git a/Sources/SwiftGit/Lib/GitClient.swift b/Sources/SwiftGit/Lib/GitClient.swift index ca29b53..503cc6e 100644 --- a/Sources/SwiftGit/Lib/GitClient.swift +++ b/Sources/SwiftGit/Lib/GitClient.swift @@ -1,7 +1,7 @@ import Foundation import ForgeKit import ShellKit -import CGitKit +import libgit2 /// In-process libgit2-backed implementation of /// ``ForgeKit/GitClient`` (the protocol). The simple name `GitClient` diff --git a/Sources/SwiftGit/Lib/Libgit2.swift b/Sources/SwiftGit/Lib/Libgit2.swift index e1d799a..f61c8f4 100644 --- a/Sources/SwiftGit/Lib/Libgit2.swift +++ b/Sources/SwiftGit/Lib/Libgit2.swift @@ -1,5 +1,5 @@ import Foundation -import CGitKit +import libgit2 /// Process-wide libgit2 init / shutdown bookkeeping. /// diff --git a/Sources/SwiftGit/Lib/Libgit2Error.swift b/Sources/SwiftGit/Lib/Libgit2Error.swift index 4d4fc2a..ff3c961 100644 --- a/Sources/SwiftGit/Lib/Libgit2Error.swift +++ b/Sources/SwiftGit/Lib/Libgit2Error.swift @@ -1,5 +1,5 @@ import Foundation -import CGitKit +import libgit2 /// Wraps a non-zero return code from a `git_*` C call. /// diff --git a/Sources/SwiftGit/Lib/Libgit2Sandboxing.swift b/Sources/SwiftGit/Lib/Libgit2Sandboxing.swift index d342bc1..12840e6 100644 --- a/Sources/SwiftGit/Lib/Libgit2Sandboxing.swift +++ b/Sources/SwiftGit/Lib/Libgit2Sandboxing.swift @@ -1,7 +1,7 @@ import Foundation import ShellKit import CLibgit2Shim -import CGitKit +import libgit2 /// Bridges `Shell.current.environment.variables()` to libgit2's process-global option /// block. Keeps libgit2's own `getenv` calls inside its C internals diff --git a/Sources/SwiftGit/Lib/ProgressReporter.swift b/Sources/SwiftGit/Lib/ProgressReporter.swift index 00729fd..c3ed642 100644 --- a/Sources/SwiftGit/Lib/ProgressReporter.swift +++ b/Sources/SwiftGit/Lib/ProgressReporter.swift @@ -1,6 +1,6 @@ import Foundation import ShellKit -import CGitKit +import libgit2 /// Formats and emits `remote: …` / `Receiving objects: …` / /// `From ` / `.. -> ` lines to diff --git a/Sources/SwiftGit/Lib/SignatureResolver.swift b/Sources/SwiftGit/Lib/SignatureResolver.swift index 5e43e88..5e2bf94 100644 --- a/Sources/SwiftGit/Lib/SignatureResolver.swift +++ b/Sources/SwiftGit/Lib/SignatureResolver.swift @@ -1,7 +1,7 @@ import Foundation import ForgeKit import ShellKit -import CGitKit +import libgit2 /// Real-git-compatible identity resolution for commit author + committer. /// diff --git a/Tests/SwiftGitTests/CredentialsTests.swift b/Tests/SwiftGitTests/CredentialsTests.swift index 941cc2a..2c27bed 100644 --- a/Tests/SwiftGitTests/CredentialsTests.swift +++ b/Tests/SwiftGitTests/CredentialsTests.swift @@ -1,6 +1,6 @@ import Foundation import Testing -import CGitKit +import libgit2 @testable import SwiftGit @Suite("Credentials bridge") diff --git a/Tests/SwiftGitTests/Tier2EnvBridgeTests.swift b/Tests/SwiftGitTests/Tier2EnvBridgeTests.swift index 3bc4eaf..68312d5 100644 --- a/Tests/SwiftGitTests/Tier2EnvBridgeTests.swift +++ b/Tests/SwiftGitTests/Tier2EnvBridgeTests.swift @@ -16,7 +16,7 @@ #if os(macOS) import Foundation import Testing -import CGitKit +import libgit2 import ShellKit @testable import SwiftGit