TurtleGit for Mac

View Markdown source ↗

Private Git SVN runtime

The pinned Git 2.55.0 runtime was built with NO_PERL=YesPlease, so its git-svn entry was a failure stub. build-git-svn-runtime.py now builds a private component from checksum-verified sources. It does not install into macOS or Homebrew directories, and users do not need a system Perl/Subversion installation when they select the bundled Git.

Pins are recorded in Configuration/GitSVNRuntime.json: Perl 5.44.0, Subversion 1.14.5 LTS, APR 1.7.6, APR-util 1.6.5, Serf 1.3.10 and the same OpenSSL 3.5.9 source used by the existing OpenSSH runtime. SCons 4.8.1 is a pinned build-only tool. Official release/checksum sources are recorded beside every archive; see Perl's release announcement, Subversion LTS downloads, APR downloads and Serf distributions.

Each CPU has its own private interpreter, core/XS modules and native libraries; the dispatcher is universal arm64/x86_64. This avoids merging architecture- specific Perl configuration files. macOS deployment is capped at 13.0. The component includes generated release Perl bindings, internal LZ4/utf8proc, file/SVN/Serf transports, system SQLite/Expat and statically linked OpenSSL with module/config auto-loading disabled. TLS uses the standard /etc/ssl certificate location; real TLS/trust acceptance remains separate from local validation.

The C dispatcher resolves its own location, chooses the matching payload and executes the bundled interpreter with unchanged argument boundaries. It selects bundled Git modules and clears interpreter-code injection options. Git's template and exec paths still come from the existing containing-app runtime environment. The generated git-svn script adapts TURTLEGIT_SVN_CONFIG_DIR to its existing Subversion configuration variable because Ignore commands do not accept the config-dir CLI option. App Store helpers receive an application-support config path; ordinary desktop users retain their default configuration unless they explicitly provide this environment value. No HOME variable is repurposed.

Native dependencies are rewritten to contained loader-relative paths and receive ad-hoc signatures for development execution. The archive and installed-component audits verify hashes, aliases, per-slice deployment targets and dependencies. Validation hides the original build-prefix directories while exercising a disposable file:// SVN repository, so installed-path fallbacks cannot silently make a broken relocated payload pass. Main Git validation recognizes the private thin CPU buckets while retaining its universal-main-binary checks.

Install the verified component with install-git-svn-runtime.py. It stages narrow payload/launcher/license replacements with rollback and updates the prepared Git manifest. build-git-runtime.py includes this step. Xcode embedding requires Git LFS and SVN components; executable helpers receive sandbox inheritance and hardened-runtime signing, while libraries/bundles receive library signatures without executable sandbox entitlements. Unsigned/ad-hoc validation is not evidence of Developer ID/App Store acceptance.

Source archives, notices, launcher and reconstruction scripts accompany the component. The private build cache fingerprints pins, SDK and compiler, with per-component recipe stamps; rebuilding a changed Perl recipe starts from fresh source to avoid mixed generated headers/objects. Intel Perl module linker flags explicitly select x86_64. Universal interpreter builds require Apple Silicon and a working Intel execution environment; CI prepares this component in a standard Apple Silicon job and transfers a tar archive preserving aliases/permissions to the existing Intel test job. See the official runner reference.

Still open: signed helper/library validation and inherited bookmarks, actual App Store config/Keychain/trust behavior, authenticated HTTP/SVN/SSH acceptance, minimum-system execution, complete security-advisory/license review of the new distribution and a fresh remote CI run. The component is development work toward the complete port, not a certified distributable release.

Local validation on 2026-10-12 audited 179 component Mach-O files, both CPU payloads, deployment/loader paths and hashes, then exercised actual clone, fetch, DCommit and both Ignore commands on a disposable file:// SVN repository with original build-prefix directories unavailable. The installed main Git package also passed its existing local workflows and Git LFS provenance checks; the Debug app contains the new component manifest. These results do not establish signed Store acceptance, public authenticated transport or a successful remote CI run. Logs and exact scope are in the dated record.

Hosted runtime cache dependency repair — October 14, 2026

The complete Git SVN cache now uses the shared immutable runtime-key recipe, including the native SVN prompt adapter. Changing credentials/certificate callback code must invalidate the packaged Perl modules and reconstruction manifest; a previous cache key omitted that input even though the validator rejects an old adapter hash. Restored and freshly built payloads still run the same complete audit before saving or transferring to the Intel build job.

The native build workspace has a separate exact cache, keyed by runner/compiler/ SDK build/paths, checkout path, both pin manifests, builder and verified-download recipe. The checkout path keeps prefix-bound native work separate after a repository rename or checkout move. Prompt-only edits reuse the existing architecture/component stamps and native prefixes while repackaging the Perl adapter and launcher. Component build recipes and flags are still checked by the builder. Native work is saved only after a newly packaged payload passes its final audit; a full payload hit with no work tree does not attempt to save a missing tree. No prefix cache fallback or validator exception is introduced. This improves future hosted rebuilds after the native-work cache has been populated; a cold cache still compiles its native dependencies.

The six cache-contract checks passed after the final key inputs were captured. No app/Core/native UI checks were repeated. See CI cache evidence; actual hosted warm/cold restore/build/save behavior awaits the next CI execution. Native runtime behavior, full application integration and signed acceptance are not proved by this workflow dependency change.