subversion-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From hwri...@apache.org
Subject svn commit: r1400556 [10/29] - in /subversion/branches/ev2-export: ./ build/ build/ac-macros/ build/generator/ build/generator/templates/ build/hudson/ contrib/client-side/emacs/ contrib/client-side/svn-push/ contrib/client-side/svnmerge/ contrib/hook-...
Date Sun, 21 Oct 2012 02:00:47 GMT
Modified: subversion/branches/ev2-export/subversion/libsvn_fs/fs-loader.h
URL: http://svn.apache.org/viewvc/subversion/branches/ev2-export/subversion/libsvn_fs/fs-loader.h?rev=1400556&r1=1400555&r2=1400556&view=diff
==============================================================================
--- subversion/branches/ev2-export/subversion/libsvn_fs/fs-loader.h (original)
+++ subversion/branches/ev2-export/subversion/libsvn_fs/fs-loader.h Sun Oct 21 02:00:31 2012
@@ -107,7 +107,7 @@ typedef struct fs_library_vtable_t
   svn_error_t *(*pack_fs)(svn_fs_t *fs, const char *path,
                           svn_fs_pack_notify_t notify_func, void *notify_baton,
                           svn_cancel_func_t cancel_func, void *cancel_baton,
-                          apr_pool_t *pool);
+                          apr_pool_t *pool, apr_pool_t *common_pool);
 
   /* Provider-specific functions should go here, even if they could go
      in an object vtable, so that they are all kept together. */
@@ -202,6 +202,9 @@ typedef struct fs_vtable_t
                             svn_fs_get_locks_callback_t get_locks_func,
                             void *get_locks_baton,
                             apr_pool_t *pool);
+  svn_error_t *(*freeze)(svn_fs_t *fs,
+                         svn_error_t *(*freeze_body)(void *, apr_pool_t *),
+                         void *baton, apr_pool_t *pool);
   svn_error_t *(*bdb_set_errcall)(svn_fs_t *fs,
                                   void (*handler)(const char *errpfx,
                                                   char *msg));
@@ -303,6 +306,12 @@ typedef struct root_vtable_t
   svn_error_t *(*file_contents)(svn_stream_t **contents,
                                 svn_fs_root_t *root, const char *path,
                                 apr_pool_t *pool);
+  svn_error_t *(*try_process_file_contents)(svn_boolean_t *success,
+                                            svn_fs_root_t *target_root,
+                                            const char *target_path,
+                                            svn_fs_process_contents_func_t processor,
+                                            void* baton,
+                                            apr_pool_t *pool);
   svn_error_t *(*make_file)(svn_fs_root_t *root, const char *path,
                             apr_pool_t *pool);
   svn_error_t *(*apply_textdelta)(svn_txdelta_window_handler_t *contents_p,

Modified: subversion/branches/ev2-export/subversion/libsvn_fs_base/bdb/bdb-err.c
URL: http://svn.apache.org/viewvc/subversion/branches/ev2-export/subversion/libsvn_fs_base/bdb/bdb-err.c?rev=1400556&r1=1400555&r2=1400556&view=diff
==============================================================================
--- subversion/branches/ev2-export/subversion/libsvn_fs_base/bdb/bdb-err.c (original)
+++ subversion/branches/ev2-export/subversion/libsvn_fs_base/bdb/bdb-err.c Sun Oct 21 02:00:31 2012
@@ -102,5 +102,5 @@ svn_fs_bdb__wrap_db(svn_fs_t *fs, const 
   return svn_fs_bdb__dberrf
     (bfd->bdb, db_err,
      _("Berkeley DB error for filesystem '%s' while %s:\n"),
-     fs->path ? fs->path : "(none)", operation);
+     fs->path ? fs->path : "(none)", _(operation));
 }

