如何检查 svn 命令是否需要身份验证

How to check if a svn command needs authentication

是否有任何可能的方法来检查 SVN 更新是否需要身份验证?

场景: 我写了一个 ruby GUI 应用程序,它按计划更新 SVN 存储库(从静态路径)。这作为 windows 服务执行。还安装了 tortoisesvn。

在ruby时我执行

svn update local_path_to_repository --username user --password password 在我的脚本中然后它工作正常,因为我使用更新命令传递用户名和密码。

但是,当我第一次检出存储库时,tortoisesvn 会保存密码(通过缓存密码,使用标准 Windows 加密服务在磁盘上加密密码),所以我不一定需要通过每次的用户名和密码。因此我的脚本中只有 svn update local_path_to_repository

问题: 在我更改我的 LDAP 密码之前,这一切正常。更改我的 LDAP 密码后,所有存储库都无法更新,因为它正在请求新密码,但没有用于传递新密码的用户界面。

只有当 svn 更新需要这些凭据时,我才需要构建用户名和密码 UI,但并非总是如此。我如何实现这一目标?

Update : Reading from the SVN book. I Understood that:

  1. 客户端检查用户是否将任何凭据指定为命令行选项 (--username and/or --password)。如果不是,或者如果这些选项无法成功验证,则
  2. 客户端在运行时 auth/ 区域中查找服务器的主机名、端口和领域,以查看用户是否已经缓存了适当的凭据。如果不是,或者如果缓存的凭据无法通过身份验证,则
  3. 最后,客户端求助于提示用户(除非通过 --non-interactive 选项或其特定于客户端的等效选项指示不要这样做)。

但我没有找到检查是否需要身份验证的方法。

谁能帮帮我!

所以我终于找到了解决方法:

output = `svn update "#{repo_path}" --non-interactive 2>&1`
check_authentication = output.include?("Authentication failed")

if check_authentication returns true 表示身份验证失败,然后我构建用于输入新密码的 GUI 并将其发送给用户。