You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by ju...@apache.org on 2015/03/05 11:36:31 UTC

svn commit: r1664298 - in /subversion/branches/move-tracking-2/subversion: include/svn_iter.h libsvn_delta/branch.c libsvn_delta/editor3e.c libsvn_subr/iter.c svnmover/svnmover.c

Author: julianfoad
Date: Thu Mar  5 10:36:29 2015
New Revision: 1664298

URL: http://svn.apache.org/r1664298
Log:
On the 'move-tracking-2' branch: Add and use accessor functions for a hash
table keyed by integers, instead of using APR hash table accessors directly.

* subversion/include/svn_iter.h,
  subversion/libsvn_subr/iter.c
  (svn_int_hash_get,
   svn_int_hash_set,
   svn_int_hash_this_key): New.

* subversion/libsvn_delta/branch.c
  (repos_get_family_by_id,
   repos_register_family,
   svn_branch_map_get,
   branch_map_set,
   svn_branch_map_purge_orphans,
   svn_branch_get_eid_by_path,
   svn_branch_map_copy_children,
   svn_branch_map_branch_children): Use them.

* subversion/libsvn_delta/editor3e.c
  (svn_branch_subtree_differences): Use them.

* subversion/svnmover/svnmover.c
  (branch_merge_subtree_r,
   svn_branch_diff_e,
   svn_branch_diff,
   get_subbranches,
   svn_branch_diff_r): Use them.

Modified:
    subversion/branches/move-tracking-2/subversion/include/svn_iter.h
    subversion/branches/move-tracking-2/subversion/libsvn_delta/branch.c
    subversion/branches/move-tracking-2/subversion/libsvn_delta/editor3e.c
    subversion/branches/move-tracking-2/subversion/libsvn_subr/iter.c
    subversion/branches/move-tracking-2/subversion/svnmover/svnmover.c

Modified: subversion/branches/move-tracking-2/subversion/include/svn_iter.h
URL: http://svn.apache.org/viewvc/subversion/branches/move-tracking-2/subversion/include/svn_iter.h?rev=1664298&r1=1664297&r2=1664298&view=diff
==============================================================================
--- subversion/branches/move-tracking-2/subversion/include/svn_iter.h (original)
+++ subversion/branches/move-tracking-2/subversion/include/svn_iter.h Thu Mar  5 10:36:29 2015
@@ -134,6 +134,24 @@ svn_iter__break(void);
 
 /* ====================================================================== */
 
