Tuesday, October 25, 2011

Repairing 'svnsync: malformed file' error with subversion


I recently had a sync or other failure of svnsync which left me with a bum repository. Every time we tried to do svnsync, it reported "svnsync: malformed file." I got the same error with all svnadmin access.

I found this link: http://subversion.tigris.org/ds/viewMessage.do?dsForumId=1065&dsMessageId=1892873&orderBy=createDate&orderType=desc and provided some good clues. I noticed that my file in db\revprops\0 had junk in it instead of normal stuff. It should have looked like this:

K 8
svn:date
V 27
2010-07-21T02:55:12.203323Z
K 17
svn:sync-from-url
V 45
https://portal.secureci.com/svn/secureci
K 18
svn:sync-from-uuid
V 36
b443ad56-1e36-4a4f-97ef-7144cc153033
K 24
svn:sync-last-merged-rev
V 1
0
END


What I did to fix it:

  • cd c:/temp
  • svnadmin create svn-sync2
  • Copy hooks/pre-revprop-change.bat file from broken repository to new one
  • svnsync --username svnsync initialize file:///c:/temp/svn-sync2 https://portal.secureci.com/svn/securci
  • Copy the db/revprops/0/0 file from the new repos to the broken one
  • Edit the 0 file and fix the 'sync-last-merged-rev' entry to have the correct number.
    • Look in db/revprops/2 (or highest number) and locate the most recent numbered file (e.g., 2437)
    • Change '0' value below "V 1" to be "2437"
    • Change the V1 line to be "V 4" for 4 character length
  • Run 'svnadmin verify .' in the main directory of your broken repository to make sure that it has everything intact. (This may take a little while.)
  • Run 'svnsync --username svnsync synchronize file:///c:/SecureCIdata/svn/repos/secureci' and make sure synchronization goes smoothly
That's it. Syncing should work normally now.

No comments:

Post a Comment