subversion-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From s...@apache.org
Subject svn commit: r1222521 - /subversion/trunk/subversion/libsvn_wc/wc_db.c
Date Fri, 23 Dec 2011 00:31:52 GMT
Author: stsp
Date: Fri Dec 23 00:31:51 2011
New Revision: 1222521

URL: http://svn.apache.org/viewvc?rev=1222521&view=rev
Log:
Turn another wc-db assertion people are reporting into a normal error.

* subversion/libsvn_wc/wc_db.c
  (read_children_info): If a node from an unexpected repository is found,
   don't assert but print an informative error message.

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=1222521&r1=1222520&r2=1222521&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_wc/wc_db.c (original)
+++ subversion/trunk/subversion/libsvn_wc/wc_db.c Fri Dec 23 00:31:51 2011
@@ -7231,7 +7231,7 @@ read_children_info(void *baton,
   svn_boolean_t have_row;
   const char *repos_root_url = NULL;
   const char *repos_uuid = NULL;
-  apr_int64_t last_repos_id;
+  apr_int64_t last_repos_id = INVALID_REPOS_ID;
   apr_hash_t *nodes = rci->nodes;
   apr_hash_t *conflicts = rci->conflicts;
   apr_pool_t *result_pool = rci->result_pool;
@@ -7299,20 +7299,54 @@ read_children_info(void *baton,
             }
           else
             {
+              const char *last_repos_root_url = NULL;
+              const char *last_repos_uuid = NULL;
+
               apr_int64_t repos_id = svn_sqlite__column_int64(stmt, 1);
-              if (!repos_root_url)
+              if (!repos_root_url ||
+                  (last_repos_id != INVALID_REPOS_ID &&
+                   repos_id != last_repos_id))
                 {
+                  last_repos_root_url = repos_root_url;
+                  last_repos_uuid = repos_uuid;
                   err = fetch_repos_info(&repos_root_url, &repos_uuid,
                                          wcroot->sdb, repos_id, result_pool);
                   if (err)
                     SVN_ERR(svn_error_compose_create(err,
-                                                     svn_sqlite__reset(stmt)));
-                  last_repos_id = repos_id;
+                                                 svn_sqlite__reset(stmt)));
                 }
 
+              if (last_repos_id == INVALID_REPOS_ID)
+                last_repos_id = repos_id;
+
               /* Assume working copy is all one repos_id so that a
                  single cached value is sufficient. */
-              SVN_ERR_ASSERT(repos_id == last_repos_id);
+              if (repos_id != last_repos_id)
+                return svn_error_createf(
+                         SVN_ERR_WC_DB_ERROR, NULL,
+                         _("The node '%s' comes from unexpected repository "
+                           "(ID '%" APR_INT64_T_FMT "'%s%s, expected ID '%"
+                           APR_INT64_T_FMT"'%s%s); this could be a "
+                           "misconfigured file-external which points to a "
+                           "foreign repository"),
+                         child_relpath, repos_id,
+                         repos_root_url
+                           ? apr_psprintf(scratch_pool, ", URL '%s'",
+                                          repos_root_url)
+                           : "",
+                         repos_uuid
+                           ? apr_psprintf(scratch_pool, ", UUID '%s'",
+                                          repos_uuid)
+                           : "",
+                         last_repos_id,
+                         last_repos_root_url
+                           ? apr_psprintf(scratch_pool, ", URL '%s'",
+                                          last_repos_root_url)
+                           : "",
+                         last_repos_uuid
+                           ? apr_psprintf(scratch_pool, ", UUID '%s'",
+                                          last_repos_uuid)
+                           : "");
               child->repos_root_url = repos_root_url;
               child->repos_uuid = repos_uuid;
             }



Mime
View raw message