Parent

Included Modules

Files

RSCM::Subversion

RSCM implementation for Subversion.

You need the svn/svnadmin executable on the PATH in order for it to work.

NOTE: On Cygwin these have to be the win32 builds of svn/svnadmin and not the Cygwin ones.

Attributes

password[RW]
path[RW]

Must be specified in order to create repo and install triggers. Must also be specified as "" if the url represents the root of the repository, or files in revisions will not be detected.

url[RW]
username[RW]

Public Class Methods

new(url="", path="") click to toggle source
# File lib/rscm/scm/subversion.rb, line 26
def initialize(url="", path="")
  @url, @path = url, path
  @username = ""
  @password = ""
end

Public Instance Methods

add(relative_filename, options={}) click to toggle source
# File lib/rscm/scm/subversion.rb, line 49
def add(relative_filename, options={})
  svn("add #{checkout_dir}/#{relative_filename}", options)
end
can_create_central?() click to toggle source
# File lib/rscm/scm/subversion.rb, line 95
def can_create_central?
  local? && !path.nil? && !(path == "")
end
central_exists?() click to toggle source
# File lib/rscm/scm/subversion.rb, line 107
def central_exists?
  if(local?)
    File.exists?("#{svnrootdir}/db")
  else
    # Do a simple command over the network
    # If the repo/path doesn't exist, we'll get zero output
    # on stdout (and an error msg on std err).
    exists = false
    cmd = "svn log #{url} -r HEAD"
    execute(cmd) do |stdout|
      stdout.each_line do |line|
        exists = true
      end
    end
    exists
  end
end
checked_out?() click to toggle source
# File lib/rscm/scm/subversion.rb, line 203
def checked_out?
  rootentries = File.expand_path("#{checkout_dir}/.svn/entries")
  result = File.exists?(rootentries)
  result
end
commit(message, options={}) click to toggle source
# File lib/rscm/scm/subversion.rb, line 70
def commit(message, options={})
  svn(commit_command(message), options)
  # We have to do an update to get the local revision right
  checkout_silent(nil, options)
end
create_central(options={}) click to toggle source
# File lib/rscm/scm/subversion.rb, line 136
def create_central(options={})
  options = options.dup.merge({:dir => svnrootdir})
  native_path = PathConverter.filepath_to_nativepath(svnrootdir, false)
  mkdir_p(PathConverter.nativepath_to_filepath(native_path))
  svnadmin("create #{native_path}", options)
  if(path != "")
    options = options.dup.merge({:dir => "."})
    # create the directories
    paths = path.split("/")
    paths.each_with_index do |p,i|
      p = paths[0..i]
      u = "#{repourl}/#{p.join('/')}"
      svn("mkdir #{u} -m \"Adding directories\"", options)
    end
  end
end
destroy_central() click to toggle source
# File lib/rscm/scm/subversion.rb, line 99
def destroy_central
  if(File.exist?(svnrootdir) && local?)
    FileUtils.rm_rf(svnrootdir)
  else
    raise "Cannot destroy central repository. '#{svnrootdir}' doesn't exist or central repo isn't local to this machine"
  end
end
diff(path, from, to, options={}, &block) click to toggle source
# File lib/rscm/scm/subversion.rb, line 80
def diff(path, from, to, options={}, &block)
  cmd = "svn diff --revision #{from}:#{to} \"#{url}/#{path}\""
  execute(cmd, options) do |io|
    return(block.call(io))
  end
end
import_central(dir, options={}) click to toggle source
# File lib/rscm/scm/subversion.rb, line 171
def import_central(dir, options={})
  import_cmd = "import #{dir} #{url} -m \"#{options[:message]}\""
  svn(import_cmd, options)
end
install_trigger(trigger_command, trigger_files_checkout_dir, options={}) click to toggle source
# File lib/rscm/scm/subversion.rb, line 153
def install_trigger(trigger_command, trigger_files_checkout_dir, options={})
  if (WINDOWS)
    install_win_trigger(trigger_command, trigger_files_checkout_dir, options)
  else
    install_unix_trigger(trigger_command, trigger_files_checkout_dir, options)
  end
end
installed?() click to toggle source
# File lib/rscm/scm/subversion.rb, line 36
def installed?
  begin
    svn("--version", {}) 
    true
  rescue
    false
  end
end
label() click to toggle source
# File lib/rscm/scm/subversion.rb, line 76
def label
  local_revision_identifier.to_s
