Synchronize an SVN repo (svnsync) with encoding er

2020-06-21 06:39发布

问题:

Is it possible to fix/bypass non-UTF8 encoded svn:log records when synchronizing repositories with svnsync?

Background

I'm in the process of taking over the maintenance of an open source module that is stored within a large (well over 10,000 revisions) subversion (1.5.5) repository. I do not have admin access to the remote repository to dump/filter/load the module. The old repository is being discontinued and I am trying to sync the original sub module to my local (1.6+) repository with svnsync. For example:

svnsync file://home/svn/temp-repo/ http://path.to.repo/modulename/

The problem is that the old repository didn't enforce UTF8 encoding and I'm hitting errors like:

svnsync: Cannot accept 'svn:log' property because it is not encoded in UTF-8

I can't modify the log property in the source repository so I need to somehow modify or ignore the property value when the encoding is unknown/invalid.

Any ideas?

For example:

  • can a pre-revprop-change script modify the log property in transit?
  • I'm told that git-svn can handle it but using an intermediate git repo - how exactly is this done?
  • would it be possible to ignore log properties altogether, or for particular revisions

回答1:

You will need to wait for the next version of Subversion, there is a pending patch to add support for non-UTF8 encodings to svnsync.



回答2:

You need to modify pre-revprop-change.tmpl

# cp pre-revprop-change.tmpl pre-revprop-change.tmp
# vim pre-revprop-change.tmp
exit 1 ==> exit 0

Otherwise, you may use svnadmin setrevprop to modify the repos



回答3:

There is an easy fix for this. Change the log entry in the source repository with these statements:

Example with revision 10281 and repository in /home/svn/repos

svn proplist -v --revprop -r 10281 file:///home/svn/repos | iconv --to-code UTF8//IGNORE -o /tmp/iconv.out

svn propset svn:log --revprop -r 10281 -F /tmp/iconv.out file:///home/svn/repos