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 2010/06/29 23:56:50 UTC

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

Author: rhuijben
Date: Tue Jun 29 21:56:50 2010
New Revision: 959121

URL: http://svn.apache.org/viewvc?rev=959121&view=rev
Log:
Make the parent stub verification of navigate_to_parent() optional.

* subversion/libsvn_wc/wc_db.c
  (navigate_to_parent): Add verify_parent_stub argument, to make stub
    verification optional.
  (svn_wc__db_base_add_absent_node, svn_wc__db_op_copy,
   svn_wc__db_op_copy_dir, svn_wc__db_op_add_directory,
   svn_wc__db_temp_op_remove_entry, svn_wc__db_temp_op_remove_working,
   svn_wc__db_temp_op_set_dir_depth, db_working_actual_remove,
   db_working_insert, determine_repos_info, svn_wc__db_scan_addition,
   svn_wc__db_is_wcroot): Update callers.

  (make_copy_txn): Update calls. Allow missing stubs.

  (svn_wc__db_temp_op_remove_working_stub,
   svn_wc__db_temp_op_set_rev_and_repos_relpath): Update callers.

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=959121&r1=959120&r2=959121&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_wc/wc_db.c (original)
+++ subversion/trunk/subversion/libsvn_wc/wc_db.c Tue Jun 29 21:56:50 2010
@@ -522,6 +522,7 @@ navigate_to_parent(svn_wc__db_pdh_t **pa
                    svn_wc__db_t *db,
                    svn_wc__db_pdh_t *child_pdh,
                    svn_sqlite__mode_t smode,
+                   svn_boolean_t verify_parent_stub,
                    apr_pool_t *scratch_pool)
 {
   const char *parent_abspath;
@@ -552,13 +553,14 @@ navigate_to_parent(svn_wc__db_pdh_t **pa
   SVN_ERR(svn_sqlite__step(&got_row, stmt));
   SVN_ERR(svn_sqlite__reset(stmt));
 
-  if (!got_row)
+  if (!got_row && verify_parent_stub)
     return svn_error_createf(SVN_ERR_WC_NOT_WORKING_COPY, NULL,
                               _("'%s' does not have a parent."),
                               svn_dirent_local_style(child_pdh->local_abspath,
                                                      scratch_pool));
 
-  child_pdh->parent = *parent_pdh;
+  if (got_row)
+    child_pdh->parent = *parent_pdh;
 
   return SVN_NO_ERROR;
 }
@@ -1629,21 +1631,9 @@ svn_wc__db_base_add_absent_node(svn_wc__
   if (*local_relpath == '\0')
     {
       svn_error_t *err;
-      err = navigate_to_parent(&pdh, db, pdh, svn_sqlite__mode_readwrite,
+      err = navigate_to_parent(&pdh, db, pdh, svn_sqlite__mode_readwrite, FALSE,
                                scratch_pool);
 
-      if (err && err->apr_err == SVN_ERR_WC_NOT_WORKING_COPY)
-        {
-          /* Not registered in the parent; we have to add a stub */
-          svn_error_clear(err);
-
-          SVN_ERR(svn_wc__db_pdh_parse_local_abspath(&pdh, &local_relpath, db,
-                              svn_dirent_dirname(local_abspath, scratch_pool),
-                              svn_sqlite__mode_readwrite, scratch_pool,
-                              scratch_pool));
-        }
-      else
-        SVN_ERR(err);
       VERIFY_USABLE_PDH(pdh);
 
       SVN_ERR(create_repos_id(&repos_id, repos_root_url, repos_uuid,
@@ -2913,7 +2903,8 @@ svn_wc__db_op_copy(svn_wc__db_t *db,
          ### unnecessary when we centralise so for the moment we just
          ### fail. */
       SVN_ERR(navigate_to_parent(&src_pdh, db, src_pdh,
-                                 svn_sqlite__mode_readwrite, scratch_pool));
+                                 svn_sqlite__mode_readwrite, TRUE,
+                                 scratch_pool));
       src_relpath = svn_dirent_basename(src_abspath, NULL);
       kind = svn_wc__db_kind_subdir;
     }
@@ -3057,21 +3048,9 @@ svn_wc__db_op_copy_dir(svn_wc__db_t *db,
       svn_error_t *err;
 
       err = navigate_to_parent(&pdh, db, pdh, svn_sqlite__mode_readwrite,
-                               scratch_pool);
-      if (err && err->apr_err == SVN_ERR_WC_NOT_WORKING_COPY)
-        {
-          /* Not registered in the parent; register as addition */
-          svn_error_clear(err);
-
-          SVN_ERR(svn_wc__db_pdh_parse_local_abspath(&pdh, &local_relpath, db,
-                              svn_dirent_dirname(local_abspath, scratch_pool),
-                              svn_sqlite__mode_readwrite, scratch_pool,
-                              scratch_pool));
+                               FALSE, scratch_pool);
 
-          VERIFY_USABLE_PDH(pdh);
-        }
-      else
-        SVN_ERR(err);
+      VERIFY_USABLE_PDH(pdh);
 
       blank_iwb(&iwb);
 
@@ -3263,22 +3242,10 @@ svn_wc__db_op_add_directory(svn_wc__db_t
     {
       svn_error_t *err;
 
-      err = navigate_to_parent(&pdh, db, pdh, svn_sqlite__mode_readwrite,
+      err = navigate_to_parent(&pdh, db, pdh, svn_sqlite__mode_readwrite, FALSE,
                                scratch_pool);
-      if (err && err->apr_err == SVN_ERR_WC_NOT_WORKING_COPY)
-        {
-          /* Not registered in the parent; register as addition */
-          svn_error_clear(err);
-
-          SVN_ERR(svn_wc__db_pdh_parse_local_abspath(&pdh, &local_relpath, db,
-                              svn_dirent_dirname(local_abspath, scratch_pool),
-                              svn_sqlite__mode_readwrite, scratch_pool,
-                              scratch_pool));
 
-          VERIFY_USABLE_PDH(pdh);
-        }
-      else
-        SVN_ERR(err);
+      VERIFY_USABLE_PDH(pdh);
 
       blank_iwb(&iwb);
 
@@ -3938,7 +3905,7 @@ svn_wc__db_temp_op_remove_entry(svn_wc__
   if (*local_relpath == '\0')
     {
       SVN_ERR(navigate_to_parent(&pdh, db, pdh, svn_sqlite__mode_readwrite,
-                                 scratch_pool));
+                                 TRUE, scratch_pool));
       VERIFY_USABLE_PDH(pdh);
 
       local_relpath = svn_dirent_basename(local_abspath, NULL);
@@ -3993,7 +3960,7 @@ svn_wc__db_temp_op_remove_working(svn_wc
   if (*local_relpath == '\0')
     {
       SVN_ERR(navigate_to_parent(&pdh, db, pdh, svn_sqlite__mode_readwrite,
-                                 scratch_pool));
+                                 TRUE, scratch_pool));
       VERIFY_USABLE_PDH(pdh);
 
       local_relpath = svn_dirent_basename(local_abspath, NULL);
@@ -4076,7 +4043,7 @@ svn_wc__db_temp_op_set_dir_depth(svn_wc_
       svn_error_t *err;
 
       err = navigate_to_parent(&pdh, db, pdh, svn_sqlite__mode_readwrite,
-                               scratch_pool);
+                               TRUE, scratch_pool);
       if (err)
         {
           if (! SVN_WC__ERR_IS_NOT_CURRENT_WC(err))
@@ -4161,7 +4128,7 @@ db_working_actual_remove(svn_wc__db_t *d
     {
       /* ### Delete parent stub. Remove when db is centralised. */
       SVN_ERR(navigate_to_parent(&pdh, db, pdh, svn_sqlite__mode_readwrite,
-                                 scratch_pool));
+                                 TRUE, scratch_pool));
       local_relpath = svn_dirent_basename(local_abspath, NULL);
       VERIFY_USABLE_PDH(pdh);
 
@@ -4207,7 +4174,7 @@ db_working_insert(svn_wc__db_status_t st
     {
       /* ### Insert parent stub. Remove when db is centralised. */
       SVN_ERR(navigate_to_parent(&pdh, db, pdh, svn_sqlite__mode_readwrite,
-                                 scratch_pool));
+                                 TRUE, scratch_pool));
       local_relpath = svn_dirent_basename(local_abspath, NULL);
       VERIFY_USABLE_PDH(pdh);
 
@@ -5538,7 +5505,7 @@ determine_repos_info(apr_int64_t *repos_
          which means one PDH up, and stick to local_relpath == "".  */
       SVN_ERR(navigate_to_parent(&pdh, db, pdh,
                                  svn_sqlite__mode_readonly,
-                                 scratch_pool));
+                                 TRUE, scratch_pool));
       local_relpath = "";
     }
   else
@@ -6093,7 +6060,7 @@ svn_wc__db_scan_addition(svn_wc__db_stat
         {
           /* The current node is a directory, so move to the parent dir.  */
           SVN_ERR(navigate_to_parent(&pdh, db, pdh, svn_sqlite__mode_readonly,
-                                     scratch_pool));
+                                     TRUE, scratch_pool));
         }
       current_abspath = pdh->local_abspath;
       current_relpath = svn_wc__db_pdh_compute_relpath(pdh, NULL);
@@ -6325,7 +6292,7 @@ svn_wc__db_scan_deletion(const char **ba
         {
           /* The current node is a directory, so move to the parent dir.  */
           SVN_ERR(navigate_to_parent(&pdh, db, pdh, svn_sqlite__mode_readonly,
-                                     scratch_pool));
+                                     TRUE, scratch_pool));
         }
       current_abspath = pdh->local_abspath;
       current_relpath = svn_wc__db_pdh_compute_relpath(pdh, NULL);
@@ -7381,7 +7348,7 @@ svn_wc__db_is_wcroot(svn_boolean_t *is_r
     {
       svn_error_t *err = navigate_to_parent(&pdh, db, pdh,
                                             svn_sqlite__mode_readwrite,
-                                            scratch_pool);
+                                            TRUE, scratch_pool);
 
       if (err && SVN_WC__ERR_IS_NOT_CURRENT_WC(err))
         {
@@ -7992,7 +7959,7 @@ make_copy_txn(void *baton,
           /* Remove WORKING_NODE stub */
           SVN_ERR(navigate_to_parent(&pdh, mcb->db, mcb->pdh,
                                      svn_sqlite__mode_readwrite,
-                                     iterpool));
+                                     FALSE, iterpool));
           local_relpath = svn_dirent_basename(mcb->local_abspath, NULL);
           VERIFY_USABLE_PDH(pdh);
 
@@ -8011,7 +7978,7 @@ make_copy_txn(void *baton,
           /* Add a copy of the BASE_NODE to WORKING_NODE for the stub */
           SVN_ERR(navigate_to_parent(&pdh, mcb->db, mcb->pdh,
                                      svn_sqlite__mode_readwrite,
-                                     iterpool));
+                                     FALSE, iterpool));
           local_relpath = svn_dirent_basename(mcb->local_abspath, NULL);
           VERIFY_USABLE_PDH(pdh);
 
@@ -8038,7 +8005,7 @@ make_copy_txn(void *baton,
           /* Add a not present WORKING_NODE stub */
           SVN_ERR(navigate_to_parent(&pdh, mcb->db, mcb->pdh,
                                      svn_sqlite__mode_readwrite,
-                                     iterpool));
+                                     FALSE, iterpool));
           local_relpath = svn_dirent_basename(mcb->local_abspath, NULL);
           VERIFY_USABLE_PDH(pdh);
 
@@ -8081,7 +8048,7 @@ make_copy_txn(void *baton,
         {
           SVN_ERR(navigate_to_parent(&pdh, mcb->db, mcb->pdh,
                                      svn_sqlite__mode_readwrite,
-                                     iterpool));
+                                     FALSE, iterpool));
           local_relpath = svn_dirent_basename(mcb->local_abspath, NULL);
           VERIFY_USABLE_PDH(pdh);
 
@@ -8423,7 +8390,7 @@ svn_wc__db_temp_op_remove_working_stub(s
     return SVN_NO_ERROR; /* No stub to change */
 
   SVN_ERR(navigate_to_parent(&pdh, db, pdh, svn_sqlite__mode_readwrite,
-                             scratch_pool));
+                             TRUE, scratch_pool));
 
   SVN_ERR(svn_sqlite__get_statement(&stmt, pdh->wcroot->sdb,
                                     STMT_DELETE_WORKING_NODE));
@@ -8704,7 +8671,8 @@ svn_wc__db_temp_op_set_rev_and_repos_rel
         return SVN_NO_ERROR; /* There is no stub */
 
       SVN_ERR(navigate_to_parent(&baton.pdh, db, baton.pdh,
-                                 svn_sqlite__mode_readwrite, scratch_pool));
+                                 svn_sqlite__mode_readwrite, TRUE,
+                                 scratch_pool));
 
       VERIFY_USABLE_PDH(baton.pdh);
 



