Author: hwright
Date: Mon Oct 10 18:35:56 2011
New Revision: 1181121

URL: http://svn.apache.org/viewvc?rev=1181121&view=rev
Log:
Merge r1164386 from trunk:

 * r1164386
   Avoid an expensive database operation in 'svn info'.
   Justification:
     Improves performance of 'svn info' on a single unmodified node by 20-30%, 
by
     moving an in most cases unneeded database call in the error handling.
   Votes:
     +1: rhuijben, hwright, gstein

Modified:
    subversion/branches/1.7.x/   (props changed)
    subversion/branches/1.7.x/STATUS
    subversion/branches/1.7.x/subversion/libsvn_wc/info.c

Propchange: subversion/branches/1.7.x/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Mon Oct 10 18:35:56 2011
@@ -64,4 +64,4 @@
 /subversion/branches/tree-conflicts:868291-873154
 /subversion/branches/tree-conflicts-notify:873926-874008
 /subversion/branches/uris-as-urls:1060426-1064427
-/subversion/trunk:1146013,1146121,1146219,1146222,1146274,1146492,1146555,1146606,1146620,1146684,1146781,1146832,1146834,1146870,1146899,1146904,1147293,1147299,1147309,1147882,1148071,1148083,1148094,1148131,1148374,1148424,1148566,1148588,1148853,1148877,1148882,1148936,1149105,1149141,1149160,1149228,1149240,1149343,1149371-1149372,1149377,1149398,1149401,1149539,1149572,1149627,1149675,1149701,1149713,1150242,1150254,1150260-1150261,1150266,1150302,1150327,1150368,1150372,1150441,1150506,1150812,1150853,1151036,1151177,1151610,1151906,1151911,1152129,1152140,1152189-1152190,1152267,1152282,1152286,1152726,1152809,1153138,1153141,1153416,1153799,1153807,1153968,1154009,1154023,1154115,1154119,1154121,1154144,1154155,1154159,1154165,1154215,1154225,1154273,1154461,1154717-1154718,1154733,1154908,1154982,1155015,1155044,1155124,1155131,1155160,1155313,1155334,1155391,1155404,1156085,1156098,1156216,1156218,1156312,1156527,1156717,1156721,1156750,1156827,1156838,1157416,115
 
8187,1158193-1158194,1158196,1158201,1158207,1158209-1158210,1158217,1158285,1158288,1158303,1158309,1158407,1158419,1158421,1158436,1158455,1158616-1158617,1158634,1158854,1158875,1158886,1158893,1158896,1158919,1158924,1158963,1159093,1159098,1159101,1159132,1159136,1159148,1159230,1159275,1159400,1159686,1159760,1159772,1160605,1160671,1160682,1160704-1160705,1160756,1161063,1161080,1161185,1161210,1161683,1161721,1162024,1162033,1162201,1162516,1162880,1162974,1162995,1163557,1163792,1163953,1164027,1164517,1164535,1164554,1164580,1164645,1164760,1164765,1166500,1166555,1166678,1167062,1167173,1167209,1167269,1167503,1169524,1169531,1169650,1171708,1173111,1173425,1173639,1174051,1174060,1174652,1174797
+/subversion/trunk:1146013,1146121,1146219,1146222,1146274,1146492,1146555,1146606,1146620,1146684,1146781,1146832,1146834,1146870,1146899,1146904,1147293,1147299,1147309,1147882,1148071,1148083,1148094,1148131,1148374,1148424,1148566,1148588,1148853,1148877,1148882,1148936,1149105,1149141,1149160,1149228,1149240,1149343,1149371-1149372,1149377,1149398,1149401,1149539,1149572,1149627,1149675,1149701,1149713,1150242,1150254,1150260-1150261,1150266,1150302,1150327,1150368,1150372,1150441,1150506,1150812,1150853,1151036,1151177,1151610,1151906,1151911,1152129,1152140,1152189-1152190,1152267,1152282,1152286,1152726,1152809,1153138,1153141,1153416,1153799,1153807,1153968,1154009,1154023,1154115,1154119,1154121,1154144,1154155,1154159,1154165,1154215,1154225,1154273,1154461,1154717-1154718,1154733,1154908,1154982,1155015,1155044,1155124,1155131,1155160,1155313,1155334,1155391,1155404,1156085,1156098,1156216,1156218,1156312,1156527,1156717,1156721,1156750,1156827,1156838,1157416,115
 
8187,1158193-1158194,1158196,1158201,1158207,1158209-1158210,1158217,1158285,1158288,1158303,1158309,1158407,1158419,1158421,1158436,1158455,1158616-1158617,1158634,1158854,1158875,1158886,1158893,1158896,1158919,1158924,1158963,1159093,1159098,1159101,1159132,1159136,1159148,1159230,1159275,1159400,1159686,1159760,1159772,1160605,1160671,1160682,1160704-1160705,1160756,1161063,1161080,1161185,1161210,1161683,1161721,1162024,1162033,1162201,1162516,1162880,1162974,1162995,1163557,1163792,1163953,1164027,1164386,1164517,1164535,1164554,1164580,1164645,1164760,1164765,1166500,1166555,1166678,1167062,1167173,1167209,1167269,1167503,1169524,1169531,1169650,1171708,1173111,1173425,1173639,1174051,1174060,1174652,1174797

