Artifact e891e305d2543e715db91d36d5ffa53571b29222d07bd47f08307c946ab2ff81:
- File
src/git/git_import.zig
— part of check-in
[ce3c87e25c]
at
2026-08-10 23:48:29
on branch sub-manifest
— Move the git-interop implementation into src/git/
Seven files relocate with unchanged basenames: git_fast_export(+test), git_import, git_import_impl, git_import_cli, git_import_verify, git_import_benchmark_support. The six standalone module roots (test, refs_test, cli_test, e2e, benchmark, pipe_helper) stay flat because a Zig module cannot import above its root file's directory — the same rule that keeps main/e2e/dst/smoke at src/. Future export-git files follow the same split: roots flat, implementation in src/git/. Path-string edits only; build.zig unchanged. (user: dmestas, size: 3021) [annotate] [blame] [check-ins using] [more...]
- File
src/git_import.zig
— part of check-in
[a161ee719a]
at
2026-08-08 18:07:18
on branch sub-manifest
— import-git: strip the sterilizer where fossil actually writes it
sterilize_manifest() appends its marker after the last card. On an ordinary manifest that is the end of the blob, but on a PGP-clearsigned one the cards are followed by the signature block and the marker lands immediately before it. The strip only handled the trailing case, so a signed check-in's mirror bytes never hashed to the origin's recorded name, the pair proof refused it, and its manifest/manifest.uuid/ manifest.tags were retained permanently.
On a real sqlite mirror that is 1076 check-ins, all 2009-2011. With the splice every one of the corpus's 36383 commits proves: 35307 by the trailing strip, 1076 only by this.
Deliberately narrow -- only the two positions fossil writes. A marker anywhere else is still left alone, so a blob that merely contains the line is not reshaped into one that proves. (user: dmestas, size: 3021) [annotate] [blame] [check-ins using]
const implementation = @import("git_import_impl.zig"); pub const TreeStore = implementation.TreeStore; pub const TreeFormat = implementation.TreeFormat; pub const RootView = implementation.RootView; pub const TreeCommand = implementation.TreeCommand; pub const BuildResult = implementation.BuildResult; pub const TreeError = implementation.TreeError; pub const LoadedBytes = implementation.LoadedBytes; pub const TreeStoreError = implementation.TreeStoreError; pub const Attribution = implementation.Attribution; pub const UserOptions = implementation.UserOptions; pub const SubmanifestChoice = implementation.SubmanifestChoice; pub const WorkCounters = implementation.WorkCounters; pub const ResolvedOptions = implementation.ResolvedOptions; pub const import_hash_algo = implementation.import_hash_algo; pub const stripMirrorSterilizer = implementation.stripMirrorSterilizer; pub const resolveOptions = implementation.resolveOptions; pub const analyzeSubmanifestK = implementation.analyzeSubmanifestK; pub const modeFromGit = implementation.modeFromGit; pub const CommitMarkState = implementation.CommitMarkState; pub const FinalizeOptions = implementation.FinalizeOptions; pub const FinalizedRef = implementation.FinalizedRef; pub const FinalizedRefs = implementation.FinalizedRefs; pub const RefCollision = implementation.RefCollision; pub const BranchHead = implementation.BranchHead; pub const BranchLabel = implementation.BranchLabel; pub const labelBranches = implementation.labelBranches; pub const MirrorRetainReason = implementation.MirrorRetainReason; pub const MirrorCensus = implementation.MirrorCensus; pub const mirror_candidate_names = implementation.mirror_candidate_names; pub const mirror_sterilizer = implementation.mirror_sterilizer; pub const MirrorDecisionKind = implementation.MirrorDecisionKind; pub const Digest = implementation.Digest; pub const tree_digest_domain = implementation.tree_digest_domain; pub const provenance_digest_domain = implementation.provenance_digest_domain; pub const formatDigest = implementation.formatDigest; pub const LedgerCandidate = implementation.LedgerCandidate; pub const LedgerCommit = implementation.LedgerCommit; pub const LedgerArtifact = implementation.LedgerArtifact; pub const VerificationLedger = implementation.VerificationLedger; pub const WitnessIdentity = implementation.WitnessIdentity; pub const WitnessCandidate = implementation.WitnessCandidate; pub const WitnessCommit = implementation.WitnessCommit; pub const WitnessRef = implementation.WitnessRef; pub const ImportWitness = implementation.ImportWitness; pub const TreeDigestBuilder = implementation.TreeDigestBuilder; pub const ProvenanceCandidate = implementation.ProvenanceCandidate; pub const ProvenanceInputs = implementation.ProvenanceInputs; pub const provenanceDigestOf = implementation.provenanceDigestOf; /// Production imports always use the incremental tree writer. pub const Importer = implementation.Importer(implementation.IncrementalTreePolicy, implementation.NoopObserver);