Niekedy pri práci na PHP projekte, kde existuje veľa vetiev potenciálne s
nekompatibilnými balíkmi, môže byť otravné stále pamätať na manuálne
spúšťanie composer i alebo akejkoľvek docker alternatívy či aliasu. Po
zabudnutí sa objavujú chybové hlásenia, ktoré zanášajú logy, a každý to
sleduje, pričom sa zbytočne stráca čas.
Skúsil som upraviť túto Stack Overflow
odpoveď, aby som zistil, či
by to mohlo byť pohodlne automatizované cez git hooky. Pre záznam tu sú
pôvodné kroky z odpovede. Začnite vytvorením post-checkout git hooku s
príznakom spustiteľnosti:
touch .git/hooks/post-checkout
chmod u+x .git/hooks/post-checkout
Vložte tam tento obsah:
#!/bin/bash
set -e
printf '\npost-checkout hook\n\n'
prevHEAD=$1
newHEAD=$2
checkoutType=$3
[[ $checkoutType == 1 ]] && checkoutType='branch' ||
checkoutType='file' ;
echo 'Checkout type: '$checkoutType
echo ' prev HEAD: '`git name-rev --name-only $prevHEAD`
echo ' new HEAD: '`git name-rev --name-only $newHEAD`
Toto ma aspoň nasmerovalo. Teraz to transformujme tak, aby skutočne
spúšťalo composer install pri checkloute inej vetvy. Všimnite si, že
nepotrebujeme skutočne kontrolovať, či bol checknutý súbor alebo skutočná
vetva, pretože checkovanie súboru nie je príliš časté a tiež spúšťanie
composera je navrhnuté tak, aby nespôsobovalo problémy:
#!/bin/bash
set -e
prevHEAD=$1
newHEAD=$2
if [ "$newHEAD" != "$prevHEAD" ]; then
composer i
fi
Teraz otestujte s git checkout somebranch. Funguje? Áno. Pohodlné? Ani
nie! Hlavný problém je, že blokuje terminál, kým sa composer inštaluje.
Zapracujme radu z
ďalšej odpovede
vysvetľujúcej, ako spustiť dlhotrvajúci príkaz na pozadí:
long-running-command >&- 2>&- &
Alternatívne to isté možno urobiť nasledovne — vyberte si syntax, ktorá vám vyhovuje:
long-running-command >/dev/null 2>&1 &
Vyššie uvedené funguje tak, že presmeruje stderr aj stdout do
zabudnutia a pridá & na koniec, čo umiestni príkaz na pozadie. Tu je
finálny skript:
#!/bin/bash
set -e
prevHEAD=$1
newHEAD=$2
if [ "$newHEAD" != "$prevHEAD" ]; then
printf "Post-checkout 'composer install' hook active.\n"
composer i >/dev/null 2>&1 &
fi
Teraz použite git checkout - na jednoduché prepínanie tam a späť a
sledujte procesy. Mali by ste byť schopní vidieť aspoň krátky nárast
využitia CPU po každom checkloute:
$ git checkout -
Switched to branch 'somebranch'
Post-checkout 'composer install' hook active.
$ git checkout -
Switched to branch 'master'
Your branch is up to date with 'origin/master'.
Post-checkout 'composer install' hook active.
Užívajte!