Modified: subversion/branches/1.7.x/STATUS
URL: 
http://svn.apache.org/viewvc/subversion/branches/1.7.x/STATUS?rev=1181121&r1=1181120&r2=1181121&view=diff
==============================================================================
--- subversion/branches/1.7.x/STATUS (original)
+++ subversion/branches/1.7.x/STATUS Mon Oct 10 18:35:56 2011
@@ -141,14 +141,6 @@ Veto-blocked changes:
 Approved changes:
 =================
 
- * r1164386
-   Avoid an expensive database operation in 'svn info'.
-   Justification:
-     Improves performance of 'svn info' on a single unmodified node by 20-30%, 
by
-     moving an in most cases unneeded database call in the error handling.
-   Votes:
-     +1: rhuijben, hwright, gstein
-
  * r1167659
    Don't sort an already sorted array in svn_sort__hash().
    Justification:

Modified: subversion/branches/1.7.x/subversion/libsvn_wc/info.c
URL: 
http://svn.apache.org/viewvc/subversion/branches/1.7.x/subversion/libsvn_wc/info.c?rev=1181121&r1=1181120&r2=1181121&view=diff
==============================================================================
--- subversion/branches/1.7.x/subversion/libsvn_wc/info.c (original)
+++ subversion/branches/1.7.x/subversion/libsvn_wc/info.c Mon Oct 10 18:35:56 
2011
@@ -438,9 +438,8 @@ svn_wc__get_info(svn_wc_context_t *wc_ct
                  apr_pool_t *scratch_pool)
 {
   struct found_entry_baton fe_baton;
-  const svn_wc_conflict_description2_t *root_tree_conflict;
   svn_error_t *err;
-  apr_pool_t *iterpool;
+  apr_pool_t *iterpool = svn_pool_create(scratch_pool);
   apr_hash_index_t *hi;
 
   fe_baton.receiver = receiver;
@@ -451,39 +450,46 @@ svn_wc__get_info(svn_wc_context_t *wc_ct
   fe_baton.tree_conflicts = apr_hash_make(scratch_pool);
   fe_baton.pool = scratch_pool;
 
-  if (fetch_actual_only)
-    {
-      SVN_ERR(svn_wc__db_op_read_tree_conflict(&root_tree_conflict,
-                                               wc_ctx->db, local_abspath,
-                                               scratch_pool, scratch_pool));
-      if (root_tree_conflict)
-        {
-          apr_hash_set(fe_baton.tree_conflicts, local_abspath,
-                       APR_HASH_KEY_STRING, root_tree_conflict);
-        }
-    }
-  else
-    root_tree_conflict = FALSE;
-
   err = svn_wc__internal_walk_children(wc_ctx->db, local_abspath,
                                        fetch_excluded,
                                        changelist_filter,
                                        info_found_node_callback,
                                        &fe_baton, depth,
                                        cancel_func, cancel_baton,
-                                       scratch_pool);
+                                       iterpool);
 
   /* If the target root node is not present, svn_wc__internal_walk_children()
      returns a PATH_NOT_FOUND error and doesn't call the callback.  If there
      is a tree conflict on this node, that is not an error. */
-  if (err && err->apr_err == SVN_ERR_WC_PATH_NOT_FOUND && root_tree_conflict)
-    svn_error_clear(err);
-  else if (err)
-    return svn_error_trace(err);
+  if (fe_baton.first /* not visited by walk_children */
+      && fetch_actual_only
+      && err && err->apr_err == SVN_ERR_WC_PATH_NOT_FOUND)
+    {
+      const svn_wc_conflict_description2_t *root_tree_conflict;
+      svn_error_t *err2;
+
+      err2 = svn_wc__db_op_read_tree_conflict(&root_tree_conflict,
+                                              wc_ctx->db, local_abspath,
+                                              scratch_pool, iterpool);
+
+      if ((err2 && err2->apr_err == SVN_ERR_WC_PATH_NOT_FOUND))
+        {
+          svn_error_clear(err2);
+          return svn_error_trace(err);
+        }
+      else if (err2 || !root_tree_conflict)
+        return svn_error_compose_create(err, err2);
+
+      svn_error_clear(err);
+
+      apr_hash_set(fe_baton.tree_conflicts, local_abspath,
+                   APR_HASH_KEY_STRING, root_tree_conflict);
+    }
+  else
+    SVN_ERR(err);
 
   /* If there are any tree conflicts that we have found but have not reported,
    * send a minimal info struct for each one now. */
-  iterpool = svn_pool_create(scratch_pool);
   for (hi = apr_hash_first(scratch_pool, fe_baton.tree_conflicts); hi;
        hi = apr_hash_next(hi))
     {


Reply via email to