Apologies Julian - it was the end of a long day :) Please find the patch attached... hopefully.
On 20 December 2010 16:57, Julian Foad <julian.f...@wandisco.com> wrote: > Hi Kevin. > > Thanks for contributing this bug fix. > > '@' is called an 'at' sign; '&' is called an ampersand. > > Unfortunately your patch didn't reach the mailing list, probably because > the mailing list strips attachments that it doesn't recognize as a plain > text MIME type. You could try renaming it as ".txt" to encourage your > mail program to set the MIME type properly. > > - Julian > > > On Mon, 2010-12-20 at 16:28 +0000, Kevinm wrote: > > I stumbled across a bug in svn_load_dirs.pl when importing paths with > > an ampersand character. Anything after the final ampersand in a path > > gets interpreted as a peg revision during the add phase, so the > > affected files don't get imported and the sanity check at the end > > fails. > > > > > > I have attached a patch to get around the issue; it always adds > > an ampersand to the end of each path while building the TARGETS file. > > This is documented in the svn book > > here: http://svnbook.red-bean.com/en/1.5/svn.advanced.pegrevs.html > > > > > > The perceptive reader is probably wondering at this point > > whether the peg revision syntax causes problems for working > > copy paths or URLs that actually have at signs in them. After > > all, how does svn know whether n...@11 is the name of a > > directory in my tree or just a syntax for “revision 11 of > > news”? Thankfully, while svn will always assume the latter, > > there is a trivial workaround. You need only append an at sign > > to the end of the path, such as n...@11@. svn cares only about > > the last at sign in the argument, and it is not considered > > illegal to omit a literal peg revision specifier after that at > > sign. This workaround even applies to paths that end in an at > > sign—you would use filename@@ to talk about a file named > > filen...@. > > > > > > Below is a simple test to reproduce the issue: > > > > > > dev-kevinm04:~$ mkdir test > > dev-kevinm04:~$ touch test/a.txt > > dev-kevinm04:~$ svnadmin create repos > > dev-kevinm04:~$ svn_load_dirs -v -t 1.0 file://`pwd`/repos current > > test > > Directory test will be tagged as 1.0 > > > > > > <snip> > > > > > > Cleaning up /tmp/svn_load_dirs_a_cRabZpNS > > dev-kevinm04:~$ touch test/b...@c.txt > > dev-kevinm04:~$ svn_load_dirs -v -t 2.0 file://`pwd`/repos current > > test > > Directory test will be tagged as 2.0 > > > > > > <snip> > > > > > > Checking out file:///home/london/kevinm/repos/current > > into /tmp/svn_load_dirs_SfwwQDtsAX/my_import_wc > > Running /usr/local/bin/svn checkout --non-interactive > > file:///home/london/kevinm/repos/current my_import_wc > > > > > > Loading test and will save in tag 2.0. > > A b...@c.txt > > Running /usr/local/bin/svn add -N > > --targets /tmp/svn_load_dirs_SfwwQDtsAX/targets.00001 > > Running /usr/local/bin/svn commit --non-interactive -m Load test into > > current. > > > > > > Running /usr/local/bin/svn update --non-interactive > > Running /usr/local/bin/svn cp --non-interactive -m Tag current as 2.0. > > file:///home/london/kevinm/repos/current > > file:///home/london/kevinm/repos/2.0 > > Checking out file:///home/london/kevinm/repos/2.0 > > into /tmp/svn_load_dirs_SfwwQDtsAX/my_tag_wc_named_2.0 > > Running /usr/local/bin/svn checkout --non-interactive > > file:///home/london/kevinm/repos/2.0 my_tag_wc_named_2.0 > > Running diff -u -x .svn -r > > test /tmp/svn_load_dirs_SfwwQDtsAX/my_tag_wc_named_2.0 > > /usr/local/bin/svn_load_dirs: diff -u -x .svn -r > > test /tmp/svn_load_dirs_SfwwQDtsAX/my_tag_wc_named_2.0 failed with > > this output: > > Only in test: b...@c.txt > > Press return to quit and clean up svn working directory: > > Cleaning up /tmp/svn_load_dirs_SfwwQDtsAX > > dev-kevinm04:~$ > > > > > > Thanks, > > > > > > Kevin. > > >
Index: svn_load_dirs.pl.in =================================================================== --- svn_load_dirs.pl.in (revision 1051508) +++ svn_load_dirs.pl.in (working copy) @@ -1416,7 +1416,7 @@ foreach my $file (@_) { - print TARGETS "$file\n"; + print TARGETS "$fi...@\n"; } close(TARGETS)