You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by ph...@apache.org on 2015/01/16 19:35:57 UTC

svn commit: r1652485 - /subversion/trunk/subversion/libsvn_client/patch.c

Author: philip
Date: Fri Jan 16 18:35:56 2015
New Revision: 1652485

URL: http://svn.apache.org/r1652485
Log:
* subversion/libsvn_client/patch.c
  (get_hunk_info): For the final search restrict the range to those
   lines that could give a better match than any existing match.

Modified:
    subversion/trunk/subversion/libsvn_client/patch.c

Modified: subversion/trunk/subversion/libsvn_client/patch.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_client/patch.c?rev=1652485&r1=1652484&r2=1652485&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_client/patch.c (original)
+++ subversion/trunk/subversion/libsvn_client/patch.c Fri Jan 16 18:35:56 2015
@@ -1789,13 +1789,22 @@ get_hunk_info(hunk_info_t **hi, patch_ta
                           < original_start - matched_line)))
                   matched_line = matched_line2;
 
-              /* Search from start of file if there could be a better match. */
+              /* Search from before previous hunk if there could be a
+                 better match. */
               if (search_start > 1
                   && (!matched_line
                       || (matched_line > original_start
-                          && (matched_line - original_start > original_start)))) 
+                          && (matched_line - original_start
+                              > original_start - search_start)))) 
                 {
-                  SVN_ERR(seek_to_line(content, 1, scratch_pool));
+                  svn_linenum_t search_start2 = 1;
+
+                  if (matched_line
+                      && matched_line - original_start < original_start)
+                    search_start2
+                      = original_start - (matched_line - original_start);
+
+                  SVN_ERR(seek_to_line(content, search_start2, scratch_pool));
                   SVN_ERR(scan_for_match(&matched_line2, content, hunk, FALSE,
                                          search_start - 1, fuzz,
                                          ignore_whitespace, FALSE,