Я пишу скрипт для запуска проверки во всех наших репозиториях по расписанию, возможно, каждый день. Я запускаю его с параметром -q (тихий) и пытаюсь выяснить, как определить, прошла ли проверка успешно. В документах ничего не говорится о кодах выхода или о том, что будет выведено в случае сбоя. Вот сценарий:
#!/bin/bash
SVN_ROOT=#root directory for repositories#
for name in $SVN_ROOT/*;
do
start_time=`date +%s`
REPO_NAME=$(basename $name);
echo "--------------------"
echo "Verifying $REPO_NAME"
svnadmin verify $name -q
end_time=`date +%s`
run_time=$((end_time-start_time))
echo "Verification took $run_time seconds"
echo "--------------------"
echo
done
Можем ли мы просто проверить код выхода команды svnadmin verify
?
Если проверка прошла успешно, вы вообще ничего не получите. Так что проверьте, ничего ли не должно быть написано на терминале или ничего не возвращается.
Теперь неудача может быть чем угодно. Но всегда начинается с
* Error verifying repository metadata.
svnadmin:
Тот, с которым я обычно сталкивался, это Выглядит примерно так:
* Error verifying repository metadata.
svnadmin: E160006: No such revision 2
* Error verifying repository metadata.
svnadmin: E200014: L2P index checksum mismatch in file common-model_error/db/rev
s/0/2:
expected: 889bad2c5c202537b7cba500084dce5a
actual: 1858b46dd6554ef73bf8e0076e490802
Вы можете получить полную информацию из файла svnadmin_tests.py
из исходного кода svn.
Кроме того, просмотрел svnadmin_tests.py, и он не проверяет «проверка svnadmin».
Я думал, что вопрос был только о тихом режиме. -тихий режим вообще ничего не выводит при успешном завершении. Да есть целые наборы тестов для svnadmin. Функции, которые нужно искать в файле, это verify_keep_going
и verify_keep_going_quiet
и некоторые другие.
Единственный надежный способ сделать это — узнать, имеет ли svnadmin verify ненулевой код выхода в случае сбоя. Вывод синтаксического анализа очень клевый. Я не знаю, почему это не указано на странице руководства.
На самом деле это даже не задокументировано в коде. Так что маловероятно, что это будет на странице руководства.
Но в любом случае достаточно легко проверить отсутствие выходов, и это то, что у меня есть в моей настройке,
Да, вы можете проверить код возврата команды.
Например, если файл ревизии отсутствует:
svnadmin verify ./fail-test/ > test.log
* Error verifying repository metadata.
svnadmin: E160006: No such revision 16
echo $? # -> 1
В действительном репо:
svnadmin verify ./ok-repo/ > test.log
echo $? # -> 0
Вы можете протестировать $?
или сохранить его в переменной.
Другой подход — перенаправить stderr в файл и позже проверить его размер.
# this could be a loop
svnadmin verify fail-test > >(tee -a fail-test.out.log) 2> >(tee -a fail-test.err.log >&2)
svnadmin verify ok-repo > >(tee -a ok-repo.out.log) 2> >(tee -a ok-repo.err.log >&2)
# ...
# check size of errors
ls -l *.err.log
Неправда, что выхода нет вообще. Выхода нет только в том случае, если вы укажете -q для тихого, в противном случае он выводит информацию о каждой проверяемой ревизии.