Author: stsp
Date: Wed Jun  4 14:31:59 2014
New Revision: 1600232

URL: http://svn.apache.org/r1600232
Log:
* subversion/libsvn_diff/parse-diff.c
  (parse_mergeinfo): Fix the logic which puts reverse and forward merges
   into their respective buckets. The previous code had a bug where the
   first forward merge would be listed among the reverse merges.

Modified:
    subversion/trunk/subversion/libsvn_diff/parse-diff.c

Modified: subversion/trunk/subversion/libsvn_diff/parse-diff.c
URL: 
http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_diff/parse-diff.c?rev=1600232&r1=1600231&r2=1600232&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_diff/parse-diff.c (original)
+++ subversion/trunk/subversion/libsvn_diff/parse-diff.c Wed Jun  4 14:31:59 
2014
@@ -490,8 +490,6 @@ parse_mergeinfo(svn_boolean_t *found_mer
                 apr_pool_t *result_pool,
                 apr_pool_t *scratch_pool)
 {
-  apr_uint64_t reverse_merges = hunk->original_length;
-  apr_uint64_t forward_merges = hunk->modified_length;
   char *slash = strchr(line->data, '/');
   char *colon = strrchr(line->data, ':');
 
@@ -537,23 +535,18 @@ parse_mergeinfo(svn_boolean_t *found_mer
                             
       if (mergeinfo)
         {
-          svn_boolean_t is_forward_merge = TRUE;
-
-          if (reverse_merges > 0)
+          if (hunk->original_length > 0) /* reverse merges */
             {
               if (patch->reverse_mergeinfo == NULL)
                 patch->reverse_mergeinfo = mergeinfo;
-              
-              is_forward_merge = (apr_hash_count(patch->reverse_mergeinfo)
-                                  > reverse_merges);
-              if (!is_forward_merge)
+              else
                 SVN_ERR(svn_mergeinfo_merge2(patch->reverse_mergeinfo,
                                              mergeinfo,
                                              result_pool,
                                              scratch_pool));
+              hunk->original_length--;
             }
-
-          if (forward_merges > 0 && is_forward_merge)
+          else if (hunk->modified_length > 0) /* forward merges */
             {
               if (patch->mergeinfo == NULL)
                 patch->mergeinfo = mergeinfo;
@@ -562,6 +555,7 @@ parse_mergeinfo(svn_boolean_t *found_mer
                                              mergeinfo,
                                              result_pool,
                                              scratch_pool));
+              hunk->modified_length--;
             }
 
           *found_mergeinfo = TRUE;


Reply via email to