On Dec 27, 2007 12:12 PM, Sharmarke Aden <aden.list@gmail.com> wrote:
> Hi, I'm trying to understand how Subversion determines the changes
> that have occurred between two revision and I was wondering if someone
> in here could help understand how it all works. For example, say the
> latest (head) revision in the svn repository is 210 and my working
> copy is 103. My question is how does subversion calculate all the
> adds/updates/removes my working copy needs to bring it's revision
> state to 210? What algorithm or techniques does subversion use to
> calculate deltas between two revisions and how efficient is it?
It's tough to answer this without knowing how much you're familiar
with the architecture. The filesystem is stored as a DAG. The update
algorithm essentially just takes the difference ("delta") between two
directories, by walking down the tree and comparing the contents of
each directory. If a node in the DAG (directory or file) hasn't
changed at all, it can be skipped without continuing down. The actual
algorithm can be found in libsvn_repos/reporter.c; a simpler algorithm
is in libsvn_repos/delta.c, but this isn't what we actually use (since
it doesn't deal with things like mixed-revision working copies).
--dave
--
David Glasser | glasser_at_davidglasser.net | http://www.davidglasser.net/
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@subversion.tigris.org
For additional commands, e-mail: dev-help@subversion.tigris.org
Received on Thu Dec 27 21:25:59 2007