You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by st...@apache.org on 2013/02/04 21:48:13 UTC
svn commit: r1442344 [3/39] - in /subversion/branches/fsfs-format7: ./
build/ build/ac-macros/ build/generator/ build/generator/templates/
build/win32/ contrib/client-side/emacs/
contrib/server-side/fsfsfixer/fixer/ contrib/server-side/svncutter/ doc/ ...
Modified: subversion/branches/fsfs-format7/subversion/include/private/svn_sqlite.h
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-format7/subversion/include/private/svn_sqlite.h?rev=1442344&r1=1442343&r2=1442344&view=diff
==============================================================================
--- subversion/branches/fsfs-format7/subversion/include/private/svn_sqlite.h (original)
+++ subversion/branches/fsfs-format7/subversion/include/private/svn_sqlite.h Mon Feb 4 20:48:05 2013
@@ -169,8 +169,8 @@ svn_sqlite__get_statement(svn_sqlite__st
b const void * Blob data
apr_size_t Blob length
r svn_revnum_t Revision number
- t const svn_token_t * Token mapping table
- int value Token value
+ t const svn_token_map_t * Token mapping table
+ int Token value
Each character in FMT maps to one SQL parameter, and one or two function
parameters, in the order they appear.
@@ -246,17 +246,25 @@ svn_sqlite__bind_checksum(svn_sqlite__st
*/
/* Wrapper around sqlite3_column_blob and sqlite3_column_bytes. The return
- value will be NULL if the column is null. If RESULT_POOL is not NULL,
- allocate the return value (if any) in it. Otherwise, the value will
- become invalid on the next invocation of svn_sqlite__column_* */
+ value will be NULL if the column is null.
+
+ If RESULT_POOL is not NULL, allocate the return value (if any) in it.
+ If RESULT_POOL is NULL, the return value will be valid until an
+ invocation of svn_sqlite__column_* performs a data type conversion (as
+ described in the SQLite documentation) or the statement is stepped or
+ reset or finalized. */
const void *
svn_sqlite__column_blob(svn_sqlite__stmt_t *stmt, int column,
apr_size_t *len, apr_pool_t *result_pool);
/* Wrapper around sqlite3_column_text. If the column is null, then the
- return value will be NULL. If RESULT_POOL is not NULL, allocate the
- return value (if any) in it. Otherwise, the value will become invalid
- on the next invocation of svn_sqlite__column_* */
+ return value will be NULL.
+
+ If RESULT_POOL is not NULL, allocate the return value (if any) in it.
+ If RESULT_POOL is NULL, the return value will be valid until an
+ invocation of svn_sqlite__column_* performs a data type conversion (as
+ described in the SQLite documentation) or the statement is stepped or
+ reset or finalized. */
const char *
svn_sqlite__column_text(svn_sqlite__stmt_t *stmt, int column,
apr_pool_t *result_pool);
@@ -288,8 +296,17 @@ svn_sqlite__column_token(svn_sqlite__stm
int column,
const svn_token_map_t *map);
+/* Fetch the word at COLUMN, look it up in the MAP, and return its value.
+ Returns NULL_VAL if the column is null. MALFUNCTION is thrown if the
+ column contains an unknown word. */
+int
+svn_sqlite__column_token_null(svn_sqlite__stmt_t *stmt,
+ int column,
+ const svn_token_map_t *map,
+ int null_val);
+
/* Return the column as a hash of const char * => const svn_string_t *.
- If the column is null, then NULL will be stored into *PROPS. The
+ If the column is null, then set *PROPS to NULL. The
results will be allocated in RESULT_POOL, and any temporary allocations
will be made in SCRATCH_POOL. */
svn_error_t *
@@ -301,7 +318,7 @@ svn_sqlite__column_properties(apr_hash_t
/* Return the column as an array of depth-first ordered array of
svn_prop_inherited_item_t * structures. If the column is null, then
- *props is set to NULL. The results will be allocated in RESULT_POOL,
+ set *IPROPS to NULL. The results will be allocated in RESULT_POOL,
and any temporary allocations will be made in SCRATCH_POOL. */
svn_error_t *
svn_sqlite__column_iprops(apr_array_header_t **iprops,
@@ -363,11 +380,58 @@ svn_sqlite__result_int64(svn_sqlite__con
svn_error_t *
svn_sqlite__finalize(svn_sqlite__stmt_t *stmt);
-/* Error-handling wrapper around sqlite3_reset. */
+/* Reset STMT by calling sqlite3_reset(), and also clear any bindings to it.
+
+ Note: svn_sqlite__get_statement() calls this function automatically if
+ the requested statement has been used and has not yet been reset. */
svn_error_t *
svn_sqlite__reset(svn_sqlite__stmt_t *stmt);
+/* Begin a transaction in DB. */
+svn_error_t *
+svn_sqlite__begin_transaction(svn_sqlite__db_t *db);
+
+/* Like svn_sqlite__begin_transaction(), but takes out a 'RESERVED' lock
+ immediately, instead of using the default deferred locking scheme. */
+svn_error_t *
+svn_sqlite__begin_immediate_transaction(svn_sqlite__db_t *db);
+
+/* Begin a savepoint in DB. */
+svn_error_t *
+svn_sqlite__begin_savepoint(svn_sqlite__db_t *db);
+
+/* Commit the current transaction in DB if ERR is SVN_NO_ERROR, otherwise
+ * roll back the transaction. Return a composition of ERR and any error
+ * that may occur during the commit or roll-back. */
+svn_error_t *
+svn_sqlite__finish_transaction(svn_sqlite__db_t *db,
+ svn_error_t *err);
+
+/* Release the current savepoint in DB if EXPR is SVN_NO_ERROR, otherwise
+ * roll back to the savepoint and then release it. Return a composition of
+ * ERR and any error that may occur during the release or roll-back. */
+svn_error_t *
+svn_sqlite__finish_savepoint(svn_sqlite__db_t *db,
+ svn_error_t *err);
+
+/* Evaluate the expression EXPR within a transaction.
+ *
+ * Begin a transaction in DB; evaluate the expression EXPR, which would
+ * typically be a function call that does some work in DB; finally commit
+ * the transaction if EXPR evaluated to SVN_NO_ERROR, otherwise roll back
+ * the transaction.
+ */
+#define SVN_SQLITE__WITH_TXN(expr, db) \
+ do { \
+ svn_sqlite__db_t *svn_sqlite__db = (db); \
+ svn_error_t *svn_sqlite__err; \
+ \
+ SVN_ERR(svn_sqlite__begin_transaction(svn_sqlite__db)); \
+ svn_sqlite__err = (expr); \
+ SVN_ERR(svn_sqlite__finish_transaction(svn_sqlite__db, svn_sqlite__err)); \
+ } while (0)
+
/* Callback function to for use with svn_sqlite__with_transaction(). */
typedef svn_error_t *(*svn_sqlite__transaction_callback_t)(
void *baton, svn_sqlite__db_t *db, apr_pool_t *scratch_pool);
@@ -382,6 +446,18 @@ svn_sqlite__with_transaction(svn_sqlite_
svn_sqlite__transaction_callback_t cb_func,
void *cb_baton, apr_pool_t *scratch_pool);
+/* Like SVN_SQLITE__WITH_TXN(), but takes out a 'RESERVED' lock
+ immediately, instead of using the default deferred locking scheme. */
+#define SVN_SQLITE__WITH_IMMEDIATE_TXN(expr, db) \
+ do { \
+ svn_sqlite__db_t *svn_sqlite__db = (db); \
+ svn_error_t *svn_sqlite__err; \
+ \
+ SVN_ERR(svn_sqlite__begin_immediate_transaction(svn_sqlite__db)); \
+ svn_sqlite__err = (expr); \
+ SVN_ERR(svn_sqlite__finish_transaction(svn_sqlite__db, svn_sqlite__err)); \
+ } while (0)
+
/* Like svn_sqlite__with_transaction(), but takes out a 'RESERVED' lock
immediately, instead of using the default deferred locking scheme. */
svn_error_t *
@@ -390,6 +466,23 @@ svn_sqlite__with_immediate_transaction(s
void *cb_baton,
apr_pool_t *scratch_pool);
+/* Evaluate the expression EXPR within a 'savepoint'. Savepoints can be
+ * nested.
+ *
+ * Begin a savepoint in DB; evaluate the expression EXPR, which would
+ * typically be a function call that does some work in DB; finally release
+ * the savepoint if EXPR evaluated to SVN_NO_ERROR, otherwise roll back
+ * to the savepoint and then release it.
+ */
+#define SVN_SQLITE__WITH_LOCK(expr, db) \
+ do { \
+ svn_sqlite__db_t *svn_sqlite__db = (db); \
+ svn_error_t *svn_sqlite__err; \
+ \
+ SVN_ERR(svn_sqlite__begin_savepoint(svn_sqlite__db)); \
+ svn_sqlite__err = (expr); \
+ SVN_ERR(svn_sqlite__finish_savepoint(svn_sqlite__db, svn_sqlite__err)); \
+ } while (0)
/* Helper function to handle several SQLite operations inside a shared lock.
This callback is similar to svn_sqlite__with_transaction(), but can be
Modified: subversion/branches/fsfs-format7/subversion/include/private/svn_subr_private.h
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-format7/subversion/include/private/svn_subr_private.h?rev=1442344&r1=1442343&r2=1442344&view=diff
==============================================================================
--- subversion/branches/fsfs-format7/subversion/include/private/svn_subr_private.h (original)
+++ subversion/branches/fsfs-format7/subversion/include/private/svn_subr_private.h Mon Feb 4 20:48:05 2013
@@ -294,6 +294,23 @@ svn_hash__make(apr_pool_t *pool);
/** @} */
+
+/** Apply the changes described by @a prop_changes to @a original_props and
+ * return the result. The inverse of svn_prop_diffs().
+ *
+ * Allocate the resulting hash from @a pool, but allocate its keys and
+ * values from @a pool and/or by reference to the storage of the inputs.
+ *
+ * Note: some other APIs use an array of pointers to svn_prop_t.
+ *
+ * @since New in 1.8.
+ */
+apr_hash_t *
+svn_prop__patch(const apr_hash_t *original_props,
+ const apr_array_header_t *prop_changes,
+ apr_pool_t *pool);
+
+
/**
* @defgroup svn_version Version number dotted triplet parsing
* @{
Modified: subversion/branches/fsfs-format7/subversion/include/private/svn_wc_private.h
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-format7/subversion/include/private/svn_wc_private.h?rev=1442344&r1=1442343&r2=1442344&view=diff
==============================================================================
--- subversion/branches/fsfs-format7/subversion/include/private/svn_wc_private.h (original)
+++ subversion/branches/fsfs-format7/subversion/include/private/svn_wc_private.h Mon Feb 4 20:48:05 2013
@@ -39,6 +39,7 @@
#include "svn_types.h"
#include "svn_wc.h"
+#include "private/svn_diff_tree.h"
#ifdef __cplusplus
extern "C" {
@@ -305,6 +306,7 @@ svn_wc__get_tree_conflict(const svn_wc_c
svn_error_t *
svn_wc__add_tree_conflict(svn_wc_context_t *wc_ctx,
const svn_wc_conflict_description2_t *conflict,
+ const char *moved_away_op_root_abspath,
apr_pool_t *scratch_pool);
/* Remove any tree conflict on victim @a victim_abspath using @a wc_ctx.
@@ -317,25 +319,29 @@ svn_wc__del_tree_conflict(svn_wc_context
const char *victim_abspath,
apr_pool_t *scratch_pool);
-/** Like svn_wc_is_wc_root(), but it doesn't consider switched subdirs or
+/** Check whether LOCAL_ABSPATH has a parent directory that knows about its
+ * existence. Set *IS_WCROOT to FALSE if a parent is found, and to TRUE
+ * if there is no such parent.
+ *
+ * Like svn_wc_is_wc_root2(), but doesn't consider switched subdirs or
* deleted entries as working copy roots.
*/
svn_error_t *
-svn_wc__strictly_is_wc_root(svn_boolean_t *wc_root,
- svn_wc_context_t *wc_ctx,
- const char *local_abspath,
- apr_pool_t *scratch_pool);
+svn_wc__is_wcroot(svn_boolean_t *is_wcroot,
+ svn_wc_context_t *wc_ctx,
+ const char *local_abspath,
+ apr_pool_t *scratch_pool);
/** Set @a *wcroot_abspath to the local abspath of the root of the
* working copy in which @a local_abspath resides.
*/
svn_error_t *
-svn_wc__get_wc_root(const char **wcroot_abspath,
- svn_wc_context_t *wc_ctx,
- const char *local_abspath,
- apr_pool_t *result_pool,
- apr_pool_t *scratch_pool);
+svn_wc__get_wcroot(const char **wcroot_abspath,
+ svn_wc_context_t *wc_ctx,
+ const char *local_abspath,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
/**
* The following are temporary APIs to aid in the transition from wc-1 to
@@ -859,6 +865,11 @@ svn_wc__prop_list_recursive(svn_wc_conte
* required), up to and including the root of the working copy and
* any cached inherited properties inherited by the root.
*
+ * The #svn_prop_inherited_item_t->path_or_url members of the
+ * #svn_prop_inherited_item_t * structures in @a *inherited_props are
+ * paths relative to the repository root URL for cached inherited
+ * properties and absolute working copy paths otherwise.
+ *
* Allocate @a *inherited_props in @a result_pool. Use @a scratch_pool
* for temporary allocations.
*/
@@ -1098,9 +1109,6 @@ svn_wc__get_not_present_descendants(cons
* If KIND is not NULL, set *KIND to the kind of node registered in the working
* copy, or SVN_NODE_NONE if the node doesn't
*
- * If ADDED is not NULL, set *ADDED to TRUE if the node is added. (Addition,
- * copy or moved).
- *
* If DELETED is not NULL, set *DELETED to TRUE if the node is marked as
* deleted in the working copy.
*
@@ -1112,7 +1120,6 @@ svn_wc__get_not_present_descendants(cons
svn_error_t *
svn_wc__check_for_obstructions(svn_wc_notify_state_t *obstruction_state,
svn_node_kind_t *kind,
- svn_boolean_t *added,
svn_boolean_t *deleted,
svn_wc_context_t *wc_ctx,
const char *local_abspath,
@@ -1590,7 +1597,11 @@ svn_wc__get_switch_editor(const svn_delt
* and for top-level file entries as well (if any). If
* #svn_depth_immediates, do the same as #svn_depth_files but also diff
* top-level subdirectories at #svn_depth_empty. If #svn_depth_infinity,
- * then diff fully recursively.
+ * then diff fully recursively. If @a depth is #svn_depth_unknown, then...
+ *
+ * ### ... then the @a server_performs_filtering option is meaningful.
+ * ### But what does this depth mean exactly? Something about 'ambient'
+ * ### depth? How does it compare with depth 'infinity'?
*
* @a ignore_ancestry determines whether paths that have discontinuous node
* ancestry are treated as delete/add or as simple modifications. If
@@ -1617,10 +1628,29 @@ svn_wc__get_switch_editor(const svn_delt
* it's a member of one of those changelists. If @a changelist_filter is
* empty (or altogether @c NULL), no changelist filtering occurs.
*
- * If @a server_performs_filtering is TRUE, assume that the server handles
+ * If @a server_performs_filtering is TRUE, assume that the server handles
* the ambient depth filtering, so this doesn't have to be handled in the
* editor.
*
+ *
+ * A diagram illustrating how this function is used.
+ *
+ * Steps 1 and 2 create the chain; step 3 drives it.
+ *
+ * 1. svn_wc__get_diff_editor(diff_cbs)
+ * | ^
+ * 2. svn_ra_do_diff3(editor) | |
+ * | ^ | |
+ * v | v |
+ * +----------+ +----------+ +----------+
+ * | | | | | |
+ * +--> | reporter | ----> | editor | ----> | diff_cbs | ----> text
+ * | | | | | | | out
+ * | +----------+ +----------+ +----------+
+ * |
+ * 3. svn_wc_crawl_revisions5(WC,reporter)
+ *
+ *
* @since New in 1.8.
*/
svn_error_t *
@@ -1644,6 +1674,56 @@ svn_wc__get_diff_editor(const svn_delta_
apr_pool_t *result_pool,
apr_pool_t *scratch_pool);
+/** Callback for the svn_diff_tree_processor_t wrapper, to allow handling
+ * notifications like how the repos diff in libsvn_client does.
+ *
+ * Probably only necessary while transitioning to svn_diff_tree_processor_t
+ */
+typedef svn_error_t *
+ (*svn_wc__diff_state_handle_t)(svn_boolean_t tree_conflicted,
+ svn_wc_notify_state_t *state,
+ svn_wc_notify_state_t *prop_state,
+ const char *relpath,
+ svn_kind_t kind,
+ svn_boolean_t before_op,
+ svn_boolean_t for_add,
+ svn_boolean_t for_delete,
+ void *state_baton,
+ apr_pool_t *scratch_pool);
+
+/** Callback for the svn_diff_tree_processor_t wrapper, to allow handling
+ * notifications like how the repos diff in libsvn_client does.
+ *
+ * Probably only necessary while transitioning to svn_diff_tree_processor_t
+ */
+typedef svn_error_t *
+ (*svn_wc__diff_state_close_t)(const char *relpath,
+ svn_kind_t kind,
+ void *state_baton,
+ apr_pool_t *scratch_pool);
+
+/** Callback for the svn_diff_tree_processor_t wrapper, to allow handling
+ * absent nodes.
+ *
+ * Probably only necessary while transitioning to svn_diff_tree_processor_t
+ */
+typedef svn_error_t *
+ (*svn_wc__diff_state_absent_t)(const char *relpath,
+ void *state_baton,
+ apr_pool_t *scratch_pool);
+
+/** Obtains a diff processor that will drive the diff callbacks when it
+ * is invoked.
+ */
+svn_error_t *
+svn_wc__wrap_diff_callbacks(const svn_diff_tree_processor_t **diff_processor,
+ const svn_wc_diff_callbacks4_t *callbacks,
+ void *callback_baton,
+ svn_boolean_t walk_deleted_dirs,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
+
+
/**
* Assuming @a local_abspath itself or any of its children are under version
* control or a tree conflict victim and in a state of conflict, take these
@@ -1761,6 +1841,26 @@ svn_wc__move2(svn_wc_context_t *wc_ctx,
void *notify_baton,
apr_pool_t *scratch_pool);
+
+/* During merge when we encounter added directories, we add them using
+ svn_wc_add4(), recording its original location, etc. But at that time
+ we don't have its original properties. This function allows updating the
+ BASE properties of such a special added node, but only before it receives
+ other changes.
+
+ NEW_ORIGINAL_PROPS is a new set of properties, including entry props that
+ will be applied to LOCAL_ABSPATH as pristine properties.
+
+ The copyfrom_* arguments are used to verify (some of) the assumptions of
+ this function */
+svn_error_t *
+svn_wc__complete_directory_add(svn_wc_context_t *wc_ctx,
+ const char *local_abspath,
+ apr_hash_t *new_original_props,
+ const char *copyfrom_url,
+ svn_revnum_t copyfrom_rev,
+ apr_pool_t *scratch_pool);
+
#ifdef __cplusplus
}
#endif /* __cplusplus */
Modified: subversion/branches/fsfs-format7/subversion/include/svn_client.h
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-format7/subversion/include/svn_client.h?rev=1442344&r1=1442343&r2=1442344&view=diff
==============================================================================
--- subversion/branches/fsfs-format7/subversion/include/svn_client.h (original)
+++ subversion/branches/fsfs-format7/subversion/include/svn_client.h Mon Feb 4 20:48:05 2013
@@ -365,6 +365,14 @@ typedef struct svn_client_proplist_item_
* properties inherited by @a path. Use @a scratch_pool for all temporary
* allocations.
*
+ * The #svn_prop_inherited_item_t->path_or_url members of the
+ * #svn_prop_inherited_item_t * structures in @a inherited_props are
+ * URLs if @a path is a URL or if @path is a working copy path but the
+ * property represented by the structure is above the working copy root (i.e.
+ * the inherited property is from the cache). In all other cases the
+ * #svn_prop_inherited_item_t->path_or_url members are absolute working copy
+ * paths.
+ *
* @since New in 1.8.
*/
typedef svn_error_t *(*svn_proplist_receiver2_t)(
@@ -2931,6 +2939,9 @@ svn_client_blame(const char *path_or_url
* and the addition of another, but if this flag is TRUE, unrelated
* items will be diffed as if they were related.
*
+ * If @a no_diff_added is TRUE, then no diff output will be generated
+ * on added files.
+ *
* If @a no_diff_deleted is TRUE, then no diff output will be
* generated on deleted files.
*
@@ -2992,6 +3003,7 @@ svn_client_diff6(const apr_array_header_
const char *relative_to_dir,
svn_depth_t depth,
svn_boolean_t ignore_ancestry,
+ svn_boolean_t no_diff_added,
svn_boolean_t no_diff_deleted,
svn_boolean_t show_copies_as_adds,
svn_boolean_t ignore_content_type,
@@ -3007,7 +3019,7 @@ svn_client_diff6(const apr_array_header_
/** Similar to svn_client_diff6(), but with @a outfile and @a errfile,
* instead of @a outstream and @a errstream, and always showing property
- * changes.
+ * changes and additions.
*
* @deprecated Provided for backward compatibility with the 1.7 API.
* @since New in 1.7.
@@ -3153,6 +3165,7 @@ svn_client_diff_peg6(const apr_array_hea
const char *relative_to_dir,
svn_depth_t depth,
svn_boolean_t ignore_ancestry,
+ svn_boolean_t no_diff_added,
svn_boolean_t no_diff_deleted,
svn_boolean_t show_copies_as_adds,
svn_boolean_t ignore_content_type,
@@ -3489,7 +3502,7 @@ svn_client_find_automatic_merge_no_wc(
* the WC at @a target_wcpath. The @a merge structure would typically come
* from calling svn_client_find_automatic_merge().
*
- * The other parameters are as in svn_client_merge4().
+ * The other parameters are as in svn_client_merge5().
*
* @since New in 1.8.
*/
@@ -3497,7 +3510,8 @@ svn_error_t *
svn_client_do_automatic_merge(const svn_client_automatic_merge_t *merge,
const char *target_wcpath,
svn_depth_t depth,
- svn_boolean_t force,
+ svn_boolean_t diff_ignore_ancestry,
+ svn_boolean_t force_delete,
svn_boolean_t record_only,
svn_boolean_t dry_run,
const apr_array_header_t *merge_options,
@@ -3575,16 +3589,19 @@ svn_client_automatic_merge_get_locations
*
* If @a depth is #svn_depth_unknown, use the depth of @a target_wcpath.
*
- * Use @a ignore_ancestry to control whether or not items being
- * diffed will be checked for relatedness first. Unrelated items
- * are typically transmitted to the editor as a deletion of one thing
- * and the addition of another, but if this flag is TRUE, unrelated
- * items will be diffed as if they were related.
+ * If @a ignore_mergeinfo is true, disable merge tracking, by treating the
+ * two sources as unrelated even if they actually have a common ancestor.
+ *
+ * If @a diff_ignore_ancestry is true, diff unrelated nodes as if related:
+ * that is, diff the 'left' and 'right' versions of a node as if they were
+ * related (if they are the same kind) even if they are not related.
+ * Otherwise, diff unrelated items as a deletion of one thing and the
+ * addition of another.
*
- * If @a force is false and the merge involves deleting a file whose
+ * If @a force_delete is false and the merge involves deleting a file whose
* content differs from the source-left version, or a locally modified
* directory, or an unversioned item, then the operation will fail. If
- * @a force is true then all such items will be deleted.
+ * @a force_delete is true then all such items will be deleted.
*
* @a merge_options (an array of <tt>const char *</tt>), if non-NULL,
* is used to pass additional command line arguments to the merge
@@ -3610,8 +3627,33 @@ svn_client_automatic_merge_get_locations
* The authentication baton cached in @a ctx is used to communicate with the
* repository.
*
+ * @since New in 1.8.
+ */
+svn_error_t *
+svn_client_merge5(const char *source1,
+ const svn_opt_revision_t *revision1,
+ const char *source2,
+ const svn_opt_revision_t *revision2,
+ const char *target_wcpath,
+ svn_depth_t depth,
+ svn_boolean_t ignore_mergeinfo,
+ svn_boolean_t diff_ignore_ancestry,
+ svn_boolean_t force_delete,
+ svn_boolean_t record_only,
+ svn_boolean_t dry_run,
+ svn_boolean_t allow_mixed_rev,
+ const apr_array_header_t *merge_options,
+ svn_client_ctx_t *ctx,
+ apr_pool_t *pool);
+
+/**
+ * Similar to svn_client_merge5(), but the single @a ignore_ancestry
+ * parameter maps to both @c ignore_mergeinfo and @c diff_ignore_ancestry.
+ *
+ * @deprecated Provided for backward compatibility with the 1.7 API.
* @since New in 1.7.
*/
+SVN_DEPRECATED
svn_error_t *
svn_client_merge4(const char *source1,
const svn_opt_revision_t *revision1,
@@ -3620,7 +3662,7 @@ svn_client_merge4(const char *source1,
const char *target_wcpath,
svn_depth_t depth,
svn_boolean_t ignore_ancestry,
- svn_boolean_t force,
+ svn_boolean_t force_delete,
svn_boolean_t record_only,
svn_boolean_t dry_run,
svn_boolean_t allow_mixed_rev,
@@ -3630,7 +3672,8 @@ svn_client_merge4(const char *source1,
/**
* Similar to svn_client_merge4(), but with @a allow_mixed_rev set to
- * @c TRUE.
+ * @c TRUE. The @a force parameter maps to the @c force_delete parameter
+ * of svn_client_merge4().
*
* @deprecated Provided for backward compatibility with the 1.6 API.
*
@@ -3699,49 +3742,16 @@ svn_client_merge(const char *source1,
/**
- * Determine the URLs and revisions needed to perform a reintegrate merge
- * from @a source_path_or_url at @a source_peg_revision into the working
- * copy at @a target_wcpath.
- *
- * Set @a *url1_p and @a *rev1_p to the left side, and @a *url2_p and
- * @a *rev2_p to the right side, URLs and revisions of the source of the
- * required two-URL merge.
- *
- * If no merge should be performed, set @a *url1_p to NULL and @a *rev1_p
- * to #SVN_INVALID_REVNUM.
- *
- * The authentication baton cached in @a ctx is used to communicate with the
- * repository.
- *
- * Allocate all the results in @a result_pool. Use @a scratch_pool for
- * temporary allocations.
- *
- * @since New in 1.8.
- */
-svn_error_t *
-svn_client_find_reintegrate_merge(const char **url1_p,
- svn_revnum_t *rev1_p,
- const char **url2_p,
- svn_revnum_t *rev2_p,
- /* inputs */
- const char *source_path_or_url,
- const svn_opt_revision_t *source_peg_revision,
- const char *target_wcpath,
- svn_client_ctx_t *ctx,
- apr_pool_t *result_pool,
- apr_pool_t *scratch_pool);
-
-/**
* Perform a reintegration merge of @a source_path_or_url at @a source_peg_revision
* into @a target_wcpath.
* @a target_wcpath must be a single-revision, #svn_depth_infinity,
* pristine, unswitched working copy -- in other words, it must
* reflect a single revision tree, the "target". The mergeinfo on @a
* source_path_or_url must reflect that all of the target has been merged into it.
- * Then this behaves like a merge with svn_client_merge4() from the
+ * Then this behaves like a merge with svn_client_merge5() from the
* target's URL to the source.
*
- * All other options are handled identically to svn_client_merge4().
+ * All other options are handled identically to svn_client_merge5().
* The depth of the merge is always #svn_depth_infinity.
*
* @since New in 1.5.
@@ -3768,10 +3778,34 @@ svn_client_merge_reintegrate(const char
* list of provided ranges has an `unspecified' or unrecognized
* `kind', return #SVN_ERR_CLIENT_BAD_REVISION.
*
- * All other options are handled identically to svn_client_merge4().
+ * All other options are handled identically to svn_client_merge5().
+ *
+ * @since New in 1.8.
+ */
+svn_error_t *
+svn_client_merge_peg5(const char *source_path_or_url,
+ const apr_array_header_t *ranges_to_merge,
+ const svn_opt_revision_t *source_peg_revision,
+ const char *target_wcpath,
+ svn_depth_t depth,
+ svn_boolean_t ignore_mergeinfo,
+ svn_boolean_t diff_ignore_ancestry,
+ svn_boolean_t force_delete,
+ svn_boolean_t record_only,
+ svn_boolean_t dry_run,
+ svn_boolean_t allow_mixed_rev,
+ const apr_array_header_t *merge_options,
+ svn_client_ctx_t *ctx,
+ apr_pool_t *pool);
+
+/**
+ * Similar to svn_client_merge_peg5(), but the single @a ignore_ancestry
+ * parameter maps to both @c ignore_mergeinfo and @c diff_ignore_ancestry.
*
+ * @deprecated Provided for backward compatibility with the 1.7 API.
* @since New in 1.7.
*/
+SVN_DEPRECATED
svn_error_t *
svn_client_merge_peg4(const char *source_path_or_url,
const apr_array_header_t *ranges_to_merge,
@@ -3779,7 +3813,7 @@ svn_client_merge_peg4(const char *source
const char *target_wcpath,
svn_depth_t depth,
svn_boolean_t ignore_ancestry,
- svn_boolean_t force,
+ svn_boolean_t force_delete,
svn_boolean_t record_only,
svn_boolean_t dry_run,
svn_boolean_t allow_mixed_rev,
@@ -3789,7 +3823,8 @@ svn_client_merge_peg4(const char *source
/**
* Similar to svn_client_merge_peg4(), but with @a allow_mixed_rev set to
- * @c TRUE.
+ * @c TRUE. The @a force parameter maps to the @c force_delete parameter
+ * of svn_client_merge_peg4().
*
* @deprecated Provided for backward compatibility with the 1.6 API.
*
@@ -4208,21 +4243,31 @@ svn_client_resolved(const char *path,
/** Perform automatic conflict resolution on a working copy @a path.
*
- * If @a depth is #svn_depth_empty, act only on @a path; if
- * #svn_depth_files, resolve @a path and its conflicted file
- * children (if any); if #svn_depth_immediates, resolve @a path and
- * all its immediate conflicted children (both files and directories,
- * if any); if #svn_depth_infinity, resolve @a path and every
- * conflicted file or directory anywhere beneath it.
- * Note that this operation will try to lock the parent directory of
- * @a path in order to be able to resolve tree-conflicts on @a path.
+ * If @a conflict_choice is
+ *
+ * - #svn_wc_conflict_choose_base:
+ * resolve the conflict with the old file contents
+ *
+ * - #svn_wc_conflict_choose_mine_full:
+ * use the original working contents
+ *
+ * - #svn_wc_conflict_choose_theirs_full:
+ * use the new contents
+ *
+ * - #svn_wc_conflict_choose_merged:
+ * don't change the contents at all, just remove the conflict
+ * status, which is the pre-1.5 behavior.
*
- * If @a conflict_choice is #svn_wc_conflict_choose_base, resolve the
- * conflict with the old file contents; if
- * #svn_wc_conflict_choose_mine_full, use the original working contents;
- * if #svn_wc_conflict_choose_theirs_full, the new contents; and if
- * #svn_wc_conflict_choose_merged, don't change the contents at all,
- * just remove the conflict status, which is the pre-1.5 behavior.
+ * - #svn_wc_conflict_choose_theirs_conflict
+ * ###...
+ *
+ * - #svn_wc_conflict_choose_mine_conflict
+ * ###...
+ *
+ * - svn_wc_conflict_choose_unspecified
+ * invoke @a ctx->conflict_func2 with @a ctx->conflict_baton2 to obtain
+ * a resolution decision for each conflict. This can be used to
+ * implement interactive conflict resolution.
*
* #svn_wc_conflict_choose_theirs_conflict and
* #svn_wc_conflict_choose_mine_conflict are not legal for binary
@@ -4232,6 +4277,16 @@ svn_client_resolved(const char *path,
* If @a path's conflict state is removed and @a ctx->notify_func2 is non-NULL,
* call @a ctx->notify_func2 with @a ctx->notify_baton2 and @a path.
*
+ * If @a depth is #svn_depth_empty, act only on @a path; if
+ * #svn_depth_files, resolve @a path and its conflicted file
+ * children (if any); if #svn_depth_immediates, resolve @a path and
+ * all its immediate conflicted children (both files and directories,
+ * if any); if #svn_depth_infinity, resolve @a path and every
+ * conflicted file or directory anywhere beneath it.
+ *
+ * Note that this operation will try to lock the parent directory of
+ * @a path in order to be able to resolve tree-conflicts on @a path.
+ *
* @since New in 1.5.
*/
svn_error_t *
@@ -4495,6 +4550,12 @@ svn_client_copy(svn_client_commit_info_t
* allowed. This parameter should be set to FALSE except where backwards
* compatibility to svn_client_move6() is required.
*
+ * If @a metadata_only is @c TRUE and moving a file in a working copy,
+ * everything in the metadata is updated as if the node is moved, but the
+ * actual disk move operation is not performed. This feature is useful for
+ * clients that want to keep the working copy in sync while the actual working
+ * copy is updated by some other task.
+ *
* If non-NULL, @a revprop_table is a hash table holding additional,
* custom revision properties (<tt>const char *</tt> names mapped to
* <tt>svn_string_t *</tt> values) to be set on the new revision in
@@ -4523,6 +4584,7 @@ svn_client_move7(const apr_array_header_
svn_boolean_t move_as_child,
svn_boolean_t make_parents,
svn_boolean_t allow_mixed_revisions,
+ svn_boolean_t metadata_only,
const apr_hash_t *revprop_table,
svn_commit_callback2_t commit_callback,
void *commit_baton,
@@ -4531,7 +4593,7 @@ svn_client_move7(const apr_array_header_
/**
* Similar to svn_client_move7(), but with allow_mixed_revisions always
- * set to @c TRUE.
+ * set to @c TRUE and record_only always to @c FALSE.
*
* @since New in 1.7.
* @deprecated Provided for backward compatibility with the 1.7 API.
@@ -4900,6 +4962,14 @@ svn_client_revprop_set(const char *propn
* is not @c NULL and no inheritable properties are found, then set
* @a *inherited_props to an empty array.
*
+ * The #svn_prop_inherited_item_t->path_or_url members of the
+ * #svn_prop_inherited_item_t * structures in @a *inherited_props are
+ * URLs if @a target is a URL or if @target is a working copy path but the
+ * property represented by the structure is above the working copy root (i.e.
+ * the inherited property is from the cache). In all other cases the
+ * #svn_prop_inherited_item_t->path_or_url members are absolute working copy
+ * paths.
+ *
* Allocate @a *props, its keys, and its values in @a pool, use
* @a scratch_pool for temporary allocations.
*
@@ -5394,7 +5464,7 @@ svn_client_export(svn_revnum_t *result_r
* externals, and will always finish listing an external before listing
* the next one.
- * @a pool may be used for temporary allocations.
+ * @a scratch_pool may be used for temporary allocations.
*
* @since New in 1.8.
*/
@@ -5406,7 +5476,7 @@ typedef svn_error_t *(*svn_client_list_f
const char *abs_path,
const char *external_parent_url,
const char *external_target,
- apr_pool_t *pool);
+ apr_pool_t *scratch_pool);
/**
* Similar to #svn_client_list_func2_t, but without any information about
Modified: subversion/branches/fsfs-format7/subversion/include/svn_cmdline.h
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-format7/subversion/include/svn_cmdline.h?rev=1442344&r1=1442343&r2=1442344&view=diff
==============================================================================
--- subversion/branches/fsfs-format7/subversion/include/svn_cmdline.h (original)
+++ subversion/branches/fsfs-format7/subversion/include/svn_cmdline.h Mon Feb 4 20:48:05 2013
@@ -381,6 +381,15 @@ svn_cmdline__getopt_init(apr_getopt_t **
const char *argv[],
apr_pool_t *pool);
+/* Determine whether interactive mode should be enabled, based on whether
+ * the user passed the --non-interactive or --force-interactive options.
+ * If neither option was passed, interactivity is enabled if standard
+ * input is connected to a terminal device.
+ * @since New in 1.8. */
+svn_boolean_t
+svn_cmdline__be_interactive(svn_boolean_t non_interactive,
+ svn_boolean_t force_interactive);
+
#ifdef __cplusplus
}
#endif /* __cplusplus */
Modified: subversion/branches/fsfs-format7/subversion/include/svn_config.h
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-format7/subversion/include/svn_config.h?rev=1442344&r1=1442343&r2=1442344&view=diff
==============================================================================
--- subversion/branches/fsfs-format7/subversion/include/svn_config.h (original)
+++ subversion/branches/fsfs-format7/subversion/include/svn_config.h Mon Feb 4 20:48:05 2013
@@ -34,6 +34,7 @@
#include <apr_hash.h> /* for apr_hash_t */
#include "svn_types.h"
+#include "svn_io.h"
#ifdef __cplusplus
extern "C" {
@@ -86,6 +87,10 @@ typedef struct svn_config_t svn_config_t
#define SVN_CONFIG_OPTION_STORE_SSL_CLIENT_CERT_PP_PLAINTEXT \
"store-ssl-client-cert-pp-plaintext"
#define SVN_CONFIG_OPTION_USERNAME "username"
+/** @since New in 1.8. */
+#define SVN_CONFIG_OPTION_HTTP_BULK_UPDATES "http-bulk-updates"
+/** @since New in 1.8. */
+#define SVN_CONFIG_OPTION_HTTP_MAX_CONNECTIONS "http-max-connections"
#define SVN_CONFIG_CATEGORY_CONFIG "config"
#define SVN_CONFIG_SECTION_AUTH "auth"
@@ -144,6 +149,7 @@ typedef struct svn_config_t svn_config_t
#define SVN_CONFIG_OPTION_USE_SASL "use-sasl"
#define SVN_CONFIG_OPTION_MIN_SSF "min-encryption"
#define SVN_CONFIG_OPTION_MAX_SSF "max-encryption"
+#define SVN_CONFIG_OPTION_GROUPS_DB "groups-db"
/* For repository password database */
#define SVN_CONFIG_SECTION_USERS "users"
@@ -177,6 +183,7 @@ typedef struct svn_config_t svn_config_t
#define SVN_CONFIG_DEFAULT_OPTION_STORE_SSL_CLIENT_CERT_PP TRUE
#define SVN_CONFIG_DEFAULT_OPTION_STORE_SSL_CLIENT_CERT_PP_PLAINTEXT \
SVN_CONFIG_ASK
+#define SVN_CONFIG_DEFAULT_OPTION_HTTP_MAX_CONNECTIONS 4
/** Read configuration information from the standard sources and merge it
* into the hash @a *cfg_hash. If @a config_dir is not NULL it specifies a
@@ -242,6 +249,21 @@ svn_config_read(svn_config_t **cfgp,
svn_boolean_t must_exist,
apr_pool_t *pool);
+/** Read configuration data from @a stream into @a *cfgp, allocated in
+ * @a result_pool.
+ *
+ * If @a section_names_case_sensitive is TRUE, populate section name hashes
+ * case sensitively, except for the default SVN_CONFIG__DEFAULT_SECTION.
+ *
+ * @since New in 1.8.
+ */
+
+svn_error_t *
+svn_config_parse(svn_config_t **cfgp,
+ svn_stream_t *stream,
+ svn_boolean_t section_names_case_sensitive,
+ apr_pool_t *result_pool);
+
/** Like svn_config_read(), but merges the configuration data from @a file
* (a file or registry path) into @a *cfg, which was previously returned
* from svn_config_read(). This function invalidates all value
@@ -359,6 +381,20 @@ svn_config_get_yes_no_ask(svn_config_t *
const char *option,
const char* default_value);
+/** Like svn_config_set(), but for tristate values.
+ *
+ * Sets the option to 'TRUE'/'FALSE'/'UNKNOWN', depending on @a value.
+ *
+ * @a unknown_value specifies options value value allowed for third state.
+ *
+ * @since New in 1.8.
+ */
+svn_error_t *
+svn_config_get_tristate(svn_config_t *cfg, svn_tristate_t *valuep,
+ const char *section, const char *option,
+ const char *unknown_value,
+ svn_tristate_t default_value);
+
/** Similar to @c svn_config_section_enumerator2_t, but is not
* provided with a memory pool argument.
*
Modified: subversion/branches/fsfs-format7/subversion/include/svn_dav.h
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-format7/subversion/include/svn_dav.h?rev=1442344&r1=1442343&r2=1442344&view=diff
==============================================================================
--- subversion/branches/fsfs-format7/subversion/include/svn_dav.h (original)
+++ subversion/branches/fsfs-format7/subversion/include/svn_dav.h Mon Feb 4 20:48:05 2013
@@ -192,6 +192,11 @@ extern "C" {
* @since New in 1.8. */
#define SVN_DAV_SUPPORTED_POSTS_HEADER "SVN-Supported-Posts"
+/** This header is used in the OPTIONS response to indicate if the server
+ * wants bulk update requests (Prefer) or only accepts skelta requests (Off).
+ * If this value is On both options are allowed.
+ * @since New in 1.8. */
+#define SVN_DAV_ALLOW_BULK_UPDATES "SVN-Allow-Bulk-Updates"
/**
* @name Fulltext MD5 headers
@@ -312,6 +317,20 @@ extern "C" {
#define SVN_DAV_NS_DAV_SVN_EPHEMERAL_TXNPROPS\
SVN_DAV_PROP_NS_DAV "svn/ephemeral-txnprops"
+/** Presence of this in a DAV header in an OPTIONS response indicates
+ * that the transmitter (in this case, the server) supports serving properties
+ * inline in update editor when 'send-all' is 'false'. */
+#define SVN_DAV_NS_DAV_SVN_INLINE_PROPS\
+ SVN_DAV_PROP_NS_DAV "svn/inline-props"
+
+/** Presence of this in a DAV header in an OPTIONS response indicates
+ * that the transmitter (in this case, the server) knows how to handle
+ * a replay of a revision resource. Transmitters must be
+ * HTTP-v2-enabled to support this feature. */
+#define SVN_DAV_NS_DAV_SVN_REPLAY_REV_RESOURCE\
+ SVN_DAV_PROP_NS_DAV "svn/replay-rev-resource"
+
+
/** @} */
/** @} */
Modified: subversion/branches/fsfs-format7/subversion/include/svn_delta.h
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-format7/subversion/include/svn_delta.h?rev=1442344&r1=1442343&r2=1442344&view=diff
==============================================================================
--- subversion/branches/fsfs-format7/subversion/include/svn_delta.h (original)
+++ subversion/branches/fsfs-format7/subversion/include/svn_delta.h Mon Feb 4 20:48:05 2013
@@ -41,7 +41,6 @@
#include "svn_string.h"
#include "svn_io.h"
#include "svn_checksum.h"
-#include "svn_editor.h"
#ifdef __cplusplus
extern "C" {
@@ -368,7 +367,7 @@ svn_txdelta_md5_digest(svn_txdelta_strea
* @a source and @a target are both readable generic streams. When we call
* svn_txdelta_next_window() on @a *stream, it will read from @a source and
* @a target to gather as much data as it needs. If @a calculate_checksum
- * is set, you may call @ref svn_txdelta_md5_digest to get an MD5 checksum
+ * is set, you may call svn_txdelta_md5_digest() to get an MD5 checksum
* for @a target.
*
* Do any necessary allocation in a sub-pool of @a pool.
@@ -1184,29 +1183,6 @@ svn_delta_shim_callbacks_t *
svn_delta_shim_callbacks_default(apr_pool_t *result_pool);
-/** A temporary API which conditionally inserts a double editor shim
- * into the chain of delta editors. Used for testing Editor v2.
- *
- * Whether or not the shims are inserted is controlled by a compile-time
- * option in libsvn_delta/compat.c.
- *
- * @note The use of these shims and this API will likely cause all kinds
- * of performance degredation. (Which is actually a moot point since they
- * don't even work properly yet anyway.)
- *
- * ### This should not ship in the final release.
- */
-svn_error_t *
-svn_editor__insert_shims(const svn_delta_editor_t **deditor_out,
- void **dedit_baton_out,
- const svn_delta_editor_t *deditor_in,
- void *dedit_baton_in,
- const char *repos_root,
- const char *base_dir,
- svn_delta_shim_callbacks_t *shim_callbacks,
- apr_pool_t *result_pool,
- apr_pool_t *scratch_pool);
-
/** A text-delta window handler which does nothing.
*
* Editors can return this handler from @c apply_textdelta if they don't
Modified: subversion/branches/fsfs-format7/subversion/include/svn_error.h
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-format7/subversion/include/svn_error.h?rev=1442344&r1=1442343&r2=1442344&view=diff
==============================================================================
--- subversion/branches/fsfs-format7/subversion/include/svn_error.h (original)
+++ subversion/branches/fsfs-format7/subversion/include/svn_error.h Mon Feb 4 20:48:05 2013
@@ -315,8 +315,6 @@ svn_handle_warning(FILE *stream,
* @since New in 1.7.
*/
#ifdef SVN_ERR__TRACING
-#define SVN_ERR__TRACED "traced call"
-
svn_error_t *
svn_error__trace(const char *file, long line, svn_error_t *err);
Modified: subversion/branches/fsfs-format7/subversion/include/svn_fs.h
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-format7/subversion/include/svn_fs.h?rev=1442344&r1=1442343&r2=1442344&view=diff
==============================================================================
--- subversion/branches/fsfs-format7/subversion/include/svn_fs.h (original)
+++ subversion/branches/fsfs-format7/subversion/include/svn_fs.h Mon Feb 4 20:48:05 2013
@@ -39,7 +39,6 @@
#include "svn_io.h"
#include "svn_mergeinfo.h"
#include "svn_checksum.h"
-#include "svn_editor.h"
#ifdef __cplusplus
@@ -271,29 +270,86 @@ svn_fs_upgrade(const char *path,
apr_pool_t *pool);
/**
+ * Callback function type for progress notification.
+ *
+ * @a revision is the number of the revision currently begin processed,
+ * #SVN_INVALID_REVNUM if the current stage is not linked to any specific
+ * revision. @a baton is the callback baton.
+ *
+ * @since New in 1.8.
+ */
+typedef void (*svn_fs_progress_notify_func_t)(svn_revnum_t revision,
+ void *baton,
+ apr_pool_t *pool);
+
+/**
* Perform backend-specific data consistency and correctness validations
- * to the Subversion filesystem located in the directory @a path.
- * Use @a pool for necessary allocations.
+ * to the Subversion filesystem (mainly the meta-data) located in the
+ * directory @a path. Use @a scratch_pool for temporary allocations.
*
+ * @a start and @a end are used to limit the amount of checks being done
+ * to data that is relevant to that range of revisions. However, this is
+ * only a lower limit to the actual amount of checks being done. The
+ * backend may not even be able to limit the errors begin reported.
* @a start and @a end may be #SVN_INVALID_REVNUM, in which case
* svn_repos_verify_fs2()'s semantics apply. When @c r0 is being
* verified, global invariants may be verified as well.
*
+ * The optional @a notify_func callback is only a general feedback that
+ * the operation is still in process but may be called in random revisions
+ * order and more than once for the same revision, i.e. r2, r1, r2 would
+ * be a valid sequence.
+ *
+ * The optional @a cancel_func callback will be invoked as usual to allow
+ * the user to preempt this potentially lengthy operation.
+ *
* @note You probably don't want to use this directly. Take a look at
* svn_repos_verify_fs2() instead, which does non-backend-specific
* verifications as well.
*
+ * @note To ensure a full verification using all tests and covering all
+ * revisions, you must call this function *and* #svn_fs_verify_rev.
+ *
+ * @note Implementors, please do tests that can be done efficiently for
+ * a single revision to #svn_fs_verify_rev. This function is meant for
+ * global checks or tests that require an expensive context setup.
+ *
* @since New in 1.8.
*/
svn_error_t *
svn_fs_verify(const char *path,
- svn_cancel_func_t cancel_func,
- void *cancel_baton,
svn_revnum_t start,
svn_revnum_t end,
+ svn_fs_progress_notify_func_t notify_func,
+ void *notify_baton,
+ svn_cancel_func_t cancel_func,
+ void *cancel_baton,
apr_pool_t *scratch_pool);
/**
+ * Perform backend-specific data consistency and correctness validations
+ * to revision @a revision of the Subversion filesystem @a fs.
+ * Use @a scratch_pool for temporary allocations.
+ *
+ * @note You probably don't want to use this directly. Take a look at
+ * svn_repos_verify_fs2() instead, which does non-backend-specific
+ * verifications as well.
+ *
+* @note To ensure a full verification using all tests and covering all
+ * revisions, you must call this function *and* #svn_fs_verify.
+ *
+ * @note Implementors, please do tests that cannot be done efficiently for
+ * a single revision to #svn_fs_verify. This function is meant for local
+ * checks that don't require an expensive context setup.
+ *
+ * @since New in 1.8.
+ */
+svn_error_t *
+svn_fs_verify_rev(svn_fs_t *fs,
+ svn_revnum_t revision,
+ apr_pool_t *scratch_pool);
+
+/**
* Return, in @a *fs_type, a string identifying the back-end type of
* the Subversion filesystem located in @a path. Allocate @a *fs_type
* in @a pool.
@@ -1066,118 +1122,6 @@ svn_fs_change_txn_props(svn_fs_txn_t *tx
/** @} */
-/** Editors
- *
- * ### docco
- *
- * @defgroup svn_fs_editor Transaction editors
- * @{
- */
-
-/**
- * Create a new filesystem transaction, based on based on the youngest
- * revision of @a fs, and return its name @a *txn_name and an @a *editor
- * that can be used to make changes into it.
- *
- * @a flags determines transaction enforcement behaviors, and is composed
- * from the constants SVN_FS_TXN_* (#SVN_FS_TXN_CHECK_OOD etc.). It is a
- * property of the underlying transaction, and will not change if multiple
- * editors are used to refer to that transaction (see @a autocommit, below).
- *
- * @note If you're building a txn for committing, you probably don't want
- * to call this directly. Instead, call svn_repos__get_commit_ev2(), which
- * honors the repository's hook configurations.
- *
- * When svn_editor_complete() is called for @a editor, internal resources
- * will be cleaned and nothing more will happen. If you wish to commit the
- * transaction, call svn_fs_editor_commit() instead. It is illegal to call
- * both; the second call will return #SVN_ERR_FS_INCORRECT_EDITOR_COMPLETION.
- *
- * @see svn_fs_commit_txn()
- *
- * @since New in 1.8.
- */
-svn_error_t *
-svn_fs_editor_create(svn_editor_t **editor,
- const char **txn_name,
- svn_fs_t *fs,
- apr_uint32_t flags,
- svn_cancel_func_t cancel_func,
- void *cancel_baton,
- apr_pool_t *result_pool,
- apr_pool_t *scratch_pool);
-
-
-/**
- * Like svn_fs_editor_create(), but open an existing transaction
- * @a txn_name and continue editing it.
- *
- * @since New in 1.8.
- */
-svn_error_t *
-svn_fs_editor_create_for(svn_editor_t **editor,
- svn_fs_t *fs,
- const char *txn_name,
- svn_cancel_func_t cancel_func,
- void *cancel_baton,
- apr_pool_t *result_pool,
- apr_pool_t *scratch_pool);
-
-
-/**
- * Commit the transaction represented by @a editor.
- *
- * If the commit to the filesystem succeeds, then @a *revision will be set
- * to the resulting revision number. Note that further errors may occur,
- * as described below. If the commit process does not succeed, for whatever
- * reason, then @a *revision will be set to #SVN_INVALID_REVNUM.
- *
- * If a conflict occurs during the commit, then @a *conflict_path will
- * be set to a path that caused the conflict. #SVN_NO_ERROR will be returned.
- * Callers may want to construct an #SVN_ERR_FS_CONFLICT error with a
- * message that incorporates @a *conflict_path.
- *
- * If a non-conflict error occurs during the commit, then that error will
- * be returned.
- * As is standard with any Subversion API, @a revision, @a post_commit_err,
- * and @a conflict_path (the OUT parameters) have an indeterminate value if
- * an error is returned.
- *
- * If the commit completes (and a revision is returned in @a *revision), then
- * it is still possible for an error to occur during the cleanup process.
- * Any such error will be returned in @a *post_commit_err. The caller must
- * properly use or clear that error.
- *
- * If svn_editor_complete() has already been called on @a editor, then
- * #SVN_ERR_FS_INCORRECT_EDITOR_COMPLETION will be returned.
- *
- * @note After calling this function, @a editor will be marked as completed
- * and no further operations may be performed on it. The underlying
- * transaction will either be committed or aborted once this function is
- * called. It cannot be recovered for additional work.
- *
- * @a result_pool will be used to allocate space for @a conflict_path.
- * @a scratch_pool will be used for all temporary allocations.
- *
- * @note To summarize, there are three possible outcomes of this function:
- * successful commit (with or without an associated @a *post_commit_err);
- * failed commit due to a conflict (reported via @a *conflict_path); and
- * failed commit for some other reason (reported via the returned error.)
- *
- * @since New in 1.8.
- */
-svn_error_t *
-svn_fs_editor_commit(svn_revnum_t *revision,
- svn_error_t **post_commit_err,
- const char **conflict_path,
- svn_editor_t *editor,
- apr_pool_t *result_pool,
- apr_pool_t *scratch_pool);
-
-
-/** @} */
-
-
/** Roots.
*
* An #svn_fs_root_t object represents the root directory of some
Modified: subversion/branches/fsfs-format7/subversion/include/svn_io.h
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-format7/subversion/include/svn_io.h?rev=1442344&r1=1442343&r2=1442344&view=diff
==============================================================================
--- subversion/branches/fsfs-format7/subversion/include/svn_io.h (original)
+++ subversion/branches/fsfs-format7/subversion/include/svn_io.h Mon Feb 4 20:48:05 2013
@@ -741,7 +741,7 @@ svn_io_file_lock2(const char *lock_file,
* is not available: throw an error instead.
*
* Lock will be automatically released when @a pool is cleared or destroyed.
- * You may also explicitly call @ref svn_io_unlock_open_file.
+ * You may also explicitly call svn_io_unlock_open_file().
* Use @a pool for memory allocations. @a pool must be the pool that
* @a lockfile_handle has been created in or one of its sub-pools.
*
@@ -1570,10 +1570,31 @@ svn_io_get_dirents(apr_hash_t **dirents,
/** Create a svn_io_dirent2_t instance for path. Specialized variant of
* svn_io_stat() that directly translates node_kind and special.
*
+ * If @a verify_truename is @c TRUE, an additional check is performed to
+ * verify the truename of the last path component on case insensitive
+ * filesystems. This check is expensive compared to a just a stat,
+ * but certainly cheaper than a full truename calculation using
+ * apr_filepath_merge() which verifies all path components.
+ *
* If @a ignore_enoent is set to @c TRUE, set *dirent_p->kind to
* svn_node_none instead of returning an error.
*
+ * @since New in 1.8.
+ */
+svn_error_t *
+svn_io_stat_dirent2(const svn_io_dirent2_t **dirent_p,
+ const char *path,
+ svn_boolean_t verify_truename,
+ svn_boolean_t ignore_enoent,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
+
+
+/** Similar to svn_io_stat_dirent2, but always passes FALSE for
+ * verify_truename.
+ *
* @since New in 1.7.
+ * @deprecated Provided for backwards compatibility with the 1.7 API.
*/
svn_error_t *
svn_io_stat_dirent(const svn_io_dirent2_t **dirent_p,
@@ -1952,7 +1973,8 @@ svn_boolean_t
svn_io_is_binary_data(const void *buf, apr_size_t len);
-/** Wrapper for apr_file_open(). @a fname is utf8-encoded. */
+/** Wrapper for apr_file_open(). @a fname is utf8-encoded.
+ Always passed flag | APR_BINARY to apr. */
svn_error_t *
svn_io_file_open(apr_file_t **new_file,
const char *fname,
Modified: subversion/branches/fsfs-format7/subversion/include/svn_mergeinfo.h
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-format7/subversion/include/svn_mergeinfo.h?rev=1442344&r1=1442343&r2=1442344&view=diff
==============================================================================
--- subversion/branches/fsfs-format7/subversion/include/svn_mergeinfo.h (original)
+++ subversion/branches/fsfs-format7/subversion/include/svn_mergeinfo.h Mon Feb 4 20:48:05 2013
@@ -315,6 +315,9 @@ svn_rangelist_diff(svn_rangelist_t **del
* in sorted order and be compacted to the minimal number of ranges
* needed to represent the merged result.
*
+ * If the original rangelisted contain non collapsed adjacent ranges, the
+ * final result is not guaranteed to be compacted either.
+ *
* Use @a scratch_pool for temporary allocations.
*
* @since New in 1.8.
@@ -331,6 +334,9 @@ svn_rangelist_merge2(svn_rangelist_t *ra
* in place. If not used carefully, this function can use up a lot of memory
* if called in a loop.
*
+ * It performs an extra adjacent range compaction round to make sure non
+ * collapsed input ranges are compacted in the result.
+ *
* @since New in 1.5.
* @deprecated Provided for backward compatibility with the 1.7 API.
*/
Modified: subversion/branches/fsfs-format7/subversion/include/svn_path.h
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-format7/subversion/include/svn_path.h?rev=1442344&r1=1442343&r2=1442344&view=diff
==============================================================================
--- subversion/branches/fsfs-format7/subversion/include/svn_path.h (original)
+++ subversion/branches/fsfs-format7/subversion/include/svn_path.h Mon Feb 4 20:48:05 2013
@@ -670,6 +670,58 @@ svn_path_cstring_to_utf8(const char **pa
/** @} */
+
+/** Repository relative URLs
+ *
+ * @defgroup svn_path_repos_relative_urls Repository relative URLs
+ * @{
+ */
+
+
+/**
+ * Return true iff @a path is a repository-relative URL: specifically that
+ * it starts with the characters "^/"
+ *
+ * @a path is in UTF-8 encoding.
+ *
+ * Does not check whether @a path is a properly URI-encoded, canonical, or
+ * valid in any other way.
+ *
+ * @since New in 1.8.
+ */
+svn_boolean_t
+svn_path_is_repos_relative_url(const char *path);
+
+/**
+ * Set @a absolute_url to the absolute URL represented by @a relative_url
+ * relative to @a repos_root_url. @a absolute_url will be allocated in
+ * @a pool.
+ *
+ * @a absolute_url will end with a peg revision specifier if @a relative_url
+ * did.
+ *
+ * @a relative_url is in repository-relative syntax: "^/[REL-URL][@PEG]"
+ *
+ * @a repos_root_url is the absolute url of the repository root.
+ *
+ * All strings are in UTF-8 encoding.
+ *
+ * @a repos_root_url and @a relative_url do not have to be properly
+ * URI-encoded, canonical, or valid in any other way. The caller is expected
+ * to perform canonicalization on @a absolute_url after the call to the
+ * function.
+ *
+ * @since New in 1.8.
+ */
+svn_error_t *
+svn_path_resolve_repos_relative_url(const char **absolute_url,
+ const char *relative_url,
+ const char *repos_root_url,
+ apr_pool_t *pool);
+
+
+/** @} */
+
#ifdef __cplusplus
}
#endif /* __cplusplus */
Modified: subversion/branches/fsfs-format7/subversion/include/svn_pools.h
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-format7/subversion/include/svn_pools.h?rev=1442344&r1=1442343&r2=1442344&view=diff
==============================================================================
--- subversion/branches/fsfs-format7/subversion/include/svn_pools.h (original)
+++ subversion/branches/fsfs-format7/subversion/include/svn_pools.h Mon Feb 4 20:48:05 2013
@@ -87,7 +87,7 @@ svn_pool_create_ex_debug(pool, allocator
#define svn_pool_destroy apr_pool_destroy
/** Return a new allocator. This function limits the unused memory in the
- * new allocator to @ref SVN_ALLOCATOR_RECOMMENDED_MAX_FREE and ensures
+ * new allocator to #SVN_ALLOCATOR_RECOMMENDED_MAX_FREE and ensures
* proper synchronization if the allocator is used by multiple threads.
*
* If your application uses multiple threads, creating a separate allocator
Modified: subversion/branches/fsfs-format7/subversion/include/svn_props.h
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-format7/subversion/include/svn_props.h?rev=1442344&r1=1442343&r2=1442344&view=diff
==============================================================================
--- subversion/branches/fsfs-format7/subversion/include/svn_props.h (original)
+++ subversion/branches/fsfs-format7/subversion/include/svn_props.h Mon Feb 4 20:48:05 2013
@@ -110,7 +110,7 @@ typedef struct svn_prop_inherited_item_t
* @since New in 1.5.
*/
apr_array_header_t *
-svn_prop_hash_to_array(apr_hash_t *hash,
+svn_prop_hash_to_array(const apr_hash_t *hash,
apr_pool_t *pool);
/**
@@ -133,7 +133,7 @@ svn_prop_array_to_hash(const apr_array_h
* @since New in 1.6.
*/
apr_hash_t *
-svn_prop_hash_dup(apr_hash_t *hash,
+svn_prop_hash_dup(const apr_hash_t *hash,
apr_pool_t *pool);
/**
@@ -144,7 +144,7 @@ svn_prop_hash_dup(apr_hash_t *hash,
* @since New in 1.7.
*/
const char *
-svn_prop_get_value(apr_hash_t *properties,
+svn_prop_get_value(const apr_hash_t *properties,
const char *prop_name);
/**
@@ -187,14 +187,17 @@ svn_property_kind(int *prefix_len,
/** Return @c TRUE iff @a prop_name represents the name of a Subversion
- * property.
+ * property. That is, any property name in Subversion's name space for
+ * versioned or unversioned properties, regardless whether the particular
+ * property name is recognized.
*/
svn_boolean_t
svn_prop_is_svn_prop(const char *prop_name);
/** Return @c TRUE iff @a props has at least one property whose name
- * represents the name of a Subversion property.
+ * represents the name of a Subversion property, in the sense of
+ * svn_prop_is_svn_prop().
*
* @since New in 1.5.
*/
@@ -210,6 +213,57 @@ svn_prop_has_svn_prop(const apr_hash_t *
svn_boolean_t
svn_prop_is_boolean(const char *prop_name);
+/** Return @c TRUE iff @a prop_name is in the "svn:" name space and is a
+ * known revision property. For example, svn:log or svn:date.
+ *
+ * This will return FALSE for any property name that is not known by this
+ * version of the library, even though the name may be known to other (for
+ * example, later) Subversion software.
+ *
+ * @since New in 1.8
+ */
+svn_boolean_t
+svn_prop_is_known_svn_rev_prop(const char *prop_name);
+
+/** Return @c TRUE iff @a prop_name is in the "svn:" name space and is a
+ * known versioned property that is allowed on a file and/or on a directory.
+ * For example, svn:eol-style or svn:ignore or svn:mergeinfo.
+ *
+ * This will return FALSE for any property name that is not known by this
+ * version of the library, even though the name may be known to other (for
+ * example, later) Subversion software.
+ *
+ * @since New in 1.8
+ */
+svn_boolean_t
+svn_prop_is_known_svn_node_prop(const char *prop_name);
+
+/** Return @c TRUE iff @a prop_name is in the "svn:" name space and is a
+ * known versioned property that is allowed on a file. For example,
+ * svn:eol-style or svn:mergeinfo.
+ *
+ * This will return FALSE for any property name that is not known by this
+ * version of the library, even though the name may be known to other (for
+ * example, later) Subversion software.
+ *
+ * @since New in 1.8
+ */
+svn_boolean_t
+svn_prop_is_known_svn_file_prop(const char *prop_name);
+
+/** Return @c TRUE iff @a prop_name represents the name of a Subversion
+ * known versioned property that is allowed on a directory. For example,
+ * svn:ignore or svn:mergeinfo.
+ *
+ * This will return FALSE for any property name that is not known by this
+ * version of the library, even though the name may be known to other (for
+ * example, later) Subversion software.
+ *
+ * @since New in 1.8
+ */
+svn_boolean_t
+svn_prop_is_known_svn_dir_prop(const char *prop_name);
+
/** If @a prop_name requires that its value be stored as UTF8/LF in the
* repository, then return @c TRUE. Else return @c FALSE. This is for
* users of libsvn_client or libsvn_fs, since it their responsibility
@@ -263,8 +317,8 @@ svn_categorize_props(const apr_array_hea
*/
svn_error_t *
svn_prop_diffs(apr_array_header_t **propdiffs,
- apr_hash_t *target_props,
- apr_hash_t *source_props,
+ const apr_hash_t *target_props,
+ const apr_hash_t *source_props,
apr_pool_t *pool);
@@ -357,19 +411,21 @@ svn_prop_name_is_valid(const char *prop_
/** Describes external items to check out into this directory.
*
- * The format is a series of lines, such as:
- *
- * <pre reason="Should use 'verbatim' instead, but Doxygen v1.6.1 & v1.7.1
- * then doesn't recognize the #define; presumably a bug.">
- localdir1 http://url.for.external.source/etc/
- localdir1/foo http://url.for.external.source/foo
- localdir1/bar http://blah.blah.blah/repositories/theirproj
- localdir1/bar/baz http://blorg.blorg.blorg/basement/code
- localdir2 http://another.url/blah/blah/blah
- localdir3 http://and.so.on/and/so/forth </pre>
- *
- * The subdir names on the left side are relative to the directory on
- * which this property is set.
+ * The format is a series of lines, each in the following format:
+ * [-r REV] URL[@PEG] LOCALPATH
+ * LOCALPATH is relative to the directory having this property.
+ * REV pins the external to revision REV.
+ * URL may be a full URL or a relative URL starting with one of:
+ * ../ to the parent directory of the extracted external
+ * ^/ to the repository root
+ * / to the server root
+ * // to the URL scheme
+ * The following format is supported for interoperability with
+ * Subversion 1.4 and earlier clients:
+ * LOCALPATH [-r PEG] URL
+ * The ambiguous format 'relative_path relative_path' is taken as
+ * 'relative_url relative_path' with peg revision support.
+ * Lines starting with a '#' character are ignored.
*/
#define SVN_PROP_EXTERNALS SVN_PROP_PREFIX "externals"
@@ -449,7 +505,7 @@ svn_prop_name_is_valid(const char *prop_
SVN_PROP_TEXT_TIME, \
SVN_PROP_OWNER, \
SVN_PROP_GROUP, \
- SVN_PROP_UNIX_MODE
+ SVN_PROP_UNIX_MODE,
/** @} */
@@ -545,25 +601,37 @@ svn_prop_name_is_valid(const char *prop_
/* More reserved revision props in the 'svn:' namespace, used by the
svnsync tool: */
-/** Prefix for all svnsync custom properties. */
+/** Prefix for all svnsync custom properties.
+ * @since New in 1.4.
+ */
#define SVNSYNC_PROP_PREFIX SVN_PROP_PREFIX "sync-"
/* The following revision properties are set on revision 0 of
* destination repositories by svnsync:
*/
-/** Used to enforce mutually exclusive destination repository access. */
+/** Used to enforce mutually exclusive destination repository access.
+ * @since New in 1.4.
+ */
#define SVNSYNC_PROP_LOCK SVNSYNC_PROP_PREFIX "lock"
-/** Identifies the repository's source URL. */
+/** Identifies the repository's source URL.
+ * @since New in 1.4.
+ */
#define SVNSYNC_PROP_FROM_URL SVNSYNC_PROP_PREFIX "from-url"
-/** Identifies the repository's source UUID. */
+/** Identifies the repository's source UUID.
+ * @since New in 1.4.
+ */
#define SVNSYNC_PROP_FROM_UUID SVNSYNC_PROP_PREFIX "from-uuid"
-/** Identifies the last completely mirrored revision. */
+/** Identifies the last completely mirrored revision.
+ * @since New in 1.4.
+ */
#define SVNSYNC_PROP_LAST_MERGED_REV SVNSYNC_PROP_PREFIX "last-merged-rev"
-/** Identifies the revision currently being copied. */
+/** Identifies the revision currently being copied.
+ * @since New in 1.4.
+ */
#define SVNSYNC_PROP_CURRENTLY_COPYING SVNSYNC_PROP_PREFIX "currently-copying"
Modified: subversion/branches/fsfs-format7/subversion/include/svn_ra.h
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-format7/subversion/include/svn_ra.h?rev=1442344&r1=1442343&r2=1442344&view=diff
==============================================================================
--- subversion/branches/fsfs-format7/subversion/include/svn_ra.h (original)
+++ subversion/branches/fsfs-format7/subversion/include/svn_ra.h Mon Feb 4 20:48:05 2013
@@ -1930,6 +1930,11 @@ svn_ra_get_deleted_rev(svn_ra_session_t
* inheritable properties are found, then set @a *inherited_props to
* an empty array.
*
+ * The #svn_prop_inherited_item_t->path_or_url members of the
+ * #svn_prop_inherited_item_t * structures in @a *inherited_props are
+ * paths relative to the repository root URL (of the repository which
+ * @a ra_session is associated).
+ *
* Allocated @a *inherited_props in @a result_pool, use @a scratch_pool
* for temporary allocations.
*
Modified: subversion/branches/fsfs-format7/subversion/include/svn_repos.h
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-format7/subversion/include/svn_repos.h?rev=1442344&r1=1442343&r2=1442344&view=diff
==============================================================================
--- subversion/branches/fsfs-format7/subversion/include/svn_repos.h (original)
+++ subversion/branches/fsfs-format7/subversion/include/svn_repos.h Mon Feb 4 20:48:05 2013
@@ -245,7 +245,10 @@ typedef enum svn_repos_notify_action_t
svn_repos_notify_upgrade_start,
/** A revision was skipped during loading. @since New in 1.8. */
- svn_repos_notify_load_skipped_rev
+ svn_repos_notify_load_skipped_rev,
+
+ /** The structure of a revision is being verified. @since New in 1.8. */
+ svn_repos_notify_verify_struc_rev
} svn_repos_notify_action_t;
@@ -1321,7 +1324,8 @@ svn_repos_replay(svn_fs_root_t *root,
*
* @a repos is a previously opened repository. @a repos_url is the
* decoded URL to the base of the repository, and is used to check
- * copyfrom paths. @a txn is a filesystem transaction object to use
+ * copyfrom paths. copyfrom paths passed to the editor must be full,
+ * URI-encoded, URLs. @a txn is a filesystem transaction object to use
* during the commit, or @c NULL to indicate that this function should
* create (and fully manage) a new transaction.
*
@@ -3147,16 +3151,15 @@ svn_repos_get_fs_build_parser(const svn_
*/
typedef struct svn_authz_t svn_authz_t;
-/** Read authz configuration data from @a file (a file or registry
- * path) into @a *authz_p, allocated in @a pool.
- *
- * If @a file is not a valid authz rule file, then return
- * SVN_AUTHZ_INVALID_CONFIG. The contents of @a *authz_p is then
- * undefined. If @a must_exist is TRUE, a missing authz file is also
- * an error.
+/**
+ * Similar to svn_repos_authz_read2(), but without support for
+ * authz files stored in a Subversion repository (absolute or
+ * relative URLs) and without the @a repos_root argument.
*
* @since New in 1.3.
+ * @deprecated Provided for backward compatibility with the 1.7 API.
*/
+SVN_DEPRECATED
svn_error_t *
svn_repos_authz_read(svn_authz_t **authz_p,
const char *file,
@@ -3164,6 +3167,49 @@ svn_repos_authz_read(svn_authz_t **authz
apr_pool_t *pool);
/**
+ * Read authz configuration data from @a path (a file, repos relative
+ * url, an absolute file url, or a registry path) into @a *authz_p,
+ * allocated in @a pool.
+ *
+ * If @a groups_path (a file, repos relative url, an absolute file url,
+ * or a registry path) is set, use the global groups parsed from it.
+ *
+ * If @a path or @a groups_path is not a valid authz rule file, then return
+ * #SVN_ERR_AUTHZ_INVALID_CONFIG. The contents of @a *authz_p is then
+ * undefined. If @a must_exist is TRUE, a missing authz or groups file
+ * is also an error other than #SVN_ERR_AUTHZ_INVALID_CONFIG (exact error
+ * depends on the access type).
+ *
+ * If @a path is a repos relative URL then @a repos_root must be set to
+ * the root of the repository the authz configuration will be used with.
+ * The same applies to @a groups_path if it is being used.
+ *
+ * @since New in 1.8
+ */
+svn_error_t *
+svn_repos_authz_read2(svn_authz_t **authz_p,
+ const char *path,
+ const char *groups_path,
+ svn_boolean_t must_exist,
+ const char *repos_root,
+ apr_pool_t *pool);
+
+
+/**
+ * Read authz configuration data from @a stream into @a *authz_p,
+ * allocated in @a pool.
+ *
+ * If @a groups_stream is set, use the global groups parsed from it.
+ *
+ * @since New in 1.8
+ */
+svn_error_t *
+svn_repos_authz_parse(svn_authz_t **authz_p,
+ svn_stream_t *stream,
+ svn_stream_t *groups_stream,
+ apr_pool_t *pool);
+
+/**
* Check whether @a user can access @a path in the repository @a
* repos_name with the @a required_access. @a authz lists the ACLs to
* check against. Set @a *access_granted to indicate if the requested
@@ -3282,6 +3328,9 @@ svn_repos_check_revision_access(svn_repo
* inherited by @a path in @a root. If no properties are inherited,
* then set @a *inherited_values to an empty array.
*
+ * if @a propname is NULL then retrieve all explicit and/or inherited
+ * properties. Otherwise retrieve only the properties named @a propname.
+ *
* If optional @a authz_read_func is non-NULL, then use this function
* (along with optional @a authz_read_baton) to check the readability
* of each parent path from which properties are inherited. Silently omit
@@ -3296,6 +3345,7 @@ svn_error_t *
svn_repos_fs_get_inherited_props(apr_array_header_t **inherited_props,
svn_fs_root_t *root,
const char *path,
+ const char *propname,
svn_repos_authz_func_t authz_read_func,
void *authz_read_baton,
apr_pool_t *result_pool,
Modified: subversion/branches/fsfs-format7/subversion/include/svn_string.h
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-format7/subversion/include/svn_string.h?rev=1442344&r1=1442343&r2=1442344&view=diff
==============================================================================
--- subversion/branches/fsfs-format7/subversion/include/svn_string.h (original)
+++ subversion/branches/fsfs-format7/subversion/include/svn_string.h Mon Feb 4 20:48:05 2013
@@ -54,13 +54,13 @@
*
* Note that an @c svn_string(buf)_t may contain binary data,
* which means that strlen(s->data) does not have to equal @c
- * s->len. The NULL terminator is provided to make it easier to
+ * s->len. The null terminator is provided to make it easier to
* pass @c s->data to C string interfaces.
*
*
* 2. Non-NULL input:
*
- * All the functions assume their input data is non-NULL,
+ * All the functions assume their input data pointer is non-NULL,
* unless otherwise documented, and may seg fault if passed
* NULL. The input data may *contain* null bytes, of course, just
* the data pointer itself must not be NULL.
@@ -125,40 +125,46 @@ typedef struct svn_stringbuf_t
* @{
*/
-/** Create a new bytestring containing a C string (NULL-terminated). */
+/** Create a new string copied from the null-terminated C string @a cstring.
+ */
svn_string_t *
svn_string_create(const char *cstring, apr_pool_t *pool);
-/** Create a truely empty string object (length is 0)
+/** Create a new, empty string.
+ *
* @since New in 1.8.
*/
svn_string_t *
svn_string_create_empty(apr_pool_t *pool);
-/** Create a new bytestring containing a generic string of bytes
- * (NOT NULL-terminated) */
+/** Create a new string copied from a generic string of bytes, @a bytes, of
+ * length @a size bytes. @a bytes is NOT assumed to be null-terminated, but
+ * the new string will be.
+ */
svn_string_t *
svn_string_ncreate(const char *bytes, apr_size_t size, apr_pool_t *pool);
-/** Create a new string with the contents of the given stringbuf */
+/** Create a new string copied from the stringbuf @a strbuf.
+ */
svn_string_t *
svn_string_create_from_buf(const svn_stringbuf_t *strbuf, apr_pool_t *pool);
-/** Create a new bytestring by formatting @a cstring (NULL-terminated)
- * from varargs, which are as appropriate for apr_psprintf().
+/** Create a new string by printf-style formatting using @a fmt and the
+ * variable arguments, which are as appropriate for apr_psprintf().
*/
svn_string_t *
svn_string_createf(apr_pool_t *pool, const char *fmt, ...)
__attribute__((format(printf, 2, 3)));
-/** Create a new bytestring by formatting @a cstring (NULL-terminated)
- * from a @c va_list (see svn_stringbuf_createf()).
+/** Create a new string by printf-style formatting using @c fmt and @a ap.
+ * This is the same as svn_string_createf() except for the different
+ * way of passing the variable arguments.
*/
svn_string_t *
svn_string_createv(apr_pool_t *pool, const char *fmt, va_list ap)
__attribute__((format(printf, 2, 0)));
-/** Return TRUE if a bytestring is empty (has length zero). */
+/** Return TRUE if @a str is empty (has length zero). */
svn_boolean_t
svn_string_isempty(const svn_string_t *str);
@@ -190,23 +196,27 @@ svn_string_find_char_backward(const svn_
* @{
*/
-/** Create a new bytestring containing a C string (NULL-terminated). */
+/** Create a new stringbuf copied from the null-terminated C string
+ * @a cstring.
+ */
svn_stringbuf_t *
svn_stringbuf_create(const char *cstring, apr_pool_t *pool);
-/** Create a new bytestring containing a generic string of bytes
- * (NON-NULL-terminated)
+/** Create a new stringbuf copied from the generic string of bytes, @a bytes,
+ * of length @a size bytes. @a bytes is NOT assumed to be null-terminated,
+ * but the new stringbuf will be.
*/
svn_stringbuf_t *
svn_stringbuf_ncreate(const char *bytes, apr_size_t size, apr_pool_t *pool);
-/** Create a new, empty bytestring.
+/** Create a new, empty stringbuf.
+ *
* @since New in 1.8.
*/
svn_stringbuf_t *
svn_stringbuf_create_empty(apr_pool_t *pool);
-/** Create a new empty bytestring with at least @a minimum_size bytes of
+/** Create a new, empty stringbuf with at least @a minimum_size bytes of
* space available in the memory block.
*
* The allocated string buffer will be at least one byte larger than
@@ -217,7 +227,8 @@ svn_stringbuf_create_empty(apr_pool_t *p
svn_stringbuf_t *
svn_stringbuf_create_ensure(apr_size_t minimum_size, apr_pool_t *pool);
-/** Create a new stringbuf with the contents of the given string */
+/** Create a new stringbuf copied from the string @a str.
+ */
svn_stringbuf_t *
svn_stringbuf_create_from_string(const svn_string_t *str, apr_pool_t *pool);
@@ -229,21 +240,22 @@ svn_stringbuf_create_from_string(const s
svn_stringbuf_t *
svn_stringbuf_create_wrap(char *str, apr_pool_t *pool);
-/** Create a new bytestring by formatting @a cstring (NULL-terminated)
- * from varargs, which are as appropriate for apr_psprintf().
+/** Create a new stringbuf by printf-style formatting using @a fmt and the
+ * variable arguments, which are as appropriate for apr_psprintf().
*/
svn_stringbuf_t *
svn_stringbuf_createf(apr_pool_t *pool, const char *fmt, ...)
__attribute__((format(printf, 2, 3)));
-/** Create a new bytestring by formatting @a cstring (NULL-terminated)
- * from a @c va_list (see svn_stringbuf_createf()).
+/** Create a new stringbuf by printf-style formatting using @c fmt and @a ap.
+ * This is the same as svn_stringbuf_createf() except for the different
+ * way of passing the variable arguments.
*/
svn_stringbuf_t *
svn_stringbuf_createv(apr_pool_t *pool, const char *fmt, va_list ap)
__attribute__((format(printf, 2, 0)));
-/** Make sure that the stringbuf @a str has at least @a minimum_size
+/** Make sure that @a str has at least @a minimum_size
* bytes of space available in the memory block.
*
* The allocated string buffer will be at least one byte larger than
@@ -257,15 +269,15 @@ svn_stringbuf_createv(apr_pool_t *pool,
void
svn_stringbuf_ensure(svn_stringbuf_t *str, apr_size_t minimum_size);
-/** Set a bytestring @a str to @a value */
+/** Set @a str to a copy of the null-terminated C string @a value. */
void
svn_stringbuf_set(svn_stringbuf_t *str, const char *value);
-/** Set a bytestring @a str to empty (0 length). */
+/** Set @a str to empty (zero length). */
void
svn_stringbuf_setempty(svn_stringbuf_t *str);
-/** Return @c TRUE if a bytestring is empty (has length zero). */
+/** Return @c TRUE if @a str is empty (has length zero). */
svn_boolean_t
svn_stringbuf_isempty(const svn_stringbuf_t *str);
@@ -273,11 +285,12 @@ svn_stringbuf_isempty(const svn_stringbu
void
svn_stringbuf_chop(svn_stringbuf_t *str, apr_size_t nbytes);
-/** Fill bytestring @a str with character @a c. */
+/** Fill @a str with character @a c. */
void
svn_stringbuf_fillchar(svn_stringbuf_t *str, unsigned char c);
-/** Append a single character @a byte onto @a targetstr.
+/** Append the single character @a byte onto @a targetstr.
+ *
* This is an optimized version of svn_stringbuf_appendbytes()
* that is much faster to call and execute. Gains vary with the ABI.
* The advantages extend beyond the actual call because the reduced
@@ -299,7 +312,7 @@ svn_stringbuf_appendbytes(svn_stringbuf_
const char *bytes,
apr_size_t count);
-/** Append an @c svn_stringbuf_t onto @a targetstr.
+/** Append the stringbuf @c appendstr onto @a targetstr.
*
* reallocs if necessary. @a targetstr is affected, nothing else is.
*/
@@ -307,7 +320,7 @@ void
svn_stringbuf_appendstr(svn_stringbuf_t *targetstr,
const svn_stringbuf_t *appendstr);
-/** Append a C string onto @a targetstr.
+/** Append the C string @a cstr onto @a targetstr.
*
* reallocs if necessary. @a targetstr is affected, nothing else is.
*/
Modified: subversion/branches/fsfs-format7/subversion/include/svn_subst.h
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-format7/subversion/include/svn_subst.h?rev=1442344&r1=1442343&r2=1442344&view=diff
==============================================================================
--- subversion/branches/fsfs-format7/subversion/include/svn_subst.h (original)
+++ subversion/branches/fsfs-format7/subversion/include/svn_subst.h Mon Feb 4 20:48:05 2013
@@ -128,8 +128,14 @@ typedef struct svn_subst_keywords_t
* given a @a keywords_string (the contents of the svn:keywords
* property for the file in question), the revision @a rev, the @a url,
* the @a date the file was committed on, and the @a author of the last
- * commit. Any of these can be @c NULL to indicate that the information is
- * not present, or @c 0 for @a date.
+ * commit.
+ *
+ * Any of the inputs @a rev, @a url, @a date and @a author can be @c NULL,
+ * or @c 0 for @a date, to indicate that the information is not present.
+ * Each piece of information that is not present expands to the empty
+ * string wherever it appears in an expanded keyword value. (This can
+ * result in multiple adjacent spaces in the expansion of a multi-valued
+ * keyword such as "Id".)
*
* Hash keys are of type <tt>const char *</tt>.
* Hash values are of type <tt>svn_string_t *</tt>.
Modified: subversion/branches/fsfs-format7/subversion/include/svn_types.h
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-format7/subversion/include/svn_types.h?rev=1442344&r1=1442343&r2=1442344&view=diff
==============================================================================
--- subversion/branches/fsfs-format7/subversion/include/svn_types.h (original)
+++ subversion/branches/fsfs-format7/subversion/include/svn_types.h Mon Feb 4 20:48:05 2013
@@ -550,8 +550,7 @@ svn_depth_from_word(const char *word);
* non-recursive (which in turn usually translates to #svn_depth_files).
*/
#define SVN_DEPTH_IS_RECURSIVE(depth) \
- (((depth) == svn_depth_infinity || (depth) == svn_depth_unknown) \
- ? TRUE : FALSE)
+ ((depth) == svn_depth_infinity || (depth) == svn_depth_unknown)
@@ -588,7 +587,13 @@ svn_depth_from_word(const char *word);
/** @} */
-/** A general subversion directory entry. */
+/** A general subversion directory entry.
+ *
+ * @note To allow for extending the #svn_dirent_t structure in future
+ * releases, always use svn_dirent_create() to allocate the stucture.
+ *
+ * @since New in 1.6.
+ */
typedef struct svn_dirent_t
{
/** node kind */
@@ -620,6 +625,14 @@ svn_dirent_t *
svn_dirent_dup(const svn_dirent_t *dirent,
apr_pool_t *pool);
+/**
+ * Create a new svn_dirent_t instance with all values initialized to their
+ * not-available values.
+ *
+ * @since New in 1.8.
+ */
+svn_dirent_t *
+svn_dirent_create(apr_pool_t *result_pool);
/** Keyword substitution.
@@ -1212,7 +1225,7 @@ svn_merge_range_contains_rev(const svn_m
* @{ */
/**
- * A representation of a segment of a object's version history with an
+ * A representation of a segment of an object's version history with an
* emphasis on the object's location in the repository as of various
* revisions.
*
@@ -1221,7 +1234,7 @@ svn_merge_range_contains_rev(const svn_m
typedef struct svn_location_segment_t
{
/** The beginning (oldest) and ending (youngest) revisions for this
- segment. */
+ segment, both inclusive. */
svn_revnum_t range_start;
svn_revnum_t range_end;