Module: SvnWc

Defined in:
lib/svn_wc.rb

Overview

This module is designed to operate on a working copy (on the local filesystem) of a remote Subversion repository.

It aims to provide (simple) client CLI type behavior, it does not do any sort of repository administration type operations, just working directory repository management.

Current supported operations:

  • open

  • checkout/co

  • list/ls

  • update/up

  • commit/ci

  • status/stat

  • diff

  • info

  • add

  • revert

  • delete

  • svn+ssh is our primary connection use case, however can connect to, and operate on a (local) file:/// URI as well

Is built on top of the SVN (SWIG) (Subversion) Ruby Bindings and requires that they be installed.

Examples

require 'svn_wc'

yconf = Hash.new
yconf['svn_user']              = 'test_user'
yconf['svn_pass']              = 'test_pass'
yconf['svn_repo_master']       = 'svn+ssh://www.example.com/svn_repository'
yconf['svn_repo_working_copy'] = '/opt/svn_repo'

svn = SvnWc::RepoAccess.new(YAML::dump(yconf), do_checkout=true, force=true)
# or, can pass path to conf file
#svn = SvnWc::RepoAccess.new(File.join(path_to_conf,'conf.yml'), do_checkout=true, force=true)

info = svn.info
puts info[:root_url]           # 'svn+ssh://www.example.com/svn_repository'

file = Tempfile.new('tmp', svn.svn_repo_working_copy).path
begin
  svn.info(file)
rescue SvnWc::RepoAccessError => e
  puts e.message.match(/is not under version control/)
end

svn.add file
puts svn.commit file               # returns the revision number of the commit
puts svn.status file               # ' ' empty string, file is current

File.open(file, 'a') {|f| f.write('adding this to file.')}
puts svn.status(file)[0][:status]  # 'M' (modified)
puts svn.info(file)[:rev]          # current revision of file

puts svn.diff(file)                # =~ 'adding this to file.'

svn.revert file                    # discard working copy changes, get current repo version
svn.commit file                    # -1 i.e commit failed, file is current

svn.delete file
svn.commit file  # must commit our delete
puts "#{file} deleted' unless File.exists? file

(In general also works with an Array of files)
See test/* for more examples.

See the README.rdoc for more

Category

Version Control System/SVN/Subversion Ruby Lib

Package

SvnWc::RepoAccess

Author

David V. Wright <[email protected]>

License

LGPL License

– TODO make sure args are what is expected for all methods TODO props

look into:
#wc_status = infos.assoc(@wc_path).last
#assert(wc_status.text_normal?)
#assert(wc_status.entry.dir?)
#assert(wc_status.entry.normal?)
#ctx.prop_set(Svn::Core::PROP_IGNORE, file2, dir_path)

++ module Svn

class Error
  #WC_NOT_DIRECTORY  # 1.4.2
  class WcNotDirectory # 1.6.6
    raise StandardError.new(
  #WC_NOT_DIRECTORY  # 1.4.2
  end
  class AuthnNoProvider
    raise StandardError
  end
end

end

Defined Under Namespace

Classes: RepoAccess, RepoAccessError