You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by rh...@apache.org on 2011/04/17 20:19:08 UTC

svn commit: r1094180 - in /subversion/trunk/subversion: include/svn_wc.h libsvn_client/commit.c libsvn_client/commit_util.c libsvn_wc/adm_ops.c

Author: rhuijben
Date: Sun Apr 17 18:19:08 2011
New Revision: 1094180

URL: http://svn.apache.org/viewvc?rev=1094180&view=rev
Log:
Stop running the working queue for every commit item. Keep a list of
working copies where to run the working queue and run it after we updated
all the database records.

Once we updated the database records, it is safe to cancel the working
queue, so accept a cancel_func, cancel_baton pair.

* subversion/include/svn_wc.h
  (svn_wc_process_committed_queue2): Add cancel_func, cancel_baton.

* subversion/libsvn_client/commit.c
  (svn_client_commit5): Update caller.

* subversion/libsvn_wc/adm_ops.c
  (svn_wc_process_committed_queue2): Don't run the wq from the master loop.
    Pass cancel func to the working queue runner.

Modified:
    subversion/trunk/subversion/include/svn_wc.h
    subversion/trunk/subversion/libsvn_client/commit.c
    subversion/trunk/subversion/libsvn_client/commit_util.c
    subversion/trunk/subversion/libsvn_wc/adm_ops.c

