You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by ju...@apache.org on 2010/10/25 18:23:25 UTC

svn commit: r1027185 - /subversion/trunk/subversion/libsvn_wc/wc_db.c

Author: julianfoad
Date: Mon Oct 25 16:23:24 2010
New Revision: 1027185

URL: http://svn.apache.org/viewvc?rev=1027185&view=rev
Log:
For some existing WC DB functions that take a DB and abspath, create local
versions that take a PDH and relpath instead.  Adjust some callers to use
them.  This avoids some conversion overhead and allows for a cleaner
implementation.

* subversion/libsvn_wc/wc_db.c
  (read_info): New function, extracted from
    svn_wc__db_read_info(), which now calls it.
  (read_all_tree_conflicts): New function, extracted from
    svn_wc__db_op_read_all_tree_conflicts(), which now calls it.
  (read_tree_conflict): New function, extracted from
    svn_wc__db_op_read_tree_conflict(), which now calls it.
  (cross_db_copy, svn_wc__db_read_children_info, svn_wc__db_global_relocate,
   svn_wc__db_read_conflicts): Use the new functions.
  (get_info_for_copy): Use read_info(). Take a local_relpath parameter and
    adjust recursive calls. Presently this is as well as the abspath.
  (svn_wc__db_op_copy): Pass the relpath to get_info_for_copy().

Modified:
    subversion/trunk/subversion/libsvn_wc/wc_db.c

Modified: subversion/trunk/subversion/libsvn_wc/wc_db.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_wc/wc_db.c?rev=1027185&r1=1027184&r2=1027185&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_wc/wc_db.c (original)
+++ subversion/trunk/subversion/libsvn_wc/wc_db.c Mon Oct 25 16:23:24 2010
@@ -241,6 +241,36 @@ db_read_pristine_props(apr_hash_t **prop
                        apr_pool_t *result_pool,
                        apr_pool_t *scratch_pool);
 
+static svn_error_t *
+read_info(svn_wc__db_status_t *status,
+          svn_wc__db_kind_t *kind,
+          svn_revnum_t *revision,
+          const char **repos_relpath,
+          const char **repos_root_url,
+          const char **repos_uuid,
+          svn_revnum_t *changed_rev,
+          apr_time_t *changed_date,
+          const char **changed_author,
+          apr_time_t *last_mod_time,
+          svn_depth_t *depth,
+          const svn_checksum_t **checksum,
+          svn_filesize_t *translated_size,
+          const char **target,
+          const char **changelist,
+          const char **original_repos_relpath,
+          const char **original_root_url,
+          const char **original_uuid,
+          svn_revnum_t *original_revision,
+          svn_boolean_t *props_mod,
+          svn_boolean_t *have_base,
+          svn_boolean_t *have_work,
+          svn_boolean_t *conflicted,
+          svn_wc__db_lock_t **lock,
+          svn_wc__db_pdh_t *pdh,
+          const char *local_relpath,
+          apr_pool_t *result_pool,
+          apr_pool_t *scratch_pool);
+
 
 /* Return the absolute path, in local path style, of LOCAL_RELPATH in WCROOT. */
 static const char *
@@ -2628,29 +2658,29 @@ cross_db_copy(svn_wc__db_t *db,
                  || kind == svn_wc__db_kind_dir
                  );
 