Re: svn commit: r959121 - /subversion/trunk/subversion/libsvn_wc/wc_db.c

Posted by Philip Martin <ph...@wandisco.com>.
rhuijben@apache.org writes:

> Author: rhuijben
> Date: Tue Jun 29 21:56:50 2010
> New Revision: 959121
>
> URL: http://svn.apache.org/viewvc?rev=959121&view=rev
> Log:
> Make the parent stub verification of navigate_to_parent() optional.
>
> * subversion/libsvn_wc/wc_db.c
>   (navigate_to_parent): Add verify_parent_stub argument, to make stub
>     verification optional.
>   (svn_wc__db_base_add_absent_node, svn_wc__db_op_copy,
>    svn_wc__db_op_copy_dir, svn_wc__db_op_add_directory,
>    svn_wc__db_temp_op_remove_entry, svn_wc__db_temp_op_remove_working,
>    svn_wc__db_temp_op_set_dir_depth, db_working_actual_remove,
>    db_working_insert, determine_repos_info, svn_wc__db_scan_addition,
>    svn_wc__db_is_wcroot): Update callers.
>
>   (make_copy_txn): Update calls. Allow missing stubs.
>
>   (svn_wc__db_temp_op_remove_working_stub,
>    svn_wc__db_temp_op_set_rev_and_repos_relpath): Update callers.
>
> 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=959121&r1=959120&r2=959121&view=diff
> ==============================================================================
> @@ -1629,21 +1631,9 @@ svn_wc__db_base_add_absent_node(svn_wc__
>    if (*local_relpath == '\0')
>      {
>        svn_error_t *err;
> -      err = navigate_to_parent(&pdh, db, pdh, svn_sqlite__mode_readwrite,
> +      err = navigate_to_parent(&pdh, db, pdh, svn_sqlite__mode_readwrite, FALSE,
>                                 scratch_pool);
>  
> -      if (err && err->apr_err == SVN_ERR_WC_NOT_WORKING_COPY)
> -        {
> -          /* Not registered in the parent; we have to add a stub */
> -          svn_error_clear(err);
> -
> -          SVN_ERR(svn_wc__db_pdh_parse_local_abspath(&pdh, &local_relpath, db,
> -                              svn_dirent_dirname(local_abspath, scratch_pool),
> -                              svn_sqlite__mode_readwrite, scratch_pool,
> -                              scratch_pool));
> -        }
> -      else
> -        SVN_ERR(err);
>        VERIFY_USABLE_PDH(pdh);

That construct leaks an error:

../src/subversion/libsvn_wc/wc_db.c: In function ‘svn_wc__db_base_add_absent_node’:
../src/subversion/libsvn_wc/wc_db.c:1633:20: warning: variable ‘err’ set but not used
../src/subversion/libsvn_wc/wc_db.c: In function ‘svn_wc__db_op_copy_dir’:
../src/subversion/libsvn_wc/wc_db.c:3048:20: warning: variable ‘err’ set but not used
../src/subversion/libsvn_wc/wc_db.c: In function ‘svn_wc__db_op_add_directory’:
../src/subversion/libsvn_wc/wc_db.c:3243:20: warning: variable ‘err’ set but not used

-- 
Philip