Artifact dc0aa2f8584bd261f2cbc42cf785a4252b6fddb0e4af1554a29c15b773e64f76:
`zit import-git SOURCE DEST` reads a Git repository through `git fast- export` and builds a zit repository from it. The destination appears only after the export, artifact creation and publication have all completed, so a failure anywhere leaves no half-published repository behind; this is the first caller of the logstore artifact batch added earlier on this branch, which is what makes a check-in's blobs arrive as a unit.
Mode 160000 now parses as a gitlink instead of error.UnsupportedMode. That completes the split begun in the previous check-in: reporting what the stream said is the parser's job, and deciding that zit has no submodule concept is the importer's. The refusal still happens, but it now explains itself instead of failing as a parse error on input git legitimately emits.
Signed commits are refused by default rather than imported with the signature silently dropped. Fossil has no signature card, so importing one is a loss the operator should choose; --drop-signatures accepts it explicitly.
The sub-manifest parameter is analyzed, not guessed. Preflight measures the source's own name set and pins its measured optimum, and --submanifest-k overrides that only to match another repository's existing pin, which is what lets two repositories share sub-manifests by content address. On a 100,000 file corpus the analyzed value cuts the objective by roughly 3.4x against the fixed default it replaces.
Correctness is checked differentially against real Git rather than against fixtures we wrote: every materialized tree is compared to `git ls-tree` for the corresponding commit, refs and annotated tags are compared to the source, and both comparators now assert that a gitlink is absent rather than merely tolerating it, so the omission is a contract instead of an accident.
The rest is wiring. extras learns the import provenance names, root.zig exports the importer modules across the executable and library boundary, tidy and the CI step guard learn the new test roots and build steps, and the e2e help check learns that a verb spelled import_git in Zig is import-git on the command line. by dmestas on 2026-07-31 02:56:07.
C git-import:\stranslate\sa\sGit\sfast-export\sstream\sinto\sa\szit\shistory\n\n`zit\simport-git\sSOURCE\sDEST`\sreads\sa\sGit\srepository\sthrough\s`git\sfast-\nexport`\sand\sbuilds\sa\szit\srepository\sfrom\sit.\sThe\sdestination\sappears\nonly\safter\sthe\sexport,\sartifact\screation\sand\spublication\shave\sall\ncompleted,\sso\sa\sfailure\sanywhere\sleaves\sno\shalf-published\srepository\nbehind;\sthis\sis\sthe\sfirst\scaller\sof\sthe\slogstore\sartifact\sbatch\sadded\nearlier\son\sthis\sbranch,\swhich\sis\swhat\smakes\sa\scheck-in's\sblobs\sarrive\sas\na\sunit.\n\nMode\s160000\snow\sparses\sas\sa\sgitlink\sinstead\sof\serror.UnsupportedMode.\nThat\scompletes\sthe\ssplit\sbegun\sin\sthe\sprevious\scheck-in:\sreporting\swhat\nthe\sstream\ssaid\sis\sthe\sparser's\sjob,\sand\sdeciding\sthat\szit\shas\sno\nsubmodule\sconcept\sis\sthe\simporter's.\sThe\srefusal\sstill\shappens,\sbut\sit\nnow\sexplains\sitself\sinstead\sof\sfailing\sas\sa\sparse\serror\son\sinput\sgit\nlegitimately\semits.\n\nSigned\scommits\sare\srefused\sby\sdefault\srather\sthan\simported\swith\sthe\nsignature\ssilently\sdropped.\sFossil\shas\sno\ssignature\scard,\sso\simporting\none\sis\sa\sloss\sthe\soperator\sshould\schoose;\s--drop-signatures\saccepts\sit\nexplicitly.\n\nThe\ssub-manifest\sparameter\sis\sanalyzed,\snot\sguessed.\sPreflight\smeasures\nthe\ssource's\sown\sname\sset\sand\spins\sits\smeasured\soptimum,\sand\n--submanifest-k\soverrides\sthat\sonly\sto\smatch\sanother\srepository's\nexisting\spin,\swhich\sis\swhat\slets\stwo\srepositories\sshare\ssub-manifests\sby\ncontent\saddress.\sOn\sa\s100,000\sfile\scorpus\sthe\sanalyzed\svalue\scuts\sthe\nobjective\sby\sroughly\s3.4x\sagainst\sthe\sfixed\sdefault\sit\sreplaces.\n\nCorrectness\sis\schecked\sdifferentially\sagainst\sreal\sGit\srather\sthan\nagainst\sfixtures\swe\swrote:\severy\smaterialized\stree\sis\scompared\sto\s`git\nls-tree`\sfor\sthe\scorresponding\scommit,\srefs\sand\sannotated\stags\sare\ncompared\sto\sthe\ssource,\sand\sboth\scomparators\snow\sassert\sthat\sa\sgitlink\nis\sabsent\srather\sthan\smerely\stolerating\sit,\sso\sthe\somission\sis\sa\ncontract\sinstead\sof\san\saccident.\n\nThe\srest\sis\swiring.\sextras\slearns\sthe\simport\sprovenance\snames,\sroot.zig\nexports\sthe\simporter\smodules\sacross\sthe\sexecutable\sand\slibrary\sboundary,\ntidy\sand\sthe\sCI\sstep\sguard\slearn\sthe\snew\stest\sroots\sand\sbuild\ssteps,\sand\nthe\se2e\shelp\scheck\slearns\sthat\sa\sverb\sspelled\simport_git\sin\sZig\sis\nimport-git\son\sthe\scommand\sline. D 2026-07-31T02:56:07.604 F .fossil-settings/ignore-glob 76b01a09a221949a7a8acff90b391d1ba8a541ef6696924287ad5ca73908a582 F .github/workflows/ci.yml 757f4e7c6d29e6358dd98a638ab7804ff3460012c02b95f2d3038e2f234b33ee F LICENSE 702ae7ff835a2a971dae11c5cae039803bf394b77a6d8ec9f18693e449eaaf26 F README.md 67bb1afa5bff033e7ce51ff92e782a8a22a5e64541c219b338147da4b1ad8f47 F build.zig 5bb4db1341c980e4b68851302c2de657dc553f7e60f91a35538666c7df8c298b F build.zig.zon dd3992bfc8da12e09a018c4697e38ddf79d07e225405af448ecca1ebefc3ea0c F docs/RELEASE-NOTES-0.1.0.md 5ed8b4d35ee23b7990261f8af34f5fa3cc629baf63b0059d9f7bb2d2c48dc802 F docs/RELEASE-NOTES-0.1.1.md 59eea8c487dc1e9190c44c371656e430cd5621031a71c502ecbae96802712857 F docs/RELEASE-NOTES-0.1.2.md 7c968ab247ad1194f9163e625a37452ae72bdc23f3e66e8ea26b39f6e0a52914 F docs/RELEASE-NOTES-0.1.3.md c8f703b8717040f96a9b77ad132bbe309ba4368ead5362739e4d5ef23f2d3286 F docs/rfcs/draft-fossil-artifact-format-00.txt a6d542a5effeb41d0ea1e916058ccdc0a5819787f167ef1ebad7814f5680e7ad F docs/rfcs/draft-fossil-delta-format-00.txt d8025d6d75322e33887c3334a4b9cc729960028b3c994ed01e5a474e4b388fd2 F docs/rfcs/draft-fossil-repo-state-00.txt b35480166caaf5d2c220086140a1d47034e9b4967689be8f4cd8779bbdbbc3da F docs/rfcs/draft-fossil-submanifests-00.txt eaef2e2e36f4fab96ec4ba9654a8e7c02317086918f6e32e45fd62897dfd48e9 F docs/rfcs/draft-fossil-sync-protocol-00.txt 153d31ec11ff6636793514df711389883d5dd3111b97d3da295a30308fb400b4 F scripts/mirror-export.sh cc1130129e3c320cb9c1c5a05f505e45ece23d6bb3e0228da8e7ffe97bd5612b x F scripts/soak.README 3a2f028e4f87a395b2b779ac63260fcb68a7a9c7ffc9fea5b065d5bc065c4719 F scripts/soak.sh e184de2f7396ae88c1266d565092282dc9aff151fab8f971840d867562f7d1be x F src/annotate.zig 0a6b6728099e63c84681d1e5228ebb45fafb55d65df1720358247fd6e6532c63 F src/artifact.zig 81425cecf990ac1eb2b87cd48522aa535ac67c9e3ac16f2169aa1418f5d4d875 F src/artifact_fuzz.zig 98000540f71b1f8fa8a33d2f1da885a6c9c2507108fb1bc95630c3b6b4fab0dc F src/artifact_test.zig 13e3b0371b8d832030a183a5e6409d2d26d33db3ec7a0d940fd949b65b0856d2 F src/bisect.zig 70a0b3561380f216a0cea9ee9419bb1cd1b77d9b6a73786f41992dfd70ceb04a F src/checkout.zig 31f20dc1fe5285575b7bfca7fedbca1dae07e2cb77c9fde6f0f27e72a7e4f80f F src/ci_test.zig 642a5de2bc6df0c3b028ab5c6baaeaa3ce29c420b6b47760e996b204591d8fd4 F src/cli.zig f26c62710b07cc2b025f040650cd3fcbafb96bd6cecb2f6060a941e8f8a48a08 F src/cmd/checkout.zig 0f079b56222a8277d1e4fcc44a6c8ddfd996ab09430267dc7c9ee0d549abf95d F src/cmd/history.zig fd3adc3448c7a8486a8610ff7a47f2ca89620e897590155f0bc1b83bfd64b2a1 F src/cmd/sync.zig b2f11cb373cc455e77600115ec3de0b92d5e946654a14afbc5a5926f9f24f160 F src/cmd/tracking.zig 46b079b974838f92b9508a647c0a89e3747fec09dab072a0bae2c0d0639c4831 F src/container.zig cef1028531f2763f94248b761c8779a1884e44bb854b8c45617494e3ead40e61 F src/container_test.zig a013652b1ed181161d3ad8fc9d8f052f7c27b61e129662632ceaf8cf189445ec F src/control_paths.zig bc1a94f35675065cee6bf29e9236b443e2a1879ec2f9b65ef0141b1042a77219 F src/crc32.zig 57429c29f4a67a9bfaebad8d5826471f9ff26cfd085c5424bf8e0fccba376bb4 F src/crc32_fuzz.zig 2e6c3425989051ec826b0f1208fa9716808011e71c98ff0a5ae2e38de524caea F src/delta.zig e8f3a6297d47549aea146222732ccf514c39688414f0a74ba396ac91066686f3 F src/delta_fuzz.zig 5e5c715722760d6f45c4eaaf9b5d495bf83c59e5869a0e0dd76bb57b007e3b53 F src/delta_test.zig b18d97e117dce8fbcc05bff6f6954effdb946bab6d36337efbe5ef64d10646a0 F src/dst.zig 077f19221915ff99026216b96de927fedb499ab265bfe51d5f7f5364e8de32e3 F src/e2e.zig 0a93a1d2133a2dba20468b727afb88e556e5faad818a098a7a6098f4dddcdecc F src/extras.zig a105769691ce5fd17f67f037c3d773b6ac546798aa6d49ff1acc064d90b8b177 F src/fuzz_tests.zig 60f1db664e0540a05944c3ddb230125ecfaa971e30aaa18c1001c349e861a083 F src/git_fast_export.zig 75d951bcbbc1834e1399d6ca7c00e2507cdcb1e752f2b551ef9b3aa0114ecec5 F src/git_fast_export_test.zig a6a76e050129508a2c8ecec9050232fc90215f024999023f4696516188ab4e43 F src/git_import.zig 9d644eebcef2688ad3ae97f1b1c914b12b13fa2948d31c67e1b3e74f7fec3dab F src/git_import_benchmark.zig 1ae4a9867c91a78459a4b6cdc8a10427fa85807727e5327bdee6dcc57703e254 F src/git_import_benchmark_support.zig 1e9bc27aed47e63f315cb5c8a4fea2f43a4ccd410e4aeb35c4a8a81391588f68 F src/git_import_cli.zig e914a3cffb8205169823dd4c3804ea6eb5c79ff2a06da22c04b88c10c3d2995a F src/git_import_cli_pipe_helper.zig 0cbb3eba0d56a9d4fb26b74f20565532372c4fbace16742d6943d04b13bdcdec F src/git_import_cli_test.zig 44248444b07145496b44fc1ba0c39637b64c486f79ef195f3db42e717a2cc60e F src/git_import_e2e.zig 14f05388fc92feaf13277a16447b79bd10b3ba70ca4726139efbf698572b28b1 F src/git_import_impl.zig 06f955d2d712c6cd5be53c9c660e0e570dae5938898afaa9791765683575f5ad F src/git_import_refs_test.zig f507bba80b5a276bdb6e5fad8a234247cb5d01433c56ec7725d4b2701115c31c F src/git_import_test.zig 2717ab140648f77e80fc955ba2f261ec6b6b23455a894cf54d79a9077b22959c F src/logstore.zig af0b29cbab14bd69596faa3fbae363056c72ac22eb7a76f68b4e47df4558610d F src/logstore_benchmark.zig 23ec4f894bdf845e21353e343a963045d2c45d960befa2c97c248460c043aaf7 F src/logstore_fuzz.zig fcdbb70b468fcabff6edbfd8a526832acc5ba12a39cca83b5fdffd5716817e8d F src/logstore_test.zig c97492855395653fd0483a1c4ca003512ad0107c0b3ef6e061ed12f6db8c5675 F src/main.zig 3b9715575371359585955cb82cf69daa356c9adc75791e9a179ac6bc21699b69 F src/managed.zig 81ccc2d6321fe3dff91f653305ae4e73bea0b3fae7db2ab2f0cf168d9518d601 F src/merge3.zig 7fc52445688751bb8af30462549650660bcdbadabef54d892b6505d628248d0b F src/merge3_fuzz.zig 83dcd4d9f2f9c208baa15e79ceeea80a0ebf47456a9b045f6d1c1efe3a927582 F src/pack.zig 0ea96cb540b3f43f6ff8ce95a3044ce939879bc6f9bf0eb82b26aab4089009c7 F src/packaging_test.zig 95627a5646a06c36a87f2bed1ec925898b8a69248809f6cad0bbdcea9a059cf3 F src/repocache.zig 32af5b54b011fef358a134273b5e6f43da4282122c05a85ad503a8f7796c6c66 F src/repoimage.zig 7d2dc2f3c145e10e2d9ba6997705fd61a0cc0aedde8e171c253163d1279ccdd5 F src/repository.zig 5e35dae88418bb328bcfc209b13badbb2fe5cc832fb83b60cd0ee7be07a5169a F src/repository_test.zig ffcb406f6a80facde45696b7af8ac321b3972babf636eb26b903c63b6c9f6b56 F src/repostate.zig 78fa336fdbd491ac4a0a161e87e6c6edacaee8051c276b10eb9f6c61a0a2c6fa F src/repostate_test.zig 0f5c4ae8b3782e6910beb30b4d1960fdd16ec3e7c37b3727633d47ab52b0b8db F src/repoview.zig b6e0b35b133b6acfae8dde8fb4ab45a886e50e43ebb668030ce941dc205dd2c5 F src/rfc_vectors/artifact_a1_1_sha1_manifest.txt 82d8fc78b3fbf85efe80cb05e79db40c910bf0551e55b728c6f9c2ca7a42ddb6 F src/rfc_vectors/artifact_a1_2_sha3_technote.txt 832e850f83aab2e2a754aa97591109f7f05fb41e4126c7e71c88a59d6d17e55d F src/rfc_vectors/artifact_a3_rcard_manifest.txt 47e412ef211f095e93275fadf527909e581eef42357d8437fc7e299bfc3e62a7 F src/rfc_vectors/submanifest_a2_1_leaf.txt aa9d404c14fe4dadd2ab398961fb0dfe650a877c061f650d8233a5888e920acf F src/rfc_vectors/submanifest_a2_2_leaf.txt a50a722b465ed67b42ee0fbe61e4a19d6b1d22940ba5740e99e450921e3f52ea F src/rfc_vectors/submanifest_a3_tree_manifest.txt 95fba39cbaba76fccb15571516659cea6a0e8a60123c3e7bda1397649d87c509 F src/rfc_vectors/submanifest_a4_1_leaf.txt b8e53d0c46cb57b616cc0ed6de5ce2453715be6157b73d247bcd5de8a6510aaa F src/rfc_vectors/submanifest_a4_2_leaf.txt cff23e5ba71569397c1d816afa2dd0bfffc42339e402df36b63623846bd5fcbe F src/rfc_vectors/submanifest_a4_3_leaf.txt 9604c3f9774f7472d7bff44d5965f30250358a3e7a18046eeaf5f9d83bd5cdc6 F src/rfc_vectors/submanifest_a4_tree_manifest.txt 02dad8d4451ecf930c0c8637cf66351579aa746aebf0cf10f249b2a6dea37caa F src/rfc_vectors/submanifest_a5_delta_manifest.txt c74e37f650677523f7b6c2b4f094f766c4427a8ea180768ad75fa2de6bd14902 F src/rfc_vectors/submanifest_a5_encoding_leaf_1.txt e2899273b6a258ee18e053a79903d02469a275e2c80279c3657c7b803e2af6c0 F src/rfc_vectors/submanifest_a5_encoding_leaf_2.txt d7edb65681faaa4fd4f3541f04370421b057bf299098b781c7ec50d609869082 F src/rfc_vectors/submanifest_a5_encoding_leaf_3.txt c634332663f1cc0298aae6b61c799214a522877102cd6acdfe633f29fd79eeaf F src/rfc_vectors/submanifest_a5_encoding_manifest.txt deb0cb8b56fddfc4eebbab0f928cbdb19e64a6ba568064d5b43663dc1ef7263f F src/rfc_vectors/submanifest_a5_merge_leaf_1.txt 4bf4476e3aa41a1e3d26c85173c18fcd19f61871d4fc31215e523d7502078cc8 F src/rfc_vectors/submanifest_a5_merge_leaf_2.txt 6f3c993caa208b6fd44332d241676f9aa6a8c29dc7e28f287d5cdc088005a842 F src/rfc_vectors/submanifest_a5_merge_manifest.txt cef55b9b325fbc8abd59a044acafa57603c1b11a605e7fbba02d511a6da7a806 F src/rfc_vectors/submanifest_a5_three_level_interior_1.txt d42946de7b59647235f2166d964e9e5878bb1b3aba796b5e9c5e9dc719784e23 F src/rfc_vectors/submanifest_a5_three_level_interior_2.txt c1cc48fa9a3fbc34da7614632137890b4b09b33e750abc75514836c533e5f42e F src/rfc_vectors/submanifest_a5_three_level_manifest.txt c136ef62f5f13c18d06564649da6022d9fe25cde5be15dd1ad10b04015096424 F src/rfc_vectors/sync_a1_round1_reply.txt 638813029b10f81303b88859279afb17095d7c779c993f4267870909acabbeb9 F src/rfc_vectors/sync_a1_round2_file_cards.txt 4fa397741f7521cc4181d5d6b04dc143187f57602384eaa688552115ecda27c2 F src/rfc_vectors/sync_a1_round2_reply.txt af956808190c79b37a384041690c36b78845b471d6c6c01d1cced6e3ee92e6b1 F src/rfc_vectors/sync_a2_reply.txt aa130a127cde210f793c7842960083c765e0ffc7b673374fabc8f0edfe03d763 F src/root.zig d76470b4034f7c3581aee60c50437405aa1b6ac06442b8fa45812443b8df0c47 F src/serve.zig 5a934102c75a29b2f57d4c3e69bed69e1319ecdb56b12a8da5407297661cff3b F src/serve_benchmark.zig ff55c6148e961c9374ad60a756d9d997fadbc854d2a79d625235b580aefb8656 F src/serve_fuzz.zig 3c39ea768ffa37599e2cc00c588f053870766ab91500aceb0d844a4322174687 F src/sim/assembly_sweep.zig 65016d6ae15579b7e4c7db91ea4659b21dc67533b3807ad30619a3b517ef4ed1 F src/sim/checkout_sweep.zig 80bb6fef67c88a29a2b6bdc372996c9f2c4ad65db289cddebc7a427b42ee5d39 F src/sim/faulty_dir.zig 29f0efc3338c14eb87085cd87591d01d78ae1feac8b3f6ab7f5a2533ac01a7db F src/sim/faulty_file.zig 720be41b7f9bd64b9fd2586201e2f62d79c6d60452196eedeb9708b170093424 F src/sim/gen.zig a05fa9fa17e4b585c662c6e1d3855e5e46327db9c7490bc834382b64e742c557 F src/sim/net.zig 8fb057012ce0a33f67c928cd696bc2761fea8ba4012b2daa33871b2ba5dfe772 F src/sim/oracle.zig bc9e272bb3332b7b715fbcc254b63583aa294b769d423f4be48593152717dfb2 F src/sim/storage_sweep.zig 78e8a877e22afe537d29d289273d739a18f220497584b925492ed57331af27d9 F src/sim/sync_gen.zig 238d46942915b5c0e989dfc738b5927b5228468ea123e6f17b6fb593aa5cbf6e F src/sim/sync_sweep.zig feeab7fa3123f8a9a1e6a43b6feee0e4d68479a6a19eb9374d57edbe9c600d4b F src/smoke.zig 71968cdaeed39abca39b4795c95f590f9afea80a32e95a07d4209495aeb70ea6 F src/storage.zig 512205eb629d5af8d50ad336f1ef49f53b455abd52ee2f9b56d20893cafad39f F src/storage_benchmark.zig 123ee72db0b7ba660a11594b54b4e11410b3cb1df4ca4e8c3e29cfcb7ceb48b3 F src/storestat.zig 30bd29d3638c4dcda9766f94a1a202cc1df181add943d9afb9ef225ccc64b4f9 F src/submanifest_benchmark.zig 8668fb10ea60736302c97f8c19c6cec5cbbdbe99b2013494b889df5d699ac2e1 F src/submanifest_editor.zig 3054898bbe9377edfcddad47fe25ec05666a011248f90e18add776f5cf19bcb5 F src/submanifest_editor_test.zig 5ea55e5c37df2ca7e9b51798890aab0848cb9ce4c02269bf876bf48fe4386db1 F src/submanifest_partition.zig 1d06059185986c977d20433ea8318f0e48e7f58a59a7432fb5e93de75a64c932 F src/sync.zig fe129cf3168cc8613264448ffea8794e2d18be283c74f15d02d3e82c74678664 F src/sync_benchmark.zig f0d99a1f8273a1675a2f482a4977bbb12fc07a432447905c991bd359db73acdf F src/sync_driver.zig 722ed498ea6b76900661a085d4257e51f6416d43ac1185e8ac15140de265f67e F src/sync_driver_test.zig 20eb1827932874422a75d06cfe503680cf17d99152dff1f852989dc22ae923c5 F src/sync_fuzz.zig 0ab9b7195535468db561cdcb405b7bf17536e2c6cb77a115ab1fe2badb001194 F src/sync_test.zig c2a24e84db7afca3e688854ff9079046c3633877d38cf834901f3c5734a2a8fd F src/tidy.zig 59fba497b6a9a39314fc24a08334321ecaad1c026cc0a7d35c67a1e2066458a8 F src/transport.zig 36c4cbabaf10b30dbc20c6b8a30df94394a7e0a65b27613f0ace2f49ec1eaa79 F src/transport_fuzz.zig 43c310c51a6502fb2e049e6f43dfa151b1a632e6c885554ec6edce4ec62a8a48 F src/undo.zig c3ef95e4c6affeb893e60922506b760f483a6640fe3fd5c63bf86c6d20cf2675 F src/update.zig 050c0b96ae847a2a3d4e544e2e031715a4259f44d6bcdea1677fc094c89b8fab F src/update_test.zig 5185a994e37dc3d3d73e37facdc5d85548f14a54e8ca8e32a26216d2a8437818 F src/warmread_benchmark.zig 290887ab34f7777effcd4062c000456b1fcf8a59f84617a96a740d15a0245776 P 4a95e436afff1cc037dca4d9bab4aafeb7f5fba993afc52f7ebf12ef9b9c816e R 0f3793d1c6a5ccdf2238331409908a91 U dmestas Z d1096f95696ca287f555fbbb441455ea