Hi!
This is not a finished patch.
I've added mark and seek handlers to svn_subst_stream_translated().
Those two handlers are just wrappers that calls the underlying
streams handlers. Now that works in my test but what happens if we set a
mark in front of what we've read so far from the file? We might end up
with an off-by-one caused by one dropped '\r' causing the hunk to be
applied at the wrong line. I guess we could forbid a mark from beeing
set in front of the last character read so far but that would be a
restraint that would look strange on the outside. What to do?
If we plan to add keyword expansion in the future, things would get even
more complex.
Right now I open a translated stream for all cases when there's a
svn:eol-style property. In reality it's only needed when the eol of the
file differs from the property. I will fix that if there's a solution to
'the seekable translated stream' problem.
[[[
Fix #3356 - svn patch ignores svn:eol-style. When the eol in the file to
be patched differed from the svn:eol-style prop the code now translates
to the prop eol. To do that we need to use svn_subst_stream_translated
on a stream that needs to be seekable.
* subversion/libsvn_subr/subst.c
(translated_stream_mark): New.
(translated_stream_seek): New.
(svn_subst_straem_translated): Set seek and mark functions.
* subversion/libsvn_client/patch.c
(init_patch_target): Check if there is a svn:eol-style prop set on the
file to be patched. If it is we translate the eols of both the file
and the patch to that value.
* subversion/tests/cmdline/patch_tests.py
(patch_handle_eol): New.
(test_list): Add the new test.
Patch by: Daniel Näslund <daniel{_AT_}longitudo.com>
]]]
Received on 2010-01-19 19:25:52 CET