Hi,
I am trying to understand the subversion repository filesystem and the document
Subversion Design helped a lot.
There is something that is not yet clear to me:
As I understand, SVN stores the latest version of a file as full-text and the
ancestor as a reversed diff so that in order to checkout the ancestor, SVN first has to apply the reversed patch. Right?
So far, everything's allright.
But imagine the following situation:
------
svn add fileA
svn commit
Commmitted Revison 1
svn copy fileA fileB
svn commit
Committed Revision 2
svn status
M fileA
svn commit
Committed Revision 3
------
Now, obviously fileA (r3) is stored as fulltext.
What about fileB (r2)? fileB is the newest version of fileB - so it should be stored as fulltext, too.
fileA (r1) should be stored as diff to it's descendant. But to which descendent?
Actually, both fileA (r3) and fileB (r2) are descendents of fileA (r1).
the diff fileA (r1) against fileB (r2) would be empty, because these two files
are identically, while the diff against fileA (r3) would reflect the changes made in
revision 3.
Now, which diff does subversion choose?
Perhaps, someone could explain this or point me to a solution?
And how does it go on when i commit changes to fileB and fileA later on?
The reason I ask is that I am trying to rebuild a svn-like repository using SQL.
Last updated