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))
{