Привет, читатели!
Хотелось бы вам рассказать, как я сделал для себя «напоминалку» о том, что в SVN появилась более новая ревизия, чем та, с которой я работаю.
Первая мысль — написать Bash-скрипт, который будет по CRON уведомлять меня о новой ревизии. Возникает вопрос: по e-mail или стандартными средствами Ubuntu? Я склонился использовать утилиту «notify-send», так как не хотел захламлять ящик практически ненужными сообщениями.
Под катом немного кода.
Разработка
Требования к уведомлению достаточно просты:
- Номер ревизии;
- Комментарий коммита.
Первое, что необходимо — это получить номер ревизии в ветке и локальный номер ревизии:
my_version=$(svn info | grep -ohP 'Revision: d*' | grep -ohP 'd*')
url=$(svn info | grep -P "^URL:" | grep -ohP "svn://.*")
version=$(svn info $url | grep -ohP 'Revision: d*' | grep -ohP 'd*')
my_version — хранит в себе информацию о текущей версии на локальном репозитории, а version, соответственно, на удаленном.
Теперь получаем сообщение коммита, относящегося к последней ревизии:
message=$(svn log -q -v --xml --with-all-revprops -r $version | grep msg | sed -e "s/<msg>([^<]*)</msg>/1/g");
И отравляем уведомление, если ревизии не совпадают:
if [ "$version" != "$my_version" ]; then
$(/usr/bin/aplay -q $dirname/message.wav)
/usr/bin/notify-send "New revision: $version" "$message"
fi
Возникли трудности при выводе уведомления на экран: связано это с тем, что в cron не определена глобальная переменная DBUS_SESSION_BUS_ADDRESS. Проблема решилась следующим образом:
LOGIN_NAME="alex"
eval "export $(egrep -z DBUS_SESSION_BUS_ADDRESS /proc/$(pgrep -u $LOGIN_NAME gnome-session)/environ)";
Также, как видно, добавил воспроизведение звука при уведомлении.
Теперь добавим выполнение программы в crontab и все готово.
Исходный код здесь.
Спасибо за внимание, жду ваших комментариев!
Автор: ya-est