Regardless of how I got here, I'm in the position of restoring a SVN repository from backup. Unfortunately the backup was slightly corrupted and out of over 19000 revisions, approximately 80 are lost. The backup was a bzip2 file and I was able to use bzip2recover to recover about 99% of the blocks. These are 'known good' since they decompressed successfully.
Therefore I was able to create a list of known-good commits, and lost commits.
The original repository was also corrupted but many of the files survived. Unfortunately the repository as a whole is broken though.
So I am lucky enough to have the files from the original db/revs and db/revprops directories for these missing revisions. The odds are that the corruption of the backup bz2 file does not align with the corruption of the db/revs files.
I have rebuilt everything up to r13892, but I know that r13893 is corrupt so I don't have a dump for r13893. I do have the files db/revs/13893 and db/revprops/13893 from the original repository.
I created and rebuilt the repository with svn-1.4, but I upgraded to svn-1.6 so that I could use the selective svnadmin verify command (on a single or range of commits).
I thought perhaps I could drop in these two files into the new repository, update db/current [1] and then continue. However when I try to verify I get this error:
$ svnadmin verify new-svn
* Verified revision 1.
...
* Verified revision 13889.
* Verified revision 13890.
* Verified revision 13891.
* Verified revision 13892.
svnadmin: Can't read file 'svn/db/revs/13214': End of file found
So this obviously didn't work. Not sure what 13214 has to do with anything here.
I downgraded back to svn-1.4.6 just in case anything odd was happening with 1.6. Unfortunately I get the same result - revision 13893 is not verifying:
...
* Verified revision 13891.
* Verified revision 13892. svnadmin: Can't read file 'svn/db/revs/13214':
End of file found
So here's what I know:
Does anyone have any ideas how I might be able to fill this hole? Note that I have a 100% confident r13894 in my possession, so if I can get r13893 plugged I can move on with the rest of the restore.
[1] I updated db/current with this script: http://svn.haxx.se/users/archive-2005-12/att-0630/make-current-fix.py
I tested this on some other SVN repositories (after disabling the write to db/current!) to verify that it was producing the same value as that already there. It does.
Regarding this:
svnadmin: Can't read file 'svn/db/revs/13214': End of file found
I suspect that rev 13893 referenced something from rev 13214 (such as a file copy, or skip-rev stuff, or something).
When doing the svn load, did the new revisions match the original revisions? I recall running into a case where my dump referenced a rev 0, and it got loaded as a rev 1. If something like that is happening here, the back-reference to rev 13214 will be off by one.
You might try using the files from the repo db to create the missing rev in dump format. Unfortunately, I don't know of a tool that will do that. But I would recommend looking at SvnDumpTool; it is able to manipulate svn dumps in a lot of useful ways.
Disclosure: I have contributed to svndumptool in the past