end
move(relative_src, relative_dest, options={}) click to toggle source
# File lib/rscm/scm/subversion.rb, line 53
def move(relative_src, relative_dest, options={})
  svn("mv #{checkout_dir}/#{relative_src} #{checkout_dir}/#{relative_dest}", options)
end
open(path, native_revision_identifier, options={}, &block) click to toggle source
# File lib/rscm/scm/subversion.rb, line 87
def open(path, native_revision_identifier, options={}, &block)
  raise "native_revision_identifier cannot be nil" if native_revision_identifier.nil?
  cmd = "svn cat #{url}/#{path}@#{native_revision_identifier}"
  execute(cmd, options) do |io|
    return(block.call(io))
  end
end
repourl() click to toggle source

url pointing to the root of the repo

# File lib/rscm/scm/subversion.rb, line 198
def repourl
  last = (path.nil? || path == "") ? -1 : -(path.length)-2
  url[0..last]
end
revisions(from_identifier=Time.new.utc, options={}) click to toggle source
# File lib/rscm/scm/subversion.rb, line 176
def revisions(from_identifier=Time.new.utc, options={})
  raise "from_identifer cannot be nil" if from_identifier.nil?
  options = {
    :from_identifier => from_identifier,
    :to_identifier => Time.infinity, 
    :relative_path => "",
    :dir => Dir.pwd
  }.merge(options)
  
  checkout_dir = PathConverter.filepath_to_nativepath(@checkout_dir, false)
  revisions = nil
  command = "svn #{changes_command(options[:from_identifier], options[:to_identifier], options[:relative_path])}"
  execute(command, options) do |stdout|
    stdout = StringIO.new(stdout.read)
    parser = SubversionLogParser.new(stdout, @url, options[:from_identifier], options[:to_identifier], path)
    revisions = parser.parse_revisions
  end
  revisions.cmd = command if store_revisions_command?
  revisions
end
supports_trigger?() click to toggle source
# File lib/rscm/scm/subversion.rb, line 125
def supports_trigger?
  true
  # we'll assume it supports trigger even if not local. this is to ensure user interfaces
  # can display appropriate options, even if the object is not 'fully initialised'
  # local?
end
to_identifier(raw_identifier) click to toggle source
# File lib/rscm/scm/subversion.rb, line 45
def to_identifier(raw_identifier)
  raw_identifier.to_i
end
transactional?() click to toggle source
# File lib/rscm/scm/subversion.rb, line 57
def transactional?
  true
end
trigger_installed?(trigger_command, trigger_files_checkout_dir, options={}) click to toggle source
# File lib/rscm/scm/subversion.rb, line 165
def trigger_installed?(trigger_command, trigger_files_checkout_dir, options={})
  return false unless File.exist?(post_commit_file)
  not_already_commented = LineEditor.comment_out(File.new(post_commit_file), /#{Regexp.escape(trigger_command)}/, "# ", "")
  not_already_commented
end
trigger_mechanism() click to toggle source
# File lib/rscm/scm/subversion.rb, line 132
def trigger_mechanism
  "hooks/post-commit"
end
uninstall_trigger(trigger_command, trigger_files_checkout_dir, options={}) click to toggle source
# File lib/rscm/scm/subversion.rb, line 161
def uninstall_trigger(trigger_command, trigger_files_checkout_dir, options={})
  File.comment_out(post_commit_file, /#{Regexp.escape(trigger_command)}/, nil)
end
uptodate?(identifier, options={}) click to toggle source
# File lib/rscm/scm/subversion.rb, line 61
def uptodate?(identifier, options={})
  if(!checked_out?)
    false
  else
    rev = identifier.nil? ? head_revision_identifier(options) : identifier 
    local_revision_identifier(options) == rev
  end
end

Protected Instance Methods

checkout_silent(to_identifier, options) click to toggle source
# File lib/rscm/scm/subversion.rb, line 211
def checkout_silent(to_identifier, options)
  checkout_dir = PathConverter.filepath_to_nativepath(@checkout_dir, false)
  mkdir_p(@checkout_dir)
  if(checked_out?)
    svn(update_command(to_identifier), options)
  else
    svn(checkout_command(to_identifier), options)
  end
end
ignore_paths() click to toggle source
# File lib/rscm/scm/subversion.rb, line 221
def ignore_paths
  [/\.svn\/.*/]
end

[Validate]

Generated with the Darkfish Rdoc Generator 2.