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",


Reply via email to