-  SVN_ERR(svn_wc__db_read_info(NULL /* status */,
-                               NULL /* kind */,
-                               NULL /* revision */,
-                               NULL /* repos_relpath */,
-                               NULL /* repos_root_url */,
-                               NULL /* repos_uuid */,
-                               &changed_rev, &changed_date, &changed_author,
-                               NULL /* last_mod_time */,
-                               &depth,
-                               &checksum,
-                               NULL /* translated_size */,
-                               NULL /* target */,
-                               NULL /* changelist */,
-                               NULL /* original_repos_relpath */,
-                               NULL /* original_root_url */,
-                               NULL /* original_uuid */,
-                               NULL /* original_revision */,
-                               NULL /* props_mod */,
-                               NULL /* have_base */,
-                               NULL /* have_work */,
-                               NULL /* conflicted */,
-                               NULL /* lock */,
-                               db, src_abspath, scratch_pool, scratch_pool));
+  SVN_ERR(read_info(NULL /* status */,
+                    NULL /* kind */,
+                    NULL /* revision */,
+                    NULL /* repos_relpath */,
+                    NULL /* repos_root_url */,
+                    NULL /* repos_uuid */,
+                    &changed_rev, &changed_date, &changed_author,
+                    NULL /* last_mod_time */,
+                    &depth,
+                    &checksum,
+                    NULL /* translated_size */,
+                    NULL /* target */,
+                    NULL /* changelist */,
+                    NULL /* original_repos_relpath */,
+                    NULL /* original_root_url */,
+                    NULL /* original_uuid */,
+                    NULL /* original_revision */,
+                    NULL /* props_mod */,
+                    NULL /* have_base */,
+                    NULL /* have_work */,
+                    NULL /* conflicted */,
+                    NULL /* lock */,
+                    src_pdh, src_relpath, scratch_pool, scratch_pool));
 
   SVN_ERR(db_read_pristine_props(&props, src_pdh, src_relpath,
                                  scratch_pool, scratch_pool));
