Author: stsp
Date: Wed Jun  4 14:44:03 2014
New Revision: 1600244

URL: http://svn.apache.org/r1600244
Log:
* subversion/libsvn_diff/parse-diff.c
  (parse_mergeinfo): Properly handle reverse patches by swapping
   forward and reverse merges if required.

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=1600244&r1=1600243&r2=1600244&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_diff/parse-diff.c (original)
+++ subversion/trunk/subversion/libsvn_diff/parse-diff.c Wed Jun  4 14:44:03 
2014
@@ -537,24 +537,50 @@ parse_mergeinfo(svn_boolean_t *found_mer
         {
           if (hunk->original_length > 0) /* reverse merges */
             {
-              if (patch->reverse_mergeinfo == NULL)
-                patch->reverse_mergeinfo = mergeinfo;
+              if (patch->reverse)
+                {
+                  if (patch->mergeinfo == NULL)
+                    patch->mergeinfo = mergeinfo;
+                  else
+                    SVN_ERR(svn_mergeinfo_merge2(patch->mergeinfo,
+                                                 mergeinfo,
+                                                 result_pool,
+                                                 scratch_pool));
+                }
               else
-                SVN_ERR(svn_mergeinfo_merge2(patch->reverse_mergeinfo,
-                                             mergeinfo,
-                                             result_pool,
-                                             scratch_pool));
+                {
+                  if (patch->reverse_mergeinfo == NULL)
+                    patch->reverse_mergeinfo = mergeinfo;
+                  else
+                    SVN_ERR(svn_mergeinfo_merge2(patch->reverse_mergeinfo,
+                                                 mergeinfo,
+                                                 result_pool,
+                                                 scratch_pool));
+                }
               hunk->original_length--;
             }
           else if (hunk->modified_length > 0) /* forward merges */
             {
-              if (patch->mergeinfo == NULL)
-                patch->mergeinfo = mergeinfo;
+              if (patch->reverse)
+                {
+                  if (patch->reverse_mergeinfo == NULL)
+                    patch->reverse_mergeinfo = mergeinfo;
+                  else
+                    SVN_ERR(svn_mergeinfo_merge2(patch->reverse_mergeinfo,
+                                                 mergeinfo,
+                                                 result_pool,
+                                                 scratch_pool));
+                }
               else
-                SVN_ERR(svn_mergeinfo_merge2(patch->mergeinfo,
-                                             mergeinfo,
-                                             result_pool,
-                                             scratch_pool));
+                {
+                  if (patch->mergeinfo == NULL)
+                    patch->mergeinfo = mergeinfo;
+                  else
+                    SVN_ERR(svn_mergeinfo_merge2(patch->mergeinfo,
+                                                 mergeinfo,
+                                                 result_pool,
+                                                 scratch_pool));
+                }
               hunk->modified_length--;
             }
 


Reply via email to