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)

Reply via email to