Svnsup architecture

Arrigo Marchiori ardovm at
Sun Jan 27 12:38:27 UTC 2013

Disclaimer: I am trying to go inside the technicalities of the SVN
protocol. I am not sure whether this sub-thread should belong to this
list or to another; I am open to suggestions on this topic.

On Fri, Jan 25, 2013 at 07:40:45PM -0600, John Mehr wrote:

> On Fri, 25 Jan 2013 13:42:19 +0100 Arrigo Marchiori <ardovm at> wrote:
> > On Thu, Jan 24, 2013 at 12:57:17AM -0800, 'Jeremy 
> > 
> > 1- svnsup-distill: takes a revision from svn and creates 
> > a text file (called a delta) that represents it. It seems to be 
> > almost complete.
> > To answer one of John Mehr's problems: MD5 sums are calculated by
> > svnsup-distill and included in the deltas. The client only needs
> > to check them against the local files.
> Hello,
> I've been looking for a way to get the details of a 
> complete revision in one step, but I haven't had any luck 
> yet. This would solve the one aspect I'm most worried 
> about: with 50000+ files and 5500+ directories in my local 
> copy of /usr/src, I'd hate to have my code end up 
> inadvertently causing a denial of service on the 
> repositories with a flood of tiny requests...

After investigating more in depth the SVN protocol, if I understood
correctly, your problem cannot be solved. Or, at least, the server is
not supposed to help us.

The SVN client, in fact, seems to save a copy of the whole working
copy inside the .svn directory.

Whether a file was changed or not, it is an information that the
_client_ knows, before it contacts the server.

A "svn update" command sends to the server the start and end
revisions (the latter in the svn-update message, the first in the
set-path message).  Merging the information from the server (delta's)
with the working copy is the client's job.

To summarize, any svn-like downloader should at least know:
 1- the current revision of the working copy;
 2- the checksums of all the files in the repository, at the current

The "official" SVN client does more than point 2: it stores the whole
content of each file; this allows the "svn diff" and "svn revert"
commands to work off-line. 

Best regards,

More information about the freebsd-stable mailing list