Author: philip
Date: Tue Mar  9 13:53:38 2010
New Revision: 920875

URL: http://svn.apache.org/viewvc?rev=920875&view=rev
Log:
Remove some access batons from post-commit processing.

* subversion/include/svn_wc.h
  (svn_wc_queue_committed3, svn_wc_process_committed_queue2): New.
  (svn_wc_queue_committed2, svn_wc_process_committed_queue): Deprecate.

* subversion/libsvn_wc/adm_ops.c
  (struct committed_queue_item_t): Remove adm_abspath.
  (process_committed_internal): Remove adm_abspath parameter, derive
   abspath from path.
  (svn_wc_queue_committed3): Renamed from svn_wc_process_committed_queue2
   with access baton parameter removed.
  (svn_wc_queue_committed2): Call svn_wc_queue_committed3.
  (svn_wc_process_committed_queue2): Renamed svn_wc_process_committed_queue
   with access baton parameter changed to wc context.
  (svn_wc_process_committed_queue): Call svn_wc_process_committed_queue2.

* subversion/libsvn_client/commit.c
  (svn_client_commit4): Call svn_wc_queue_committed3 and
   svn_wc_process_committed_queue2.

Modified:
    subversion/trunk/subversion/include/svn_wc.h
    subversion/trunk/subversion/libsvn_client/commit.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=920875&r1=920874&r2=920875&view=diff