@@ -2729,6 +2759,7 @@ get_info_for_copy(apr_int64_t *copyfrom_
                   svn_wc__db_kind_t *kind,
                   svn_boolean_t *have_work,
                   svn_wc__db_pdh_t *pdh,
+                  const char *local_relpath,
                   svn_wc__db_t *db,
                   const char *local_abspath,
                   apr_pool_t *result_pool,
@@ -2737,42 +2768,44 @@ get_info_for_copy(apr_int64_t *copyfrom_
   const char *repos_relpath, *repos_root_url, *repos_uuid;
   svn_revnum_t revision;
 
-  SVN_ERR(svn_wc__db_read_info(status, kind, &revision,
-                               &repos_relpath, &repos_root_url, &repos_uuid,
-                               NULL /* changed_rev */,
-                               NULL /* changed_date */,
-                               NULL /* changed_author */,
-                               NULL /* last_mod_time */,
-                               NULL /* depth */,
-                               NULL /* checksum */,
-                               NULL /* translated_size */,
-                               NULL /* target */,
-                               NULL /* changelist */,
-                               NULL /* original_repos_relpath */,
-                               NULL /* original_root_url */,
-                               NULL /* original_uuid */,
-                               NULL /* original_revision */,
-                               NULL /* props_mod */,
-                               NULL /* have_base */,
-                               have_work,
-                               NULL /* conflicted */,
-                               NULL /* lock */,
-                               db, local_abspath, result_pool, scratch_pool));
+  SVN_ERR(read_info(status, kind, &revision,
+                    &repos_relpath, &repos_root_url, &repos_uuid,
+                    NULL /* changed_rev */,
+                    NULL /* changed_date */,
+                    NULL /* changed_author */,
+                    NULL /* last_mod_time */,
+                    NULL /* depth */,
+                    NULL /* checksum */,
+                    NULL /* translated_size */,
+                    NULL /* target */,
+                    NULL /* changelist */,
+                    NULL /* original_repos_relpath */,
+                    NULL /* original_root_url */,
+                    NULL /* original_uuid */,
+                    NULL /* original_revision */,
+                    NULL /* props_mod */,
+                    NULL /* have_base */,
+                    have_work,
+                    NULL /* conflicted */,
+                    NULL /* lock */,
+                    pdh, local_relpath, result_pool, scratch_pool));
 
   if (*status == svn_wc__db_status_excluded)
     {
       /* The parent cannot be excluded, so look at the parent and then
          adjust the relpath */
-      const char *parent_abspath, *base_name;
+      const char *parent_relpath, *parent_abspath, *base_name;
       svn_wc__db_status_t parent_status;
       svn_wc__db_kind_t parent_kind;
       svn_boolean_t parent_have_work;
 
+      svn_dirent_split(&parent_relpath, &base_name, local_relpath,
+                       scratch_pool);
       svn_dirent_split(&parent_abspath, &base_name, local_abspath,
                        scratch_pool);
       SVN_ERR(get_info_for_copy(copyfrom_id, copyfrom_relpath, copyfrom_rev,
                                 &parent_status, &parent_kind, &parent_have_work,
-                                pdh, db, parent_abspath,
+                                pdh, parent_relpath, db, parent_abspath,
                                 scratch_pool, scratch_pool));
       if (*copyfrom_relpath)
         *copyfrom_relpath = svn_relpath_join(*copyfrom_relpath, base_name,
@@ -2915,7 +2948,7 @@ svn_wc__db_op_copy(svn_wc__db_t *db,
 
   SVN_ERR(get_info_for_copy(&copyfrom_id, &copyfrom_relpath, &copyfrom_rev,
                             &status, &kind, &have_work,
-                            src_pdh, db, src_abspath,
+                            src_pdh, src_relpath, db, src_abspath,
                             scratch_pool, scratch_pool));
 
   SVN_ERR_ASSERT(kind == svn_wc__db_kind_file || kind == svn_wc__db_kind_dir);
@@ -3887,25 +3920,20 @@ svn_wc__db_op_revert(svn_wc__db_t *db,
 }
 
 
-svn_error_t *
-svn_wc__db_op_read_all_tree_conflicts(apr_hash_t **tree_conflicts,
-                                      svn_wc__db_t *db,
-                                      const char *local_abspath,
-                                      apr_pool_t *result_pool,
-                                      apr_pool_t *scratch_pool)
+/* Set *TREE_CONFLICT_DATA to a string describing any tree conflicts on
+ * immediate children of PDH:LOCAL_RELPATH. The format of the string is as
+ * produced by svn_wc__write_tree_conflicts(). */
+static svn_error_t *
+read_all_tree_conflicts(apr_hash_t **tree_conflicts,
+                        svn_wc__db_pdh_t *pdh,
+                        const char *local_relpath,
+                        apr_pool_t *result_pool,
+                        apr_pool_t *scratch_pool)
 {
-  svn_wc__db_pdh_t *pdh;
-  const char *local_relpath;
   svn_sqlite__stmt_t *stmt;
   svn_boolean_t have_row;
   const char *tree_conflict_data;
-
-  SVN_ERR_ASSERT(svn_dirent_is_absolute(local_abspath));
-
-  SVN_ERR(svn_wc__db_pdh_parse_local_abspath(&pdh, &local_relpath, db,
-                              local_abspath, svn_sqlite__mode_readwrite,
-                              scratch_pool, scratch_pool));
-  VERIFY_USABLE_PDH(pdh);
+  const char *local_abspath;
 
   /* Get the conflict information for the parent of LOCAL_ABSPATH. */
   SVN_ERR(svn_sqlite__get_statement(&stmt, pdh->wcroot->sdb,
@@ -3931,6 +3959,8 @@ svn_wc__db_op_read_all_tree_conflicts(ap
       return SVN_NO_ERROR;
     }
 
+  local_abspath = svn_dirent_join(pdh->wcroot->abspath, local_relpath,
+                                  scratch_pool);
   SVN_ERR(svn_wc__read_tree_conflicts(tree_conflicts, tree_conflict_data,
                                       local_abspath, result_pool));
 
@@ -3938,12 +3968,11 @@ svn_wc__db_op_read_all_tree_conflicts(ap
 }
 
 svn_error_t *
-svn_wc__db_op_read_tree_conflict(
-                     const svn_wc_conflict_description2_t **tree_conflict,
-                     svn_wc__db_t *db,
-                     const char *local_abspath,
-                     apr_pool_t *result_pool,
-                     apr_pool_t *scratch_pool)
+svn_wc__db_op_read_all_tree_conflicts(apr_hash_t **tree_conflicts,
+                                      svn_wc__db_t *db,
+                                      const char *local_abspath,
+                                      apr_pool_t *result_pool,
+                                      apr_pool_t *scratch_pool)
 {
   svn_wc__db_pdh_t *pdh;
   const char *local_relpath;
@@ -3951,22 +3980,37 @@ svn_wc__db_op_read_tree_conflict(
   SVN_ERR_ASSERT(svn_dirent_is_absolute(local_abspath));
 
   SVN_ERR(svn_wc__db_pdh_parse_local_abspath(&pdh, &local_relpath, db,
-                              local_abspath, svn_sqlite__mode_readonly,
+                              local_abspath, svn_sqlite__mode_readwrite,
                               scratch_pool, scratch_pool));
+  VERIFY_USABLE_PDH(pdh);
+
+  SVN_ERR(read_all_tree_conflicts(tree_conflicts, pdh, local_relpath,
+                                  result_pool, scratch_pool));
 
+  return SVN_NO_ERROR;
+}
+
+/* Like svn_wc__db_op_read_tree_conflict(), but with PDH+LOCAL_RELPATH
+ * instead of DB+LOCAL_ABSPATH. */
+static svn_error_t *
+read_tree_conflict(const svn_wc_conflict_description2_t **tree_conflict,
+                   svn_wc__db_pdh_t *pdh,
+                   const char *local_relpath,
+                   apr_pool_t *result_pool,
+                   apr_pool_t *scratch_pool)
+{
   if (local_relpath[0])
     {
-      const char * parent_abspath;
+      const char *parent_relpath;
       apr_hash_t *tree_conflicts;
 
-      parent_abspath = svn_dirent_dirname(local_abspath, scratch_pool);
+      parent_relpath = svn_dirent_dirname(local_relpath, scratch_pool);
 
-      SVN_ERR(svn_wc__db_op_read_all_tree_conflicts(&tree_conflicts, db,
-                                                    parent_abspath,
-                                                    result_pool, scratch_pool));
+      SVN_ERR(read_all_tree_conflicts(&tree_conflicts, pdh, parent_relpath,
+                                      result_pool, scratch_pool));
       if (tree_conflicts)
         *tree_conflict = apr_hash_get(tree_conflicts,
-                                      svn_dirent_basename(local_abspath, NULL),
+                                      svn_dirent_basename(local_relpath, NULL),
                                       APR_HASH_KEY_STRING);
       else
         *tree_conflict = NULL;
@@ -3978,6 +4022,29 @@ svn_wc__db_op_read_tree_conflict(
 }
 
 svn_error_t *
+svn_wc__db_op_read_tree_conflict(
+                     const svn_wc_conflict_description2_t **tree_conflict,
+                     svn_wc__db_t *db,
+                     const char *local_abspath,
+                     apr_pool_t *result_pool,
+                     apr_pool_t *scratch_pool)
+{
+  svn_wc__db_pdh_t *pdh;
+  const char *local_relpath;
+
+  SVN_ERR_ASSERT(svn_dirent_is_absolute(local_abspath));
+
+  SVN_ERR(svn_wc__db_pdh_parse_local_abspath(&pdh, &local_relpath, db,
+                              local_abspath, svn_sqlite__mode_readonly,
+                              scratch_pool, scratch_pool));
+
+  SVN_ERR(read_tree_conflict(tree_conflict, pdh, local_relpath,
+                             result_pool, scratch_pool));
+
+  return SVN_NO_ERROR;
+}
+
+svn_error_t *
 svn_wc__db_temp_op_remove_entry(svn_wc__db_t *db,
                                 const char *local_abspath,
                                 apr_pool_t *scratch_pool)
@@ -4421,51 +4488,44 @@ svn_wc__db_temp_op_delete(svn_wc__db_t *
 }
 
 
-svn_error_t *
-svn_wc__db_read_info(svn_wc__db_status_t *status,
-                     svn_wc__db_kind_t *kind,
-                     svn_revnum_t *revision,
-                     const char **repos_relpath,
-                     const char **repos_root_url,
-                     const char **repos_uuid,
-                     svn_revnum_t *changed_rev,
-                     apr_time_t *changed_date,
-                     const char **changed_author,
-                     apr_time_t *last_mod_time,
-                     svn_depth_t *depth,
-                     const svn_checksum_t **checksum,
-                     svn_filesize_t *translated_size,
-                     const char **target,
-                     const char **changelist,
-                     const char **original_repos_relpath,
-                     const char **original_root_url,
-                     const char **original_uuid,
-                     svn_revnum_t *original_revision,
-                     svn_boolean_t *props_mod,
-                     svn_boolean_t *have_base,
-                     svn_boolean_t *have_work,
-                     svn_boolean_t *conflicted,
-                     svn_wc__db_lock_t **lock,
-                     svn_wc__db_t *db,
-                     const char *local_abspath,
-                     apr_pool_t *result_pool,
-                     apr_pool_t *scratch_pool)
+/* Like svn_wc__db_read_info(), but with PDH+LOCAL_RELPATH instead of
+ * DB+LOCAL_ABSPATH.*/
+static svn_error_t *
+read_info(svn_wc__db_status_t *status,
+          svn_wc__db_kind_t *kind,
+          svn_revnum_t *revision,
+          const char **repos_relpath,
+          const char **repos_root_url,
+          const char **repos_uuid,
+          svn_revnum_t *changed_rev,
+          apr_time_t *changed_date,
+          const char **changed_author,
+          apr_time_t *last_mod_time,
+          svn_depth_t *depth,
+          const svn_checksum_t **checksum,
+          svn_filesize_t *translated_size,
+          const char **target,
+          const char **changelist,
+          const char **original_repos_relpath,
+          const char **original_root_url,
+          const char **original_uuid,
+          svn_revnum_t *original_revision,
+          svn_boolean_t *props_mod,
+          svn_boolean_t *have_base,
+          svn_boolean_t *have_work,
+          svn_boolean_t *conflicted,
+          svn_wc__db_lock_t **lock,
+          svn_wc__db_pdh_t *pdh,
+          const char *local_relpath,
+          apr_pool_t *result_pool,
+          apr_pool_t *scratch_pool)
 {
-  svn_wc__db_pdh_t *pdh;
-  const char *local_relpath;
   svn_sqlite__stmt_t *stmt_info;
   svn_sqlite__stmt_t *stmt_act;
   svn_boolean_t have_info;
   svn_boolean_t have_act;
   svn_error_t *err = NULL;
 
-  SVN_ERR_ASSERT(svn_dirent_is_absolute(local_abspath));
-
-  SVN_ERR(svn_wc__db_pdh_parse_local_abspath(&pdh, &local_relpath, db,
-                              local_abspath, svn_sqlite__mode_readonly,
-                              scratch_pool, scratch_pool));
-  VERIFY_USABLE_PDH(pdh);
-
   /* Obtain the most likely to exist record first, to make sure we don't
      have to obtain the SQLite read-lock multiple times */
   SVN_ERR(svn_sqlite__get_statement(&stmt_info, pdh->wcroot->sdb,
@@ -4623,7 +4683,8 @@ svn_wc__db_read_info(svn_wc__db_status_t
                          svn_error_createf(
                                err->apr_err, err2,
                               _("The node '%s' has a corrupt checksum value."),
-                              svn_dirent_local_style(local_abspath,
+                              path_for_error_message(pdh->wcroot,
+                                                     local_relpath,
                                                      scratch_pool)));
             }
         }
@@ -4718,14 +4779,16 @@ svn_wc__db_read_info(svn_wc__db_status_t
          node in BASE_NODE and/or WORKING_NODE.  */
       err = svn_error_createf(SVN_ERR_WC_CORRUPT, NULL,
                               _("Corrupt data for '%s'"),
-                              svn_dirent_local_style(local_abspath,
+                              path_for_error_message(pdh->wcroot,
+                                                     local_relpath,
                                                      scratch_pool));
     }
   else
     {
       err = svn_error_createf(SVN_ERR_WC_PATH_NOT_FOUND, NULL,
                               _("The node '%s' was not found."),
-                              svn_dirent_local_style(local_abspath,
+                              path_for_error_message(pdh->wcroot,
+                                                     local_relpath,
                                                      scratch_pool));
     }
 
@@ -4741,8 +4804,8 @@ svn_wc__db_read_info(svn_wc__db_status_t
     {
       const svn_wc_conflict_description2_t *cd;
 
-      SVN_ERR(svn_wc__db_op_read_tree_conflict(&cd, db, local_abspath,
-                                               scratch_pool, scratch_pool));
+      SVN_ERR(read_tree_conflict(&cd, pdh, local_relpath,
+                                 scratch_pool, scratch_pool));
 
       *conflicted = (cd != NULL);
     }
@@ -4751,6 +4814,57 @@ svn_wc__db_read_info(svn_wc__db_status_t
 }
 
 svn_error_t *
+svn_wc__db_read_info(svn_wc__db_status_t *status,
+                     svn_wc__db_kind_t *kind,
+                     svn_revnum_t *revision,
+                     const char **repos_relpath,
+                     const char **repos_root_url,
+                     const char **repos_uuid,
+                     svn_revnum_t *changed_rev,
+                     apr_time_t *changed_date,
+                     const char **changed_author,
+                     apr_time_t *last_mod_time,
+                     svn_depth_t *depth,
+                     const svn_checksum_t **checksum,
+                     svn_filesize_t *translated_size,
+                     const char **target,
+                     const char **changelist,
+                     const char **original_repos_relpath,
+                     const char **original_root_url,
+                     const char **original_uuid,
+                     svn_revnum_t *original_revision,
+                     svn_boolean_t *props_mod,
+                     svn_boolean_t *have_base,
+                     svn_boolean_t *have_work,
+                     svn_boolean_t *conflicted,
+                     svn_wc__db_lock_t **lock,
+                     svn_wc__db_t *db,
+                     const char *local_abspath,
+                     apr_pool_t *result_pool,
+                     apr_pool_t *scratch_pool)
+{
+  svn_wc__db_pdh_t *pdh;
+  const char *local_relpath;
+
+  SVN_ERR_ASSERT(svn_dirent_is_absolute(local_abspath));
+
+  SVN_ERR(svn_wc__db_pdh_parse_local_abspath(&pdh, &local_relpath, db,
+                              local_abspath, svn_sqlite__mode_readonly,
+                              scratch_pool, scratch_pool));
+  VERIFY_USABLE_PDH(pdh);
+
+  SVN_ERR(read_info(status, kind, revision, repos_relpath, repos_root_url,
+                    repos_uuid, changed_rev, changed_date, changed_author,
+                    last_mod_time, depth, checksum, translated_size, target,
+                    changelist, original_repos_relpath, original_root_url,
+                    original_uuid, original_revision, props_mod, have_base,
+                    have_work, conflicted, lock,
+                    pdh, local_relpath, result_pool, scratch_pool));
+
+  return SVN_NO_ERROR;
+}
+
+svn_error_t *
 svn_wc__db_read_children_info(apr_hash_t **nodes,
                               apr_hash_t **conflicts,
                               svn_wc__db_t *db,
@@ -4968,9 +5082,8 @@ svn_wc__db_read_children_info(apr_hash_t
 
   SVN_ERR(svn_sqlite__reset(stmt));
 
-  SVN_ERR(svn_wc__db_op_read_all_tree_conflicts(&tree_conflicts, db,
-                                                dir_abspath,
-                                                scratch_pool, scratch_pool));
+  SVN_ERR(read_all_tree_conflicts(&tree_conflicts, pdh, dir_relpath,
+                                  scratch_pool, scratch_pool));
   *conflicts = apr_hash_make(result_pool);
   if (tree_conflicts)
     {
@@ -5253,16 +5366,16 @@ svn_wc__db_global_relocate(svn_wc__db_t 
                               scratch_pool, scratch_pool));
   VERIFY_USABLE_PDH(pdh);
 
-  SVN_ERR(svn_wc__db_read_info(&status,
-                               NULL, NULL,
-                               &rb.repos_relpath, &old_repos_root_url,
-                               &rb.repos_uuid,
-                               NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-                               NULL, NULL, NULL, NULL, NULL, NULL,
-                               &rb.have_base_node,
-                               NULL, NULL, NULL,
-                               db, local_dir_abspath,
-                               scratch_pool, scratch_pool));
+  SVN_ERR(read_info(&status,
+                    NULL, NULL,
+                    &rb.repos_relpath, &old_repos_root_url,
+                    &rb.repos_uuid,
+                    NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+                    NULL, NULL, NULL, NULL, NULL, NULL,
+                    &rb.have_base_node,
+                    NULL, NULL, NULL,
+                    pdh, rb.local_relpath,
+                    scratch_pool, scratch_pool));
 
   if (status == svn_wc__db_status_excluded)
     {
@@ -7183,9 +7296,8 @@ svn_wc__db_read_conflicts(const apr_arra
   {
     const svn_wc_conflict_description2_t *desc;
 
-    SVN_ERR(svn_wc__db_op_read_tree_conflict(&desc,
-                                             db, local_abspath,
-                                             result_pool, scratch_pool));
+    SVN_ERR(read_tree_conflict(&desc, pdh, local_relpath,
+                               result_pool, scratch_pool));
 
     if (desc)
       APR_ARRAY_PUSH(cflcts, const svn_wc_conflict_description2_t*) = desc;