SVK can be a proxy server between local SVK repository and upstream CVS repository.
In following example of real usage the Simpletest project from Sourceforge will be mirrored through SVK:
# Download the nightly CVS tarball from Sourceforge
# to local directory
proxy$ mkdir cvs
proxy$ cd cvs
proxy$ wget http://cvs.sourceforge.net/cvstarballs/simpletest-cvsroot.tar.bz2
# Unpack the tarball locally
proxy$ tar jxvf simpletest-cvsroot.tar.bz2
# Create local SVK depotmap
proxy$ svk depotmap /simpletest/ ~/.svk/simpletest
# Set up the mirror for simpletest module from CVS repository
proxy$ svk mirror /simpletest/mirror/simpletest \
cvs:/home/services/svn/cvs/simpletest:simpletest/...
# Sync the CVS mirror for simpletest module
proxy$ svk sync /simpletest/mirror/simpletest
# Now relocate mirror path. There's no SVK command to
# do this, so you have to use "svn propset" to set the
# "svm:source" property which "svk sync" will use later.
proxy$ cd ..
proxy$ mkdir svn
proxy$ svn checkout -N \
file:///home/services/svn/svk/simpletest/mirror/simpletest
proxy$ svn propset svm:source \
cvs::pserver:anonymous:@cvs.sourceforge.net:/cvsroot/simpletest:simpletest/..." \
simpletest
proxy$ svn commit simpletest
# After syncing, create branch which will be exported later.
# It have to be baseless smerge at first time.
proxy$ svk mkdir /simpletest/proxy
proxy$ svk smerge --verbatim -I -B /simpletest/mirror /simpletest/proxy
The ~/.svk/simpletest directory can be exported with e.g. apache + mod_dav_svn.so module as http://proxy.example.com/simpletest.
As far as the proxy server is prepared, it can be used by local clients:
local$ svk mirror /simpletest/mirror \
http://proxy.example.com/simpletest/proxy
local$ svk sync /simpletest/mirror
Further synchronizing of mirror would be:
proxy$ svk sync /simpletest/mirror/simpletest
proxy$ svk smerge --verbatim -I /simpletest/mirror \
/simpletest/proxy
local$ svk sync /simpletest/mirror