svnadmin verify 验证失败时的退出代码是否为 1?

Does svnadmin verify have an exit code of 1 on failure to verify?

我正在编写一个脚本 运行 定期(可能每天)验证我们所有的回购协议。我正在 运行 使用 -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 源代码中获取完整信息。

是的,您可以检查return命令代码。

例如,如果缺少修订文件:

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