Имеет ли svnadmin verify код выхода 1 при неудачной проверке?

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


1
142
2

Ответы:

Если проверка прошла успешно, вы вообще ничего не получите. Так что проверьте, ничего ли не должно быть написано на терминале или ничего не возвращается.

Теперь неудача может быть чем угодно. Но всегда начинается с

* 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