The code for output differences between properties is currently manually
constructing unified diff output with the a - in front of the previous value and a
+ in front of the new value. This looks ok for one line properties, but is silly
when applied to multiline properties like svn:ignore.
What we should be doing is making the output use libsvn_diff, since it already
knows how to make unified diff output.
Unfortunately, libsvn_diff is currently quite tied to the idea that it's diffing two
files. It's not all that hard to generate an svn_diff_t from two arbitrary
buffers (you just need to replace the datasource_open callback with something
that doesn't try to read from on disk files), but the code that prints out unified
diff output is rather more attached to the idea that it is working with files on
disk, and making it not do that without duplicating a lot of code looks
nontrivial to me (of course I know very little about libsvn_diff, so I might be
missing something).
At the moment that leaves us with two options, write the property values out
to files (ick, hiss, boo!), or teach libsvn_diff to work with in-memory buffers.
Oh, for anyone who's read this far who has admin access to
subversion.tigris.org, we don't currently have a subcomponent for libsvn_diff.