Modified: subversion/branches/ev2-export/subversion/libsvn_fs_base/bdb/changes-table.c
URL: http://svn.apache.org/viewvc/subversion/branches/ev2-export/subversion/libsvn_fs_base/bdb/changes-table.c?rev=1400556&r1=1400555&r2=1400556&view=diff
==============================================================================
--- subversion/branches/ev2-export/subversion/libsvn_fs_base/bdb/changes-table.c (original)
+++ subversion/branches/ev2-export/subversion/libsvn_fs_base/bdb/changes-table.c Sun Oct 21 02:00:31 2012
@@ -90,7 +90,7 @@ svn_fs_bdb__changes_add(svn_fs_t *fs,
   svn_fs_base__str_to_dbt(&query, key);
   svn_fs_base__skel_to_dbt(&value, skel, pool);
   svn_fs_base__trail_debug(trail, "changes", "put");
-  return BDB_WRAP(fs, _("creating change"),
+  return BDB_WRAP(fs, N_("creating change"),
                   bfd->changes->put(bfd->changes, trail->db_txn,
                                     &query, &value, 0));
 }
@@ -114,7 +114,7 @@ svn_fs_bdb__changes_delete(svn_fs_t *fs,
      error should be propagated to the caller, though.  */
   if ((db_err) && (db_err != DB_NOTFOUND))
     {
-      SVN_ERR(BDB_WRAP(fs, _("deleting changes"), db_err));
+      SVN_ERR(BDB_WRAP(fs, N_("deleting changes"), db_err));
     }
 
   return SVN_NO_ERROR;
@@ -268,7 +268,7 @@ svn_fs_bdb__changes_fetch(apr_hash_t **c
   /* Get a cursor on the first record matching KEY, and then loop over
      the records, adding them to the return array. */
   svn_fs_base__trail_debug(trail, "changes", "cursor");
-  SVN_ERR(BDB_WRAP(fs, _("creating cursor for reading changes"),
+  SVN_ERR(BDB_WRAP(fs, N_("creating cursor for reading changes"),
                    bfd->changes->cursor(bfd->changes, trail->db_txn,
                                         &cursor, 0)));
 
@@ -352,7 +352,7 @@ svn_fs_bdb__changes_fetch(apr_hash_t **c
      finished.  Just return the (possibly empty) array.  Any other
      error, however, needs to get handled appropriately.  */
   if (db_err && (db_err != DB_NOTFOUND))
-    err = BDB_WRAP(fs, _("fetching changes"), db_err);
+    err = BDB_WRAP(fs, N_("fetching changes"), db_err);
 
  cleanup:
   /* Close the cursor. */
@@ -365,7 +365,7 @@ svn_fs_bdb__changes_fetch(apr_hash_t **c
   /* If our only error thus far was when we closed the cursor, return
      that error. */
   if (db_c_err)
-    SVN_ERR(BDB_WRAP(fs, _("closing changes cursor"), db_c_err));
+    SVN_ERR(BDB_WRAP(fs, N_("closing changes cursor"), db_c_err));
 
   /* Finally, set our return variable and get outta here. */
   *changes_p = changes;
@@ -391,7 +391,7 @@ svn_fs_bdb__changes_fetch_raw(apr_array_
   /* Get a cursor on the first record matching KEY, and then loop over
      the records, adding them to the return array. */
   svn_fs_base__trail_debug(trail, "changes", "cursor");
-  SVN_ERR(BDB_WRAP(fs, _("creating cursor for reading changes"),
+  SVN_ERR(BDB_WRAP(fs, N_("creating cursor for reading changes"),
                    bfd->changes->cursor(bfd->changes, trail->db_txn,
                                         &cursor, 0)));
 
@@ -435,7 +435,7 @@ svn_fs_bdb__changes_fetch_raw(apr_array_
      finished.  Just return the (possibly empty) array.  Any other
      error, however, needs to get handled appropriately.  */
   if (db_err && (db_err != DB_NOTFOUND))
-    err = BDB_WRAP(fs, _("fetching changes"), db_err);
+    err = BDB_WRAP(fs, N_("fetching changes"), db_err);
 
  cleanup:
   /* Close the cursor. */
@@ -448,7 +448,7 @@ svn_fs_bdb__changes_fetch_raw(apr_array_
   /* If our only error thus far was when we closed the cursor, return
      that error. */
   if (db_c_err)
-    SVN_ERR(BDB_WRAP(fs, _("closing changes cursor"), db_c_err));
+    SVN_ERR(BDB_WRAP(fs, N_("closing changes cursor"), db_c_err));
 
   /* Finally, set our return variable and get outta here. */
   *changes_p = changes;

Modified: subversion/branches/ev2-export/subversion/libsvn_fs_base/bdb/checksum-reps-table.c
URL: http://svn.apache.org/viewvc/subversion/branches/ev2-export/subversion/libsvn_fs_base/bdb/checksum-reps-table.c?rev=1400556&r1=1400555&r2=1400556&view=diff
==============================================================================
--- subversion/branches/ev2-export/subversion/libsvn_fs_base/bdb/checksum-reps-table.c (original)
+++ subversion/branches/ev2-export/subversion/libsvn_fs_base/bdb/checksum-reps-table.c Sun Oct 21 02:00:31 2012
@@ -139,7 +139,7 @@ svn_error_t *svn_fs_bdb__set_checksum_re
   /* Create a value from our REP_KEY, and add this record to the table. */
   svn_fs_base__str_to_dbt(&value, rep_key);
   svn_fs_base__trail_debug(trail, "checksum-reps", "put");
-  SVN_ERR(BDB_WRAP(fs, _("storing checksum-reps record"),
+  SVN_ERR(BDB_WRAP(fs, N_("storing checksum-reps record"),
                    bfd->checksum_reps->put(bfd->checksum_reps, trail->db_txn,
                                            &key, &value, 0)));
   return SVN_NO_ERROR;
@@ -161,7 +161,7 @@ svn_error_t *svn_fs_bdb__delete_checksum
 
   svn_fs_base__checksum_to_dbt(&key, checksum);
   svn_fs_base__trail_debug(trail, "checksum-reps", "del");
-  SVN_ERR(BDB_WRAP(fs, "deleting entry from 'checksum-reps' table",
+  SVN_ERR(BDB_WRAP(fs, N_("deleting entry from 'checksum-reps' table"),
                    bfd->checksum_reps->del(bfd->checksum_reps,
                                            trail->db_txn, &key, 0)));
   return SVN_NO_ERROR;
@@ -183,7 +183,7 @@ svn_error_t *svn_fs_bdb__reserve_rep_reu
   /* Get the current value associated with the `next-key' key in the
      `checksum-reps' table.  */
   svn_fs_base__trail_debug(trail, "checksum-reps", "get");
-  SVN_ERR(BDB_WRAP(fs, _("allocating new representation reuse ID "
+  SVN_ERR(BDB_WRAP(fs, N_("allocating new representation reuse ID "
                          "(getting 'next-key')"),
                    bfd->checksum_reps->get(bfd->checksum_reps, trail->db_txn,
                                            &query,
@@ -204,5 +204,5 @@ svn_error_t *svn_fs_bdb__reserve_rep_reu
                                    svn_fs_base__str_to_dbt(&result, next_key),
                                    0);
 
-  return BDB_WRAP(fs, _("bumping next representation reuse ID"), db_err);
+  return BDB_WRAP(fs, N_("bumping next representation reuse ID"), db_err);
 }

Modified: subversion/branches/ev2-export/subversion/libsvn_fs_base/bdb/copies-table.c
URL: http://svn.apache.org/viewvc/subversion/branches/ev2-export/subversion/libsvn_fs_base/bdb/copies-table.c?rev=1400556&r1=1400555&r2=1400556&view=diff
==============================================================================
--- subversion/branches/ev2-export/subversion/libsvn_fs_base/bdb/copies-table.c (original)
+++ subversion/branches/ev2-export/subversion/libsvn_fs_base/bdb/copies-table.c Sun Oct 21 02:00:31 2012
@@ -89,7 +89,7 @@ put_copy(svn_fs_t *fs,
   svn_fs_base__str_to_dbt(&key, copy_id);
   svn_fs_base__skel_to_dbt(&value, copy_skel, pool);
   svn_fs_base__trail_debug(trail, "copies", "put");
-  return BDB_WRAP(fs, _("storing copy record"),
+  return BDB_WRAP(fs, N_("storing copy record"),
                   bfd->copies->put(bfd->copies, trail->db_txn,
                                    &key, &value, 0));
 }
@@ -112,7 +112,7 @@ svn_fs_bdb__reserve_copy_id(const char *
   /* Get the current value associated with the `next-key' key in the
      copies table.  */
   svn_fs_base__trail_debug(trail, "copies", "get");
-  SVN_ERR(BDB_WRAP(fs, _("allocating new copy ID (getting 'next-key')"),
+  SVN_ERR(BDB_WRAP(fs, N_("allocating new copy ID (getting 'next-key')"),
                    bfd->copies->get(bfd->copies, trail->db_txn, &query,
                                     svn_fs_base__result_dbt(&result),
                                     0)));
@@ -130,7 +130,7 @@ svn_fs_bdb__reserve_copy_id(const char *
                             svn_fs_base__str_to_dbt(&result, next_key),
                             0);
 
-  return BDB_WRAP(fs, _("bumping next copy key"), db_err);
+  return BDB_WRAP(fs, N_("bumping next copy key"), db_err);
 }
 
 
@@ -168,7 +168,7 @@ svn_fs_bdb__delete_copy(svn_fs_t *fs,
   db_err = bfd->copies->del(bfd->copies, trail->db_txn, &key, 0);
   if (db_err == DB_NOTFOUND)
     return svn_fs_base__err_no_such_copy(fs, copy_id);
-  return BDB_WRAP(fs, _("deleting entry from 'copies' table"), db_err);
+  return BDB_WRAP(fs, N_("deleting entry from 'copies' table"), db_err);
 }
 
 
@@ -196,7 +196,7 @@ svn_fs_bdb__get_copy(copy_t **copy_p,
 
   if (db_err == DB_NOTFOUND)
     return svn_fs_base__err_no_such_copy(fs, copy_id);
-  SVN_ERR(BDB_WRAP(fs, _("reading copy"), db_err));
+  SVN_ERR(BDB_WRAP(fs, N_("reading copy"), db_err));
 
   /* Unparse COPY skel */
   skel = svn_skel__parse(value.data, value.size, pool);

Modified: subversion/branches/ev2-export/subversion/libsvn_fs_base/bdb/lock-tokens-table.c
URL: http://svn.apache.org/viewvc/subversion/branches/ev2-export/subversion/libsvn_fs_base/bdb/lock-tokens-table.c?rev=1400556&r1=1400555&r2=1400556&view=diff
==============================================================================
--- subversion/branches/ev2-export/subversion/libsvn_fs_base/bdb/lock-tokens-table.c (original)
+++ subversion/branches/ev2-export/subversion/libsvn_fs_base/bdb/lock-tokens-table.c Sun Oct 21 02:00:31 2012
@@ -84,7 +84,7 @@ svn_fs_bdb__lock_token_add(svn_fs_t *fs,
   svn_fs_base__str_to_dbt(&key, path);
   svn_fs_base__str_to_dbt(&value, lock_token);
   svn_fs_base__trail_debug(trail, "lock-tokens", "add");
-  return BDB_WRAP(fs, "storing lock token record",
+  return BDB_WRAP(fs, N_("storing lock token record"),
                   bfd->lock_tokens->put(bfd->lock_tokens, trail->db_txn,
                                         &key, &value, 0));
 }
@@ -105,7 +105,7 @@ svn_fs_bdb__lock_token_delete(svn_fs_t *
   db_err = bfd->lock_tokens->del(bfd->lock_tokens, trail->db_txn, &key, 0);
   if (db_err == DB_NOTFOUND)
     return SVN_FS__ERR_NO_SUCH_LOCK(fs, path);
-  return BDB_WRAP(fs, "deleting entry from 'lock-tokens' table", db_err);
+  return BDB_WRAP(fs, N_("deleting entry from 'lock-tokens' table"), db_err);
 }
 
 
@@ -132,7 +132,7 @@ svn_fs_bdb__lock_token_get(const char **
 
   if (db_err == DB_NOTFOUND)
     return SVN_FS__ERR_NO_SUCH_LOCK(fs, path);
-  SVN_ERR(BDB_WRAP(fs, "reading lock token", db_err));
+  SVN_ERR(BDB_WRAP(fs, N_("reading lock token"), db_err));
 
   lock_token = apr_pstrmemdup(pool, value.data, value.size);
 

Modified: subversion/branches/ev2-export/subversion/libsvn_fs_base/bdb/locks-table.c
URL: http://svn.apache.org/viewvc/subversion/branches/ev2-export/subversion/libsvn_fs_base/bdb/locks-table.c?rev=1400556&r1=1400555&r2=1400556&view=diff
==============================================================================
--- subversion/branches/ev2-export/subversion/libsvn_fs_base/bdb/locks-table.c (original)
+++ subversion/branches/ev2-export/subversion/libsvn_fs_base/bdb/locks-table.c Sun Oct 21 02:00:31 2012
@@ -89,7 +89,7 @@ svn_fs_bdb__lock_add(svn_fs_t *fs,
   svn_fs_base__str_to_dbt(&key, lock_token);
   svn_fs_base__skel_to_dbt(&value, lock_skel, pool);
   svn_fs_base__trail_debug(trail, "lock", "add");
-  return BDB_WRAP(fs, "storing lock record",
+  return BDB_WRAP(fs, N_("storing lock record"),
                   bfd->locks->put(bfd->locks, trail->db_txn,
                                   &key, &value, 0));
 }
@@ -112,7 +112,7 @@ svn_fs_bdb__lock_delete(svn_fs_t *fs,
 
   if (db_err == DB_NOTFOUND)
     return svn_fs_base__err_bad_lock_token(fs, lock_token);
-  return BDB_WRAP(fs, "deleting lock from 'locks' table", db_err);
+  return BDB_WRAP(fs, N_("deleting lock from 'locks' table"), db_err);
 }
 
 
@@ -139,7 +139,7 @@ svn_fs_bdb__lock_get(svn_lock_t **lock_p
 
   if (db_err == DB_NOTFOUND)
     return svn_fs_base__err_bad_lock_token(fs, lock_token);
-  SVN_ERR(BDB_WRAP(fs, "reading lock", db_err));
+  SVN_ERR(BDB_WRAP(fs, N_("reading lock"), db_err));
 
   /* Parse TRANSACTION skel */
   skel = svn_skel__parse(value.data, value.size, pool);
@@ -242,7 +242,8 @@ svn_fs_bdb__locks_get(svn_fs_t *fs,
   svn_fs_base__trail_debug(trail, "lock-tokens", "cursor");
   db_err = bfd->lock_tokens->cursor(bfd->lock_tokens, trail->db_txn,
                                     &cursor, 0);
-  SVN_ERR(BDB_WRAP(fs, "creating cursor for reading lock tokens", db_err));
+  SVN_ERR(BDB_WRAP(fs, N_("creating cursor for reading lock tokens"),
+                   db_err));
 
   /* Since the key is going to be returned as well as the value make
      sure BDB malloc's the returned key.  */
@@ -316,9 +317,10 @@ svn_fs_bdb__locks_get(svn_fs_t *fs,
   db_c_err = svn_bdb_dbc_close(cursor);
 
   if (db_err && (db_err != DB_NOTFOUND))
-    SVN_ERR(BDB_WRAP(fs, "fetching lock tokens", db_err));
+    SVN_ERR(BDB_WRAP(fs, N_("fetching lock tokens"), db_err));
   if (db_c_err)
-    SVN_ERR(BDB_WRAP(fs, "fetching lock tokens (closing cursor)", db_c_err));
+    SVN_ERR(BDB_WRAP(fs, N_("fetching lock tokens (closing cursor)"),
+                     db_c_err));
 
   return SVN_NO_ERROR;
 }

Modified: subversion/branches/ev2-export/subversion/libsvn_fs_base/bdb/miscellaneous-table.c
URL: http://svn.apache.org/viewvc/subversion/branches/ev2-export/subversion/libsvn_fs_base/bdb/miscellaneous-table.c?rev=1400556&r1=1400555&r2=1400556&view=diff
==============================================================================
--- subversion/branches/ev2-export/subversion/libsvn_fs_base/bdb/miscellaneous-table.c (original)
+++ subversion/branches/ev2-export/subversion/libsvn_fs_base/bdb/miscellaneous-table.c Sun Oct 21 02:00:31 2012
@@ -92,7 +92,7 @@ svn_fs_bdb__miscellaneous_set(svn_fs_t *
   if (val == NULL)
     {
       svn_fs_base__trail_debug(trail, "miscellaneous", "del");
-      return BDB_WRAP(fs, "deleting record from 'miscellaneous' table",
+      return BDB_WRAP(fs, N_("deleting record from 'miscellaneous' table"),
                       bfd->miscellaneous->del(bfd->miscellaneous,
                                               trail->db_txn, &key, 0));
     }
@@ -100,7 +100,7 @@ svn_fs_bdb__miscellaneous_set(svn_fs_t *
     {
       svn_fs_base__str_to_dbt(&value, val);
       svn_fs_base__trail_debug(trail, "miscellaneous", "add");
-      return BDB_WRAP(fs, "storing miscellaneous record",
+      return BDB_WRAP(fs, N_("storing miscellaneous record"),
                       bfd->miscellaneous->put(bfd->miscellaneous,
                                               trail->db_txn,
                                               &key, &value, 0));
@@ -128,7 +128,7 @@ svn_fs_bdb__miscellaneous_get(const char
 
   if (db_err != DB_NOTFOUND)
     {
-      SVN_ERR(BDB_WRAP(fs, "fetching miscellaneous record", db_err));
+      SVN_ERR(BDB_WRAP(fs, N_("fetching miscellaneous record"), db_err));
       *val = apr_pstrmemdup(pool, value.data, value.size);
     }
   return SVN_NO_ERROR;

Modified: subversion/branches/ev2-export/subversion/libsvn_fs_base/bdb/node-origins-table.c
URL: http://svn.apache.org/viewvc/subversion/branches/ev2-export/subversion/libsvn_fs_base/bdb/node-origins-table.c?rev=1400556&r1=1400555&r2=1400556&view=diff
==============================================================================
--- subversion/branches/ev2-export/subversion/libsvn_fs_base/bdb/node-origins-table.c (original)
+++ subversion/branches/ev2-export/subversion/libsvn_fs_base/bdb/node-origins-table.c Sun Oct 21 02:00:31 2012
@@ -124,7 +124,7 @@ svn_error_t *svn_fs_bdb__set_node_origin
   /* Create a value from our ORIGIN_ID, and add this record to the table. */
   svn_fs_base__id_to_dbt(&value, origin_id, pool);
   svn_fs_base__trail_debug(trail, "node-origins", "put");
-  return BDB_WRAP(fs, _("storing node-origins record"),
+  return BDB_WRAP(fs, N_("storing node-origins record"),
                   bfd->node_origins->put(bfd->node_origins, trail->db_txn,
                                          &key, &value, 0));
 }
@@ -139,7 +139,7 @@ svn_error_t *svn_fs_bdb__delete_node_ori
 
   svn_fs_base__str_to_dbt(&key, node_id);
   svn_fs_base__trail_debug(trail, "node-origins", "del");
-  return BDB_WRAP(fs, "deleting entry from 'node-origins' table",
+  return BDB_WRAP(fs, N_("deleting entry from 'node-origins' table"),
                   bfd->node_origins->del(bfd->node_origins,
                                          trail->db_txn, &key, 0));
 }

Modified: subversion/branches/ev2-export/subversion/libsvn_fs_base/bdb/nodes-table.c
URL: http://svn.apache.org/viewvc/subversion/branches/ev2-export/subversion/libsvn_fs_base/bdb/nodes-table.c?rev=1400556&r1=1400555&r2=1400556&view=diff
==============================================================================
--- subversion/branches/ev2-export/subversion/libsvn_fs_base/bdb/nodes-table.c (original)
+++ subversion/branches/ev2-export/subversion/libsvn_fs_base/bdb/nodes-table.c Sun Oct 21 02:00:31 2012
@@ -99,7 +99,7 @@ svn_fs_bdb__new_node_id(svn_fs_id_t **id
   /* Get the current value associated with the `next-key' key in the table.  */
   svn_fs_base__str_to_dbt(&query, NEXT_KEY_KEY);
   svn_fs_base__trail_debug(trail, "nodes", "get");
-  SVN_ERR(BDB_WRAP(fs, _("allocating new node ID (getting 'next-key')"),
+  SVN_ERR(BDB_WRAP(fs, N_("allocating new node ID (getting 'next-key')"),
                    bfd->nodes->get(bfd->nodes, trail->db_txn,
                                    &query,
                                    svn_fs_base__result_dbt(&result),
@@ -117,7 +117,7 @@ svn_fs_bdb__new_node_id(svn_fs_id_t **id
                            svn_fs_base__str_to_dbt(&query, NEXT_KEY_KEY),
                            svn_fs_base__str_to_dbt(&result, next_key),
                            0);
-  SVN_ERR(BDB_WRAP(fs, _("bumping next node ID key"), db_err));
+  SVN_ERR(BDB_WRAP(fs, N_("bumping next node ID key"), db_err));
 
   /* Create and return the new node id. */
   *id_p = svn_fs_base__id_create(next_node_id, copy_id, txn_id, pool);
@@ -179,7 +179,7 @@ svn_fs_bdb__delete_nodes_entry(svn_fs_t 
   DBT key;
 
   svn_fs_base__trail_debug(trail, "nodes", "del");
-  return BDB_WRAP(fs, _("deleting entry from 'nodes' table"),
+  return BDB_WRAP(fs, N_("deleting entry from 'nodes' table"),
                   bfd->nodes->del(bfd->nodes,
                                   trail->db_txn,
                                   svn_fs_base__id_to_dbt(&key, id, pool),
@@ -217,7 +217,7 @@ svn_fs_bdb__get_node_revision(node_revis
     return svn_fs_base__err_dangling_id(fs, id);
 
   /* Handle any other error conditions.  */
-  SVN_ERR(BDB_WRAP(fs, _("reading node revision"), db_err));
+  SVN_ERR(BDB_WRAP(fs, N_("reading node revision"), db_err));
 
   /* If our caller doesn't really care about the return value here,
      just return successfully. */
@@ -250,7 +250,7 @@ svn_fs_bdb__put_node_revision(svn_fs_t *
   SVN_ERR(svn_fs_base__unparse_node_revision_skel(&skel, noderev,
                                                   bfd->format, pool));
   svn_fs_base__trail_debug(trail, "nodes", "put");
-  return BDB_WRAP(fs, _("storing node revision"),
+  return BDB_WRAP(fs, N_("storing node revision"),
                   bfd->nodes->put(bfd->nodes, db_txn,
                                   svn_fs_base__id_to_dbt(&key, id, pool),
                                   svn_fs_base__skel_to_dbt(&value, skel,

Modified: subversion/branches/ev2-export/subversion/libsvn_fs_base/bdb/reps-table.c
URL: http://svn.apache.org/viewvc/subversion/branches/ev2-export/subversion/libsvn_fs_base/bdb/reps-table.c?rev=1400556&r1=1400555&r2=1400556&view=diff
==============================================================================
--- subversion/branches/ev2-export/subversion/libsvn_fs_base/bdb/reps-table.c (original)
+++ subversion/branches/ev2-export/subversion/libsvn_fs_base/bdb/reps-table.c Sun Oct 21 02:00:31 2012
@@ -98,7 +98,7 @@ svn_fs_bdb__read_rep(representation_t **
        _("No such representation '%s'"), key);
 
   /* Handle any other error conditions.  */
-  SVN_ERR(BDB_WRAP(fs, _("reading representation"), db_err));
+  SVN_ERR(BDB_WRAP(fs, N_("reading representation"), db_err));
 
   /* Parse the REPRESENTATION skel.  */
   skel = svn_skel__parse(result.data, result.size, pool);
@@ -125,7 +125,7 @@ svn_fs_bdb__write_rep(svn_fs_t *fs,
 
   /* Now write the record. */
   svn_fs_base__trail_debug(trail, "representations", "put");
-  return BDB_WRAP(fs, _("storing representation"),
+  return BDB_WRAP(fs, N_("storing representation"),
                   bfd->representations->put
                   (bfd->representations, trail->db_txn,
                    svn_fs_base__str_to_dbt(&query, key),
@@ -153,7 +153,7 @@ svn_fs_bdb__write_new_rep(const char **k
   /* Get the current value associated with `next-key'.  */
   svn_fs_base__str_to_dbt(&query, NEXT_KEY_KEY);
   svn_fs_base__trail_debug(trail, "representations", "get");
-  SVN_ERR(BDB_WRAP(fs, _("allocating new representation (getting next-key)"),
+  SVN_ERR(BDB_WRAP(fs, N_("allocating new representation (getting next-key)"),
                    bfd->representations->get
                    (bfd->representations, trail->db_txn, &query,
                     svn_fs_base__result_dbt(&result), 0)));
@@ -174,7 +174,7 @@ svn_fs_bdb__write_new_rep(const char **k
      svn_fs_base__str_to_dbt(&result, next_key),
      0);
 
-  return BDB_WRAP(fs, _("bumping next representation key"), db_err);
+  return BDB_WRAP(fs, N_("bumping next representation key"), db_err);
 }
 
 
@@ -200,5 +200,5 @@ svn_fs_bdb__delete_rep(svn_fs_t *fs,
        _("No such representation '%s'"), key);
 
   /* Handle any other error conditions.  */
-  return BDB_WRAP(fs, _("deleting representation"), db_err);
+  return BDB_WRAP(fs, N_("deleting representation"), db_err);
 }

Modified: subversion/branches/ev2-export/subversion/libsvn_fs_base/bdb/rev-table.c
URL: http://svn.apache.org/viewvc/subversion/branches/ev2-export/subversion/libsvn_fs_base/bdb/rev-table.c?rev=1400556&r1=1400555&r2=1400556&view=diff
==============================================================================
--- subversion/branches/ev2-export/subversion/libsvn_fs_base/bdb/rev-table.c (original)
+++ subversion/branches/ev2-export/subversion/libsvn_fs_base/bdb/rev-table.c Sun Oct 21 02:00:31 2012
@@ -92,7 +92,7 @@ svn_fs_bdb__get_rev(revision_t **revisio
     return svn_fs_base__err_dangling_rev(fs, rev);
 
   /* Handle any other error conditions.  */
-  SVN_ERR(BDB_WRAP(fs, _("reading filesystem revision"), db_err));
+  SVN_ERR(BDB_WRAP(fs, N_("reading filesystem revision"), db_err));
 
   /* Parse REVISION skel.  */
   skel = svn_skel__parse(value.data, value.size, pool);
@@ -138,7 +138,7 @@ svn_fs_bdb__put_rev(svn_revnum_t *rev,
         (bfd->revisions, trail->db_txn,
          svn_fs_base__set_dbt(&query, &recno, sizeof(recno)),
          svn_fs_base__skel_to_dbt(&result, skel, pool), 0);
-      return BDB_WRAP(fs, "updating filesystem revision", db_err);
+      return BDB_WRAP(fs, N_("updating filesystem revision"), db_err);
     }
 
   svn_fs_base__trail_debug(trail, "revisions", "put");
@@ -146,7 +146,7 @@ svn_fs_bdb__put_rev(svn_revnum_t *rev,
                                svn_fs_base__recno_dbt(&key, &recno),
                                svn_fs_base__skel_to_dbt(&value, skel, pool),
                                DB_APPEND);
-  SVN_ERR(BDB_WRAP(fs, "storing filesystem revision", db_err));
+  SVN_ERR(BDB_WRAP(fs, N_("storing filesystem revision"), db_err));
 
   /* Turn the record number into a Subversion revision number.
      Revisions are numbered starting with zero; Berkeley DB record
@@ -176,7 +176,7 @@ svn_fs_bdb__youngest_rev(svn_revnum_t *y
 
   /* Create a database cursor.  */
   svn_fs_base__trail_debug(trail, "revisions", "cursor");
-  SVN_ERR(BDB_WRAP(fs, "getting youngest revision (creating cursor)",
+  SVN_ERR(BDB_WRAP(fs, N_("getting youngest revision (creating cursor)"),
                    bfd->revisions->cursor(bfd->revisions, trail->db_txn,
                                           &cursor, 0)));
 
@@ -200,7 +200,7 @@ svn_fs_bdb__youngest_rev(svn_revnum_t *y
            "Corrupt DB: revision 0 missing from 'revisions' table, in "
            "filesystem '%s'", fs->path);
 
-      SVN_ERR(BDB_WRAP(fs, "getting youngest revision (finding last entry)",
+      SVN_ERR(BDB_WRAP(fs, N_("getting youngest revision (finding last entry)"),
                        db_err));
     }
 
@@ -210,7 +210,7 @@ svn_fs_bdb__youngest_rev(svn_revnum_t *y
      reasons, and txn_commit shouldn't fail that way, and
      2) using a cursor after committing its transaction can cause
      undetectable database corruption.  */
-  SVN_ERR(BDB_WRAP(fs, "getting youngest revision (closing cursor)",
+  SVN_ERR(BDB_WRAP(fs, N_("getting youngest revision (closing cursor)"),
                    svn_bdb_dbc_close(cursor)));
 
   /* Turn the record number into a Subversion revision number.

Modified: subversion/branches/ev2-export/subversion/libsvn_fs_base/bdb/strings-table.c
URL: http://svn.apache.org/viewvc/subversion/branches/ev2-export/subversion/libsvn_fs_base/bdb/strings-table.c?rev=1400556&r1=1400555&r2=1400556&view=diff
==============================================================================
--- subversion/branches/ev2-export/subversion/libsvn_fs_base/bdb/strings-table.c (original)
+++ subversion/branches/ev2-export/subversion/libsvn_fs_base/bdb/strings-table.c Sun Oct 21 02:00:31 2012
@@ -91,7 +91,7 @@ locate_key(apr_size_t *length,
   DBT result;
 
   svn_fs_base__trail_debug(trail, "strings", "cursor");
-  SVN_ERR(BDB_WRAP(fs, _("creating cursor for reading a string"),
+  SVN_ERR(BDB_WRAP(fs, N_("creating cursor for reading a string"),
                    bfd->strings->cursor(bfd->strings, trail->db_txn,
                                         cursor, 0)));
 
@@ -121,7 +121,7 @@ locate_key(apr_size_t *length,
       if (db_err != SVN_BDB_DB_BUFFER_SMALL)
         {
           svn_bdb_dbc_close(*cursor);
-          return BDB_WRAP(fs, "moving cursor", db_err);
+          return BDB_WRAP(fs, N_("moving cursor"), db_err);
         }
 
       /* We got an SVN_BDB_DB_BUFFER_SMALL (typical since we have a
@@ -133,7 +133,7 @@ locate_key(apr_size_t *length,
       if (db_err)
         {
           svn_bdb_dbc_close(*cursor);
-          return BDB_WRAP(fs, "rerunning cursor move", db_err);
+          return BDB_WRAP(fs, N_("rerunning cursor move"), db_err);
         }
     }
 
@@ -225,7 +225,7 @@ svn_fs_bdb__string_read(svn_fs_t *fs,
           return SVN_NO_ERROR;
         }
       if (db_err)
-        return BDB_WRAP(fs, "reading string", db_err);
+        return BDB_WRAP(fs, N_("reading string"), db_err);
     }
 
   /* The current record contains OFFSET. Fetch the contents now. Note that
@@ -244,14 +244,14 @@ svn_fs_bdb__string_read(svn_fs_t *fs,
       if (db_err)
         {
           svn_bdb_dbc_close(cursor);
-          return BDB_WRAP(fs, "reading string", db_err);
+          return BDB_WRAP(fs, N_("reading string"), db_err);
         }
 
       bytes_read += result.size;
       if (bytes_read == *len)
         {
           /* Done with the cursor. */
-          SVN_ERR(BDB_WRAP(fs, "closing string-reading cursor",
+          SVN_ERR(BDB_WRAP(fs, N_("closing string-reading cursor"),
                            svn_bdb_dbc_close(cursor)));
           break;
         }
@@ -262,7 +262,7 @@ svn_fs_bdb__string_read(svn_fs_t *fs,
       if (db_err == DB_NOTFOUND)
         break;
       if (db_err)
-        return BDB_WRAP(fs, "reading string", db_err);
+        return BDB_WRAP(fs, N_("reading string"), db_err);
 
       /* We'll be reading from the beginning of the next record */
       offset = 0;
@@ -297,7 +297,7 @@ get_key_and_bump(svn_fs_t *fs,
      write the new value -- that would append, not overwrite.  */
 
   svn_fs_base__trail_debug(trail, "strings", "cursor");
-  SVN_ERR(BDB_WRAP(fs, "creating cursor for reading a string",
+  SVN_ERR(BDB_WRAP(fs, N_("creating cursor for reading a string"),
                    bfd->strings->cursor(bfd->strings, trail->db_txn,
                                         &cursor, 0)));
 
@@ -310,7 +310,7 @@ get_key_and_bump(svn_fs_t *fs,
   if (db_err)
     {
       svn_bdb_dbc_close(cursor);
-      return BDB_WRAP(fs, "getting next-key value", db_err);
+      return BDB_WRAP(fs, N_("getting next-key value"), db_err);
     }
 
   svn_fs_base__track_dbt(&result, pool);
@@ -328,10 +328,10 @@ get_key_and_bump(svn_fs_t *fs,
     {
       svn_bdb_dbc_close(cursor); /* ignore the error, the original is
                                     more important. */
-      return BDB_WRAP(fs, "bumping next string key", db_err);
+      return BDB_WRAP(fs, N_("bumping next string key"), db_err);
     }
 
-  return BDB_WRAP(fs, "closing string-reading cursor",
+  return BDB_WRAP(fs, N_("closing string-reading cursor"),
                   svn_bdb_dbc_close(cursor));
 }
 
@@ -355,7 +355,7 @@ svn_fs_bdb__string_append(svn_fs_t *fs,
 
   /* Store a new record into the database. */
   svn_fs_base__trail_debug(trail, "strings", "put");
-  return BDB_WRAP(fs, "appending string",
+  return BDB_WRAP(fs, N_("appending string"),
                   bfd->strings->put
                   (bfd->strings, trail->db_txn,
                    svn_fs_base__str_to_dbt(&query, *key),
@@ -387,7 +387,7 @@ svn_fs_bdb__string_clear(svn_fs_t *fs,
        "No such string '%s'", key);
 
   /* Handle any other error conditions.  */
-  SVN_ERR(BDB_WRAP(fs, "clearing string", db_err));
+  SVN_ERR(BDB_WRAP(fs, N_("clearing string"), db_err));
 
   /* Shove empty data back in for this key. */
   svn_fs_base__clear_dbt(&result);
@@ -396,7 +396,7 @@ svn_fs_bdb__string_clear(svn_fs_t *fs,
   result.flags |= DB_DBT_USERMEM;
 
   svn_fs_base__trail_debug(trail, "strings", "put");
-  return BDB_WRAP(fs, "storing empty contents",
+  return BDB_WRAP(fs, N_("storing empty contents"),
                   bfd->strings->put(bfd->strings, trail->db_txn,
                                     &query, &result, 0));
 }
@@ -433,7 +433,7 @@ svn_fs_bdb__string_size(svn_filesize_t *
           return SVN_NO_ERROR;
         }
       if (db_err)
-        return BDB_WRAP(fs, "fetching string length", db_err);
+        return BDB_WRAP(fs, N_("fetching string length"), db_err);
 
       total += length;
     }
@@ -463,7 +463,7 @@ svn_fs_bdb__string_delete(svn_fs_t *fs,
        "No such string '%s'", key);
 
   /* Handle any other error conditions.  */
-  return BDB_WRAP(fs, "deleting string", db_err);
+  return BDB_WRAP(fs, N_("deleting string"), db_err);
 }
 
 
@@ -488,7 +488,7 @@ svn_fs_bdb__string_copy(svn_fs_t *fs,
   SVN_ERR(get_key_and_bump(fs, new_key, trail, pool));
 
   svn_fs_base__trail_debug(trail, "strings", "cursor");
-  SVN_ERR(BDB_WRAP(fs, "creating cursor for reading a string",
+  SVN_ERR(BDB_WRAP(fs, N_("creating cursor for reading a string"),
                    bfd->strings->cursor(bfd->strings, trail->db_txn,
                                         &cursor, 0)));
 
@@ -502,7 +502,7 @@ svn_fs_bdb__string_copy(svn_fs_t *fs,
   if (db_err)
     {
       svn_bdb_dbc_close(cursor);
-      return BDB_WRAP(fs, "getting next-key value", db_err);
+      return BDB_WRAP(fs, N_("getting next-key value"), db_err);
     }
 
   while (1)
@@ -521,7 +521,7 @@ svn_fs_bdb__string_copy(svn_fs_t *fs,
       if (db_err)
         {
           svn_bdb_dbc_close(cursor);
-          return BDB_WRAP(fs, "writing copied data", db_err);
+          return BDB_WRAP(fs, N_("writing copied data"), db_err);
         }
 
       /* Read the next chunk. Terminate loop if we're done. */
@@ -532,10 +532,10 @@ svn_fs_bdb__string_copy(svn_fs_t *fs,
       if (db_err)
         {
           svn_bdb_dbc_close(cursor);
-          return BDB_WRAP(fs, "fetching string data for a copy", db_err);
+          return BDB_WRAP(fs, N_("fetching string data for a copy"), db_err);
         }
     }
 
-  return BDB_WRAP(fs, "closing string-reading cursor",
+  return BDB_WRAP(fs, N_("closing string-reading cursor"),
                   svn_bdb_dbc_close(cursor));
 }

Modified: subversion/branches/ev2-export/subversion/libsvn_fs_base/bdb/txn-table.c
URL: http://svn.apache.org/viewvc/subversion/branches/ev2-export/subversion/libsvn_fs_base/bdb/txn-table.c?rev=1400556&r1=1400555&r2=1400556&view=diff
==============================================================================
--- subversion/branches/ev2-export/subversion/libsvn_fs_base/bdb/txn-table.c (original)
+++ subversion/branches/ev2-export/subversion/libsvn_fs_base/bdb/txn-table.c Sun Oct 21 02:00:31 2012
@@ -96,7 +96,7 @@ svn_fs_bdb__put_txn(svn_fs_t *fs,
   svn_fs_base__str_to_dbt(&key, txn_name);
   svn_fs_base__skel_to_dbt(&value, txn_skel, pool);
   svn_fs_base__trail_debug(trail, "transactions", "put");
-  return BDB_WRAP(fs, _("storing transaction record"),
+  return BDB_WRAP(fs, N_("storing transaction record"),
                   bfd->transactions->put(bfd->transactions, trail->db_txn,
                                          &key, &value, 0));
 }
@@ -120,7 +120,7 @@ allocate_txn_id(const char **id_p,
 
   /* Get the current value associated with the `next-key' key in the table.  */
   svn_fs_base__trail_debug(trail, "transactions", "get");
-  SVN_ERR(BDB_WRAP(fs, "allocating new transaction ID (getting 'next-key')",
+  SVN_ERR(BDB_WRAP(fs, N_("allocating new transaction ID (getting 'next-key')"),
                    bfd->transactions->get(bfd->transactions, trail->db_txn,
                                           &query,
                                           svn_fs_base__result_dbt(&result),
@@ -139,7 +139,7 @@ allocate_txn_id(const char **id_p,
   db_err = bfd->transactions->put(bfd->transactions, trail->db_txn,
                                   &query, &result, 0);
 
-  return BDB_WRAP(fs, "bumping next transaction key", db_err);
+  return BDB_WRAP(fs, N_("bumping next transaction key"), db_err);
 }
 
 
@@ -185,7 +185,7 @@ svn_fs_bdb__delete_txn(svn_fs_t *fs,
   /* Delete the transaction from the `transactions' table. */
   svn_fs_base__str_to_dbt(&key, txn_name);
   svn_fs_base__trail_debug(trail, "transactions", "del");
-  return BDB_WRAP(fs, "deleting entry from 'transactions' table",
+  return BDB_WRAP(fs, N_("deleting entry from 'transactions' table"),
                   bfd->transactions->del(bfd->transactions,
                                          trail->db_txn, &key, 0));
 }
@@ -215,7 +215,7 @@ svn_fs_bdb__get_txn(transaction_t **txn_
 
   if (db_err == DB_NOTFOUND)
     return svn_fs_base__err_no_such_txn(fs, txn_name);
-  SVN_ERR(BDB_WRAP(fs, "reading transaction", db_err));
+  SVN_ERR(BDB_WRAP(fs, N_("reading transaction"), db_err));
 
   /* Parse TRANSACTION skel */
   skel = svn_skel__parse(value.data, value.size, pool);
@@ -248,7 +248,7 @@ svn_fs_bdb__get_txn_list(apr_array_heade
 
   /* Create a database cursor to list the transaction names. */
   svn_fs_base__trail_debug(trail, "transactions", "cursor");
-  SVN_ERR(BDB_WRAP(fs, "reading transaction list (opening cursor)",
+  SVN_ERR(BDB_WRAP(fs, N_("reading transaction list (opening cursor)"),
                    bfd->transactions->cursor(bfd->transactions,
                                              trail->db_txn, &cursor, 0)));
 
@@ -311,10 +311,10 @@ svn_fs_bdb__get_txn_list(apr_array_heade
   db_c_err = svn_bdb_dbc_close(cursor);
   if (db_err != DB_NOTFOUND)
     {
-      SVN_ERR(BDB_WRAP(fs, "reading transaction list (listing keys)",
+      SVN_ERR(BDB_WRAP(fs, N_("reading transaction list (listing keys)"),
                        db_err));
     }
-  SVN_ERR(BDB_WRAP(fs, "reading transaction list (closing cursor)",
+  SVN_ERR(BDB_WRAP(fs, N_("reading transaction list (closing cursor)"),
                    db_c_err));
 
   /* Destroy the per-iteration subpool */

Modified: subversion/branches/ev2-export/subversion/libsvn_fs_base/bdb/uuids-table.c
URL: http://svn.apache.org/viewvc/subversion/branches/ev2-export/subversion/libsvn_fs_base/bdb/uuids-table.c?rev=1400556&r1=1400555&r2=1400556&view=diff
==============================================================================
--- subversion/branches/ev2-export/subversion/libsvn_fs_base/bdb/uuids-table.c (original)
+++ subversion/branches/ev2-export/subversion/libsvn_fs_base/bdb/uuids-table.c Sun Oct 21 02:00:31 2012
@@ -116,7 +116,7 @@ svn_error_t *svn_fs_bdb__get_uuid(svn_fs
   value.flags |= DB_DBT_USERMEM;
 
   svn_fs_base__trail_debug(trail, "uuids", "get");
-  SVN_ERR(BDB_WRAP(fs, _("get repository uuid"),
+  SVN_ERR(BDB_WRAP(fs, N_("get repository uuid"),
                    uuids->get(uuids, trail->db_txn, &key, &value, 0)));
 
   *uuid = apr_pstrmemdup(pool, value.data, value.size);
@@ -144,6 +144,6 @@ svn_error_t *svn_fs_bdb__set_uuid(svn_fs
   value.data = apr_pstrmemdup(pool, uuid, value.size + 1);
 
   svn_fs_base__trail_debug(trail, "uuids", "put");
-  return BDB_WRAP(fs, _("set repository uuid"),
+  return BDB_WRAP(fs, N_("set repository uuid"),
                   uuids->put(uuids, trail->db_txn, &key, &value, 0));
 }

Modified: subversion/branches/ev2-export/subversion/libsvn_fs_base/dag.c
URL: http://svn.apache.org/viewvc/subversion/branches/ev2-export/subversion/libsvn_fs_base/dag.c?rev=1400556&r1=1400555&r2=1400556&view=diff
==============================================================================
--- subversion/branches/ev2-export/subversion/libsvn_fs_base/dag.c (original)
+++ subversion/branches/ev2-export/subversion/libsvn_fs_base/dag.c Sun Oct 21 02:00:31 2012
@@ -1632,7 +1632,7 @@ svn_fs_base__things_different(svn_boolea
   if (! props_changed && ! contents_changed)
     return SVN_NO_ERROR;
 
-  /* The the node revision skels for these two nodes. */
+  /* The node revision skels for these two nodes. */
   SVN_ERR(svn_fs_bdb__get_node_revision(&noderev1, node1->fs, node1->id,
                                         trail, pool));
   SVN_ERR(svn_fs_bdb__get_node_revision(&noderev2, node2->fs, node2->id,

Modified: subversion/branches/ev2-export/subversion/libsvn_fs_base/fs.c
URL: http://svn.apache.org/viewvc/subversion/branches/ev2-export/subversion/libsvn_fs_base/fs.c?rev=1400556&r1=1400555&r2=1400556&view=diff
==============================================================================
--- subversion/branches/ev2-export/subversion/libsvn_fs_base/fs.c (original)
+++ subversion/branches/ev2-export/subversion/libsvn_fs_base/fs.c Sun Oct 21 02:00:31 2012
@@ -471,6 +471,14 @@ bdb_write_config(svn_fs_t *fs)
   return svn_io_file_close(dbconfig_file, fs->pool);
 }
 
+static svn_error_t *
+base_bdb_freeze(svn_fs_t *fs,
+                svn_error_t *(*freeze_body)(void *, apr_pool_t *),
+                void *baton,
+                apr_pool_t *pool)
+{
+  SVN__NOT_IMPLEMENTED();
+}
 
 
 /* Creating a new filesystem */
@@ -492,6 +500,7 @@ static fs_vtable_t fs_vtable = {
   svn_fs_base__unlock,
   svn_fs_base__get_lock,
   svn_fs_base__get_locks,
+  base_bdb_freeze,
   base_bdb_set_errcall,
 };
 
@@ -552,62 +561,62 @@ open_databases(svn_fs_t *fs,
 
   /* Create the databases in the environment.  */
   SVN_ERR(BDB_WRAP(fs, (create
-                        ? "creating 'nodes' table"
-                        : "opening 'nodes' table"),
+                        ? N_("creating 'nodes' table")
+                        : N_("opening 'nodes' table")),
                    svn_fs_bdb__open_nodes_table(&bfd->nodes,
                                                 bfd->bdb->env,
                                                 create)));
   SVN_ERR(BDB_WRAP(fs, (create
-                        ? "creating 'revisions' table"
-                        : "opening 'revisions' table"),
+                        ? N_("creating 'revisions' table")
+                        : N_("opening 'revisions' table")),
                    svn_fs_bdb__open_revisions_table(&bfd->revisions,
                                                     bfd->bdb->env,
                                                     create)));
   SVN_ERR(BDB_WRAP(fs, (create
-                        ? "creating 'transactions' table"
-                        : "opening 'transactions' table"),
+                        ? N_("creating 'transactions' table")
+                        : N_("opening 'transactions' table")),
                    svn_fs_bdb__open_transactions_table(&bfd->transactions,
                                                        bfd->bdb->env,
                                                        create)));
   SVN_ERR(BDB_WRAP(fs, (create
-                        ? "creating 'copies' table"
-                        : "opening 'copies' table"),
+                        ? N_("creating 'copies' table")
+                        : N_("opening 'copies' table")),
                    svn_fs_bdb__open_copies_table(&bfd->copies,
                                                  bfd->bdb->env,
                                                  create)));
   SVN_ERR(BDB_WRAP(fs, (create
-                        ? "creating 'changes' table"
-                        : "opening 'changes' table"),
+                        ? N_("creating 'changes' table")
+                        : N_("opening 'changes' table")),
                    svn_fs_bdb__open_changes_table(&bfd->changes,
                                                   bfd->bdb->env,
                                                   create)));
   SVN_ERR(BDB_WRAP(fs, (create
-                        ? "creating 'representations' table"
-                        : "opening 'representations' table"),
+                        ? N_("creating 'representations' table")
+                        : N_("opening 'representations' table")),
                    svn_fs_bdb__open_reps_table(&bfd->representations,
                                                bfd->bdb->env,
                                                create)));
   SVN_ERR(BDB_WRAP(fs, (create
-                        ? "creating 'strings' table"
-                        : "opening 'strings' table"),
+                        ? N_("creating 'strings' table")
+                        : N_("opening 'strings' table")),
                    svn_fs_bdb__open_strings_table(&bfd->strings,
                                                   bfd->bdb->env,
                                                   create)));
   SVN_ERR(BDB_WRAP(fs, (create
-                        ? "creating 'uuids' table"
-                        : "opening 'uuids' table"),
+                        ? N_("creating 'uuids' table")
+                        : N_("opening 'uuids' table")),
                    svn_fs_bdb__open_uuids_table(&bfd->uuids,
                                                 bfd->bdb->env,
                                                 create)));
   SVN_ERR(BDB_WRAP(fs, (create
-                        ? "creating 'locks' table"
-                        : "opening 'locks' table"),
+                        ? N_("creating 'locks' table")
+                        : N_("opening 'locks' table")),
                    svn_fs_bdb__open_locks_table(&bfd->locks,
                                                 bfd->bdb->env,
                                                 create)));
   SVN_ERR(BDB_WRAP(fs, (create
-                        ? "creating 'lock-tokens' table"
-                        : "opening 'lock-tokens' table"),
+                        ? N_("creating 'lock-tokens' table")
+                        : N_("opening 'lock-tokens' table")),
                    svn_fs_bdb__open_lock_tokens_table(&bfd->lock_tokens,
                                                       bfd->bdb->env,
                                                       create)));
@@ -615,8 +624,8 @@ open_databases(svn_fs_t *fs,
   if (format >= SVN_FS_BASE__MIN_NODE_ORIGINS_FORMAT)
     {
       SVN_ERR(BDB_WRAP(fs, (create
-                            ? "creating 'node-origins' table"
-                            : "opening 'node-origins' table"),
+                            ? N_("creating 'node-origins' table")
+                            : N_("opening 'node-origins' table")),
                        svn_fs_bdb__open_node_origins_table(&bfd->node_origins,
                                                            bfd->bdb->env,
                                                            create)));
@@ -625,8 +634,8 @@ open_databases(svn_fs_t *fs,
   if (format >= SVN_FS_BASE__MIN_MISCELLANY_FORMAT)
     {
       SVN_ERR(BDB_WRAP(fs, (create
-                            ? "creating 'miscellaneous' table"
-                            : "opening 'miscellaneous' table"),
+                            ? N_("creating 'miscellaneous' table")
+                            : N_("opening 'miscellaneous' table")),
                        svn_fs_bdb__open_miscellaneous_table(&bfd->miscellaneous,
                                                             bfd->bdb->env,
                                                             create)));
@@ -635,8 +644,8 @@ open_databases(svn_fs_t *fs,
   if (format >= SVN_FS_BASE__MIN_REP_SHARING_FORMAT)
     {
       SVN_ERR(BDB_WRAP(fs, (create
-                            ? "creating 'checksum-reps' table"
-                            : "opening 'checksum-reps' table"),
+                            ? N_("creating 'checksum-reps' table")
+                            : N_("opening 'checksum-reps' table")),
                        svn_fs_bdb__open_checksum_reps_table(&bfd->checksum_reps,
                                                             bfd->bdb->env,
                                                             create)));
@@ -911,7 +920,8 @@ base_bdb_pack(svn_fs_t *fs,
               void *notify_baton,
               svn_cancel_func_t cancel,
               void *cancel_baton,
-              apr_pool_t *pool)
+              apr_pool_t *pool,
+              apr_pool_t *common_pool)
 {
   /* Packing is currently a no op for BDB. */
   return SVN_NO_ERROR;

Modified: subversion/branches/ev2-export/subversion/libsvn_fs_base/lock.c
URL: http://svn.apache.org/viewvc/subversion/branches/ev2-export/subversion/libsvn_fs_base/lock.c?rev=1400556&r1=1400555&r2=1400556&view=diff
==============================================================================
--- subversion/branches/ev2-export/subversion/libsvn_fs_base/lock.c (original)
+++ subversion/branches/ev2-export/subversion/libsvn_fs_base/lock.c Sun Oct 21 02:00:31 2012
@@ -36,6 +36,7 @@
 #include "util/fs_skels.h"
 #include "../libsvn_fs/fs-loader.h"
 #include "private/svn_fs_util.h"
+#include "private/svn_subr_private.h"
 
 
 /* Add LOCK and its associated LOCK_TOKEN (associated with PATH) as
@@ -394,9 +395,9 @@ svn_fs_base__get_lock(svn_lock_t **lock,
 }
 
 /* Implements `svn_fs_get_locks_callback_t', spooling lock information
-   to disk as the filesystem provides it.  BATON is an 'apr_file_t *'
-   object pointing to open, writable spool file.  We'll write the
-   spool file with a format like so:
+   to a stream as the filesystem provides it.  BATON is an 'svn_stream_t *'
+   object pointing to the stream.  We'll write the spool stream with a
+   format like so:
 
       SKEL1_LEN "\n" SKEL1 "\n" SKEL2_LEN "\n" SKEL2 "\n" ...
 
@@ -408,18 +409,20 @@ spool_locks_info(void *baton,
                  apr_pool_t *pool)
 {
   svn_skel_t *lock_skel;
-  apr_file_t *spool_file = (apr_file_t *)baton;
+  svn_stream_t *stream = baton;
   const char *skel_len;
   svn_stringbuf_t *skel_buf;
+  apr_size_t len;
 
   SVN_ERR(svn_fs_base__unparse_lock_skel(&lock_skel, lock, pool));
   skel_buf = svn_skel__unparse(lock_skel, pool);
   skel_len = apr_psprintf(pool, "%" APR_SIZE_T_FMT "\n", skel_buf->len);
-  SVN_ERR(svn_io_file_write_full(spool_file, skel_len, strlen(skel_len),
-                                 NULL, pool));
-  SVN_ERR(svn_io_file_write_full(spool_file, skel_buf->data,
-                                 skel_buf->len, NULL, pool));
-  return svn_io_file_write_full(spool_file, "\n", 1, NULL, pool);
+  len = strlen(skel_len);
+  SVN_ERR(svn_stream_write(stream, skel_len, &len));
+  len = skel_buf->len;
+  SVN_ERR(svn_stream_write(stream, skel_buf->data, &len));
+  len = 1;
+  return svn_stream_write(stream, "\n", &len);
 }
 
 
@@ -427,7 +430,7 @@ struct locks_get_args
 {
   const char *path;
   svn_depth_t depth;
-  apr_file_t *spool_file;
+  svn_stream_t *stream;
 };
 
 
@@ -436,7 +439,7 @@ txn_body_get_locks(void *baton, trail_t 
 {
   struct locks_get_args *args = baton;
   return svn_fs_bdb__locks_get(trail->fs, args->path, args->depth,
-                               spool_locks_info, args->spool_file,
+                               spool_locks_info, args->stream,
                                trail, trail->pool);
 }
 
@@ -450,7 +453,6 @@ svn_fs_base__get_locks(svn_fs_t *fs,
                        apr_pool_t *pool)
 {
   struct locks_get_args args;
-  apr_off_t offset = 0;
   svn_stream_t *stream;
   svn_stringbuf_t *buf;
   svn_boolean_t eof;
@@ -460,14 +462,14 @@ svn_fs_base__get_locks(svn_fs_t *fs,
 
   args.path = svn_fs__canonicalize_abspath(path, pool);
   args.depth = depth;
-  SVN_ERR(svn_io_open_uniquely_named(&(args.spool_file), NULL, NULL, NULL,
-                                     NULL, svn_io_file_del_on_close,
-                                     pool, pool));
+  /* Enough for 100+ locks if the comments are small. */
+  args.stream = svn_stream__from_spillbuf(4 * 1024  /* blocksize */,
+                                          64 * 1024 /* maxsize */,
+                                          pool);
   SVN_ERR(svn_fs_base__retry_txn(fs, txn_body_get_locks, &args, FALSE, pool));
 
-  /* Rewind the spool file, then re-read it, calling GET_LOCKS_FUNC(). */
-  SVN_ERR(svn_io_file_seek(args.spool_file, APR_SET, &offset, pool));
-  stream = svn_stream_from_aprfile2(args.spool_file, FALSE, pool);
+  /* Read the stream calling GET_LOCKS_FUNC(). */
+  stream = args.stream;
 
   while (1)
     {

Modified: subversion/branches/ev2-export/subversion/libsvn_fs_base/trail.c
URL: http://svn.apache.org/viewvc/subversion/branches/ev2-export/subversion/libsvn_fs_base/trail.c?rev=1400556&r1=1400555&r2=1400556&view=diff
==============================================================================
--- subversion/branches/ev2-export/subversion/libsvn_fs_base/trail.c (original)
+++ subversion/branches/ev2-export/subversion/libsvn_fs_base/trail.c Sun Oct 21 02:00:31 2012
@@ -96,7 +96,7 @@ begin_trail(trail_t **trail_p,
          a coding problem (and will likely hang the repository anyway). */
       SVN_ERR_ASSERT(! bfd->in_txn_trail);
 
-      SVN_ERR(BDB_WRAP(fs, "beginning Berkeley DB transaction",
+      SVN_ERR(BDB_WRAP(fs, N_("beginning Berkeley DB transaction"),
                        bfd->bdb->env->txn_begin(bfd->bdb->env, 0,
                                                 &trail->db_txn, 0)));
       bfd->in_txn_trail = TRUE;
@@ -131,7 +131,7 @@ abort_trail(trail_t *trail)
          see the returned error than to abort.  An obvious example is
          when DB_TXN->abort() returns DB_RUNRECOVERY. */
       bfd->in_txn_trail = FALSE;
-      SVN_ERR(BDB_WRAP(fs, "aborting Berkeley DB transaction",
+      SVN_ERR(BDB_WRAP(fs, N_("aborting Berkeley DB transaction"),
                        trail->db_txn->abort(trail->db_txn)));
     }
   svn_pool_destroy(trail->pool);
@@ -155,7 +155,7 @@ commit_trail(trail_t *trail)
       /* See comment [**] in abort_trail() above.
          An error during txn commit will abort the transaction anyway. */
       bfd->in_txn_trail = FALSE;
-      SVN_ERR(BDB_WRAP(fs, "committing Berkeley DB transaction",
+      SVN_ERR(BDB_WRAP(fs, N_("committing Berkeley DB transaction"),
                        trail->db_txn->commit(trail->db_txn, 0)));
     }
 

Modified: subversion/branches/ev2-export/subversion/libsvn_fs_base/tree.c
URL: http://svn.apache.org/viewvc/subversion/branches/ev2-export/subversion/libsvn_fs_base/tree.c?rev=1400556&r1=1400555&r2=1400556&view=diff
==============================================================================
--- subversion/branches/ev2-export/subversion/libsvn_fs_base/tree.c (original)
+++ subversion/branches/ev2-export/subversion/libsvn_fs_base/tree.c Sun Oct 21 02:00:31 2012
@@ -3676,7 +3676,7 @@ window_consumer(svn_txdelta_window_t *wi
       SVN_ERR(svn_stream_write(tb->target_stream,
                                tb->target_string->data,
                                &len));
-      svn_stringbuf_set(tb->target_string, "");
+      svn_stringbuf_setempty(tb->target_string);
     }
 
   /* Is the window NULL?  If so, we're done. */
@@ -5387,6 +5387,7 @@ static root_vtable_t root_vtable = {
   base_file_length,
   base_file_checksum,
   base_file_contents,
+  NULL,
   base_make_file,
   base_apply_textdelta,
   base_apply_text,

Modified: subversion/branches/ev2-export/subversion/libsvn_fs_base/uuid.h
URL: http://svn.apache.org/viewvc/subversion/branches/ev2-export/subversion/libsvn_fs_base/uuid.h?rev=1400556&r1=1400555&r2=1400556&view=diff
==============================================================================
--- subversion/branches/ev2-export/subversion/libsvn_fs_base/uuid.h (original)
+++ subversion/branches/ev2-export/subversion/libsvn_fs_base/uuid.h Sun Oct 21 02:00:31 2012
@@ -29,7 +29,7 @@ extern "C" {
 
 
 
-/* Set FS->UUID to the the value read from the database, allocated
+/* Set FS->UUID to the value read from the database, allocated
    in FS->POOL.  Use SCRATCH_POOL for temporary allocations. */
 svn_error_t *svn_fs_base__populate_uuid(svn_fs_t *fs,
                                         apr_pool_t *scratch_pool);

Modified: subversion/branches/ev2-export/subversion/libsvn_fs_fs/caching.c
URL: http://svn.apache.org/viewvc/subversion/branches/ev2-export/subversion/libsvn_fs_fs/caching.c?rev=1400556&r1=1400555&r2=1400556&view=diff
==============================================================================
--- subversion/branches/ev2-export/subversion/libsvn_fs_fs/caching.c (original)
+++ subversion/branches/ev2-export/subversion/libsvn_fs_fs/caching.c Sun Oct 21 02:00:31 2012
@@ -24,6 +24,7 @@
 #include "fs_fs.h"
 #include "id.h"
 #include "dag.h"
+#include "tree.h"
 #include "temp_serializer.h"
 #include "../libsvn_fs/fs-loader.h"
 
@@ -32,6 +33,8 @@
 
 #include "svn_private_config.h"
 #include "svn_hash.h"
+#include "svn_pools.h"
+
 #include "private/svn_debug.h"
 #include "private/svn_subr_private.h"
 
@@ -92,18 +95,34 @@ read_config(svn_memcache_t **memcache_p,
 }
 
 
-/* Implements svn_cache__error_handler_t */
+/* Implements svn_cache__error_handler_t
+ * This variant clears the error after logging it.
+ */
 static svn_error_t *
-warn_on_cache_errors(svn_error_t *err,
-                     void *baton,
-                     apr_pool_t *pool)
+warn_and_continue_on_cache_errors(svn_error_t *err,
+                                  void *baton,
+                                  apr_pool_t *pool)
 {
   svn_fs_t *fs = baton;
   (fs->warning)(fs->warning_baton, err);
   svn_error_clear(err);
+
   return SVN_NO_ERROR;
 }
 
+/* Implements svn_cache__error_handler_t
+ * This variant logs the error and passes it on to the callers.
+ */
+static svn_error_t *
+warn_and_fail_on_cache_errors(svn_error_t *err,
+                              void *baton,
+                              apr_pool_t *pool)
+{
+  svn_fs_t *fs = baton;
+  (fs->warning)(fs->warning_baton, err);
+  return err;
+}
+
 #ifdef SVN_DEBUG_CACHE_DUMP_STATS
 /* Baton to be used for the dump_cache_statistics() pool cleanup function, */
 struct dump_cache_baton_t
@@ -162,13 +181,12 @@ dump_cache_statistics(void *baton_void)
  * not transaction-specific CACHE object in FS, if CACHE is not NULL.
  *
  * All these svn_cache__t instances shall be handled uniformly. Unless
- * NO_HANDLER is true, register an error handler that reports errors
- * as warnings for the given CACHE.
+ * ERROR_HANDLER is NULL, register it for the given CACHE in FS.
  */
 static svn_error_t *
 init_callbacks(svn_cache__t *cache,
                svn_fs_t *fs,
-               svn_boolean_t no_handler,
+               svn_cache__error_handler_t error_handler,
                apr_pool_t *pool)
 {
   if (cache != NULL)
@@ -190,9 +208,9 @@ init_callbacks(svn_cache__t *cache,
                                 apr_pool_cleanup_null);
 #endif
 
-      if (! no_handler)
+      if (error_handler)
         SVN_ERR(svn_cache__set_error_handler(cache,
-                                             warn_on_cache_errors,
+                                             error_handler,
                                              fs,
                                              pool));
 
@@ -207,6 +225,9 @@ init_callbacks(svn_cache__t *cache,
  * MEMBUFFER are NULL and pages is non-zero.  Sets *CACHE_P to NULL
  * otherwise.
  *
+ * Unless NO_HANDLER is true, register an error handler that reports errors
+ * as warnings to the FS warning callback.
+ * 
  * Cache is allocated in POOL.
  * */
 static svn_error_t *
@@ -219,32 +240,43 @@ create_cache(svn_cache__t **cache_p,
              svn_cache__deserialize_func_t deserializer,
              apr_ssize_t klen,
              const char *prefix,
+             svn_fs_t *fs,
+             svn_boolean_t no_handler,
              apr_pool_t *pool)
 {
-    if (memcache)
-      {
-        SVN_ERR(svn_cache__create_memcache(cache_p, memcache,
-                                           serializer, deserializer, klen,
-                                           prefix, pool));
-      }
-    else if (membuffer)
-      {
-        SVN_ERR(svn_cache__create_membuffer_cache(
-                  cache_p, membuffer, serializer, deserializer,
-                  klen, prefix, FALSE, pool));
-      }
-    else if (pages)
-      {
-        SVN_ERR(svn_cache__create_inprocess(
-                  cache_p, serializer, deserializer, klen, pages,
-                  items_per_page, FALSE, prefix, pool));
-      }
-    else
+  svn_cache__error_handler_t error_handler = no_handler
+                                           ? NULL
+                                           : warn_and_fail_on_cache_errors;
+
+  if (memcache)
+    {
+      SVN_ERR(svn_cache__create_memcache(cache_p, memcache,
+                                         serializer, deserializer, klen,
+                                         prefix, pool));
+      error_handler = no_handler
+                    ? NULL
+                    : warn_and_continue_on_cache_errors;
+    }
+  else if (membuffer)
+    {
+      SVN_ERR(svn_cache__create_membuffer_cache(
+                cache_p, membuffer, serializer, deserializer,
+                klen, prefix, FALSE, pool));
+    }
+  else if (pages)
+    {
+      SVN_ERR(svn_cache__create_inprocess(
+                cache_p, serializer, deserializer, klen, pages,
+                items_per_page, FALSE, prefix, pool));
+    }
+  else
     {
       *cache_p = NULL;
     }
 
-    return SVN_NO_ERROR;
+  SVN_ERR(init_callbacks(*cache_p, fs, error_handler, pool));
+
+  return SVN_NO_ERROR;
 }
 
 svn_error_t *
@@ -290,10 +322,10 @@ svn_fs_fs__initialize_caches(svn_fs_t *f
                        svn_fs_fs__deserialize_id,
                        sizeof(svn_revnum_t),
                        apr_pstrcat(pool, prefix, "RRI", (char *)NULL),
+                       fs,
+                       no_handler,
                        fs->pool));
 
-  SVN_ERR(init_callbacks(ffd->rev_root_id_cache, fs, no_handler, pool));
-
   /* Rough estimate: revision DAG nodes have size around 320 bytes, so
    * let's put 16 on a page. */
   SVN_ERR(create_cache(&(ffd->rev_node_cache),
@@ -304,9 +336,12 @@ svn_fs_fs__initialize_caches(svn_fs_t *f
                        svn_fs_fs__dag_deserialize,
                        APR_HASH_KEY_STRING,
                        apr_pstrcat(pool, prefix, "DAG", (char *)NULL),
+                       fs,
+                       no_handler,
                        fs->pool));
 
-  SVN_ERR(init_callbacks(ffd->rev_node_cache, fs, no_handler, pool));
+  /* 1st level DAG node cache */
+  ffd->dag_node_cache = svn_fs_fs__create_dag_cache(pool);
 
   /* Very rough estimate: 1K per directory. */
   SVN_ERR(create_cache(&(ffd->dir_cache),
@@ -317,10 +352,10 @@ svn_fs_fs__initialize_caches(svn_fs_t *f
                        svn_fs_fs__deserialize_dir_entries,
                        APR_HASH_KEY_STRING,
                        apr_pstrcat(pool, prefix, "DIR", (char *)NULL),
+                       fs,
+                       no_handler,
                        fs->pool));
 
-  SVN_ERR(init_callbacks(ffd->dir_cache, fs, no_handler, pool));
-
   /* Only 16 bytes per entry (a revision number + the corresponding offset).
      Since we want ~8k pages, that means 512 entries per page. */
   SVN_ERR(create_cache(&(ffd->packed_offset_cache),
@@ -332,12 +367,37 @@ svn_fs_fs__initialize_caches(svn_fs_t *f
                        sizeof(svn_revnum_t),
                        apr_pstrcat(pool, prefix, "PACK-MANIFEST",
                                    (char *)NULL),
+                       fs,
+                       no_handler,
                        fs->pool));
 
-  SVN_ERR(init_callbacks(ffd->packed_offset_cache, fs, no_handler, pool));
+  /* initialize node revision cache, if caching has been enabled */
+  SVN_ERR(create_cache(&(ffd->node_revision_cache),
+                       NULL,
+                       membuffer,
+                       0, 0, /* Do not use inprocess cache */
+                       svn_fs_fs__serialize_node_revision,
+                       svn_fs_fs__deserialize_node_revision,
+                       sizeof(pair_cache_key_t),
+                       apr_pstrcat(pool, prefix, "NODEREVS", (char *)NULL),
+                       fs,
+                       no_handler,
+                       fs->pool));
+
+  /* initialize node change list cache, if caching has been enabled */
+  SVN_ERR(create_cache(&(ffd->changes_cache),
+                       NULL,
+                       membuffer,
+                       0, 0, /* Do not use inprocess cache */
+                       svn_fs_fs__serialize_changes,
+                       svn_fs_fs__deserialize_changes,
+                       sizeof(svn_revnum_t),
+                       apr_pstrcat(pool, prefix, "CHANGES", (char *)NULL),
+                       fs,
+                       no_handler,
+                       fs->pool));
 
-  /* initialize fulltext cache as configured */
-  ffd->fulltext_cache = NULL;
+  /* if enabled, cache fulltext and other derived information */
   if (cache_fulltexts)
     {
       SVN_ERR(create_cache(&(ffd->fulltext_cache),
@@ -346,12 +406,58 @@ svn_fs_fs__initialize_caches(svn_fs_t *f
                            0, 0, /* Do not use inprocess cache */
                            /* Values are svn_stringbuf_t */
                            NULL, NULL,
-                           APR_HASH_KEY_STRING,
+                           sizeof(pair_cache_key_t),
                            apr_pstrcat(pool, prefix, "TEXT", (char *)NULL),
+                           fs,
+                           no_handler,
+                           fs->pool));
+      
+      SVN_ERR(create_cache(&(ffd->properties_cache),
+                           NULL,
+                           membuffer,
+                           0, 0, /* Do not use inprocess cache */
+                           svn_fs_fs__serialize_properties,
+                           svn_fs_fs__deserialize_properties,
+                           sizeof(pair_cache_key_t),
+                           apr_pstrcat(pool, prefix, "PROP",
+                                       (char *)NULL),
+                           fs,
+                           no_handler,
+                           fs->pool));
+      
+      SVN_ERR(create_cache(&(ffd->mergeinfo_cache),
+                           NULL,
+                           membuffer,
+                           0, 0, /* Do not use inprocess cache */
+                           svn_fs_fs__serialize_mergeinfo,
+                           svn_fs_fs__deserialize_mergeinfo,
+                           APR_HASH_KEY_STRING,
+                           apr_pstrcat(pool, prefix, "MERGEINFO",
+                                       (char *)NULL),
+                           fs,
+                           no_handler,
+                           fs->pool));
+      
+      SVN_ERR(create_cache(&(ffd->mergeinfo_existence_cache),
+                           NULL,
+                           membuffer,
+                           0, 0, /* Do not use inprocess cache */
+                           /* Values are svn_stringbuf_t */
+                           NULL, NULL,
+                           APR_HASH_KEY_STRING,
+                           apr_pstrcat(pool, prefix, "HAS_MERGEINFO",
+                                       (char *)NULL),
+                           fs,
+                           no_handler,
                            fs->pool));
     }
-
-  SVN_ERR(init_callbacks(ffd->fulltext_cache, fs, no_handler, pool));
+  else
+    {
+      ffd->fulltext_cache = NULL;
+      ffd->properties_cache = NULL;
+      ffd->mergeinfo_cache = NULL;
+      ffd->mergeinfo_existence_cache = NULL;
+    }
 
   /* initialize revprop cache, if full-text caching has been enabled */
   if (cache_revprops)
@@ -362,9 +468,11 @@ svn_fs_fs__initialize_caches(svn_fs_t *f
                            0, 0, /* Do not use inprocess cache */
                            svn_fs_fs__serialize_properties,
                            svn_fs_fs__deserialize_properties,
-                           APR_HASH_KEY_STRING,
+                           sizeof(pair_cache_key_t),
                            apr_pstrcat(pool, prefix, "REVPROP",
                                        (char *)NULL),
+                           fs,
+                           no_handler,
                            fs->pool));
     }
   else
@@ -372,9 +480,7 @@ svn_fs_fs__initialize_caches(svn_fs_t *f
       ffd->revprop_cache = NULL;
     }
 
-  SVN_ERR(init_callbacks(ffd->revprop_cache, fs, no_handler, pool));
-
-  /* initialize txdelta window cache, if that has been enabled */
+  /* if enabled, cache text deltas and their combinations */
   if (cache_txdeltas)
     {
       SVN_ERR(create_cache(&(ffd->txdelta_window_cache),
@@ -386,18 +492,10 @@ svn_fs_fs__initialize_caches(svn_fs_t *f
                            APR_HASH_KEY_STRING,
                            apr_pstrcat(pool, prefix, "TXDELTA_WINDOW",
                                        (char *)NULL),
+                           fs,
+                           no_handler,
                            fs->pool));
-    }
-  else
-    {
-      ffd->txdelta_window_cache = NULL;
-    }
 
-  SVN_ERR(init_callbacks(ffd->txdelta_window_cache, fs, no_handler, pool));
-
-  /* initialize txdelta window cache, if that has been enabled */
-  if (cache_txdeltas)
-    {
       SVN_ERR(create_cache(&(ffd->combined_window_cache),
                            NULL,
                            membuffer,
@@ -407,28 +505,16 @@ svn_fs_fs__initialize_caches(svn_fs_t *f
                            APR_HASH_KEY_STRING,
                            apr_pstrcat(pool, prefix, "COMBINED_WINDOW",
                                        (char *)NULL),
+                           fs,
+                           no_handler,
                            fs->pool));
     }
   else
     {
+      ffd->txdelta_window_cache = NULL;
       ffd->combined_window_cache = NULL;
     }
 
-  SVN_ERR(init_callbacks(ffd->combined_window_cache, fs, no_handler, pool));
-
-  /* initialize node revision cache, if caching has been enabled */
-  SVN_ERR(create_cache(&(ffd->node_revision_cache),
-                       NULL,
-                       membuffer,
-                       0, 0, /* Do not use inprocess cache */
-                       svn_fs_fs__serialize_node_revision,
-                       svn_fs_fs__deserialize_node_revision,
-                       APR_HASH_KEY_STRING,
-                       apr_pstrcat(pool, prefix, "NODEREVS", (char *)NULL),
-                       fs->pool));
-
-  SVN_ERR(init_callbacks(ffd->node_revision_cache, fs, no_handler, pool));
-
   return SVN_NO_ERROR;
 }
 
@@ -522,6 +608,8 @@ svn_fs_fs__initialize_txn_caches(svn_fs_
                        APR_HASH_KEY_STRING,
                        apr_pstrcat(pool, prefix, "TXNDIR",
                                    (char *)NULL),
+                       fs,
+                       TRUE,
                        pool));
 
   /* reset the transaction-specific cache if the pool gets cleaned up. */

Modified: subversion/branches/ev2-export/subversion/libsvn_fs_fs/dag.c
URL: http://svn.apache.org/viewvc/subversion/branches/ev2-export/subversion/libsvn_fs_fs/dag.c?rev=1400556&r1=1400555&r2=1400556&view=diff
==============================================================================
--- subversion/branches/ev2-export/subversion/libsvn_fs_fs/dag.c (original)
+++ subversion/branches/ev2-export/subversion/libsvn_fs_fs/dag.c Sun Oct 21 02:00:31 2012
@@ -947,6 +947,24 @@ svn_fs_fs__dag_get_file_delta_stream(svn
 
 
 svn_error_t *
+svn_fs_fs__dag_try_process_file_contents(svn_boolean_t *success,
+                                         dag_node_t *node,
+                                         svn_fs_process_contents_func_t processor,
+                                         void* baton,
+                                         apr_pool_t *pool)
+{
+  node_revision_t *noderev;
+
+  /* Go get fresh node-revisions for the nodes. */
+  SVN_ERR(get_node_revision(&noderev, node));
+
+  return svn_fs_fs__try_process_file_contents(success, node->fs,
+                                              noderev,
+                                              processor, baton, pool);
+}
+
+
+svn_error_t *
 svn_fs_fs__dag_file_length(svn_filesize_t *length,
                            dag_node_t *file,
                            apr_pool_t *pool)

Modified: subversion/branches/ev2-export/subversion/libsvn_fs_fs/dag.h
URL: http://svn.apache.org/viewvc/subversion/branches/ev2-export/subversion/libsvn_fs_fs/dag.h?rev=1400556&r1=1400555&r2=1400556&view=diff
==============================================================================
--- subversion/branches/ev2-export/subversion/libsvn_fs_fs/dag.h (original)
+++ subversion/branches/ev2-export/subversion/libsvn_fs_fs/dag.h Sun Oct 21 02:00:31 2012
@@ -403,6 +403,19 @@ svn_error_t *svn_fs_fs__dag_get_contents
                                          dag_node_t *file,
                                          apr_pool_t *pool);
 
+/* Attempt to fetch the contents of NODE and pass it along with the BATON
+   to the PROCESSOR.   Set *SUCCESS only of the data could be provided
+   and the processor had been called.
+
+   Use POOL for all allocations.
+ */
+svn_error_t *
+svn_fs_fs__dag_try_process_file_contents(svn_boolean_t *success,
+                                         dag_node_t *node,
+                                         svn_fs_process_contents_func_t processor,
+                                         void* baton,
+                                         apr_pool_t *pool);
+
 
 /* Set *STREAM_P to a delta stream that will turn the contents of SOURCE into
    the contents of TARGET, allocated in POOL.  If SOURCE is null, the empty

Modified: subversion/branches/ev2-export/subversion/libsvn_fs_fs/fs.c
URL: http://svn.apache.org/viewvc/subversion/branches/ev2-export/subversion/libsvn_fs_fs/fs.c?rev=1400556&r1=1400555&r2=1400556&view=diff
==============================================================================
--- subversion/branches/ev2-export/subversion/libsvn_fs_fs/fs.c (original)
+++ subversion/branches/ev2-export/subversion/libsvn_fs_fs/fs.c Sun Oct 21 02:00:31 2012
@@ -38,6 +38,7 @@
 #include "tree.h"
 #include "lock.h"
 #include "id.h"
+#include "rep-cache.h"
 #include "svn_private_config.h"
 #include "private/svn_fs_util.h"
 
@@ -123,6 +124,46 @@ fs_set_errcall(svn_fs_t *fs,
   return SVN_NO_ERROR;
 }
 
+struct fs_freeze_baton_t {
+  svn_fs_t *fs;
+  svn_error_t *(*freeze_body)(void *, apr_pool_t *);
+  void *baton;
+};
+
+static svn_error_t *
+fs_freeze_body(void *baton,
+               apr_pool_t *pool)
+{
+  struct fs_freeze_baton_t *b = baton;
+  svn_boolean_t exists;
+
+  SVN_ERR(svn_fs_fs__exists_rep_cache(&exists, b->fs, pool));
+  if (exists)
+    SVN_ERR(svn_fs_fs__lock_rep_cache(b->fs, pool));
+
+  SVN_ERR(b->freeze_body(b->baton, pool));
+
+  return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+fs_freeze(svn_fs_t *fs,
+          svn_error_t *(*freeze_body)(void *, apr_pool_t *),
+          void *baton,
+          apr_pool_t *pool)
+{
+  struct fs_freeze_baton_t b;
+
+  b.fs = fs;
+  b.freeze_body = freeze_body;
+  b.baton = baton;
+
+  SVN_ERR(svn_fs__check_fs(fs, TRUE));
+  SVN_ERR(svn_fs_fs__with_write_lock(fs, fs_freeze_body, &b, pool));
+
+  return SVN_NO_ERROR;
+}
+
 
 
 /* The vtable associated with a specific open filesystem. */
@@ -143,6 +184,7 @@ static fs_vtable_t fs_vtable = {
   svn_fs_fs__unlock,
   svn_fs_fs__get_lock,
   svn_fs_fs__get_locks,
+  fs_freeze,
   fs_set_errcall
 };
 
@@ -263,13 +305,14 @@ fs_pack(svn_fs_t *fs,
         void *notify_baton,
         svn_cancel_func_t cancel_func,
         void *cancel_baton,
-        apr_pool_t *pool)
+        apr_pool_t *pool,
+        apr_pool_t *common_pool)
 {
   SVN_ERR(svn_fs__check_fs(fs, FALSE));
   SVN_ERR(initialize_fs_struct(fs));
   SVN_ERR(svn_fs_fs__open(fs, path, pool));
   SVN_ERR(svn_fs_fs__initialize_caches(fs, pool));
-  SVN_ERR(fs_serialized_init(fs, pool, pool));
+  SVN_ERR(fs_serialized_init(fs, common_pool, pool));
   return svn_fs_fs__pack(fs, notify_func, notify_baton,
                          cancel_func, cancel_baton, pool);
 }

Modified: subversion/branches/ev2-export/subversion/libsvn_fs_fs/fs.h
URL: http://svn.apache.org/viewvc/subversion/branches/ev2-export/subversion/libsvn_fs_fs/fs.h?rev=1400556&r1=1400555&r2=1400556&view=diff
==============================================================================
--- subversion/branches/ev2-export/subversion/libsvn_fs_fs/fs.h (original)
+++ subversion/branches/ev2-export/subversion/libsvn_fs_fs/fs.h Sun Oct 21 02:00:31 2012
@@ -217,6 +217,17 @@ typedef struct fs_fs_shared_data_t
   apr_pool_t *common_pool;
 } fs_fs_shared_data_t;
 
+/* Data structure for the 1st level DAG node cache. */
+typedef struct fs_fs_dag_cache_t fs_fs_dag_cache_t;
+
+/* Key type for all caches that use revision + offset / counter as key. */
+typedef struct pair_cache_key_t
+{
+  svn_revnum_t revision;
+
+  apr_int64_t second;
+} pair_cache_key_t;
+
 /* Private (non-shared) FSFS-specific data for each svn_fs_t object.
    Any caches in here may be NULL. */
 typedef struct fs_fs_data_t
@@ -241,8 +252,11 @@ typedef struct fs_fs_data_t
      (svn_fs_id_t *).  (Not threadsafe.) */
   svn_cache__t *rev_root_id_cache;
 
+  /* Caches native dag_node_t* instances and acts as a 1st level cache */
+  fs_fs_dag_cache_t *dag_node_cache;
+
   /* DAG node cache for immutable nodes.  Maps (revision, fspath)
-     to (dag_node_t *). */
+     to (dag_node_t *). This is the 2nd level cache for DAG nodes. */
   svn_cache__t *rev_node_cache;
 
   /* A cache of the contents of immutable directories; maps from
@@ -269,6 +283,9 @@ typedef struct fs_fs_data_t
   /* Revision property cache.  Maps from (rev,generation) to apr_hash_t. */
   svn_cache__t *revprop_cache;
 
+  /* Node properties cache.  Maps from rep key to apr_hash_t. */
+  svn_cache__t *properties_cache;
+
   /* Pack manifest cache; a cache mapping (svn_revnum_t) shard number to
      a manifest; and a manifest is a mapping from (svn_revnum_t) revision
      number offset within a shard to (apr_off_t) byte-offset in the
@@ -285,6 +302,19 @@ typedef struct fs_fs_data_t
   /* Cache for node_revision_t objects; the key is (revision, id offset) */
   svn_cache__t *node_revision_cache;
 
+  /* Cache for change lists as APR arrays of change_t * objects; the key
+     is the revision */
+  svn_cache__t *changes_cache;
+
+  /* Cache for svn_mergeinfo_t objects; the key is a combination of
+     revision, inheritance flags and path. */
+  svn_cache__t *mergeinfo_cache;
+
+  /* Cache for presence of svn_mergeinfo_t on a noderev; the key is a
+     combination of revision, inheritance flags and path; value is "1"
+     if the node has mergeinfo, "0" if it doesn't. */
+  svn_cache__t *mergeinfo_existence_cache;
+
   /* If set, there are or have been more than one concurrent transaction */
   svn_boolean_t concurrent_transactions;
 



Mime
View raw message