Co to znamená
majordomus archive zapíše snapshot sledovaného stromu a před návratem ho znovu otevře. Počet položek v kontejneru se musí rovnat tomu, co bylo připraveno, a pokud se spustitelné soubory dovnitř dostaly a žádný nevyšel, příkaz selže s kódem 13 a příkazem k reprodukci, místo aby vám předal kopii, ve které nic nemůže běžet.
Princip
Režim každé položky se čte z indexu gitu — autority v tom, čím soubor je, a ne z pracovního stromu, jehož režimy mohla dřívější neopatrná kopie už zploštit. Zapisuje se do _ARCHIVE/MANIFEST.txt jako <mode> <size> <path> a _ARCHIVE/restore.sh uvnitř archivu je na druhém konci všechny znovu uplatní a vytvoří lokální git index, protože tento repozitář se vyjmenovává přes git ls-files a kontrola spuštěná bez něj nezkoumá nic a hlásí, že nic není špatně.
Kontejner se zapisuje bez zip -X. Tento přepínač odstraňuje dodatečná pole nesoucí unixový režim, čímž vzniklo selhání, kvůli kterému toto tvrzení existuje: archiv se správným počtem položek, s každým bajtem obsahu a bez jediného spustitelného souboru.
Jak to vidět
majordomus archive audit --out /tmp/a.zip
cd /tmp && unzip -q a.zip && cd <repository>
ls -l scripts/derive # still 755
sh _ARCHIVE/restore.sh # modes re-applied, one commit, a real index
scripts/ci/command-furnished # a gate of the repository, running in the copyCo nepokrývá
Obnovená kopie má jeden commit, žádné remotes a žádný reflog. Jakákoli kontrola, která čte víc než pracovní strom, to řekne; žádná z nich tímto tvrzením neprojde. Archiv také není podepsaný, nelze ho vrátit do původního repozitáře a není to záloha.
Proč existuje
Vadu na vzdáleném konci tam nelze odlišit od vady v repozitáři. Archivu věří někdo, kdo ho nemůže porovnat s originálem, takže porovnání musí proběhnout před odesláním.