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