You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by pb...@apache.org on 2011/03/14 19:55:31 UTC

svn commit: r1081515 - /subversion/trunk/subversion/libsvn_repos/log.c

Author: pburba
Date: Mon Mar 14 18:55:30 2011
New Revision: 1081515

URL: http://svn.apache.org/viewvc?rev=1081515&view=rev
Log:
Fix reopened issue #3176 'log -g output for merge reversal is bit confusing'.

Some more pool-fu...

* subversion/libsvn_repos/log.c

  (get_combined_mergeinfo_changes): Revert r1080034 and r1080236 and use
   a clearer implementation to deal with the fact that svn_mergeinfo_merge
   does not make a deep copy of incoming mergeinfo (i.e. simply dup the
   argument ourselves).  Add similar logic to the block for explicit
   mergeinfo, which fixes the reopened issue, see
   http://subversion.tigris.org/issues/show_bug.cgi?id=3176#desc7

Modified:
    subversion/trunk/subversion/libsvn_repos/log.c

Modified: subversion/trunk/subversion/libsvn_repos/log.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_repos/log.c?rev=1081515&r1=1081514&r2=1081515&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_repos/log.c (original)
+++ subversion/trunk/subversion/libsvn_repos/log.c Mon Mar 14 18:55:30 2011
@@ -839,13 +839,13 @@ get_combined_mergeinfo_changes(svn_merge
                                    svn_mergeinfo_inherited, FALSE, iterpool));
       mergeinfo = apr_hash_get(catalog, path, APR_HASH_KEY_STRING);
 
-      /* Compare, constrast, and combine the results.  Use POOL to calculate
-         the diff because svn_mergeinfo_merge does not make deep copies of
-         the incoming mergeinfo changes. */
+      /* Compare, constrast, and combine the results. */
       SVN_ERR(svn_mergeinfo_diff(&deleted, &added, prev_mergeinfo,
-                                 mergeinfo, FALSE, pool));
-      SVN_ERR(svn_mergeinfo_merge(*deleted_mergeinfo, deleted, pool));
-      SVN_ERR(svn_mergeinfo_merge(*added_mergeinfo, added, pool));
+                                 mergeinfo, FALSE, iterpool));
+      SVN_ERR(svn_mergeinfo_merge(*deleted_mergeinfo,
+                                  svn_mergeinfo_dup(deleted, pool), pool));
+      SVN_ERR(svn_mergeinfo_merge(*added_mergeinfo,
+                                  svn_mergeinfo_dup(added, pool), pool));
      }
   svn_pool_destroy(iterpool);
 
@@ -871,8 +871,12 @@ get_combined_mergeinfo_changes(svn_merge
           if (! svn_dirent_is_ancestor(path, changed_path))
             continue;
           deleted = apr_hash_get(deleted_mergeinfo_catalog, key, klen);
-          SVN_ERR(svn_mergeinfo_merge(*deleted_mergeinfo, deleted, pool));
-          SVN_ERR(svn_mergeinfo_merge(*added_mergeinfo, added, pool));
+          SVN_ERR(svn_mergeinfo_merge(*deleted_mergeinfo,
+                                      svn_mergeinfo_dup(deleted, pool),
+                                      pool));
+          SVN_ERR(svn_mergeinfo_merge(*added_mergeinfo,
+                                      svn_mergeinfo_dup(added, pool),
+                                      pool));
 
           break;
         }