#!/usr/bin/env ruby # # info.rb : output some info about a subversion url # # Example based on a blogpost by Mark Deepwell # http://www.markdeepwell.com/2010/06/ruby-subversion-bindings/ # ###################################################################### # Licensed to the Apache Software Foundation (ASF) under one # or more contributor license agreements. See the NOTICE file # distributed with this work for additional information # regarding copyright ownership. The ASF licenses this file # to you under the Apache License, Version 2.0 (the # "License"); you may not use this file except in compliance # with the License. You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, # software distributed under the License is distributed on an # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY # KIND, either express or implied. See the License for the # specific language governing permissions and limitations # under the License. ###################################################################### # require "svn/core" require "svn/ext/core" require "svn/client" require "svn/wc" require "svn/repos" # Prompt function mimicking svn's own prompt simple_prompt = Proc.new do |result, realm, username, default, may_save, pool| puts "Authentication realm: #{realm}" if username != nil result.username = username else print "Username: " result.username = STDIN.gets.strip end print "Password for '#{result.username}': " result.password = STDIN.gets.strip end gnome_keyring_prompt = Proc.new do |keyring_name| print "Password for '#{keyring_name}' GNOME keyring: " STDIN.gets.strip end if ARGV.length != 1 puts "Usage: info.rb URL[@REV]" else ctx = Svn::Client::Context.new() ctx.add_platform_specific_client_providers ctx.add_simple_provider ctx.add_simple_prompt_provider(2, simple_prompt) ctx.add_username_provider ctx.add_ssl_server_trust_file_provider ctx.add_ssl_client_cert_file_provider ctx.add_ssl_client_cert_pw_file_provider # Allow asking for the gnome keyring password, in case the keyring is # locked. if Svn::Ext::Core.respond_to?(:svn_auth_set_gnome_keyring_unlock_prompt_func) Svn::Ext::Core::svn_auth_set_gnome_keyring_unlock_prompt_func(ctx.auth_baton, gnome_keyring_prompt) end repos_uri, revision = ARGV[0].split("@", 2) if revision revision = Integer(revision) end begin ctx.info(repos_uri, revision) do |path, info| puts("Url: #{info.url}") puts("Last changed rev: #{info.last_changed_rev}") puts("Last changed author: #{info.last_changed_author}") puts("Last changed date: #{info.last_changed_date}") puts("Kind: #{info.kind}") end rescue Svn::Error => e # catch a generic svn error raise "Failed to retrieve SVN info at revision " + revision.to_s end end