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.

Nástroj běží pouze pro čtení z libovolného umístění a dvě umístění jedné verze se o jednom repozitáři shodují

Distribuce — bin/, lib/, share/ — není součástí dat repozitáře. Může to být checkout pod ~/tools, balíček v PATH nebo kopie uvnitř repozitáře a každá podoba se chová stejně, protože do ní nic nezapisuje. Dvě kopie jedné verze namířené na jeden repozitář čtou stejné soubory pod .ai/ a dávají stejné nálezy.

deklarovaný stavdeklarovaný stav: zaručeno Deklarováno jako deterministické a blokující, implementováno a s uvedeným behaviorálním testem, který to má dokázat. Zda to zaznamenaný běh podporuje, říká verdikt důkazů zobrazený vedle.

zaznamenané důkazyzaznamenané důkazy: nespuštěno Deklarováno jako zaručené, ale nepodložené zaznamenaným během: test je pojmenován, ale žádný úspěšný běh nad současnými vstupy zaznamenán není. jak se zaznamenávají důkazy

Kopie checkoutu, nesouvisející absolutní cesta a instalace na PATH čtou tytéž soubory repozitáře a nezapisují nic do distribuce, jejíž hash je po každém příkazu stejný. Kořen distribuce se odvozuje ze vstupního bodu, nikdy z prostředí.

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 was

Co 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.

Detail vykreslený z docs/claims/tool-location-independent.md.

Od tvrzení k důkazu

  1. 1 · veřejné tvrzení

    Nástroj běží pouze pro čtení z libovolného umístění a dvě umístění jedné verze se o jednom repozitáři shodují

    Provedeno na Install, Doctor.

  2. 2 · kanonické tvrzení

    tool-location-independentdeklarovaný stav: zaručeno v docs/CLAIMS.yaml

    Definováno v přečtěte si to na tomto webu · docs/DESIGN.md

  3. 3 · implementace

    lib/common.sh

  4. 4 · test a scénáře

    Test: test/cases/65_tool_root_independence.sh

  5. 5 · zaznamenané běhy

    zaznamenané důkazy: nespuštěno jak se zaznamenávají důkazy

Ověřte si to sami

Test běží v jednorázovém dočasném repozitáři a ověřuje chování, ne řetězec ve zdrojovém kódu.

z klonu repozitáře
bash test/run.sh 65_tool_root_independence

Kde se toto tvrzení používá

pokryté odpovědnosti

Související tvrzení stejná implementace

Okamžiky, na které to odpovídá

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