+/** Like apr_hash_get() but the hash key is an integer. */
+void *
+svn_int_hash_get(apr_hash_t *ht,
+                 int key);
+
+/** Like apr_hash_set() but the hash key is an integer. */
+void
+svn_int_hash_set(apr_hash_t *ht,
+                 int key,
+                 const void *val);
+
+/** Like apr_hash_this_key() but the hash key is an integer. */
+int
+svn_int_hash_this_key(apr_hash_index_t *hi);
+
+
+/* ====================================================================== */
+
 /** A hash iterator for iterating over an array or a hash table in
  * its natural order or in sorted order.
  *

Modified: subversion/branches/move-tracking-2/subversion/libsvn_delta/branch.c
URL: http://svn.apache.org/viewvc/subversion/branches/move-tracking-2/subversion/libsvn_delta/branch.c?rev=1664298&r1=1664297&r2=1664298&view=diff
==============================================================================
--- subversion/branches/move-tracking-2/subversion/libsvn_delta/branch.c (original)
+++ subversion/branches/move-tracking-2/subversion/libsvn_delta/branch.c Thu Mar  5 10:36:29 2015
@@ -82,7 +82,7 @@ static svn_branch_family_t *
 repos_get_family_by_id(svn_branch_repos_t *repos,
                        int fid)
 {
-  return apr_hash_get(repos->families, &fid, sizeof(fid));
+  return svn_int_hash_get(repos->families, fid);
 }
 
 /* Register FAMILY in REPOS.
@@ -91,11 +91,7 @@ static void
 repos_register_family(svn_branch_repos_t *repos,
                       svn_branch_family_t *family)
 {
-  int fid = family->fid;
-
-  apr_hash_set(repos->families,
-               apr_pmemdup(repos->pool, &fid, sizeof(fid)), sizeof(fid),
-               family);
+  svn_int_hash_set(repos->families, family->fid, family);
 }
 
 svn_branch_revision_root_t *
@@ -458,7 +454,7 @@ svn_branch_map_get(const svn_branch_inst
 
   SVN_ERR_ASSERT_NO_RETURN(BRANCH_FAMILY_HAS_ELEMENT(branch, eid));
 
-  node = apr_hash_get(branch->e_map, &eid, sizeof(eid));
+  node = svn_int_hash_get(branch->e_map, eid);
 
   if (node)
     branch_map_node_validate(branch, eid, node);
@@ -478,13 +474,12 @@ branch_map_set(svn_branch_instance_t *br
                svn_branch_el_rev_content_t *node)
 {
   apr_pool_t *map_pool = apr_hash_pool_get(branch->e_map);
-  int *eid_p = apr_pmemdup(map_pool, &eid, sizeof(eid));
 
   SVN_ERR_ASSERT_NO_RETURN(BRANCH_FAMILY_HAS_ELEMENT(branch, eid));
   if (node)
     branch_map_node_validate(branch, eid, node);
 
-  apr_hash_set(branch->e_map, eid_p, sizeof(*eid_p), node);
+  svn_int_hash_set(branch->e_map, eid, node);
   assert_branch_instance_invariants(branch, map_pool);
 }
 
@@ -557,7 +552,7 @@ svn_branch_map_purge_orphans(svn_branch_
       for (hi = apr_hash_first(scratch_pool, branch->e_map);
            hi; hi = apr_hash_next(hi))
         {
-          int this_eid = *(const int *)apr_hash_this_key(hi);
+          int this_eid = svn_int_hash_this_key(hi);
           svn_branch_el_rev_content_t *this_node = apr_hash_this_val(hi);
 
           if (this_node->parent_eid != -1)
@@ -675,7 +670,7 @@ svn_branch_get_eid_by_path(const svn_bra
   for (hi = apr_hash_first(scratch_pool, branch->e_map);
        hi; hi = apr_hash_next(hi))
     {
-      int eid = *(const int *)apr_hash_this_key(hi);
+      int eid = svn_int_hash_this_key(hi);
       const char *this_path = svn_branch_get_path_by_eid(branch, eid,
                                                          scratch_pool);
 
@@ -755,7 +750,7 @@ svn_branch_map_copy_children(svn_branch_
   for (hi = apr_hash_first(scratch_pool, from_branch->e_map);
        hi; hi = apr_hash_next(hi))
     {
-      int this_from_eid = *(const int *)apr_hash_this_key(hi);
+      int this_from_eid = svn_int_hash_this_key(hi);
       svn_branch_el_rev_content_t *from_node = apr_hash_this_val(hi);
 
       if (from_node->parent_eid == from_parent_eid)
@@ -798,7 +793,7 @@ svn_branch_map_branch_children(svn_branc
   for (hi = apr_hash_first(scratch_pool, from_branch->e_map);
        hi; hi = apr_hash_next(hi))
     {
-      int this_eid = *(const int *)apr_hash_this_key(hi);
+      int this_eid = svn_int_hash_this_key(hi);
       svn_branch_el_rev_content_t *from_node = svn_branch_map_get(from_branch,
                                                                   this_eid);
 

Modified: subversion/branches/move-tracking-2/subversion/libsvn_delta/editor3e.c
URL: http://svn.apache.org/viewvc/subversion/branches/move-tracking-2/subversion/libsvn_delta/editor3e.c?rev=1664298&r1=1664297&r2=1664298&view=diff
==============================================================================
--- subversion/branches/move-tracking-2/subversion/libsvn_delta/editor3e.c (original)
+++ subversion/branches/move-tracking-2/subversion/libsvn_delta/editor3e.c Thu Mar  5 10:36:29 2015
@@ -29,6 +29,7 @@
 #include "svn_dirent_uri.h"
 #include "svn_props.h"
 #include "svn_sorts.h"
+#include "svn_iter.h"
 
 #include "private/svn_editor3e.h"
 #include "svn_private_config.h"
@@ -719,13 +720,12 @@ svn_branch_subtree_differences(apr_hash_
       if (! svn_branch_el_rev_content_equal(content_left, content_right,
                                             scratch_pool))
         {
-          int *eid_stored = apr_pmemdup(result_pool, &e, sizeof(e));
           svn_branch_el_rev_content_t **contents
             = apr_palloc(result_pool, 2 * sizeof(void *));
 
           contents[0] = content_left;
           contents[1] = content_right;
-          apr_hash_set(diff, eid_stored, sizeof(*eid_stored), contents);
+          svn_int_hash_set(diff, e, contents);
         }
     }
 

Modified: subversion/branches/move-tracking-2/subversion/libsvn_subr/iter.c
URL: http://svn.apache.org/viewvc/subversion/branches/move-tracking-2/subversion/libsvn_subr/iter.c?rev=1664298&r1=1664297&r2=1664298&view=diff
==============================================================================
--- subversion/branches/move-tracking-2/subversion/libsvn_subr/iter.c (original)
+++ subversion/branches/move-tracking-2/subversion/libsvn_subr/iter.c Thu Mar  5 10:36:29 2015
@@ -215,6 +215,32 @@ void *apr_hash_this_val(apr_hash_index_t
 
 /* ====================================================================== */
 
