ardovm at yahoo.it
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 yahoo.it> 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.
> 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.
More information about the freebsd-stable