Имеет ли 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?

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
142
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 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.

Неправда, что выхода нет вообще. Выхода нет только в том случае, если вы укажете -q для тихого, в противном случае он выводит информацию о каждой проверяемой ревизии.

bpeikes 18.12.2020 20:06

Кроме того, просмотрел svnadmin_tests.py, и он не проверяет «проверка svnadmin».

bpeikes 18.12.2020 20:09

Я думал, что вопрос был только о тихом режиме. -тихий режим вообще ничего не выводит при успешном завершении. Да есть целые наборы тестов для svnadmin. Функции, которые нужно искать в файле, это verify_keep_going и verify_keep_going_quiet и некоторые другие.

Siddharth Kaul 19.12.2020 04:55

Единственный надежный способ сделать это — узнать, имеет ли svnadmin verify ненулевой код выхода в случае сбоя. Вывод синтаксического анализа очень клевый. Я не знаю, почему это не указано на странице руководства.

bpeikes 19.12.2020 05:54

На самом деле это даже не задокументировано в коде. Так что маловероятно, что это будет на странице руководства.

Siddharth Kaul 19.12.2020 07:09

Но в любом случае достаточно легко проверить отсутствие выходов, и это то, что у меня есть в моей настройке,

Siddharth Kaul 19.12.2020 07:19
Ответ принят как подходящий

Да, вы можете проверить код возврата команды.

Например, если файл ревизии отсутствует:

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

Другие вопросы по теме