On Tue, Feb 23, 2010 at 09:27:34PM +0100, Stefan Sperling wrote: > On Tue, Feb 23, 2010 at 08:57:26PM +0100, Daniel Näslund wrote: > > On Tue, Feb 02, 2010 at 09:11:52PM +0100, Stefan Sperling wrote: > > > On Tue, Feb 02, 2010 at 08:48:43PM +0100, Daniel Näslund wrote: > > > > Hi Stefan! > > > > > > > > In match_hunk() we try to match lines from the context of the patch with > > > > lines in the target. Earlier, in init_patch_target() we detect the eol > > > > of the target and open streams to read from the target and to write the > > > > patched result. Those streams does translation of keywords and eols. > > > > > > > > In match_hunk we read a line from original_text and translate it. But we > > > > don't get any translation of the eols in hunk_line_translated. > > > > > > svn patch only repairs EOLs if the svn:eol-style enforces a fixed > > > value (such as CR or CRLF). Try setting svn:eol-style to 'CRLF' on > > > the patch target. Then you'll see dos-style newlines in the patched > > > result. > > > > > > Admittedly, we may want to repair EOLs in more scenarios (such as > > > eol-style = native). > > > > I have a test where the target uses '\r\n' and the patch uses '\r' . The > > eols are consistent within each file but we get a failure saying: > > > > [[[ > > subversion/svn/patch-cmd.c:81: (apr_err=135000) > > subversion/libsvn_client/patch.c:1463: (apr_err=135000) > > subversion/libsvn_client/patch.c:1410: (apr_err=135000) > > subversion/libsvn_client/patch.c:1100: (apr_err=135000) > > subversion/libsvn_client/patch.c:830: (apr_err=135000) > > subversion/libsvn_client/patch.c:799: (apr_err=135000) > > subversion/libsvn_subr/subst.c:876: (apr_err=135000) > > subversion/libsvn_subr/subst.c:643: (apr_err=135000) > > svn: Inconsistent line ending style > > ]]] > > Where and how?
It happens when we've written all our hunks and we want to copy the remaining lines. Here's a piece of apply_one_patch(). It's the call to copy_lines_to_target() that throws the error. [[[ /* Apply or reject hunks. */ for (i = 0; i < target->hunks->nelts; i++) { hunk_info_t *hi; svn_pool_clear(iterpool); hi = APR_ARRAY_IDX(target->hunks, i, hunk_info_t *); if (hi->rejected) SVN_ERR(reject_hunk(target, hi, iterpool)); else SVN_ERR(apply_hunk(target, hi, iterpool)); } svn_pool_destroy(iterpool); if (target->kind == svn_node_file) { /* Copy any remaining lines to target. */ SVN_ERR(copy_lines_to_target(target, 0, scratch_pool)); if (! target->eof) { /* We could not copy the entire target file to the temporary file, * and would truncate the target if we copied the temporary file * on top of it. Skip this target. */ target->skipped = TRUE; } } ]]] The test has one line after the last hunk. If I remove that line, the test passes. Daniel