A while ago our local network admins decided static IP numbers were a Bad Thing, causing chaos for me when trying to use a machine as a server for subversion (among other things).
I found myself trying to check changes in subversion repositories back in to the server, only to find that the server was no longer at the IP address from which the source had been checked out. The answer (apart from attacking the network support people) is the svn switch
command. This is a multi-purpose tool with lots of options, so I wrote a wrapper to simplify the process of changing the repository's root URL and nothing else. It was also an excuse to learn a bit of ruby, which is way cool.
#!/usr/bin/env ruby
new_server_address= ARGV[0]
fail "Specify the new server name or IP number" unless new_server_address
svn_info = %x{svn info}
fail "'.' is not a working copy" if svn_info == ""
url_regex = Regexp.new('^URL: (.*$)')
repository_url = url_regex.match(svn_info)[1].to_s
fail "Unable to find the URL" unless repository_url
split_repository_url = repository_url.split('/')
split_repository_url[2] = new_server_address
new_repository_url = split_repository_url.join('/')
puts "Switching from \n#{repository_url} \nto \n#{new_repository_url}"
puts "Continue? [Y]"
confirm = STDIN.gets.chomp
if confirm.upcase == "Y" then
system("svn switch --relocate #{repository_url} #{new_repository_url}")
end