I recently worked with an organization to upgrade their Subversion repository from 1.7 to 1.8. The steps involved, if everything goes according to plan, are:
1. Dump the repository: svnadmin dump --deltas repo1_7 > repo1_7.dump
2. Create the new repository, which by default uses the fsfs file system:
svnadmin create repo1_8
3. If you need to transfer the dump file to a new host you should take care of that first but then you need load the dump:
svnadmin load repo1_8 < repo1_7.dump
Now that would generally be it as far as the repository itself is concerned, unless you get errors. I got errors and it is not uncommon when upgrading. I ran into issue on step 3, loading the dump file. It ran for about 2,000+ revisions and then stopped with these errors:
Cannot accept non-LF line endings in 'svn:log' property
Cannot accept non-LF line endings in 'svn:ignore' property
This occurred because the repository contained the older ^M carriage return. This is no longer allowed after version 1.6 but the previous upgrades used the"--bypass-prop-validation" option when loading the repository which just delayed dealing with the issue. The fix for this is to replace the ^M line endings found in the repository. To do this you take your dump file you created in step 1 and use the following sed command to replace the ^M line endings.
sed -e '/^svn:log$/,/^PROPS-END$/ s/^M/ /' -e '/^svn:ignore$/,/^PROPS-END$/ s/^M/\n/' repo1_7.dump > repo1_7-fix.dump
Now I want to make note that the ^M in the command above is not created with Shift+6 and Shift+M. The ^M character is a carriage return control character that means 0D in hex. In order to create the character you can either type CTRL+V and CTRL+M or reference it as \x0D in the sed comman
d as shown below.
sed -e '/^svn:log$/,/^PROPS-END$/ s/\x0D/ /' -e '/^svn:ignore$/,/^PROPS-END$/ s/\x0D/\n/'
repo1_7.dump > repo1_7-fix.dump
Once that command finishes you will have repaired copy of the dump file which should load now.
No comments:
Post a Comment