De updater diept de checkout eenmalig uit, zodat terugrollen kan
Gevonden bij het doorlezen van /usr/local/bin/klonkt-update op een productiehost
met zeven instances. Terugrollen was daar niet moeilijk maar onmogelijk:
git fetch --depth 1 origin main
git checkout -qf -B main FETCH_HEAD
--depth 1 haalt alleen de nieuwste commit op en checkout -f gooit de vorige boom
weg. Na een update stond de vorige versie NERGENS meer op die machine. Een
slechte release neemt alle instances tegelijk mee, en de enige uitweg was opnieuw
van GitHub halen -- als GitHub op dat moment bereikbaar is en als je weet welke
commit je wilt.
De updater diept nu EENMALIG uit (fetch --unshallow) als de checkout ondiep is, en
haalt daarna gewoon op. Dat koopt de geschiedenis terug; elke volgende fetch houdt
hem. De check gaat via rev-parse --is-shallow-repository, want --unshallow op een
complete repo is een fout, geen no-op.
Daarnaast drukt hij na een geslaagde update de vorige commit af mét het commando
om terug te gaan. Geschiedenis alleen is geen terugrol; om drie uur 's nachts heb
je ook de regel nodig.
Getest op een echte ondiepe kloon (file:// transport, want git negeert --depth bij
een lokaal pad): 1 commit -> deepen -> 1045 commits -> checkout van HEAD~3 werkt.
Tweede run slaat het deepenen over. Het gegenereerde script is met bash -n
gecontroleerd.
install.sh blijft ondiep klonen: dat houdt een verse installatie snel, en de
eerste klonkt-update diept alsnog uit. Voor de installatie zelf valt er toch
niets terug te rollen.