Наблюдать за изменениями в файлах и перезапускать тесты
Есть исходные файлы проекта. Хочу, что бы при их изменении в процессе разработки автоматически запускались тесты.
Для этого написал такой скрипт:
#!/bin/bash
WATCH_DIR=.
while read -r file date events; do
if [[ "$file" =~ .*php$ ]]; then
printf '\033[33m%*s\033[0m\n' $(tput cols) ' ' | tr ' ' '-'
echo -e "\033[32m$date\033[0m"
echo "$events" "$file"
composer test
fi
done < <(inotifywait -mqr --timefmt '%T' --format '%w%f %T %e' -e modify -e create -e delete -e move --exclude '\/(vendor|storage|cache)\/|.*\.sw[px]|.*~$' "$WATCH_DIR")
Тесты занимают какое-то время. Если в это время файлы снова изменились, тест доходит до конца и запускается повторно. Меня это не устраивает. Я хочу, чтобы при изменении текущее тестирование завершалось, и запускалось заново.
Как это сделать?
Ответы (1 шт):
Автор решения: Total Pusher
→ Ссылка
Все решилось довольно просто.
В начале цикла прибиваем прошлую команду kill $TEST_ID. В конце цикла - назначаем новый ID:
composer test &
TEST_ID=$!
Все вместе получилось так:
#!/bin/bash
WATCH_DIR=.
TEST_ID=
while read -r file date events; do
if [[ "$file" =~ .*php$ ]]; then
kill $TEST_ID
printf '\033[33m%*s\033[0m\n' $(tput cols) ' ' | tr ' ' '-'
echo -e "\033[32m$date\033[0m"
echo "$events" "$file"
composer test &
TEST_ID=$!
echo $TEST_ID
fi
done < <(inotifywait -mqr --timefmt '%T' --format '%w%f %T %e' -e modify -e create -e delete -e move --exclude '\/(vendor|storage|cache)\/|.*\.sw[px]|.*~$' "$WATCH_DIR")