Test przed zatwierdzeniem (commit) zmian do SVN
Przetestowałem zabezpieczenie przed przypadkowy zrobieniem commit'a do repozytorium bez podania numeru zgłoszenia (ticket). Zrobiłem to za pomocą hook'a pre-commit. Wszystkie polecenia podaję względem katalogu repozytorium, u mnie jest to /var/lib/svn/test. Skopiowałem szablon skryptu (parametr -p jest ważny, bo inaczej można popsuć uprawnienia)
cp -p hooks/pre-commit.tpl hooks/pre-commit chmod u+x hooks/pre-commit
i wykomentowałem linię:
commit-access-control.pl "$REPOS" "$TXN" commit-access-control.cfg || exit 1
na koniec po innych testach, tuż przed linią
exit 0
dopisałem taki kawałek kodu
blad=0 $SVNLOOK log -t "$TXN" "$REPOS" \ | grep "#[1-9][0-9]*" > /dev/null || blad=1 if [ $blad -eq 1 ] ; then echo -e "Dodaj numer ticket'a,\nnp.: Zgloszenie #123" 1>&2 exit 2 fi
który sprawdza czy w treści komentarza zawiera #N (gdzie N to dowolna liczba naturalna większa od 0) i zwraca komunikat błędu - użytkownik zobaczy to co wysyłane jest na wyjście błędu. Właściwy test to:
grep "#[1-9][0-9]*"
Dla Trac'a to wystarczy. Można go rozbudować, np. o sprawdzenie czy zawiera refs #N (N to znowu ciąg cyfr) - tak, żeby w Redmine ładnie pokazywał. Wtedy warunek będzie wyglądał tak (ja używam tylko refs):
grep "refs #[1-9][0-9]*"
Oczywiście można jeszcze dodać sprawdzanie pozostałych Referencing keywords oraz Fixing keywords.
Wypadało by też zmienić wyświetlany komunikat na np. Podaj numer zgłoszenia poprzedzony słowem refs, np:\nrefs #123, ale by wstawić tam znak końca wiersza (\n) trzeba dodać parametr -e do polecenia echo. Razem wygląda tak:
echo -e "Podaj numer zgłoszenia poprzedzony słowem refs, \ np:\nrefs #123" 1>&2
Mechanizm uchwytów (hook) do zdarzeń można wykorzystać dowolnie, także do bardziej zaawansowanych testów: np. by zabezpieczyć przed commit'em kodu który się nie da skompilować (chociaż ja bym tego nie robił) lub automatycznego budowania po commit'cie za pomocą post-commit (tego też bym nie robił).
Komentarze
Log in or create a user account to comment.