You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by hw...@apache.org on 2011/08/11 20:20:54 UTC
svn commit: r1156713 - in
/subversion/branches/fs-py/subversion/libsvn_fs_py: fs.h fs_fs.c
rep-cache.c tree.c
Author: hwright
Date: Thu Aug 11 18:20:54 2011
New Revision: 1156713
URL: http://svn.apache.org/viewvc?rev=1156713&view=rev
Log:
On the fs-py branch:
Use the Python format number as the canonical location.
* subversion/libsvn_fs_py/tree.c,
subversion/libsvn_fs_py/fs_fs.c,
subversion/libsvn_fs_py/rep-cache.c:
Fetch the format number throughout, rather than using a version in the
FS object.
* subversion/libsvn_fs_py/fs.h
(fs_fs_data_t): Remove format number.
Modified:
subversion/branches/fs-py/subversion/libsvn_fs_py/fs.h
subversion/branches/fs-py/subversion/libsvn_fs_py/fs_fs.c
subversion/branches/fs-py/subversion/libsvn_fs_py/rep-cache.c
subversion/branches/fs-py/subversion/libsvn_fs_py/tree.c
Modified: subversion/branches/fs-py/subversion/libsvn_fs_py/fs.h
URL: http://svn.apache.org/viewvc/subversion/branches/fs-py/subversion/libsvn_fs_py/fs.h?rev=1156713&r1=1156712&r2=1156713&view=diff
==============================================================================
--- subversion/branches/fs-py/subversion/libsvn_fs_py/fs.h (original)
+++ subversion/branches/fs-py/subversion/libsvn_fs_py/fs.h Thu Aug 11 18:20:54 2011
@@ -206,8 +206,6 @@ typedef struct fs_fs_shared_data_t
/* Private (non-shared) FSFS-specific data for each svn_fs_t object. */
typedef struct fs_fs_data_t
{
- /* The format number of this FS. */
- int format;
/* The maximum number of files to store per directory (for sharded
layouts) or zero (for linear layouts). */
int max_files_per_dir;
Modified: subversion/branches/fs-py/subversion/libsvn_fs_py/fs_fs.c
URL: http://svn.apache.org/viewvc/subversion/branches/fs-py/subversion/libsvn_fs_py/fs_fs.c?rev=1156713&r1=1156712&r2=1156713&view=diff
==============================================================================
--- subversion/branches/fs-py/subversion/libsvn_fs_py/fs_fs.c (original)
+++ subversion/branches/fs-py/subversion/libsvn_fs_py/fs_fs.c Thu Aug 11 18:20:54 2011
@@ -260,8 +260,10 @@ svn_fs_py__path_rev_absolute(const char
apr_pool_t *pool)
{
fs_fs_data_t *ffd = fs->fsap_data;
+ int format;
- if (ffd->format < SVN_FS_FS__MIN_PACKED_FORMAT
+ SVN_ERR(svn_fs_py__get_int_attr(&format, ffd->p_fs, "format"));
+ if (format < SVN_FS_FS__MIN_PACKED_FORMAT
|| ! is_packed_rev(fs, rev))
{
*path = path_rev(fs, rev, pool);
@@ -341,7 +343,10 @@ static APR_INLINE const char *
path_txn_proto_rev(svn_fs_t *fs, const char *txn_id, apr_pool_t *pool)
{
fs_fs_data_t *ffd = fs->fsap_data;
- if (ffd->format >= SVN_FS_FS__MIN_PROTOREVS_DIR_FORMAT)
+ int format;
+
+ svn_error_clear(svn_fs_py__get_int_attr(&format, ffd->p_fs, "format"));
+ if (format >= SVN_FS_FS__MIN_PROTOREVS_DIR_FORMAT)
return svn_dirent_join_many(pool, fs->path, PATH_TXN_PROTOS_DIR,
apr_pstrcat(pool, txn_id, PATH_EXT_REV,
(char *)NULL),
@@ -354,7 +359,10 @@ static APR_INLINE const char *
path_txn_proto_rev_lock(svn_fs_t *fs, const char *txn_id, apr_pool_t *pool)
{
fs_fs_data_t *ffd = fs->fsap_data;
- if (ffd->format >= SVN_FS_FS__MIN_PROTOREVS_DIR_FORMAT)
+ int format;
+
+ svn_error_clear(svn_fs_py__get_int_attr(&format, ffd->p_fs, "format"));
+ if (format >= SVN_FS_FS__MIN_PROTOREVS_DIR_FORMAT)
return svn_dirent_join_many(pool, fs->path, PATH_TXN_PROTOS_DIR,
apr_pstrcat(pool, txn_id, PATH_EXT_REV_LOCK,
(char *)NULL),
@@ -589,7 +597,10 @@ with_some_lock(svn_fs_t *fs,
if (!err)
{
fs_fs_data_t *ffd = fs->fsap_data;
- if (ffd->format >= SVN_FS_FS__MIN_PACKED_FORMAT)
+ int format;
+
+ SVN_ERR(svn_fs_py__get_int_attr(&format, ffd->p_fs, "format"));
+ if (format >= SVN_FS_FS__MIN_PACKED_FORMAT)
SVN_ERR(update_min_unpacked_rev(fs, pool));
#if 0 /* Might be a good idea? */
SVN_ERR(get_youngest(&ffd->youngest_rev_cache, fs->path,
@@ -1090,7 +1101,10 @@ svn_boolean_t
svn_fs_py__fs_supports_mergeinfo(svn_fs_t *fs)
{
fs_fs_data_t *ffd = fs->fsap_data;
- return ffd->format >= SVN_FS_FS__MIN_MERGEINFO_FORMAT;
+ int format;
+
+ SVN_ERR(svn_fs_py__get_int_attr(&format, ffd->p_fs, "format"));
+ return format >= SVN_FS_FS__MIN_MERGEINFO_FORMAT;
}
static svn_error_t *
@@ -1098,13 +1112,15 @@ read_config(svn_fs_t *fs,
apr_pool_t *pool)
{
fs_fs_data_t *ffd = fs->fsap_data;
+ int format;
+ SVN_ERR(svn_fs_py__get_int_attr(&format, ffd->p_fs, "format"));
SVN_ERR(svn_config_read2(&ffd->config,
svn_dirent_join(fs->path, PATH_CONFIG, pool),
FALSE, FALSE, fs->pool));
/* Initialize ffd->rep_sharing_allowed. */
- if (ffd->format >= SVN_FS_FS__MIN_REP_SHARING_FORMAT)
+ if (format >= SVN_FS_FS__MIN_REP_SHARING_FORMAT)
SVN_ERR(svn_config_get_bool(ffd->config, &ffd->rep_sharing_allowed,
CONFIG_SECTION_REP_SHARING,
CONFIG_OPTION_ENABLE_REP_SHARING, TRUE));
@@ -1189,8 +1205,11 @@ static svn_error_t *
update_min_unpacked_rev(svn_fs_t *fs, apr_pool_t *pool)
{
fs_fs_data_t *ffd = fs->fsap_data;
+ int format;
- SVN_ERR_ASSERT(ffd->format >= SVN_FS_FS__MIN_PACKED_FORMAT);
+ SVN_ERR(svn_fs_py__get_int_attr(&format, ffd->p_fs, "format"));
+
+ SVN_ERR_ASSERT(format >= SVN_FS_FS__MIN_PACKED_FORMAT);
return read_min_unpacked_rev(&ffd->min_unpacked_rev,
path_min_unpacked_rev(fs, pool),
@@ -1219,11 +1238,10 @@ svn_fs_py__open(svn_fs_t *fs, const char
SVN_ERR(check_format(format));
/* Now we've got a format number no matter what. */
- ffd->format = format;
ffd->max_files_per_dir = max_files_per_dir;
/* Read the min unpacked revision. */
- if (ffd->format >= SVN_FS_FS__MIN_PACKED_FORMAT)
+ if (format >= SVN_FS_FS__MIN_PACKED_FORMAT)
SVN_ERR(update_min_unpacked_rev(fs, pool));
/* Read the configuration file. */
@@ -1825,6 +1843,9 @@ open_pack_or_rev_file(apr_file_t **file,
svn_error_t *err;
const char *path;
svn_boolean_t retry = FALSE;
+ int format;
+
+ SVN_ERR(svn_fs_py__get_int_attr(&format, ffd->p_fs, "format"));
do
{
@@ -1836,7 +1857,7 @@ open_pack_or_rev_file(apr_file_t **file,
APR_READ | APR_BUFFERED, APR_OS_DEFAULT, pool);
if (err && APR_STATUS_IS_ENOENT(err->apr_err)
- && ffd->format >= SVN_FS_FS__MIN_PACKED_FORMAT)
+ && format >= SVN_FS_FS__MIN_PACKED_FORMAT)
{
/* Could not open the file. This may happen if the
* file once existed but got packed later. */
@@ -2461,6 +2482,9 @@ svn_fs_py__put_node_revision(svn_fs_t *f
fs_fs_data_t *ffd = fs->fsap_data;
apr_file_t *noderev_file;
const char *txn_id = svn_fs_py__id_txn_id(id);
+ int format;
+
+ SVN_ERR(svn_fs_py__get_int_attr(&format, ffd->p_fs, "format"));
noderev->is_fresh_txn_root = fresh_txn_root;
@@ -2475,7 +2499,7 @@ svn_fs_py__put_node_revision(svn_fs_t *f
SVN_ERR(svn_fs_py__write_noderev(svn_stream_from_aprfile2(noderev_file, TRUE,
pool),
- noderev, ffd->format,
+ noderev, format,
svn_fs_py__fs_supports_mergeinfo(fs),
pool));
@@ -3007,6 +3031,9 @@ create_rep_state(struct rep_state **rep_
if (err && err->apr_err == SVN_ERR_FS_CORRUPT)
{
fs_fs_data_t *ffd = fs->fsap_data;
+ int format;
+
+ SVN_ERR(svn_fs_py__get_int_attr(&format, ffd->p_fs, "format"));
/* ### This always returns "-1" for transaction reps, because
### this particular bit of code doesn't know if the rep is
@@ -3018,8 +3045,7 @@ create_rep_state(struct rep_state **rep_
return svn_error_createf(SVN_ERR_FS_CORRUPT, err,
"Corrupt representation '%s'",
rep
- ? representation_string(rep, ffd->format, TRUE,
- pool)
+ ? representation_string(rep, format, TRUE, pool)
: "(null)");
}
/* ### Call representation_string() ? */
@@ -4554,11 +4580,14 @@ svn_fs_py__create_txn(svn_fs_txn_t **txn
fs_fs_data_t *ffd = fs->fsap_data;
svn_fs_txn_t *txn;
svn_fs_id_t *root_id;
+ int format;
+
+ SVN_ERR(svn_fs_py__get_int_attr(&format, ffd->p_fs, "format"));
txn = apr_pcalloc(pool, sizeof(*txn));
/* Get the txn_id. */
- if (ffd->format >= SVN_FS_FS__MIN_TXN_CURRENT_FORMAT)
+ if (format >= SVN_FS_FS__MIN_TXN_CURRENT_FORMAT)
SVN_ERR(create_txn_dir(&txn->id, fs, rev, pool));
else
SVN_ERR(create_txn_dir_pre_1_5(&txn->id, fs, rev, pool));
@@ -4837,13 +4866,16 @@ svn_fs_py__purge_txn(svn_fs_t *fs,
apr_pool_t *pool)
{
fs_fs_data_t *ffd = fs->fsap_data;
+ int format;
+
+ SVN_ERR(svn_fs_py__get_int_attr(&format, ffd->p_fs, "format"));
/* Remove the shared transaction object associated with this transaction. */
SVN_ERR(purge_shared_txn(fs, txn_id, pool));
/* Remove the directory associated with this transaction. */
SVN_ERR(svn_io_remove_dir2(path_txn_dir(fs, txn_id, pool), FALSE,
NULL, NULL, pool));
- if (ffd->format >= SVN_FS_FS__MIN_PROTOREVS_DIR_FORMAT)
+ if (format >= SVN_FS_FS__MIN_PROTOREVS_DIR_FORMAT)
{
/* Delete protorev and its lock, which aren't in the txn
directory. It's OK if they don't exist (for example, if this
@@ -5168,7 +5200,11 @@ rep_write_get_baton(struct rep_write_bat
svn_txdelta_window_handler_t wh;
void *whb;
fs_fs_data_t *ffd = fs->fsap_data;
- int diff_version = ffd->format >= SVN_FS_FS__MIN_SVNDIFF1_FORMAT ? 1 : 0;
+ int diff_version;
+ int format;
+
+ SVN_ERR(svn_fs_py__get_int_attr(&format, ffd->p_fs, "format"));
+ diff_version = format >= SVN_FS_FS__MIN_SVNDIFF1_FORMAT ? 1 : 0;
b = apr_pcalloc(pool, sizeof(*b));
@@ -5568,6 +5604,9 @@ write_final_rev(const svn_fs_id_t **new_
const svn_fs_id_t *new_id;
const char *node_id, *copy_id, *my_node_id, *my_copy_id;
fs_fs_data_t *ffd = fs->fsap_data;
+ int format;
+
+ SVN_ERR(svn_fs_py__get_int_attr(&format, ffd->p_fs, "format"));
*new_id_p = NULL;
@@ -5659,7 +5698,7 @@ write_final_rev(const svn_fs_id_t **new_
node_id = svn_fs_py__id_node_id(noderev->id);
if (*node_id == '_')
{
- if (ffd->format >= SVN_FS_FS__MIN_NO_GLOBAL_IDS_FORMAT)
+ if (format >= SVN_FS_FS__MIN_NO_GLOBAL_IDS_FORMAT)
my_node_id = apr_psprintf(pool, "%s-%ld", node_id + 1, rev);
else
{
@@ -5673,7 +5712,7 @@ write_final_rev(const svn_fs_id_t **new_
copy_id = svn_fs_py__id_copy_id(noderev->id);
if (*copy_id == '_')
{
- if (ffd->format >= SVN_FS_FS__MIN_NO_GLOBAL_IDS_FORMAT)
+ if (format >= SVN_FS_FS__MIN_NO_GLOBAL_IDS_FORMAT)
my_copy_id = apr_psprintf(pool, "%s-%ld", copy_id + 1, rev);
else
{
@@ -5694,7 +5733,7 @@ write_final_rev(const svn_fs_id_t **new_
/* Write out our new node-revision. */
SVN_ERR(svn_fs_py__write_noderev(svn_stream_from_aprfile2(file, TRUE, pool),
- noderev, ffd->format,
+ noderev, format,
svn_fs_py__fs_supports_mergeinfo(fs),
pool));
@@ -5730,8 +5769,11 @@ write_final_changed_path_info(apr_off_t
apr_hash_index_t *hi;
apr_pool_t *iterpool = svn_pool_create(pool);
fs_fs_data_t *ffd = fs->fsap_data;
- svn_boolean_t include_node_kinds =
- ffd->format >= SVN_FS_FS__MIN_KIND_IN_CHANGED_FORMAT;
+ svn_boolean_t include_node_kinds;
+ int format;
+
+ SVN_ERR(svn_fs_py__get_int_attr(&format, ffd->p_fs, "format"));
+ include_node_kinds = format >= SVN_FS_FS__MIN_KIND_IN_CHANGED_FORMAT;
SVN_ERR(get_file_offset(&offset, file, pool));
@@ -5789,9 +5831,12 @@ write_current(svn_fs_t *fs, svn_revnum_t
char *buf;
const char *tmp_name, *name;
fs_fs_data_t *ffd = fs->fsap_data;
+ int format;
+
+ SVN_ERR(svn_fs_py__get_int_attr(&format, ffd->p_fs, "format"));
/* Now we can just write out this line. */
- if (ffd->format >= SVN_FS_FS__MIN_NO_GLOBAL_IDS_FORMAT)
+ if (format >= SVN_FS_FS__MIN_NO_GLOBAL_IDS_FORMAT)
buf = apr_psprintf(pool, "%ld\n", rev);
else
buf = apr_psprintf(pool, "%ld %s %s\n", rev, next_node_id, next_copy_id);
@@ -5820,8 +5865,11 @@ write_final_current(svn_fs_t *fs,
char new_node_id[MAX_KEY_SIZE + 2];
char new_copy_id[MAX_KEY_SIZE + 2];
fs_fs_data_t *ffd = fs->fsap_data;
+ int format;
+
+ SVN_ERR(svn_fs_py__get_int_attr(&format, ffd->p_fs, "format"));
- if (ffd->format >= SVN_FS_FS__MIN_NO_GLOBAL_IDS_FORMAT)
+ if (format >= SVN_FS_FS__MIN_NO_GLOBAL_IDS_FORMAT)
return write_current(fs, rev, NULL, NULL, pool);
/* To find the next available ids, we add the id that used to be in
@@ -5939,6 +5987,9 @@ commit_body(void *baton, apr_pool_t *poo
apr_array_header_t *txnprop_list;
svn_prop_t prop;
svn_string_t date;
+ int format;
+
+ SVN_ERR(svn_fs_py__get_int_attr(&format, ffd->p_fs, "format"));
/* Get the current youngest revision. */
SVN_ERR(svn_fs_py__youngest_rev(&old_rev, cb->fs, pool));
@@ -5956,7 +6007,7 @@ commit_body(void *baton, apr_pool_t *poo
SVN_ERR(verify_locks(cb->fs, cb->txn->id, pool));
/* Get the next node_id and copy_id to use. */
- if (ffd->format < SVN_FS_FS__MIN_NO_GLOBAL_IDS_FORMAT)
+ if (format < SVN_FS_FS__MIN_NO_GLOBAL_IDS_FORMAT)
SVN_ERR(get_next_revision_ids(&start_node_id, &start_copy_id, cb->fs,
pool));
@@ -6202,6 +6253,7 @@ svn_fs_py__create(svn_fs_t *fs,
apr_pool_t *pool)
{
fs_fs_data_t *ffd = fs->fsap_data;
+ int format;
fs->path = apr_pstrdup(pool, path);
@@ -6211,7 +6263,7 @@ svn_fs_py__create(svn_fs_t *fs,
apr_pool_cleanup_register(fs->pool, ffd->p_fs, svn_fs_py__destroy_py_object,
apr_pool_cleanup_null);
- SVN_ERR(svn_fs_py__get_int_attr(&ffd->format, ffd->p_fs, "format"));
+ SVN_ERR(svn_fs_py__get_int_attr(&format, ffd->p_fs, "format"));
SVN_ERR(svn_fs_py__get_int_attr(&ffd->max_files_per_dir, ffd->p_fs,
"max_files_per_dir"));
@@ -6221,7 +6273,7 @@ svn_fs_py__create(svn_fs_t *fs,
/* Create the txn-current file if the repository supports
the transaction sequence file. */
- if (ffd->format >= SVN_FS_FS__MIN_TXN_CURRENT_FORMAT)
+ if (format >= SVN_FS_FS__MIN_TXN_CURRENT_FORMAT)
{
SVN_ERR(svn_io_file_create(path_txn_current(fs, pool),
"0\n", pool));
@@ -6231,7 +6283,7 @@ svn_fs_py__create(svn_fs_t *fs,
/* This filesystem is ready. Stamp it with a format number. */
SVN_ERR(write_format(path_format(fs, pool),
- ffd->format, ffd->max_files_per_dir, FALSE, pool));
+ format, ffd->max_files_per_dir, FALSE, pool));
ffd->youngest_rev_cache = 0;
return SVN_NO_ERROR;
@@ -6501,6 +6553,9 @@ recover_body(void *baton, apr_pool_t *po
char *next_node_id = NULL, *next_copy_id = NULL;
svn_revnum_t youngest_rev;
svn_node_kind_t youngest_revprops_kind;
+ int format;
+
+ SVN_ERR(svn_fs_py__get_int_attr(&format, ffd->p_fs, "format"));
/* First, we need to know the largest revision in the filesystem. */
SVN_ERR(recover_get_largest_revision(fs, &max_rev, pool));
@@ -6547,7 +6602,7 @@ recover_body(void *baton, apr_pool_t *po
/* We only need to search for maximum IDs for old FS formats which
se global ID counters. */
- if (ffd->format < SVN_FS_FS__MIN_NO_GLOBAL_IDS_FORMAT)
+ if (format < SVN_FS_FS__MIN_NO_GLOBAL_IDS_FORMAT)
{
/* Next we need to find the maximum node id and copy id in use across the
filesystem. Unfortunately, the only way we can get this information
@@ -7352,8 +7407,10 @@ svn_fs_py__verify(svn_fs_t *fs,
{
fs_fs_data_t *ffd = fs->fsap_data;
svn_boolean_t exists;
+ int format;
- if (ffd->format < SVN_FS_FS__MIN_REP_SHARING_FORMAT)
+ SVN_ERR(svn_fs_py__get_int_attr(&format, ffd->p_fs, "format"));
+ if (format < SVN_FS_FS__MIN_REP_SHARING_FORMAT)
return SVN_NO_ERROR;
/* Do not attempt to walk the rep-cache database if its file does not exists,
Modified: subversion/branches/fs-py/subversion/libsvn_fs_py/rep-cache.c
URL: http://svn.apache.org/viewvc/subversion/branches/fs-py/subversion/libsvn_fs_py/rep-cache.c?rev=1156713&r1=1156712&r2=1156713&view=diff
==============================================================================
--- subversion/branches/fs-py/subversion/libsvn_fs_py/rep-cache.c (original)
+++ subversion/branches/fs-py/subversion/libsvn_fs_py/rep-cache.c Thu Aug 11 18:20:54 2011
@@ -152,11 +152,14 @@ svn_fs_py__walk_rep_reference(svn_fs_t *
svn_sqlite__stmt_t *stmt;
svn_boolean_t have_row;
int iterations = 0;
+ int format;
+
+ SVN_ERR(svn_fs_py__get_int_attr(&format, ffd->p_fs, "format"));
apr_pool_t *iterpool = svn_pool_create(pool);
/* Don't check ffd->rep_sharing_allowed. */
- SVN_ERR_ASSERT(ffd->format >= SVN_FS_FS__MIN_REP_SHARING_FORMAT);
+ SVN_ERR_ASSERT(format >= SVN_FS_FS__MIN_REP_SHARING_FORMAT);
if (! ffd->rep_cache_db)
SVN_ERR(svn_fs_py__open_rep_cache(fs, pool));
Modified: subversion/branches/fs-py/subversion/libsvn_fs_py/tree.c
URL: http://svn.apache.org/viewvc/subversion/branches/fs-py/subversion/libsvn_fs_py/tree.c?rev=1156713&r1=1156712&r2=1156713&view=diff
==============================================================================
--- subversion/branches/fs-py/subversion/libsvn_fs_py/tree.c (original)
+++ subversion/branches/fs-py/subversion/libsvn_fs_py/tree.c Thu Aug 11 18:20:54 2011
@@ -57,6 +57,7 @@
#include "tree.h"
#include "fs_fs.h"
#include "id.h"
+#include "py_util.h"
#include "private/svn_mergeinfo_private.h"
#include "private/svn_fs_util.h"
@@ -3614,6 +3615,9 @@ fs_get_mergeinfo(svn_mergeinfo_catalog_t
apr_pool_t *pool)
{
fs_fs_data_t *ffd = root->fs->fsap_data;
+ int format;
+
+ SVN_ERR(svn_fs_py__get_int_attr(&format, ffd->p_fs, "format"));
/* We require a revision root. */
if (root->is_txn_root)
@@ -3625,7 +3629,7 @@ fs_get_mergeinfo(svn_mergeinfo_catalog_t
(SVN_ERR_UNSUPPORTED_FEATURE, NULL,
_("Querying mergeinfo requires version %d of the FSFS filesystem "
"schema; filesystem '%s' uses only version %d"),
- SVN_FS_FS__MIN_MERGEINFO_FORMAT, root->fs->path, ffd->format);
+ SVN_FS_FS__MIN_MERGEINFO_FORMAT, root->fs->path, format);
/* Retrieve a path -> mergeinfo hash mapping. */
return get_mergeinfos_for_paths(root, catalog, paths,