+void *
+svn_int_hash_get(apr_hash_t *ht,
+                 int key)
+{
+  return apr_hash_get(ht, &key, sizeof(key));
+}
+
+void
+svn_int_hash_set(apr_hash_t *ht,
+                 int key,
+                 const void *val)
+{
+  int *id_p = apr_pmemdup(apr_hash_pool_get(ht), &key, sizeof(key));
+
+  apr_hash_set(ht, id_p, sizeof(key), val);
+}
+
+int
+svn_int_hash_this_key(apr_hash_index_t *hi)
+{
+  return *(const int *)apr_hash_this_key(hi);
+}
+
+
+/* ====================================================================== */
+
 svn_array_t *
 svn_array_make(apr_pool_t *pool)
 {

Modified: subversion/branches/move-tracking-2/subversion/svnmover/svnmover.c
URL: http://svn.apache.org/viewvc/subversion/branches/move-tracking-2/subversion/svnmover/svnmover.c?rev=1664298&r1=1664297&r2=1664298&view=diff
==============================================================================
--- subversion/branches/move-tracking-2/subversion/svnmover/svnmover.c (original)
+++ subversion/branches/move-tracking-2/subversion/svnmover/svnmover.c Thu Mar  5 10:36:29 2015
@@ -689,9 +689,9 @@ branch_merge_subtree_r(svn_editor3_t *ed
   for (eid = first_eid; eid < next_eid; eid++)
     {
       svn_branch_el_rev_content_t **e_yca_src
-        = apr_hash_get(diff_yca_src, &eid, sizeof(eid));
+        = svn_int_hash_get(diff_yca_src, eid);
       svn_branch_el_rev_content_t **e_yca_tgt
-        = apr_hash_get(diff_yca_tgt, &eid, sizeof(eid));
+        = svn_int_hash_get(diff_yca_tgt, eid);
       svn_branch_el_rev_content_t *e_yca;
       svn_branch_el_rev_content_t *e_src;
       svn_branch_el_rev_content_t *e_tgt;
@@ -874,7 +874,7 @@ svn_branch_diff_e(svn_editor3_t *editor,
   for (eid = first_eid; eid < next_eid; eid++)
     {
       svn_branch_el_rev_content_t **e_pair
-        = apr_hash_get(diff_yca_tgt, &eid, sizeof(eid));
+        = svn_int_hash_get(diff_yca_tgt, eid);
       svn_branch_el_rev_content_t *e0, *e1;
 
       if (! e_pair)
@@ -981,7 +981,7 @@ svn_branch_diff(svn_editor3_t *editor,
   for (eid = first_eid; eid < next_eid; eid++)
     {
       svn_branch_el_rev_content_t **e_pair
-        = apr_hash_get(diff_yca_tgt, &eid, sizeof(eid));
+        = svn_int_hash_get(diff_yca_tgt, eid);
       svn_branch_el_rev_content_t *e0, *e1;
 
       if (! e_pair)
@@ -1081,9 +1081,8 @@ get_subbranches(svn_branch_instance_t *b
                           scratch_pool))
         {
           svn_branch_instance_t *b = bi->val;
-          int *bid = apr_pmemdup(result_pool, &b->sibling_defn->bid, sizeof (*bid));
 
-          apr_hash_set(result, bid, sizeof (*bid), b);
+          svn_int_hash_set(result, b->sibling_defn->bid, b);
         }
     }
   return result;
@@ -1150,9 +1149,9 @@ svn_branch_diff_r(svn_editor3_t *editor,
   for (hi = apr_hash_first(scratch_pool, subbranches_all);
        hi; hi = apr_hash_next(hi))
     {
-      int bid = *(const int *)apr_hash_this_key(hi);
-      svn_branch_instance_t *branch_l = apr_hash_get(subbranches_l, &bid, sizeof(bid));
-      svn_branch_instance_t *branch_r = apr_hash_get(subbranches_r, &bid, sizeof(bid));
+      int bid = svn_int_hash_this_key(hi);
+      svn_branch_instance_t *branch_l = svn_int_hash_get(subbranches_l, bid);
+      svn_branch_instance_t *branch_r = svn_int_hash_get(subbranches_r, bid);
       svn_branch_el_rev_id_t *sub_left = NULL, *sub_right = NULL;
 
       if (branch_l)