Přeskočit na obsah

Tato stránka byla automaticky přeložena z angličtiny, jediného jazyka, ve kterém se tento web píše. Číst originál.

Worktree sdílejí, co cargo cestou zkompiluje, a nikdy hotový artefakt

Worktree sdílejí, co cargo cestou zkompiluje, a nikdy hotový artefakt

majordomus://rule/project.worktrees-share-build-intermediates@1aktivní operaceworktreesdiskbuild

Zdůvodnění

Každý worktree tohoto repozitáře kompiloval tytéž závislosti do vlastního target/, po 2,45 GiB (ADR 0055), a disk, který tyto kopie zabírají, zastavil 2026-10-11 build. Zřejmá úspora — jedno sdílené CARGO_TARGET_DIR — sdílí i hotový spustitelný soubor, takže build v jednom worktree nahradí binárku, kterou jiný právě spouští nebo si půjčuje. To je incident, který project.reclaim-only-what-you-own zaznamenává, vyrobený konstrukcí.

Cargo obojí drží odděleně: build.build-dir drží mezivýsledky, build.target-dir hotové artefakty. Sdílení prvního a ne druhého dává úsporu bez sdíleného spustitelného souboru (ADR 0139).

Požadované chování

.cargo/config.toml nastavuje build.build-dir a nenastavuje build.target-dir. Adresář je pod domovem cargo, takže je to jedna cesta v každé hloubce worktree. Commitnutý target-dir nebo CARGO_TARGET_DIR, do kterého buildí dva checkouty, je opět sdílený spustitelný soubor. Spuštění spustitelného souboru jiného checkoutu přes MAJORDOMUS_BIN zůstává povoleno; zakázáno je buildit do jeho adresáře.

Sdílený adresář je nahromadění, a proto má míru, práh a redukci. scripts/reap-orphans --targets jej měří spolu s worktrees; je omezen na 6144MB (MAJORDOMUS_SHARED_BUILD_CAP_MB); --reclaim jej odstraní celý, když je nad touto mezí a neběží žádný proces cargo ani rustc.

Úklid jedná podle deklarace, nikdy podle odhadu. Adresář se čte z vlastního .cargo/config.toml checkoutu; checkout, který žádný nedeklaruje, nemá nic k uvolnění.

Worker nemaže sdílený adresář ručně, dokud kdekoli běží build. Dá se regenerovat, ale build, který o něj uprostřed běhu přijde, selže z důvodu, který z tohoto buildu nikdo nevidí.

Chování při selhání

Sdílený adresář, který nelze změřit nebo který nenese značku cargo, se přeskočí a započítá, neodstraní se (project.destructive-sweeps-fail-closed). Čtení živosti, které se vrátí prázdné, neuvolní vůbec nic. Pokud build jiného worktree drží zámek souboru cargo, druhý build na něj čeká; to je cena sdílení, ne chyba.

Ověření

test/cases/1022_worktrees_share_build_intermediates.sh obsahuje deklaraci (build-dir, žádné target-dir), na fixtuře se dvěma kořeny dokazuje, že druhý kořen nekompiluje znovu sdílenou závislost a ponechává si vlastní spustitelný soubor, a prožene reaper případy v mezích, nad mezí, běžící build, nečinný a nedeklarovaný. test/cases/276_disk_is_bounded.sh obsahuje úklid po jednotlivých worktree, který toto rozšiřuje.

Odkud to pochází

kanonický soubor
.ai/repo/rules/project/worktrees-share-build-intermediates.v1.md
identity
project.worktrees-share-build-intermediates@1
dostupné také jako
Zdroj MCP majordomus://rule/project.worktrees-share-build-intermediates@1 · majordomus entity show rule/project-worktrees-share-build-intermediates-1 · GET /api/v1/entity?uri=majordomus://rule/project.worktrees-share-build-intermediates@1
v Cockpitu
/cockpit/objects/rule/project-worktrees-share-build-intermediates-1

Tato stránka je generována z výše uvedeného souboru pomocí scripts/generate-site-data; úprava stránky nic nemění, úprava souboru změní všechna rozhraní. Výše uvedené vztahy jsou hrany docs/generated/graph.json, které spustitelný program zapisuje ze stejného indexu.

Prohledává názvy a popisy všech stránek, které tento web publikuje.