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/11/16 17:34:14 UTC

svn commit: r1035683 - in /subversion/trunk/subversion/libsvn_wc: adm_crawler.c wc_db.c

Author: julianfoad
Date: Tue Nov 16 16:34:14 2010
New Revision: 1035683

URL: http://svn.apache.org/viewvc?rev=1035683&view=rev
Log:
Simplify and check postconditions in some WC DB code.

* subversion/libsvn_wc/wc_db.c
  (get_info_for_copy): Simplify, knowing that scan_addition always returns
    suitable 'null' values for a simple add.
  (scan_addition, svn_wc__db_scan_addition): Check postconditions.

* subversion/libsvn_wc/adm_crawler.c
  (svn_wc_crawl_revisions5): Simplify. We no longer elide repos info on
    base nodes, so base_get_info will always return it if asked, so this
    call to scan_base_repos was redundant.

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

Modified: subversion/trunk/subversion/libsvn_wc/adm_crawler.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_wc/adm_crawler.c?rev=1035683&r1=1035682&r2=1035683&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_wc/adm_crawler.c (original)
+++ subversion/trunk/subversion/libsvn_wc/adm_crawler.c Tue Nov 16 16:34:14 2010
@@ -814,22 +814,12 @@ svn_wc_crawl_revisions5(svn_wc_context_t
 
   if (!repos_root || !repos_relpath)
     {
-      err = svn_wc__db_scan_base_repos(&repos_relpath, &repos_root, NULL,
-                                      db, local_abspath,
-                                      scratch_pool, scratch_pool);
-
-      if (err && err->apr_err == SVN_ERR_WC_PATH_NOT_FOUND)
-        svn_error_clear(err);
-      else
-        SVN_ERR(err);
-
       /* Ok, that leaves a local addition. Deleted and not existing nodes
          are already handled. */
-      if (!repos_root || !repos_relpath)
-        SVN_ERR(svn_wc__db_scan_addition(NULL, NULL, &repos_relpath,
-                                         &repos_root, NULL, NULL, NULL, NULL,
-                                         NULL, db, local_abspath,
-                                         scratch_pool, scratch_pool));
+      SVN_ERR(svn_wc__db_scan_addition(NULL, NULL, &repos_relpath,
+                                       &repos_root, NULL, NULL, NULL, NULL,
+                                       NULL, db, local_abspath,
+                                       scratch_pool, scratch_pool));
     }
 
   if (!SVN_IS_VALID_REVNUM(target_rev))

Modified: subversion/trunk/subversion/libsvn_wc/wc_db.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_wc/wc_db.c?rev=1035683&r1=1035682&r2=1035683&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_wc/wc_db.c (original)
+++ subversion/trunk/subversion/libsvn_wc/wc_db.c Tue Nov 16 16:34:14 2010
@@ -2899,31 +2899,19 @@ get_info_for_copy(apr_int64_t *copyfrom_
   else if (*status == svn_wc__db_status_added)
     {
       const char *op_root_relpath;
-      const char *original_repos_relpath;
-      svn_revnum_t original_revision;
 
-      SVN_ERR(scan_addition(status, &op_root_relpath,
+      SVN_ERR(scan_addition(NULL, &op_root_relpath,
                             NULL, NULL, /* repos_* */
-                            &original_repos_relpath, copyfrom_id,
-                            &original_revision,
+                            copyfrom_relpath, copyfrom_id, copyfrom_rev,
                             pdh, local_relpath,
                             scratch_pool, scratch_pool));
-
-      if (*status == svn_wc__db_status_copied
-          || *status == svn_wc__db_status_moved_here)
+      if (*copyfrom_relpath)
         {
           *copyfrom_relpath
-            = svn_relpath_join(original_repos_relpath,
+            = svn_relpath_join(*copyfrom_relpath,
                                svn_dirent_skip_ancestor(op_root_relpath,
                                                         local_relpath),
                                result_pool);
-          *copyfrom_rev = original_revision;
-        }
-      else
-        {
-          *copyfrom_relpath = NULL;
-          *copyfrom_rev = SVN_INVALID_REVNUM;
-          *copyfrom_id = INVALID_REPOS_ID;
         }
     }
   else if (*status == svn_wc__db_status_deleted)
@@ -2935,8 +2923,6 @@ get_info_for_copy(apr_int64_t *copyfrom_
       if (work_del_relpath)
         {
           const char *op_root_relpath;
-          const char *original_repos_relpath;
-          svn_revnum_t original_revision;
           const char *parent_del_relpath = svn_dirent_dirname(work_del_relpath,
                                                               scratch_pool);
 
@@ -2944,16 +2930,14 @@ get_info_for_copy(apr_int64_t *copyfrom_
              _join above.  Can we use get_copyfrom here? */
           SVN_ERR(scan_addition(NULL, &op_root_relpath,
                                 NULL, NULL, /* repos_* */
-                                &original_repos_relpath, copyfrom_id,
-                                &original_revision,
+                                copyfrom_relpath, copyfrom_id, copyfrom_rev,
                                 pdh, parent_del_relpath,
                                 scratch_pool, scratch_pool));
           *copyfrom_relpath
-            = svn_relpath_join(original_repos_relpath,
+            = svn_relpath_join(*copyfrom_relpath,
                                svn_dirent_skip_ancestor(op_root_relpath,
                                                         local_relpath),
                                result_pool);
-          *copyfrom_rev = original_revision;
         }
       else
         {
@@ -6936,6 +6920,35 @@ scan_addition(svn_wc__db_status_t *statu
                                           result_pool);
     }
 
+  /* Postconditions */
+#ifdef SVN_DEBUG
+  if (status)
+    {
+      SVN_ERR_ASSERT(*status == svn_wc__db_status_added
+                     || *status == svn_wc__db_status_copied
+                     || *status == svn_wc__db_status_moved_here);
+      if (*status == svn_wc__db_status_added)
+        {
+          SVN_ERR_ASSERT(!original_repos_relpath
+                         || *original_repos_relpath == NULL);
+          SVN_ERR_ASSERT(!original_revision
+                         || *original_revision == SVN_INVALID_REVNUM);
+          SVN_ERR_ASSERT(!original_repos_id
+                         || *original_repos_id == INVALID_REPOS_ID);
+        }
+      else
+        {
+          SVN_ERR_ASSERT(!original_repos_relpath
+                         || *original_repos_relpath != NULL);
+          SVN_ERR_ASSERT(!original_revision
+                         || *original_revision != SVN_INVALID_REVNUM);
+          SVN_ERR_ASSERT(!original_repos_id
+                         || *original_repos_id != INVALID_REPOS_ID);
+        }
+    }
+  SVN_ERR_ASSERT(!op_root_relpath || *op_root_relpath != NULL);
+#endif
+
   return SVN_NO_ERROR;
 }
 
@@ -6980,8 +6993,11 @@ svn_wc__db_scan_addition(svn_wc__db_stat
     *op_root_abspath = svn_dirent_join(pdh->wcroot->abspath, op_root_relpath,
                                        result_pool);
   if (repos_id_p)
-    SVN_ERR(fetch_repos_info(repos_root_url, repos_uuid, pdh->wcroot->sdb,
-                             repos_id, result_pool));
+    {
+      SVN_ERR_ASSERT(repos_id != INVALID_REPOS_ID);
+      SVN_ERR(fetch_repos_info(repos_root_url, repos_uuid, pdh->wcroot->sdb,
+                               repos_id, result_pool));
+    }
   if (original_repos_id_p)
     {
       if (original_repos_id == INVALID_REPOS_ID)