Modified: subversion/trunk/subversion/include/svn_wc.h
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/include/svn_wc.h?rev=1094180&r1=1094179&r2=1094180&view=diff
==============================================================================
--- subversion/trunk/subversion/include/svn_wc.h (original)
+++ subversion/trunk/subversion/include/svn_wc.h Sun Apr 17 18:19:08 2011
@@ -4854,6 +4854,9 @@ svn_wc_queue_committed(svn_wc_committed_
  * @a rev_date and @a rev_author are the (server-side) date and author
  * of the new revision; one or both may be @c NULL.
  *
+ * If @a cancel_func is non-NULL, call it with @a cancel_baton to determine
+ * if the client wants to cancel the operation.
+ *
  * @since New in 1.7.
  */
 svn_error_t *
@@ -4862,6 +4865,8 @@ svn_wc_process_committed_queue2(svn_wc_c
                                 svn_revnum_t new_revnum,
                                 const char *rev_date,
                                 const char *rev_author,
+                                svn_cancel_func_t cancel_func,
+                                void *cancel_baton,
                                 apr_pool_t *scratch_pool);
 
 /** @see svn_wc_process_committed_queue2()

Modified: subversion/trunk/subversion/libsvn_client/commit.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_client/commit.c?rev=1094180&r1=1094179&r2=1094180&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_client/commit.c (original)
+++ subversion/trunk/subversion/libsvn_client/commit.c Sun Apr 17 18:19:08 2011
@@ -1373,6 +1373,8 @@ svn_client_commit5(const apr_array_heade
                                          commit_info->revision,
                                          commit_info->date,
                                          commit_info->author,
+                                         ctx->cancel_func,
+                                         ctx->cancel_baton,
                                          iterpool);
     }
 

Modified: subversion/trunk/subversion/libsvn_client/commit_util.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_client/commit_util.c?rev=1094180&r1=1094179&r2=1094180&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_client/commit_util.c (original)
+++ subversion/trunk/subversion/libsvn_client/commit_util.c Sun Apr 17 18:19:08 2011
@@ -1548,13 +1548,13 @@ svn_client__do_commit(const char *base_u
                                            &new_text_base_sha1_checksum,
                                            ctx->wc_ctx, item->path,
                                            fulltext, editor, mod->file_baton,
-                                           pool, iterpool));
+                                           iterpool, iterpool));
       if (md5_checksums)
         apr_hash_set(*md5_checksums, item->path, APR_HASH_KEY_STRING,
-                     new_text_base_md5_checksum);
+                     svn_checksum_dup(new_text_base_md5_checksum, pool));
       if (sha1_checksums)
         apr_hash_set(*sha1_checksums, item->path, APR_HASH_KEY_STRING,
-                     new_text_base_sha1_checksum);
+                     svn_checksum_dup(new_text_base_sha1_checksum, pool));
     }
 
   svn_pool_destroy(iterpool);

Modified: subversion/trunk/subversion/libsvn_wc/adm_ops.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_wc/adm_ops.c?rev=1094180&r1=1094179&r2=1094180&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_wc/adm_ops.c (original)
+++ subversion/trunk/subversion/libsvn_wc/adm_ops.c Sun Apr 17 18:19:08 2011
@@ -436,12 +436,16 @@ svn_wc_process_committed_queue2(svn_wc_c
                                 svn_revnum_t new_revnum,
                                 const char *rev_date,
                                 const char *rev_author,
+                                svn_cancel_func_t cancel_func,
+                                void *cancel_baton,
                                 apr_pool_t *scratch_pool)
 {
   apr_array_header_t *sorted_queue;
   int i;
   apr_pool_t *iterpool = svn_pool_create(scratch_pool);
   apr_time_t new_date;
+  apr_hash_t *run_wqs = apr_hash_make(scratch_pool);
+  apr_hash_index_t *hi;
 
   if (rev_date)
     SVN_ERR(svn_time_from_cstring(&new_date, rev_date, iterpool));
@@ -457,6 +461,7 @@ svn_wc_process_committed_queue2(svn_wc_c
       const svn_sort__item_t *sort_item
         = &APR_ARRAY_IDX(sorted_queue, i, svn_sort__item_t);
       const committed_queue_item_t *cqi = sort_item->value;
+      const char *wcroot_abspath;
 
       svn_pool_clear(iterpool);
 
@@ -476,12 +481,35 @@ svn_wc_process_committed_queue2(svn_wc_c
                                                  cqi->sha1_checksum, queue,
                                                  iterpool));
 
-      SVN_ERR(svn_wc__wq_run(wc_ctx->db, cqi->local_abspath, NULL, NULL,
-                             iterpool));
+      /* Don't run the wq now, but remember that we must call it for this
+         working copy */
+      SVN_ERR(svn_wc__db_get_wcroot(&wcroot_abspath,
+                                    wc_ctx->db, cqi->local_abspath,
+                                    iterpool, iterpool));
+
+      if (! apr_hash_get(run_wqs, wcroot_abspath, APR_HASH_KEY_STRING))
+        {
+          wcroot_abspath = apr_pstrdup(scratch_pool, wcroot_abspath);
+          apr_hash_set(run_wqs, wcroot_abspath, APR_HASH_KEY_STRING,
+                       wcroot_abspath);
+        }
     }
 
   SVN_ERR(svn_hash__clear(queue->queue, iterpool));
 
+  for (hi = apr_hash_first(scratch_pool, run_wqs);
+       hi;
+       hi = apr_hash_next(hi))
+    {
+      const char *wcroot_abspath = svn__apr_hash_index_key(hi);
+
+      svn_pool_clear(iterpool);
+
+      SVN_ERR(svn_wc__wq_run(wc_ctx->db, wcroot_abspath,
+                             cancel_func, cancel_baton,
+                             iterpool));
+    }
+
   svn_pool_destroy(iterpool);
 
   return SVN_NO_ERROR;



Re: svn commit: r1094180 - in /subversion/trunk/subversion: include/svn_wc.h libsvn_client/commit.c libsvn_client/commit_util.c libsvn_wc/adm_ops.c

Posted by Greg Stein <gs...@gmail.com>.
On Apr 17, 2011 2:19 PM, <rh...@apache.org> wrote:
>...
> +++ subversion/trunk/subversion/libsvn_client/commit_util.c Sun Apr 17
18:19:08 2011
> @@ -1548,13 +1548,13 @@ svn_client__do_commit(const char *base_u

This change is not in the log message.

>...

Cheers,
-g