Co to znamená
Distribuce — bin/, lib/, share/ — není součástí dat repozitáře. Může to být checkout pod ~/tools, balíček na PATH nebo kopie uvnitř repozitáře a každá forma se chová stejně, protože do ní nic nezapisuje. Dvě kopie jedné verze, namířené na jeden repozitář, čtou pod .ai/ stejné soubory a vytvářejí stejné nálezy.
Princip
lib/common.sh odvozuje kořen distribuce ze vstupního bodu, který byl spuštěn, nikdy z prostředí, takže majordomus spuštěný pod jiným majordomus (hook gitu, finish --verify-command) čte vlastní share/, ne vnější; kořen repozitáře pochází z gitu. Každá cesta, kterou příkazy zapisují, se řeší pod .ai/ repozitáře nebo pod jedním z cílů projekce, které politika jmenuje, a test/cases/08_no_forbidden_constructs.sh odmítne přesměrování do jakékoli jiné proměnné cesty.
Jak to vidět
cp -R /path/to/majordomus /tmp/dist
before=$(cd /tmp/dist && find . -type f | sort | xargs sha256sum | sha256sum)
/tmp/dist/bin/majordomus init && /tmp/dist/bin/majordomus doctor
( cd /elsewhere && PATH=/tmp/dist/bin:$PATH majordomus --repo /path/to/repo start "task" --scope docs )
after=$(cd /tmp/dist && find . -type f | sort | xargs sha256sum | sha256sum)
[ "$before" = "$after" ] # the distribution is byte for byte what it wasCo nepokrývá
Dvě různé verze se smějí rozcházet a rules vendor status je způsob, jak se repozitář dozví, že spustitelný soubor před ním dodává jiný balíček pravidel, než který vendoroval. Nic tu nepřipíná repozitář k verzi nástroje.
Proč existuje
Nástroj, který zapisuje do vlastní instalace, nelze sdílet, nelze instalovat jen pro čtení a chová se různě podle toho, která kopie běžela naposledy. test/cases/65_tool_root_independence.sh spustí jednu verzi z checkoutu, z nesouvisející absolutní cesty a přes PATH, porovná jejich nálezy doctor řádek po řádku a otiskne distribuci před a po.