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.

Repozitář s rozložením před .ai se migruje jednou, výslovně, s náhledem plánu a ověřenou zálohou svého lokálního stavu a příkaz je poté idempotentní

Repozitář, jehož projektová data stále žijí v .majordomus/, se tiše neupgraduje. Každý běžný příkaz toto rozvržení odmítne s kódem 12 a jmenuje majordomus migrate. Samotná migrace vypíše celý svůj plán pod --dry-run, jeden řádek na soubor s akcí a cílem, a nic nezapíše; ostrý běh přesune kanonické soubory do .ai/repo/ se zachováním historie, přesune stav do .ai/local/state/ a vyjme ho z indexu, nejdřív stav zazálohuje bajt po bajtu a ověří kopii, smaže jen odvozené soubory, které lze znovu vygenerovat, a soubor, který nezná, ohlásí, místo aby ho smazal. Spuštěna znovu na migrovaném repozitáři to oznámí a skončí kódem 0.

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

Každý další příkaz odmítne starší rozvržení a jmenuje migrate. --dry-run vytiskne plán a nic nezapíše. Soubor, který verze nezná, se ohlásí, nikdy nesmaže; cíl, který už existuje, odmítne celý běh.

Co to znamená

Repozitář, jehož projektová data stále žijí pod .majordomus/, není tiše povýšen. Každý běžný příkaz toto rozvržení odmítne s exit 12 a jmenuje majordomus migrate. Samotná migrace vypíše celý svůj plán pod --dry-run, jeden řádek na soubor s akcí a cílem, a nezapíše nic; skutečný běh přesune kanonické soubory do .ai/repo/ s historií, která je následuje, přesune stav do .ai/local/state/ a vyjme jej z indexu, nejprve stav zálohuje bajt po bajtu a ověří kopii, zahodí jen odvozené soubory, které umí regenerovat, a soubor, který nezná, hlásí místo jeho smazání. Spuštěna znovu na migrovaném repozitáři to řekne a skončí s 0.

Princip

lib/migrate.sh sestaví jednu plánovací tabulku z manifestu kostry — cíle pocházejí ze stejného manifestu, který používá init — a táž tabulka řídí zkušební i skutečný běh. Sledované kanonické soubory se přesouvají pomocí git mv; šablony shodné s vlastními šablonami nástroje se zahodí a upravené se ponechají; generated/ se zahodí, protože každá projekce nyní nese vlastní razítko. Stav se zkopíruje pod tmp/majordomus-migrate-backup/<utc>/state/ a před přesunem se porovná. .majordomus/, který obsahuje i instalaci nástroje, cíl pod .ai/, který už existuje, nebo starší politika, která se nedá parsovat, každý odmítne dřív, než se cokoli zapíše. Běh končí znovu-razítkováním projekcí a spuštěním doctor, přičemž každý exit hlásí na vlastním řádku.

Jak to vidět

majordomus check                       # majordomus: project data lives under .majordomus/ (the pre-.ai layout); run: majordomus migrate   exit 12
majordomus migrate --dry-run           # move .majordomus/policy.yaml -> .ai/repo/policy.yaml … dry run: nothing written
majordomus migrate                     # backup .majordomus/state/ -> tmp/majordomus-migrate-backup/…/state/ (byte for byte; verified) … migrated: …
majordomus migrate                     # already on the .ai layout; nothing to do   exit 0

Co nepokrývá

Záloha je na stejném disku jako repozitář, což chrání před špatným přesunem, ne před ztraceným strojem. Stav přestane být sledován, takže jeho trvanlivost po migraci je checkout plus záloha, ne větev; sledovanou polovinu nechává k posouzení a commitu člověku.

Proč existuje

Změna rozložení, kterou nástroj provede sám při prvním spuštění, je okamžik, kdy uživatelé přicházejí o data a nedokážou říct, o co. Z přesunu jako příkazu s plánem, zálohou a odmítnutím všeho, čemu nerozumí, se stává krok k přezkoumání. test/cases/66_migrate_legacy.sh postaví legacy strom ručně a dokládá dry run, zálohu, odmítnutí i idempotenci.

Detail vykreslený z docs/claims/legacy-migration.md.

Od tvrzení k důkazu

  1. 1 · veřejné tvrzení

    Repozitář s rozložením před .ai se migruje jednou, výslovně, s náhledem plánu a ověřenou zálohou svého lokálního stavu a příkaz je poté idempotentní

    Vytvořeno na Install, Layer.

  2. 2 · kanonické tvrzení

    legacy-migrationdeklarovaný stav: zaručeno v docs/CLAIMS.yaml

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

  3. 3 · implementace

    lib/migrate.sh · majordomus migrate

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

    Test: test/cases/66_migrate_legacy.sh

    Provedeno v Přesunout repozitář z rozvržení před .ai do vrstvy.

  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 66_migrate_legacy

Kde se toto tvrzení používá

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

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