Я пишу скрипт для запуска проверки во всех наших репозиториях по расписанию, возможно, каждый день. Я запускаю его с параметром -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 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