« A new toy for 2007 | Main | Hackathon this Thursday »

January 03, 2007

SVK 2.0 is better, faster and just as free

Hi all,

On behalf of  clkao and the SVK team, I'm pleased to announce the first Best Practical release of SVK: version  2.0.0.  This is the first major release after 18 months of development since SVK 1.0 was released in May 2005.  The release is available on CPAN:

file: $CPAN/authors/id/C/CL/CLKAO/SVK-v2.0.0.tar.gz
size: 422489 bytes
md5: 37ff4acde9f9a0f987bde48b32616ab3

You can download SVK 2.0.0 from http://search.cpan.org/dist/SVK/.

We've been using the 2.0 branch in production for several months and recommend upgrading from 1.0,  particularly because 2.0 provides huge  performance improvements as well as significantly improved merge accuracy.

In the coming weeks, look for another big announcement from Best Practical related to svk.

Here are a few of the major new features:

* Interactive commits

You can now use "svk commit --interactive".  svk will walk you through each change in each file, and let you decide exactly which ones you want to commit.

* Floating checkout

You can now use "svk checkout --float" to keep checkout metadata in the top-level directory of your checkout working directory. This lets you move the checkout copy around without having to perform any special incantation ("svk checkout --relocate").

* View support [BETA]

svk's "views" work like views in databases. You can set up a "view" that is a map of several parts of a repository (different paths at different revisions).  You can then check the "view" out and work with it as if it's just an ordinary svk checkout path.

Please note that this feature is not yet recommended for production use, as some commands do not yet work properly in view checkouts.

* Log filter plugins

You can now write custom log processing plugins for filtering and displaying log messages; svk ships with several, and others are available on CPAN.  For example, try "svk log --filter 'author
clkao'" or "svk log --output stat" (the latter requires SVK::Log::Filter::Stats from CPAN).

* Better copy and rename support across merge.

This solves the problem described in: http://svn.haxx.se/dev/archive-2005-08/0712.shtml

* Pipelined sync support

svk takes advantage of new APIs made available in Subversion 1.4 to significantly boost repository synchronization operations. If you have Subversion 1.4 on both the client and the server. you should notice significantly faster syncs.

* pullyu

An utility "pullyu" is included.  It can generate a svn dump from a svk mirror which replicates the exact structure and metadata of the original repository. With pullyu, you can recover a lost svn server from an svk mirror.

* Startup time improvements

* Many, many bugfixes and small features

[Changes for 2.0.0 - 28 Dec, 2006]

   * Require Subversion 1.3.0
   * Require App::CLI, UNIVERSAL::require, YAML::Syck, Path::Class,
     Class::Accessor::Fast, Class::Data::Inheritable
   * No longer require YAML, Clone, Regexp::Shellish, Date::Parse

   * Don't load Locale::* modules if the user's language is English
   * Reduce Data::Hierarchy calls in checkout_delta
   * SVK::Mirror now uses a separate process to pipeline sync
   * Use POSIX::strftime for date formatting rather than Date::Parse
     The log command now runs about 25% faster when generating long

Merge subsystem
   * Renames and copies can now be merged across branches
   * svk now tries to use alleged merge result as next merge base,
     making push more reliable and accurate
   * Interactive tree conflict resolution
   * Display the anchor along with THEIR and YOUR during interactive
     conflict resolution
   * Use svn:date to find the closest ancestor, not the revision number
   * use only related node as base if it is one of merge source or
   * When picking base, the immediate merged-from source should take
   * When doing add-merge on checkout, unschedule the add
   * Only consider a g-merge to be a change when the merge source and
     destination paths are the same
   * Fix a leak in SVK::Editor::Merge in delete_entry
   * Fix merging a file change or deletion which has been replaced as

   * Test helpers are now in SVK::Test
   * Don't use the user's .subversion/config during tests

   * Support view spec as depotpath
   * Support win32 and keychain auth providers if available
   * Modularize the MIME type detection code which makes that feature
   * New command: svk ignore
   * New global option --ignore
   * svk --version now displays the Subversion bindings version number
   * Make -r{DATE} consistent with Subversion, by making YYYY-MM-DD be
     midnight at the beginning of that day
   * Add the negative number revision support
   * Make -r HEAD and -r BASE case insensitive
   * Most svk commands now find peg revision.  -r N PATH@M will find
     the correct path if PATH@M was copied from somewhere else after N
   * Fix a bug in replaced copy schedule entries in XD

svk add
   * Display " - (bin)" when adding executable files

svk annotate
   * Documented --remoterev option

svk checkout
   * Support floating checkout
   * Allow svk co --detach to be applied to multiple checkouts
   * Fix co --relocate with checkout schedule information
   * When doing autovivification from URL, release the giant lock and
     tell user what to do if the sync failed

svk commit
   * Support chunk-based interactive commit
   * Don't suck file into memory on commit
   * Support --set-revprop
   * Fix committing single-file checkout

svk copy
   * Fix a bug that svk cp A B would die if A has properties
   * Support -r N@
   * When trying to copy across mirrors, suggests sm -IB for publish
   * Cleanup stalled txn after died
   * Fix "svk cp //path%2Fwith_escape //path/other", which the underlying
     library was unescaping for us
   * Make copy work with directory with unknown files

svk delete
   * Support --force
   * On failed rm, report all modified, unknown and scheduled nodes
     instead of just the first one, and suggests --force
   * Support rm multiple depotpath

svk describe
   * Fix "svk desc 1234@"
   * Report error immediate if a nonexistent revision is given
   * Let 'svk desc 456' work even the checkout in . is only at r123

svk depot
   * Fix error messages in depot --relocate

svk diff
   * Fix svk diff on 0-length file on checkout
   * Support --non-recursive (-N)
   * Support --change (-c)
   * Only show differences from copy source for copied nodes
     unless -X is specified
   * Show 'new directory' and copied from in diffs
   * Fix svk diff depotfile checkoutfile
   * Fix diff with copies and modified files
   * Changed diff output for binaries to show file names using local


TrackBack URL for this entry:

Listed below are links to weblogs that reference SVK 2.0 is better, faster and just as free:


Feed You can follow this conversation by subscribing to the comment feed for this post.

I appreciate the addition of "svk commit --interactive". This a feature that darcs has had since I've used it, and I believe svk was inspired by.

I still prefer darcs, but the svk makes using svn servers more tolerable when I have to. Plus, svk is written in Perl, which is a plus for me.

I am currently using svk 1.06 and svn 1.3. I am getting ready to upgrade svn to 1.4.x, it looks like it makes sense to upgrade svn to 2.0 are there any upgrade instructions?

SVK mirror - Fast? What are you kidding. I been trying to mirror one Apache project for the last 48 hours and it doesn't do anything.. It doesn't even say any status information or anything.. Its wired.

Retriving log information ..

bingo its been retriving log info ever since....


That sounds more like a bug than a performance problem. I'd appreciate it a great deal if you could report it to the svk-devel mailing list (with enough detail for us to reproduce and fix it)



The comments to this entry are closed.