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

时间:2015-01-30 06:45:54

标签: ruby windows svn tortoisesvn

有没有办法检查SVN更新是否需要身份验证?

场景我编写了一个ruby GUI应用程序,它以预定的方式更新SVN存储库(来自静态路径)。这作为Windows服务执行。也有安装tortoisesvn。

执行时的红宝石

在我的脚本中

svn update local_path_to_repository --username user --password password然后它正常工作,因为我传递了用户名&使用update命令的密码。

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

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

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

  

更新:从SVN book读取。我明白了:

  1. 客户端检查用户是否将任何凭据指定为命令行选项(--username和/或--password)。如果没有,或者这些选项未能成功验证,则
  2. 客户端在运行时身份验证/区域中查找服务器的主机名,端口和域,以查看用户是否已经缓存了相应的凭据。如果没有,或者缓存的凭据无法进行身份验证,则
  3. 最后,客户端会提示用户(除非通过--non-interactive选项或其客户端特定的等价物指示不这样做)。
  4. 但我没有找到检查是否需要身份验证的方法。

    任何人都可以帮助我!

1 个答案:

答案 0 :(得分:3)

所以我终于通过以下方式找到了解决方法:

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

如果check_authentication返回true意味着身份验证失败,那么我构建GUI以输入新密码并将其发送给用户。