我正在编写一个跨平台的ruby脚本来管理一些subversion存储库。我最初生成了bash命令,但事实证明这对Windows不友好。然后我重写了我的脚本以使用subversion提供的SWIG ruby绑定。这与使用ruby 1.8.7的所有必需平台(Ubuntu,Fedora,OS X,Windows)完美配合(就SVN操作而言)。
我使用svn_wc gem来抽象部分绑定,因为我还不了解低级代码。
现在,我的问题是我必须将用户的凭据提供给绑定。 svn_wc 使用this code:
ctx.add_simple_prompt_provider(0) do |cred, realm, username, may_save|
cred.username = @svn_user
cred.password = @svn_pass
cred.may_save = false
end
如果@svn_user
和@svn_pass
为零,则绑定会因分段错误而失败:
~/.rvm/rubies/ruby-1.8.7-p334/lib/ruby/1.8/svn/util.rb:86:
[BUG] Segmentation fault
ruby 1.8.7 (2011-02-18 patchlevel 334) [i686-darwin10.8.0]
[1] 4381 abort my_script.rb
如果我评论这整段代码,我的svn命令就会失败并出现以下错误:
cant get info: subversion/libsvn_ra_neon/util.c:608:
Svn::Error::RaNotAuthorized: OPTIONS of 'https://my.subversion.url':
authorization failed: Could not authenticate to server:
rejected Basic challenge (https://my.subversion.url) (SvnWc::RepoAccessError)
我不知道may_save
参数的用途。将其更改为true并且不提供凭据仍会产生分段错误。
我的脚本应该像命令行二进制文件一样使用存储的加密凭据。我不想每次都输入凭据或将它们存储在未加密的配置文件中。
我没有找到关于此的文档。有谁知道它是否可能以及如何?