==============================================================================
--- subversion/trunk/subversion/include/svn_wc.h (original)
+++ subversion/trunk/subversion/include/svn_wc.h Tue Mar  9 13:53:38 2010
@@ -4729,14 +4729,14 @@ svn_wc_committed_queue_create(apr_pool_t
 
 /**
  * Queue committed items to be processed later by
- * svn_wc_process_committed_queue().
+ * svn_wc_process_committed_queue2().
  *
- * All pointer data passed to this function (@a path, @a adm_access,
- * @a wcprop_changes and @a checksum) should remain valid until the queue
- * has been processed by svn_wc_process_committed_queue().
+ * All pointer data passed to this function (@a path, @a wcprop_changes
+ * and @a checksum) should remain valid until the queue
+ * has been processed by svn_wc_process_committed_queue2().
  *
  * Record in @a queue that @a path will need to be bumped after a commit
- * succeeds. @a adm_access must hold a write lock appropriate for @a path.
+ * succeeds.
  *
  * If non-NULL, @a wcprop_changes is an array of <tt>svn_prop_t *</tt>
  * changes to wc properties; if an #svn_prop_t->value is NULL, then
@@ -4763,7 +4763,25 @@ svn_wc_committed_queue_create(apr_pool_t
  * it will bump ALL nodes under the directory, regardless of their
  * actual inclusion in the new revision.
  *
+ * @since New in 1.7.
+ */
+svn_error_t *
+svn_wc_queue_committed3(svn_wc_committed_queue_t *queue,
+                        const char *path,
+                        svn_boolean_t recurse,
+                        const apr_array_header_t *wcprop_changes,
+                        svn_boolean_t remove_lock,
+                        svn_boolean_t remove_changelist,
+                        const svn_checksum_t *checksum,
+                        apr_pool_t *scratch_pool);
+
+/** @see svn_wc_queue_committed3()
+ *
+ * @a adm_access is unused.
+ *
  * @since New in 1.6.
+ *
+ * @deprecated Provided for backwards compatibility with the 1.6 API.
  */
 svn_error_t *
 svn_wc_queue_committed2(svn_wc_committed_queue_t *queue,
@@ -4805,11 +4823,23 @@ 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.
  *
- * @a adm_access must be associated with all affected directories, and
- * must hold a write lock in each one.
+ * @since New in 1.7.
+ */
+svn_error_t *
+svn_wc_process_committed_queue2(svn_wc_committed_queue_t *queue,
+                               svn_wc_context_t *wc_ctx,
+                               svn_revnum_t new_revnum,
+                               const char *rev_date,
+                               const char *rev_author,
+                               apr_pool_t *pool);
+
+/** @see svn_wc_process_committed_queue2()
  *
  * @since New in 1.5.
+ *
+ * @deprecated Provided for backwards compatibility with the 1.5 API.
  */
+SVN_DEPRECATED
 svn_error_t *
 svn_wc_process_committed_queue(svn_wc_committed_queue_t *queue,
                                svn_wc_adm_access_t *adm_access,

Modified: subversion/trunk/subversion/libsvn_client/commit.c
URL: 
http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_client/commit.c?rev=920875&r1=920874&r2=920875&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_client/commit.c (original)
+++ subversion/trunk/subversion/libsvn_client/commit.c Tue Mar  9 13:53:38 2010
@@ -990,7 +990,7 @@ post_process_commit_item(void *baton, vo
 
   /* Allocate the queue in a longer-lived pool than (iter)pool:
      we want it to survive the next iteration. */
-  return svn_wc_queue_committed2(btn->queue, item->path, adm_access,
+  return svn_wc_queue_committed3(btn->queue, item->path,
                                  loop_recurse, item->incoming_prop_changes,
                                  remove_lock, !btn->keep_changelists,
                                  apr_hash_get(btn->checksums,
@@ -1298,7 +1298,7 @@ svn_client_commit4(svn_commit_info_t **c
 
       SVN_ERR_ASSERT(*commit_info_p);
       bump_err
-        = svn_wc_process_committed_queue(queue, base_dir_access,
+        = svn_wc_process_committed_queue2(queue, ctx->wc_ctx,
                                          (*commit_info_p)->revision,
                                          (*commit_info_p)->date,
                                          (*commit_info_p)->author,

Modified: subversion/trunk/subversion/libsvn_wc/adm_ops.c
URL: 
http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_wc/adm_ops.c?rev=920875&r1=920874&r2=920875&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_wc/adm_ops.c (original)
+++ subversion/trunk/subversion/libsvn_wc/adm_ops.c Tue Mar  9 13:53:38 2010
@@ -76,7 +76,6 @@ struct svn_wc_committed_queue_t
 typedef struct
 {
   const char *path;
-  const char *adm_abspath;
   svn_boolean_t recurse;
   svn_boolean_t no_unlock;
   svn_boolean_t keep_changelist;
@@ -448,7 +447,6 @@ process_committed_leaf(svn_wc__db_t *db,
 
 static svn_error_t *
 process_committed_internal(svn_wc__db_t *db,
-                           const char *adm_abspath,
                            const char *path,
                            svn_boolean_t recurse,
                            svn_revnum_t new_revnum,
@@ -462,13 +460,17 @@ process_committed_internal(svn_wc__db_t 
                            apr_pool_t *scratch_pool)
 {
   svn_wc__db_kind_t kind;
-  const char *local_abspath;
+  const char *local_abspath, *adm_abspath;
 
   SVN_ERR(svn_dirent_get_absolute(&local_abspath, path, scratch_pool));
 
   SVN_ERR(svn_wc__db_read_kind(&kind, db, local_abspath, TRUE, scratch_pool));
   if (kind == svn_wc__db_kind_unknown)
     return SVN_NO_ERROR;  /* deleted/absent. (?) ... nothing to do. */
+  else if (kind == svn_wc__db_kind_dir)
+    adm_abspath = local_abspath;
+  else
+    adm_abspath = svn_dirent_dirname(local_abspath, scratch_pool);
 
   SVN_ERR(process_committed_leaf(db, adm_abspath, path,
                                  new_revnum, new_date, rev_author,
@@ -530,7 +532,7 @@ process_committed_internal(svn_wc__db_t 
              this one committed item. */
           if (kind == svn_wc__db_kind_dir)
             {
-              SVN_ERR(process_committed_internal(db, this_abspath, this_path,
+              SVN_ERR(process_committed_internal(db, this_path,
                                                  TRUE /* recurse */,
                                                  new_revnum, new_date,
                                                  rev_author,
@@ -612,9 +614,8 @@ svn_wc_committed_queue_create(apr_pool_t
 }
 
 svn_error_t *
-svn_wc_queue_committed2(svn_wc_committed_queue_t *queue,
+svn_wc_queue_committed3(svn_wc_committed_queue_t *queue,
                         const char *path,
-                        svn_wc_adm_access_t *adm_access,
                         svn_boolean_t recurse,
                         const apr_array_header_t *wcprop_changes,
                         svn_boolean_t remove_lock,
@@ -633,7 +634,6 @@ svn_wc_queue_committed2(svn_wc_committed
   /* Add to the array with paths and options */
   cqi = apr_palloc(queue->pool, sizeof(*cqi));
   cqi->path = path;
-  cqi->adm_abspath = svn_wc__adm_access_abspath(adm_access);
   cqi->recurse = recurse;
   cqi->no_unlock = !remove_lock;
   cqi->keep_changelist = !remove_changelist;
@@ -645,6 +645,22 @@ svn_wc_queue_committed2(svn_wc_committed
   return SVN_NO_ERROR;
 }
 
+svn_error_t *
+svn_wc_queue_committed2(svn_wc_committed_queue_t *queue,
+                        const char *path,
+                        svn_wc_adm_access_t *adm_access,
+                        svn_boolean_t recurse,
+                        const apr_array_header_t *wcprop_changes,
+                        svn_boolean_t remove_lock,
+                        svn_boolean_t remove_changelist,
+                        const svn_checksum_t *checksum,
+                        apr_pool_t *scratch_pool)
+{
+  return svn_wc_queue_committed3(queue, path, recurse, wcprop_changes,
+                                 remove_lock, remove_changelist, checksum,
+                                 scratch_pool);
+}
+
 
 /* NOTE: this function doesn't move to deprecated.c because of its need
    for the internals of svn_wc_committed_queue_t.  */
@@ -700,14 +716,13 @@ have_recursive_parent(apr_array_header_t
 }
 
 svn_error_t *
-svn_wc_process_committed_queue(svn_wc_committed_queue_t *queue,
-                               svn_wc_adm_access_t *adm_access,
-                               svn_revnum_t new_revnum,
-                               const char *rev_date,
-                               const char *rev_author,
-                               apr_pool_t *pool)
+svn_wc_process_committed_queue2(svn_wc_committed_queue_t *queue,
+                                svn_wc_context_t *wc_ctx,
+                                svn_revnum_t new_revnum,
+                                const char *rev_date,
+                                const char *rev_author,
+                                apr_pool_t *pool)
 {
-  svn_wc__db_t *db = svn_wc__adm_get_db(adm_access);
   int i;
   apr_pool_t *iterpool = svn_pool_create(pool);
   apr_time_t new_date;
@@ -719,17 +734,27 @@ svn_wc_process_committed_queue(svn_wc_co
 
   for (i = 0; i < queue->queue->nelts; i++)
     {
+      const char *local_abspath, *adm_abspath;
+      svn_wc__db_kind_t kind;
       const committed_queue_item_t *cqi
         = APR_ARRAY_IDX(queue->queue, i, const committed_queue_item_t *);
 
       svn_pool_clear(iterpool);
 
+      SVN_ERR(svn_dirent_get_absolute(&local_abspath, cqi->path, iterpool));
+      SVN_ERR(svn_wc__db_read_kind(&kind, wc_ctx->db, local_abspath, TRUE,
+                                   iterpool));
+      if (kind != svn_wc__db_kind_dir)
+        adm_abspath = svn_dirent_dirname(local_abspath, iterpool);
+      else
+        adm_abspath = local_abspath;
+
       /* If there are some recursive items, then see if this item is a
          child of one, and will (implicitly) be accounted for. */
       if (queue->have_recursive && have_recursive_parent(queue->queue, i))
         continue;
 
-      SVN_ERR(process_committed_internal(db, cqi->adm_abspath, cqi->path,
+      SVN_ERR(process_committed_internal(wc_ctx->db, cqi->path,
                                          cqi->recurse,
                                          new_revnum, new_date, rev_author,
                                          cqi->new_dav_cache,
@@ -737,7 +762,7 @@ svn_wc_process_committed_queue(svn_wc_co
                                          cqi->keep_changelist,
                                          cqi->checksum, queue, iterpool));
 
-      SVN_ERR(svn_wc__wq_run(db, cqi->adm_abspath, NULL, NULL, iterpool));
+      SVN_ERR(svn_wc__wq_run(wc_ctx->db, adm_abspath, NULL, NULL, iterpool));
     }
 
   queue->queue->nelts = 0;
@@ -748,6 +773,24 @@ svn_wc_process_committed_queue(svn_wc_co
 }
 
 svn_error_t *
+svn_wc_process_committed_queue(svn_wc_committed_queue_t *queue,
+                               svn_wc_adm_access_t *adm_access,
+                               svn_revnum_t new_revnum,
+                               const char *rev_date,
+                               const char *rev_author,
+                               apr_pool_t *pool)
+{
+  svn_wc_context_t *wc_ctx;
+
+  SVN_ERR(svn_wc__context_create_with_db(&wc_ctx, NULL,
+                                         svn_wc__adm_get_db(adm_access),
+                                         pool));
+  SVN_ERR(svn_wc_process_committed_queue2(queue, wc_ctx, new_revnum,
+                                          rev_date, rev_author, pool));
+  return SVN_NO_ERROR;
+}
+
+svn_error_t *
 svn_wc_process_committed4(const char *path,
                           svn_wc_adm_access_t *adm_access,
                           svn_boolean_t recurse,
@@ -775,7 +818,7 @@ svn_wc_process_committed4(const char *pa
   else
     checksum = NULL;
 
-  SVN_ERR(process_committed_internal(db, adm_abspath,
+  SVN_ERR(process_committed_internal(db,
                                      path, recurse,
                                      new_revnum, new_date, rev_author,
                                      convert_to_hash(wcprop_changes, pool),


Reply via email to