I tried to do some subversion hacking from Ruby, very simple things like add/remove files,
commits and so, and realized that there’s no documentation at all out there, just blog posts
here and there.
I finally got something working, including user authentication (that is not as easy as you would
expect) and ignoring https certificates not signed by a trusted CA. Something like committing a file is not as simple as it would seem.
You have to make sure you have the latest version installed. In linux it means installing the subversion-ruby package. In OS X is more complicated, you need to remove the preinstalled subversion, install the newer one from Collabnet, and move some files around.
mv /Library/Ruby/Site/1.8/svn /Library/Ruby/Site/1.8/svn.bak
mv /Library/Ruby/Site/1.8/universal-darwin9.0/svn /Library/Ruby/Site/1.8/universal-darwin9.0/svn.bak
ln -s /opt/subversion/lib/svn-ruby/svn /Library/Ruby/Site/1.8/svn
ln -s /opt/subversion/lib/svn-ruby/universal-darwin/svn /Library/Ruby/Site/1.8/universal-darwin9.0/svn
Once you have it installed then you can call the svn libraries
require "svn/core"
require "svn/client"
require "svn/wc"
require "svn/repos"
make_context("") do |ctx|
# checkout
ctx.checkout SVN_URL, "/tmp"
end
# Add a file and commit with a message
make_context("Adding a file") do |ctx|
ctx.add f
ctx.commit f
end
# from http://svn.collab.net/repos/svn/trunk/subversion/bindings/swig/ruby/test/util.rb
def make_context(log)
ctx = Svn::Client::Context.new
# Function for commit messages
ctx.set_log_msg_func do |items|
[true, log]
end
# don't fail on non CA signed ssl server
ctx.add_ssl_server_trust_file_provider
# username and password
ctx.add_simple_prompt_provider(0) do |cred, realm, username, may_save|
cred.username = "myusername"
cred.password = "mypassword"
cred.may_save = false
end
# setup_auth_baton(ctx.auth_baton)
return ctx unless block_given?
begin
yield ctx
ensure
ctx.destroy
end
end
Like this:
Like Loading...