fix: review remote repos from a blobless clone without checkout
Summary
- The
com.tripleo.review-synccron got500 clone_timeout ... exceeded 240songame/DoctrineStrike(Unity, 59,103 files):git clone --depth=50checks out HEAD and never finishes inside the budget. - Remote sources now clone with
--depth=50 --filter=blob:none --no-checkout(andGIT_LFS_SKIP_SMUDGE=1), keep the metadata-only fetch of the other branches, and check out only README / GDD / engine marker files (repo_tree.py). The clone is tagged with.git/cmo-metadata-only. - For tagged clones
collect_project_snapshotwalksgit ls-tree -r -z --name-only HEAD(same_VENDOR_DIRSfilter), detects the engine from path names, and passes the trailer/build size gates by name only because blob sizes are not downloaded (documented in_size_at_least). A failed tree listing raisestree_listing_failedinstead of reporting a near-empty repo. - Local checkouts are unchanged: rglob and real sizes.
Measured locally on DoctrineStrike: clone 23 s, snapshot 0.6 s, engine unity, 57,868 files after vendor filtering, README read.
Test plan
-
tests/test_project_reviewer_partial_clone.py: real repo cloned overfile://with partial clone enabled: clone flags, materialised files, branch metadata, ls-tree walk, README, engine, local repo unchanged, loud failure, engine detection by name. -
Full suite: 1363 passed, coverage 77.6 %; ruff and mypy (repo_tree.py added to the strict list) clean. -
After deploy: POST /api/projects/review {"source":"game/DoctrineStrike"}returns 200 in under 240 s.