VCI::VCS::Svn - Object-oriented interface to Subversion
my $repository = VCI->connect(type => 'Svn', repo => 'svn://svn.example.com/svn/');
For information on how to use VCI::VCS::Svn, see VCI.
For example, if I have a project called Foo that I store in
svn.domain.com/svn/repo/Foo/trunk then the
repo would be
Though Subversion itself doesn't allow relative paths in
file:// URLs, VCI::VCS::Svn does. So
file://path/to/repo will be interpreted as meaning that you want the repo in the directory
In actuality, VCI::VCS::Svn converts that to an absolute path when creating the Repository object, so using relative paths will fail if you are in an environment where "abs_path" in Cwd fails.
VCI::VCS::Svn requires at least Subversion 1.2, and the SVN::Client perl modules that ship with Subversion must be installed.
The Subversion API requires that certain output be written to a real file on the filesystem. So, for certain operations (such as getting a diff or the contents of a file), we need to be able to write to the system's temporary directory.
Listed here are other limitations of VCI::VCS::Svn compared to the general API specified in the
VCI::Abstract modules (or compared to how you might expect the driver to function):
Svn supports "root_project".
copied, objects only implement Committable without actually being File or Directory objects. This is due to a limitation in the current Subversion API. (See http://subversion.tigris.org/issues/show_bug.cgi?id=1967.)
copied files always show up in
added, they never show up in
modified, even if they were changed after they were copied. This is because Subversion doesn't track that a copied file was modified after you copied it.
This is also consitent with how they show up in
as_diff -- it looks like a whole new file was added.
Subversion doesn't track if a moved file was modified after it was moved, only that you copied a file and then deleted the old file. So moved files show up in
removed instead of in
VCI::VCS::Svn performs well with both local and remote repositories, even when there are large numbers of revisions in the repository. We use the API directly in C (via SVN::Client), so there is no overhead of actually using the
Some optimizations are not implemented yet, though, so certain operations may be slow, such as searching commits by time. This should be easy to rectify in a future version, particularly as I get some idea from users about how they most commonly use VCI.
Max Kanat-Alexander <email@example.com>
Copyright 2007-2010 by Everything Solved, Inc.
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.