blob: fd3275b3a85072de16116f8d8f6d56b115ca0d1c [file] [log] [blame]
HOW-TO: svn repository upgrade procedure
=========================================
$LastChangedDate$
WHO IS AFFECTED:
---------------
Anyone upgrading to svn 0.28 (or later) who has a repository created
with an earlier release.
PROBLEM:
-------
In revision (6752, /trunk) [August 16, 2003], the underlying database
schema for subversion repositories (libsvn_fs) was changed. Thus, if
a 'new' libsvn_fs library tries to access an 'old' repository, you'll
see an error like:
Expected version '2' of repository; found version '1'
or
svn: No repository found in '...URL...'
Or if you use an 'old' libsvn_fs library to access a 'new' repository,
you might see an error like:
Expected version '1' of repository; found version '2'
or
svn: Malformed skeleton data
svn: Malformed node-revision skeleton
This schema change became public in svn 0.28. So if you're upgrading
a server to svn 0.28 or later, you need to convert your repository to
the new schema.
HOW TO UPGRADE YOUR REPOSITORY:
------------------------------
1. Use an 'svnadmin' binary from release 0.27 (or older) to create a
dumpfile of your repository:
$ mv myrepos old-repos
$ svnadmin dump old-repos > dumpfile
2. Use an 'svnadmin' binary from release 0.28 (or newer) to load the
dumpfile into a new repository:
$ svnadmin create myrepos
$ svnadmin load myrepos < dumpfile
OR, if you're feeling saucy, you can do it all at once with a pipe:
$ svnadmin-new create myrepos
$ svnadmin-old dump old-repos | svnadmin-new load myrepos
3. [OPTIONAL] Loading a dumpfile is both time- and disk-consuming,
as it replays every commit. After the load is complete, you may
want to free up some disk space by removing unused BerkeleyDB
logfiles:
$ svnadmin list-unused-dblogs newrepos | xargs rm
4. Don't forget to copy over any hook scripts (and DB_CONFIG, if you
changed it) from the old to the new repository:
$ cp old-repos/hooks/* repos/hooks/
$ cp old-repos/db/DB_CONFIG repos/db/
WHY DID YOU CHANGE THE SCHEMA?
-----------------------------
Subversion is still pre-1.0, and thus constantly improving. These
changes were planned long ago, and took a long time to complete.
They fix both efficiency and correctness problems in the database
code.
More tangible results of this change are:
* 'svn log branch/foo.c' now shows the branch-creation as a real
event in foo.c's history, even though foo.c itself was only
*implicitly* copied when its parent got copied.
* 'svn log -rX:Y' is doing less work.
* Fixes bugs in 'svn log --strict'.
* We have a new fs API for walking the history of a node using a
cursor-like interface.
* Internally, the mechanism for choosing copyids was broken. (OK,
that's not tangible, but a matter of correctness.)