Author: rhuijben Date: Thu May 25 10:52:19 2023 New Revision: 1910050 URL: http://svn.apache.org/viewvc?rev=1910050&view=rev Log: Avoid a database transaction for most file installs from the workqueue.
* subversion/libsvn_wc/workqueue.c (run_file_install): Only fetch additional db info when really needed for file transform. Modified: subversion/trunk/subversion/libsvn_wc/workqueue.c Modified: subversion/trunk/subversion/libsvn_wc/workqueue.c URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_wc/workqueue.c?rev=1910050&r1=1910049&r2=1910050&view=diff ============================================================================== --- subversion/trunk/subversion/libsvn_wc/workqueue.c (original) +++ subversion/trunk/subversion/libsvn_wc/workqueue.c Thu May 25 10:52:19 2023 @@ -566,20 +566,6 @@ run_file_install(work_item_baton_t *wqb, db, wcroot_abspath, scratch_pool, scratch_pool)); - SVN_ERR(svn_wc__db_read_info(&status, NULL, NULL, &repos_relpath, - &repos_root_url, NULL, &changed_rev, NULL, - &changed_author, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, &lock, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - db, local_abspath, - scratch_pool, scratch_pool)); - /* Handle special statuses (e.g. added) */ - if (!repos_relpath) - SVN_ERR(svn_wc__db_read_repos_info(NULL, &repos_relpath, - &repos_root_url, NULL, - db, local_abspath, - scratch_pool, scratch_pool)); - is_special = svn_prop_get_value(props, SVN_PROP_SPECIAL) != NULL; is_executable = svn_prop_get_value(props, SVN_PROP_EXECUTABLE) != NULL; needs_lock = svn_prop_get_value(props, SVN_PROP_NEEDS_LOCK) != NULL; @@ -588,10 +574,30 @@ run_file_install(work_item_baton_t *wqb, svn_subst_eol_style_from_value(&eol_style, &eol, eol_propval); keywords_propval = svn_prop_get_value(props, SVN_PROP_KEYWORDS); + + /* Avoid this db work unless needed, in this hot codepath. */ + if (keywords_propval || needs_lock) + SVN_ERR(svn_wc__db_read_info(&status, NULL, NULL, &repos_relpath, + &repos_root_url, NULL, &changed_rev, NULL, + &changed_author, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, &lock, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + db, local_abspath, + scratch_pool, scratch_pool)); + if (keywords_propval) { - const char *url = - svn_path_url_add_component2(repos_root_url, repos_relpath, scratch_pool); + const char *url; + + /* Handle special statuses (e.g. added) */ + if (!repos_relpath) + SVN_ERR(svn_wc__db_read_repos_info(NULL, &repos_relpath, + &repos_root_url, NULL, + db, local_abspath, + scratch_pool, scratch_pool)); + + url = svn_path_url_add_component2(repos_root_url, repos_relpath, + scratch_pool); SVN_ERR(svn_subst_build_keywords3(&keywords, keywords_propval, apr_psprintf(scratch_pool, "%ld",