SVNCOM is a set of COM objects designed to provide subversion
functionality for purposes of automatization without direct usage of sources or command line
client. There are lot of reasons why usage of source codes directly
can be not convenient. The main is necessity to spend much time for
learning and requirement of specific knowledge (senior "C language"
skills). Usage of command line client also cause lot of problems and
the main are: problem with file names encoding and output parsing.
On Windows OS, COM binding will allow access to subversion
almost from any place: .NET code, native Win32 code, vbs scripts
(standalone, VB for applications, ASP etc). So you can use subversion
in your programs and automatizations scripts easy.
SVNCOM bindings available in two packages: MSI installer with "SDK"
(few vbs examples, svn help file and some api help) and MSM
redistributive package. The MSM package will allow easy integration
with your own installer. SVNCOM bindings can be freely redistributed,
preserving both subversion (tigris) and PushOk Software copyright rights.
Both licenses grant almost non limited usage in binary form. SVNCOM now
is the part of Pushok SVNSCC Proxy (SCC API integration plug-in). This
mostly means that binding have the commercial quality and will be maintained
in the future. But in the same time SVNCOM project is an open source
project and any contribution (including money donations) are welcome.
SVNCOM binding API is closely linked with SVN "C" api which is
closely linked with SVN command line client functionality. Binding
have two main object "SVNClient" and "SVNAdmin" which correspond to
"svn.exe" and "svnadmin.exe" correspondingly. Few events are raised
from client: cancellation ask (idle), working copy notifications and
progress.
Typical usage of COM binding will look like this (vbs code):
dim client
' create client
set client = CreateObject("PushOkSvn.SVNClient")
' set any options (if any), for example user name and password
client.SetOption SvnClientOptionDefUserName, "User"
client.SetOption SvnClientOptionDefUserPassword, "Password"
' init client
client.InitClient()
' use it, for example let's add some files into repository
dim src
set src = CreateObject("PushOkSvn.StringVector")
src.Add("C:\some\path\here")
client.Import src, "svn://some.svn.url/here", "Commit message"
All is enough easy, and only one thing requires specific explanation,
this is sharing of authentication cache between two clients. This can be done
through call to "SetupAuth" function. Lets see the example:
set client1 = CreateObject("PushOkSvn.SVNClient")
client.SetOption SvnClientOptionDefUserName, "User"
client.SetOption SvnClientOptionDefUserPassword, "Password"
set client2 = CreateObject("PushOkSvn.SVNClient")
dim authcookie
' ask first client to setup new auth object and return its cookie
set authcookie = client1.SetupAuth 0
' ask second client use the same auth as first one
client2.SetupAuth authcookie
In the above example both clients will use the same authentication
to access the repository. This make sense when you use interactive
authentication and once authenticated like to share this between
clients.
And finally some threading notice. Client marked as "free"
apartment object and it is thread safe. More other it uses thread safe
marshaller and each client accessing it in the same process will
access functions directly without proxies. But in the same time,
because of SVN limitations only one function can be executed at one
time. So, if you need parallel processing you have to create and use
several clients.