You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by br...@apache.org on 2012/08/16 12:18:03 UTC
svn commit: r1373783 [5/50] - in /subversion/branches/compressed-pristines:
./ build/ build/ac-macros/ build/generator/ build/generator/templates/
build/win32/ contrib/client-side/emacs/ contrib/client-side/svn-push/
contrib/client-side/svnmerge/ contr...
Modified: subversion/branches/compressed-pristines/subversion/include/svn_delta.h
URL: http://svn.apache.org/viewvc/subversion/branches/compressed-pristines/subversion/include/svn_delta.h?rev=1373783&r1=1373782&r2=1373783&view=diff
==============================================================================
--- subversion/branches/compressed-pristines/subversion/include/svn_delta.h (original)
+++ subversion/branches/compressed-pristines/subversion/include/svn_delta.h Thu Aug 16 10:17:48 2012
@@ -367,10 +367,26 @@ 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.
+ * @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
+ * for @a target.
*
* Do any necessary allocation in a sub-pool of @a pool.
+ *
+ * @since New in 1.8.
+ */
+void
+svn_txdelta2(svn_txdelta_stream_t **stream,
+ svn_stream_t *source,
+ svn_stream_t *target,
+ svn_boolean_t calculate_checksum,
+ apr_pool_t *pool);
+
+/** Similar to svn_txdelta2 but always calculating the target checksum.
+ *
+ * @deprecated Provided for backward compatibility with the 1.7 API.
*/
+SVN_DEPRECATED
void
svn_txdelta(svn_txdelta_stream_t **stream,
svn_stream_t *source,
@@ -1285,19 +1301,40 @@ typedef svn_error_t *(*svn_delta_path_dr
apr_pool_t *pool);
-/** Drive @a editor (with its @a edit_baton) in such a way that
- * each path in @a paths is traversed in a depth-first fashion. As
- * each path is hit as part of the editor drive, use @a
- * callback_func and @a callback_baton to allow the caller to handle
+/** Drive @a editor (with its @a edit_baton) to visit each path in @a paths.
+ * As each path is hit as part of the editor drive, use
+ * @a callback_func and @a callback_baton to allow the caller to handle
* the portion of the editor drive related to that path.
*
- * Use @a revision as the revision number passed to intermediate
- * directory openings.
+ * Each path in @a paths is a const char *. The editor drive will be
+ * performed in the same order as @a paths. The paths should be sorted
+ * using something like svn_sort_compare_paths to ensure that a depth-first
+ * pattern is observed for directory/file baton creation. Some callers may
+ * need further customization of the order (ie. libsvn_delta/compat.c).
+ *
+ * Use @a scratch_pool for all necessary allocations.
*
- * Each path in @a paths is a const char *.
+ * @since New in 1.8.
+ */
+svn_error_t *
+svn_delta_path_driver2(const svn_delta_editor_t *editor,
+ void *edit_baton,
+ const apr_array_header_t *paths,
+ svn_delta_path_driver_cb_func_t callback_func,
+ void *callback_baton,
+ apr_pool_t *scratch_pool);
+
+
+/** Similar to svn_delta_path_driver2, but takes an (unused) revision,
+ * and will sort the provided @a paths using svn_sort_compare_paths.
+ *
+ * @note In versions prior to 1.8, this function would modify the order
+ * of elements in @a paths, despite the 'const' marker on the parameter.
+ * This has been fixed in 1.8.
*
- * Use @a pool for all necessary allocations.
+ * @deprecated Provided for backward compatibility with the 1.7 API.
*/
+SVN_DEPRECATED
svn_error_t *
svn_delta_path_driver(const svn_delta_editor_t *editor,
void *edit_baton,
@@ -1305,7 +1342,7 @@ svn_delta_path_driver(const svn_delta_ed
const apr_array_header_t *paths,
svn_delta_path_driver_cb_func_t callback_func,
void *callback_baton,
- apr_pool_t *pool);
+ apr_pool_t *scratch_pool);
/** @} */
Modified: subversion/branches/compressed-pristines/subversion/include/svn_editor.h
URL: http://svn.apache.org/viewvc/subversion/branches/compressed-pristines/subversion/include/svn_editor.h?rev=1373783&r1=1373782&r2=1373783&view=diff
==============================================================================
--- subversion/branches/compressed-pristines/subversion/include/svn_editor.h (original)
+++ subversion/branches/compressed-pristines/subversion/include/svn_editor.h Thu Aug 16 10:17:48 2012
@@ -246,6 +246,10 @@ extern "C" {
* In order to reduce complexity of callback receivers, the editor callbacks
* must be driven in adherence to these rules:
*
+ * - If any path is added (with add_*) or deleted/moved/rotated, then
+ * an svn_editor_alter_directory() call must be made for its parent
+ * directory with the target/eventual set of children.
+ *
* - svn_editor_add_directory() -- Another svn_editor_add_*() call must
* follow for each child mentioned in the @a children argument of any
* svn_editor_add_directory() call.
@@ -479,6 +483,7 @@ typedef svn_error_t *(*svn_editor_cb_alt
void *baton,
const char *relpath,
svn_revnum_t revision,
+ const apr_array_header_t *children,
apr_hash_t *props,
apr_pool_t *scratch_pool);
@@ -585,6 +590,17 @@ svn_editor_create(svn_editor_t **editor,
apr_pool_t *scratch_pool);
+/** Return an editor's private baton.
+ *
+ * In some cases, the baton is required outside of the callbacks. This
+ * function returns the private baton for use.
+ *
+ * @since New in 1.8.
+ */
+void *
+svn_editor_get_baton(const svn_editor_t *editor);
+
+
/** Sets the #svn_editor_cb_add_directory_t callback in @a editor
* to @a callback.
* @a scratch_pool is used for temporary allocations (if any).
@@ -874,7 +890,16 @@ svn_editor_add_absent(svn_editor_t *edit
* (e.g. it has not yet been committed), then @a revision should be
* #SVN_INVALID_REVNUM.
*
- * For a description of @a props, see svn_editor_add_file().
+ * If any changes to the set of children will be made in the future of
+ * the edit drive, then @a children MUST specify the resulting set of
+ * children. See svn_editor_add_directory() for the format of @a children.
+ * If not changes will be made, then NULL may be specified.
+ *
+ * For a description of @a props, see svn_editor_add_file(). If no changes
+ * to the properties will be made (ie. only future changes to the set of
+ * children), then @a props may be NULL.
+ *
+ * It is an error to pass NULL for both @a children and @a props.
*
* For all restrictions on driving the editor, see #svn_editor_t.
* @since New in 1.8.
@@ -883,6 +908,7 @@ svn_error_t *
svn_editor_alter_directory(svn_editor_t *editor,
const char *relpath,
svn_revnum_t revision,
+ const apr_array_header_t *children,
apr_hash_t *props);
/** Drive @a editor's #svn_editor_cb_alter_file_t callback.
Modified: subversion/branches/compressed-pristines/subversion/include/svn_error.h
URL: http://svn.apache.org/viewvc/subversion/branches/compressed-pristines/subversion/include/svn_error.h?rev=1373783&r1=1373782&r2=1373783&view=diff
==============================================================================
--- subversion/branches/compressed-pristines/subversion/include/svn_error.h (original)
+++ subversion/branches/compressed-pristines/subversion/include/svn_error.h Thu Aug 16 10:17:48 2012
@@ -317,7 +317,10 @@ svn_handle_warning(FILE *stream,
#ifdef SVN_ERR__TRACING
#define SVN_ERR__TRACED "traced call"
-#define svn_error_trace(expr) svn_error_quick_wrap((expr), SVN_ERR__TRACED)
+svn_error_t *
+svn_error__trace(const char *file, long line, svn_error_t *err);
+
+#define svn_error_trace(expr) svn_error__trace(__FILE__, __LINE__, (expr))
#else
#define svn_error_trace(expr) (expr)
#endif
@@ -460,6 +463,31 @@ svn_error_t *svn_error_purge_tracing(svn
abort(); \
} while (1)
+/** Like SVN_ERR_ASSERT(), but append ERR to the returned error chain.
+ *
+ * If EXPR is false, return a malfunction error whose chain includes ERR.
+ * If EXPR is true, do nothing. (In particular, this does not clear ERR.)
+ *
+ * Types: (svn_boolean_t expr, svn_error_t *err)
+ *
+ * @since New in 1.8.
+ */
+#ifdef __clang_analyzer__
+#include <assert.h>
+/* Just ignore ERR. If the assert triggers, it'll be our least concern. */
+#define SVN_ERR_ASSERT_E(expr, err) assert((expr))
+#else
+#define SVN_ERR_ASSERT_E(expr, err) \
+ do { \
+ if (!(expr)) { \
+ return svn_error_compose_create( \
+ svn_error__malfunction(TRUE, __FILE__, __LINE__, #expr), \
+ (err)); \
+ } \
+ } while (0)
+#endif
+
+
/** Check that a condition is true: if not, report an error and possibly
* terminate the program.
*
@@ -478,6 +506,8 @@ svn_error_t *svn_error_purge_tracing(svn
* evaluation of this expression is not compiled out in release-mode builds.
*
* @since New in 1.6.
+ *
+ * @see SVN_ERR_ASSERT_E()
*/
#ifdef __clang_analyzer__
#include <assert.h>
Modified: subversion/branches/compressed-pristines/subversion/include/svn_error_codes.h
URL: http://svn.apache.org/viewvc/subversion/branches/compressed-pristines/subversion/include/svn_error_codes.h?rev=1373783&r1=1373782&r2=1373783&view=diff
==============================================================================
--- subversion/branches/compressed-pristines/subversion/include/svn_error_codes.h (original)
+++ subversion/branches/compressed-pristines/subversion/include/svn_error_codes.h Thu Aug 16 10:17:48 2012
@@ -224,6 +224,11 @@ SVN_ERROR_START
SVN_ERR_BAD_CATEGORY_START + 14,
"Invalid changelist name")
+ /** @since New in 1.8. */
+ SVN_ERRDEF(SVN_ERR_BAD_ATOMIC,
+ SVN_ERR_BAD_CATEGORY_START + 15,
+ "Invalid atomic")
+
/* xml errors */
SVN_ERRDEF(SVN_ERR_XML_ATTRIB_NOT_FOUND,
@@ -762,6 +767,16 @@ SVN_ERROR_START
"Property value in filesystem differs from the provided "
"base value")
+ /** @since New in 1.8. */
+ SVN_ERRDEF(SVN_ERR_FS_INCORRECT_EDITOR_COMPLETION,
+ SVN_ERR_FS_CATEGORY_START + 50,
+ "The filesystem editor completion process was not followed")
+
+ /** @since New in 1.8. */
+ SVN_ERRDEF(SVN_ERR_FS_PACKED_REPPROP_READ_FAILURE,
+ SVN_ERR_FS_CATEGORY_START + 51,
+ "A packed revprop could not be read")
+
/* repos errors */
SVN_ERRDEF(SVN_ERR_REPOS_LOCKED,
@@ -905,7 +920,7 @@ SVN_ERROR_START
"Invalid configuration value")
/** @deprecated To improve consistency between ra layers, this error code
- is replaced in ra_{neon|serf} by SVN_ERR_FS_NOT_FOUND.
+ is replaced in ra_serf by SVN_ERR_FS_NOT_FOUND.
Slated for removal in the next major release. */
SVN_ERRDEF(SVN_ERR_RA_DAV_PATH_NOT_FOUND,
SVN_ERR_RA_DAV_CATEGORY_START + 7,
@@ -1390,6 +1405,11 @@ SVN_ERROR_START
SVN_ERR_MISC_CATEGORY_START + 35,
"Constraint error in SQLite db")
+ /** @since New in 1.8. */
+ SVN_ERRDEF(SVN_ERR_TOO_MANY_MEMCACHED_SERVERS,
+ SVN_ERR_MISC_CATEGORY_START + 36,
+ "too many memcached servers configured")
+
/* command-line client errors */
SVN_ERRDEF(SVN_ERR_CL_ARG_PARSING_ERROR,
Modified: subversion/branches/compressed-pristines/subversion/include/svn_fs.h
URL: http://svn.apache.org/viewvc/subversion/branches/compressed-pristines/subversion/include/svn_fs.h?rev=1373783&r1=1373782&r2=1373783&view=diff
==============================================================================
--- subversion/branches/compressed-pristines/subversion/include/svn_fs.h (original)
+++ subversion/branches/compressed-pristines/subversion/include/svn_fs.h Thu Aug 16 10:17:48 2012
@@ -39,6 +39,7 @@
#include "svn_io.h"
#include "svn_mergeinfo.h"
#include "svn_checksum.h"
+#include "svn_editor.h"
#ifdef __cplusplus
@@ -85,6 +86,12 @@ typedef struct svn_fs_t svn_fs_t;
*/
#define SVN_FS_CONFIG_FSFS_CACHE_FULLTEXTS "fsfs-cache-fulltexts"
+/** Enable / disable revprop caching for a FSFS repository.
+ *
+ * @since New in 1.8.
+ */
+#define SVN_FS_CONFIG_FSFS_CACHE_REVPROPS "fsfs-cache-revprops"
+
/* See also svn_fs_type(). */
/** @since New in 1.1. */
#define SVN_FS_CONFIG_FS_TYPE "fs-type"
@@ -113,6 +120,13 @@ typedef struct svn_fs_t svn_fs_t;
* @since New in 1.6.
*/
#define SVN_FS_CONFIG_PRE_1_6_COMPATIBLE "pre-1.6-compatible"
+
+/** Create repository format compatible with Subversion versions
+ * earlier than 1.8.
+ *
+ * @since New in 1.8.
+ */
+#define SVN_FS_CONFIG_PRE_1_8_COMPATIBLE "pre-1.8-compatible"
/** @} */
@@ -801,6 +815,7 @@ typedef struct svn_fs_txn_t svn_fs_txn_t
* if a caller tries to edit a locked item without having rights to the lock.
*/
#define SVN_FS_TXN_CHECK_LOCKS 0x00002
+
/** @} */
/**
@@ -857,7 +872,7 @@ svn_fs_begin_txn(svn_fs_txn_t **txn_p,
* If @a conflict_p is non-zero, use it to provide details on any
* conflicts encountered merging @a txn with the most recent committed
* revisions. If a conflict occurs, set @a *conflict_p to the path of
- * the conflict in @a txn, with the same lifetime as @a txn;
+ * the conflict in @a txn, allocated within @a pool;
* otherwise, set @a *conflict_p to NULL.
*
* If the commit succeeds, @a txn is invalid.
@@ -872,6 +887,25 @@ svn_fs_begin_txn(svn_fs_txn_t **txn_p,
* the value is a valid revision number, the commit was successful,
* even though a non-@c NULL function return value may indicate that
* something else went wrong in post commit FS processing.
+ *
+ * @note See api-errata/1.8/fs001.txt for information on how this
+ * function was documented in versions prior to 1.8.
+ *
+ * ### need to document this better. there are four combinations of
+ * ### return values:
+ * ### 1) err=NULL. conflict=NULL. new_rev is valid
+ * ### 2) err=SVN_ERR_FS_CONFLICT. conflict is set. new_rev=SVN_INVALID_REVNUM
+ * ### 3) err=!NULL. conflict=NULL. new_rev is valid
+ * ### 4) err=!NULL. conflict=NULL. new_rev=SVN_INVALID_REVNUM
+ * ###
+ * ### some invariants:
+ * ### *conflict_p will be non-NULL IFF SVN_ERR_FS_CONFLICT
+ * ### if *conflict_p is set (and SVN_ERR_FS_CONFLICT), then new_rev
+ * ### will always be SVN_INVALID_REVNUM
+ * ### *conflict_p will always be initialized to NULL, or to a valid
+ * ### conflict string
+ * ### *new_rev will always be initialized to SVN_INVALID_REVNUM, or
+ * ### to a valid, committed revision number
*/
svn_error_t *
svn_fs_commit_txn(const char **conflict_p,
@@ -999,6 +1033,118 @@ 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
@@ -1500,7 +1646,6 @@ svn_fs_copied_from(svn_revnum_t *rev_p,
/** Set @a *root_p and @a *path_p to the revision root and path of the
* destination of the most recent copy event that caused @a path to
* exist where it does in @a root, or to NULL if no such copy exists.
- * When non-NULL, allocate @a *root_p and @a *path_p in @a pool.
*
* @a *path_p might be a parent of @a path, rather than @a path
* itself. However, it will always be the deepest relevant path.
@@ -1508,6 +1653,9 @@ svn_fs_copied_from(svn_revnum_t *rev_p,
* this function makes sure to set @a *path_p to the longest copy
* destination path that is still a parent of or equal to @a path.
*
+ * Values returned in @a *root_p and @a *path_p will be allocated
+ * from @a pool.
+ *
* @since New in 1.3.
*/
svn_error_t *
@@ -2257,7 +2405,8 @@ svn_fs_get_locks(svn_fs_t *fs,
/**
* Append a textual list of all available FS modules to the stringbuf
- * @a output.
+ * @a output. Third-party modules are only included if repository
+ * access has caused them to be loaded.
*
* @since New in 1.2.
*/
Modified: subversion/branches/compressed-pristines/subversion/include/svn_hash.h
URL: http://svn.apache.org/viewvc/subversion/branches/compressed-pristines/subversion/include/svn_hash.h?rev=1373783&r1=1373782&r2=1373783&view=diff
==============================================================================
--- subversion/branches/compressed-pristines/subversion/include/svn_hash.h (original)
+++ subversion/branches/compressed-pristines/subversion/include/svn_hash.h Thu Aug 16 10:17:48 2012
@@ -240,48 +240,6 @@ svn_hash_from_cstring_keys(apr_hash_t **
const apr_array_header_t *keys,
apr_pool_t *pool);
-/**
- * Clear any key/value pairs in the hash table. A wrapper for a
- * apr_hash_clear(), which isn't available until APR 1.3.0.
- *
- * @since New in 1.5.
- */
-svn_error_t *
-svn_hash__clear(apr_hash_t *hash, apr_pool_t *pool);
-
-/** @} */
-
-
-/**
- * @defgroup svn_hash_getters Specialized getter APIs for hashes
- * @{
- */
-
-/** Find the value of a @a key in @a hash, return the value.
- *
- * If @a hash is @c NULL or if the @a key cannot be found, the
- * @a default_value will be returned.
- *
- * @since New in 1.7.
- */
-const char *
-svn_hash__get_cstring(apr_hash_t *hash,
- const char *key,
- const char *default_value);
-
-/** Like svn_hash_get_cstring(), but for boolean values.
- *
- * Parses the value as a boolean value. The recognized representations
- * are 'TRUE'/'FALSE', 'yes'/'no', 'on'/'off', '1'/'0'; case does not
- * matter.
- *
- * @since New in 1.7.
- */
-svn_boolean_t
-svn_hash__get_bool(apr_hash_t *hash,
- const char *key,
- svn_boolean_t default_value);
-
/** @} */
/** @} */
Modified: subversion/branches/compressed-pristines/subversion/include/svn_io.h
URL: http://svn.apache.org/viewvc/subversion/branches/compressed-pristines/subversion/include/svn_io.h?rev=1373783&r1=1373782&r2=1373783&view=diff
==============================================================================
--- subversion/branches/compressed-pristines/subversion/include/svn_io.h (original)
+++ subversion/branches/compressed-pristines/subversion/include/svn_io.h Thu Aug 16 10:17:48 2012
@@ -592,14 +592,14 @@ svn_io_set_file_affected_time(apr_time_t
void
svn_io_sleep_for_timestamps(const char *path, apr_pool_t *pool);
-/** Set @a *different_p to non-zero if @a file1 and @a file2 have different
- * sizes, else set to zero. Both @a file1 and @a file2 are utf8-encoded.
+/** Set @a *different_p to TRUE if @a file1 and @a file2 have different
+ * sizes, else set to FALSE. Both @a file1 and @a file2 are utf8-encoded.
*
* Setting @a *different_p to zero does not mean the files definitely
* have the same size, it merely means that the sizes are not
* definitely different. That is, if the size of one or both files
* cannot be determined, then the sizes are not known to be different,
- * so @a *different_p is set to 0.
+ * so @a *different_p is set to FALSE.
*/
svn_error_t *
svn_io_filesizes_different_p(svn_boolean_t *different_p,
@@ -607,6 +607,25 @@ svn_io_filesizes_different_p(svn_boolean
const char *file2,
apr_pool_t *pool);
+/** Set @a *different_p12 to non-zero if @a file1 and @a file2 have different
+ * sizes, else set to zero. Do the similar for @a *different_p23 with
+ * @a file2 and @a file3, and @a *different_p13 for @a file1 and @a file3.
+ * All three of @a file1, @a file2 and @a file3 are utf8-encoded.
+ *
+ * Setting @a *different_p12 to zero does not mean the files definitely
+ * have the same size, it merely means that the sizes are not
+ * definitely different. That is, if the size of one or both files
+ * cannot be determined, then the sizes are not known to be different,
+ * so @a *different_p12 is set to 0.
+ */
+svn_error_t *
+svn_io_filesizes_three_different_p(svn_boolean_t *different_p12,
+ svn_boolean_t *different_p23,
+ svn_boolean_t *different_p13,
+ const char *file1,
+ const char *file2,
+ const char *file3,
+ apr_pool_t *scratch_pool);
/** Return in @a *checksum the checksum of type @a kind of @a file
* Use @a pool for temporary allocations and to allocate @a *checksum.
@@ -642,6 +661,20 @@ svn_io_files_contents_same_p(svn_boolean
const char *file2,
apr_pool_t *pool);
+/** Set @a *same12 to TRUE if @a file1 and @a file2 have the same
+ * contents, else set it to FALSE. Do the similar for @a *same23
+ * with @a file2 and @a file3, and @a *same13 for @a file1 and @a
+ * file3. Use @a pool for temporary allocations.
+ */
+svn_error_t *
+svn_io_files_contents_three_same_p(svn_boolean_t *same12,
+ svn_boolean_t *same23,
+ svn_boolean_t *same13,
+ const char *file1,
+ const char *file2,
+ const char *file3,
+ apr_pool_t *scratch_pool);
+
/** Create file at utf8-encoded @a file with contents @a contents.
* @a file must not already exist.
* Use @a pool for memory allocations.
@@ -682,6 +715,39 @@ svn_io_file_lock2(const char *lock_file,
svn_boolean_t exclusive,
svn_boolean_t nonblocking,
apr_pool_t *pool);
+
+/**
+ * Lock the file @a lockfile_handle. If @a exclusive is TRUE,
+ * obtain exclusive lock, otherwise obtain shared lock.
+ *
+ * If @a nonblocking is TRUE, do not wait for the lock if it
+ * 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.
+ * 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.
+ *
+ * @since New in 1.8.
+ */
+svn_error_t *
+svn_io_lock_open_file(apr_file_t *lockfile_handle,
+ svn_boolean_t exclusive,
+ svn_boolean_t nonblocking,
+ apr_pool_t *pool);
+
+/**
+ * Unlock the file @a lockfile_handle.
+ *
+ * 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.
+ *
+ * @since New in 1.8.
+ */
+svn_error_t *
+svn_io_unlock_open_file(apr_file_t *lockfile_handle,
+ apr_pool_t *pool);
+
/**
* Flush any unwritten data from @a file to disk. Use @a pool for
* memory allocations.
@@ -1146,6 +1212,14 @@ svn_stream_tee(svn_stream_t *out1,
svn_stream_t *out2,
apr_pool_t *pool);
+/** Write NULL-terminated string @a str to @a stream.
+ *
+ * @since New in 1.8.
+ *
+ */
+svn_error_t *
+svn_stream_puts(svn_stream_t *stream,
+ const char *str);
/** Write to @a stream using a printf-style @a fmt specifier, passed through
* apr_psprintf() using memory from @a pool.
@@ -1288,6 +1362,36 @@ svn_string_from_stream(svn_string_t **re
apr_pool_t *scratch_pool);
+/** A function type provided for use as a callback from
+ * @c svn_stream_lazyopen_create().
+ *
+ * @since New in 1.8.
+ */
+typedef svn_error_t *
+(*svn_stream_lazyopen_func_t)(svn_stream_t **stream,
+ void *baton,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
+
+
+/** Return a generic stream which wraps another primary stream,
+ * delaying the "opening" of that stream until the first time the
+ * stream is accessed.
+ *
+ * @a open_func and @a open_baton are a callback function/baton pair
+ * invoked upon the first read of @a *stream which are used to open the
+ * "real" source stream.
+ *
+ * @note If the only "access" the returned stream gets is to close it,
+ * @a open_func will not be called.
+ *
+ * @since New in 1.8.
+ */
+svn_stream_t *
+svn_stream_lazyopen_create(svn_stream_lazyopen_func_t open_func,
+ void *open_baton,
+ apr_pool_t *result_pool);
+
/** @} */
/** Set @a *result to a string containing the contents of @a
@@ -2096,6 +2200,36 @@ svn_io_write_version_file(const char *pa
int version,
apr_pool_t *pool);
+/* Read a line of text from a file, up to a specified length.
+ *
+ * Allocate @a *stringbuf in @a result_pool, and read into it one line
+ * from @a file. Reading stops either after a line-terminator was found
+ * or after @a max_len bytes have been read.
+ *
+ * If end-of-file is reached or @a max_len bytes have been read, and @a eof
+ * is not NULL, then set @a *eof to @c TRUE.
+ *
+ * The line-terminator is not stored in @a *stringbuf.
+ * The line-terminator is detected automatically and stored in @a *eol
+ * if @a eol is not NULL. If EOF is reached and @a file does not end
+ * with a newline character, and @a eol is not NULL, @ *eol is set to NULL.
+ *
+ * @a scratch_pool is used for temporary allocations.
+ *
+ * Hint: To read all data until a line-terminator is hit, pass APR_SIZE_MAX
+ * for @a max_len.
+ *
+ * @since New in 1.8.
+ */
+svn_error_t *
+svn_io_file_readline(apr_file_t *file,
+ svn_stringbuf_t **stringbuf,
+ const char **eol,
+ svn_boolean_t *eof,
+ apr_size_t max_len,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
+
/** @} */
#ifdef __cplusplus
Modified: subversion/branches/compressed-pristines/subversion/include/svn_mergeinfo.h
URL: http://svn.apache.org/viewvc/subversion/branches/compressed-pristines/subversion/include/svn_mergeinfo.h?rev=1373783&r1=1373782&r2=1373783&view=diff
==============================================================================
--- subversion/branches/compressed-pristines/subversion/include/svn_mergeinfo.h (original)
+++ subversion/branches/compressed-pristines/subversion/include/svn_mergeinfo.h Thu Aug 16 10:17:48 2012
@@ -113,8 +113,8 @@ extern "C" {
*
* (a) Strings (@c svn_string_t *) containing "unparsed mergeinfo".
*
- * (b) A "rangelist". An array (@c apr_array_header_t *) of non-overlapping
- * merge ranges (@c svn_merge_range_t *), sorted as said by
+ * (b) @c svn_rangelist_t, called a "rangelist". An array of non-
+ * overlapping merge ranges (@c svn_merge_range_t *), sorted as said by
* @c svn_sort_compare_ranges(). An empty range list is represented by
* an empty array. Unless specifically noted otherwise, all APIs require
* rangelists that describe only forward ranges, i.e. the range's start
@@ -139,6 +139,7 @@ extern "C" {
* else, such as an RA session root.
*/
+typedef apr_array_header_t svn_rangelist_t;
typedef apr_hash_t *svn_mergeinfo_t;
typedef apr_hash_t *svn_mergeinfo_catalog_t;
@@ -295,8 +296,8 @@ svn_mergeinfo_remove2(svn_mergeinfo_t *m
* @since New in 1.5.
*/
svn_error_t *
-svn_rangelist_diff(apr_array_header_t **deleted, apr_array_header_t **added,
- const apr_array_header_t *from, const apr_array_header_t *to,
+svn_rangelist_diff(svn_rangelist_t **deleted, svn_rangelist_t **added,
+ const svn_rangelist_t *from, const svn_rangelist_t *to,
svn_boolean_t consider_inheritance,
apr_pool_t *pool);
@@ -319,8 +320,8 @@ svn_rangelist_diff(apr_array_header_t **
* @since New in 1.8.
*/
svn_error_t *
-svn_rangelist_merge2(apr_array_header_t *rangelist,
- const apr_array_header_t *changes,
+svn_rangelist_merge2(svn_rangelist_t *rangelist,
+ const svn_rangelist_t *changes,
apr_pool_t *result_pool,
apr_pool_t *scratch_pool);
@@ -334,8 +335,8 @@ svn_rangelist_merge2(apr_array_header_t
*/
SVN_DEPRECATED
svn_error_t *
-svn_rangelist_merge(apr_array_header_t **rangelist,
- const apr_array_header_t *changes,
+svn_rangelist_merge(svn_rangelist_t **rangelist,
+ const svn_rangelist_t *changes,
apr_pool_t *pool);
/** Removes @a eraser (the subtrahend) from @a whiteboard (the
@@ -352,8 +353,8 @@ svn_rangelist_merge(apr_array_header_t *
* @since New in 1.5.
*/
svn_error_t *
-svn_rangelist_remove(apr_array_header_t **output, const apr_array_header_t *eraser,
- const apr_array_header_t *whiteboard,
+svn_rangelist_remove(svn_rangelist_t **output, const svn_rangelist_t *eraser,
+ const svn_rangelist_t *whiteboard,
svn_boolean_t consider_inheritance,
apr_pool_t *pool);
@@ -394,7 +395,7 @@ svn_mergeinfo_intersect(svn_mergeinfo_t
* @a consider_inheritance determines how to account for the inheritability
* of the two rangelist's ranges when calculating the intersection,
* @see svn_mergeinfo_diff(). If @a consider_inheritance is FALSE then
- * ranges with different inheritance can intersect, but the the resulting
+ * ranges with different inheritance can intersect, but the resulting
* @a *rangelist is non-inheritable only if the corresponding ranges from
* both @a rangelist1 and @a rangelist2 are non-inheritable.
* If @a consider_inheritance is TRUE, then ranges with different
@@ -406,9 +407,9 @@ svn_mergeinfo_intersect(svn_mergeinfo_t
* @since New in 1.5.
*/
svn_error_t *
-svn_rangelist_intersect(apr_array_header_t **rangelist,
- const apr_array_header_t *rangelist1,
- const apr_array_header_t *rangelist2,
+svn_rangelist_intersect(svn_rangelist_t **rangelist,
+ const svn_rangelist_t *rangelist1,
+ const svn_rangelist_t *rangelist2,
svn_boolean_t consider_inheritance,
apr_pool_t *pool);
@@ -423,7 +424,7 @@ svn_rangelist_intersect(apr_array_header
* @since New in 1.5.
*/
svn_error_t *
-svn_rangelist_reverse(apr_array_header_t *rangelist, apr_pool_t *pool);
+svn_rangelist_reverse(svn_rangelist_t *rangelist, apr_pool_t *pool);
/** Take an array of svn_merge_range_t *'s in @a rangelist, and convert it
* back to a text format rangelist in @a output. If @a rangelist contains
@@ -433,7 +434,7 @@ svn_rangelist_reverse(apr_array_header_t
*/
svn_error_t *
svn_rangelist_to_string(svn_string_t **output,
- const apr_array_header_t *rangelist,
+ const svn_rangelist_t *rangelist,
apr_pool_t *pool);
/** Return a deep copy of @c svn_merge_range_t *'s in @a rangelist excluding
@@ -448,8 +449,8 @@ svn_rangelist_to_string(svn_string_t **o
* @since New in 1.7.
*/
svn_error_t *
-svn_rangelist_inheritable2(apr_array_header_t **inheritable_rangelist,
- const apr_array_header_t *rangelist,
+svn_rangelist_inheritable2(svn_rangelist_t **inheritable_rangelist,
+ const svn_rangelist_t *rangelist,
svn_revnum_t start,
svn_revnum_t end,
svn_boolean_t inheritable,
@@ -463,8 +464,8 @@ svn_rangelist_inheritable2(apr_array_hea
*/
SVN_DEPRECATED
svn_error_t *
-svn_rangelist_inheritable(apr_array_header_t **inheritable_rangelist,
- const apr_array_header_t *rangelist,
+svn_rangelist_inheritable(svn_rangelist_t **inheritable_rangelist,
+ const svn_rangelist_t *rangelist,
svn_revnum_t start,
svn_revnum_t end,
apr_pool_t *pool);
@@ -551,8 +552,8 @@ svn_mergeinfo_dup(svn_mergeinfo_t mergei
*
* @since New in 1.5.
*/
-apr_array_header_t *
-svn_rangelist_dup(const apr_array_header_t *rangelist, apr_pool_t *pool);
+svn_rangelist_t *
+svn_rangelist_dup(const svn_rangelist_t *rangelist, apr_pool_t *pool);
/**
Modified: subversion/branches/compressed-pristines/subversion/include/svn_opt.h
URL: http://svn.apache.org/viewvc/subversion/branches/compressed-pristines/subversion/include/svn_opt.h?rev=1373783&r1=1373782&r2=1373783&view=diff
==============================================================================
--- subversion/branches/compressed-pristines/subversion/include/svn_opt.h (original)
+++ subversion/branches/compressed-pristines/subversion/include/svn_opt.h Thu Aug 16 10:17:48 2012
@@ -680,7 +680,8 @@ svn_opt_parse_path(svn_opt_revision_t *r
* Else, if @a print_version is TRUE, then print version info, in
* brief form if @a quiet is also TRUE; if @a quiet is FALSE, then if
* @a version_footer is non-NULL, print it following the version
- * information.
+ * information. If @a verbose is TRUE, also print information about
+ * the running system and loaded shared libraries, where available.
*
* Else, if @a os is not @c NULL and does not contain arguments, print
* generic help, via svn_opt_print_generic_help2() with the @a header,
@@ -695,8 +696,30 @@ svn_opt_parse_path(svn_opt_revision_t *r
* --version flag *and* subcommand arguments on a help command line.
* The logic for handling such a situation should be in one place.
*
- * @since New in 1.5.
+ * @since New in 1.8.
*/
+
+svn_error_t *
+svn_opt_print_help4(apr_getopt_t *os,
+ const char *pgm_name,
+ svn_boolean_t print_version,
+ svn_boolean_t quiet,
+ svn_boolean_t verbose,
+ const char *version_footer,
+ const char *header,
+ const svn_opt_subcommand_desc2_t *cmd_table,
+ const apr_getopt_option_t *option_table,
+ const int *global_options,
+ const char *footer,
+ apr_pool_t *pool);
+
+/**
+ * Same as svn_opt_print_help4(), but with @a verbose always @c FALSE.
+ *
+ * @deprecated Provided for backward compatibility with the 1.7 API.
+ */
+
+SVN_DEPRECATED
svn_error_t *
svn_opt_print_help3(apr_getopt_t *os,
const char *pgm_name,
Modified: subversion/branches/compressed-pristines/subversion/include/svn_path.h
URL: http://svn.apache.org/viewvc/subversion/branches/compressed-pristines/subversion/include/svn_path.h?rev=1373783&r1=1373782&r2=1373783&view=diff
==============================================================================
--- subversion/branches/compressed-pristines/subversion/include/svn_path.h (original)
+++ subversion/branches/compressed-pristines/subversion/include/svn_path.h Thu Aug 16 10:17:48 2012
@@ -106,8 +106,8 @@ svn_path_local_style(const char *path, a
* for the base.
*
* @deprecated Provided for backward compatibility with the 1.6 API.
- * New code should use svn_dirent_join(), svn_uri_join(),
- * svn_relpath_join() or svn_fspath__join().
+ * New code should use svn_dirent_join(), svn_relpath_join() or
+ * svn_fspath__join().
*/
SVN_DEPRECATED
char *
@@ -296,6 +296,10 @@ svn_path_is_canonical(const char *path,
/** Return an integer greater than, equal to, or less than 0, according
* as @a path1 is greater than, equal to, or less than @a path2.
+ *
+ * This function works like strcmp() except that it orders children in
+ * subdirectories directly after their parents. This allows using the
+ * given ordering for a depth first walk.
*/
int
svn_path_compare_paths(const char *path1, const char *path2);
Modified: subversion/branches/compressed-pristines/subversion/include/svn_pools.h
URL: http://svn.apache.org/viewvc/subversion/branches/compressed-pristines/subversion/include/svn_pools.h?rev=1373783&r1=1373782&r2=1373783&view=diff
==============================================================================
--- subversion/branches/compressed-pristines/subversion/include/svn_pools.h (original)
+++ subversion/branches/compressed-pristines/subversion/include/svn_pools.h Thu Aug 16 10:17:48 2012
@@ -94,8 +94,8 @@ svn_pool_create_ex_debug(pool, allocator
* for each of these threads may not be feasible. Set the @a thread_safe
* parameter to @c TRUE in that case. Pools will still not thread-safe, i.e.
* access to them may require explicit serialization. Set the parameter to
- * @c FALSE, otherwise, to maximize performance.
- *
+ * @c FALSE, otherwise, to maximize performance.
+ *
* To access the owner pool, which can also serve as the root pool for your
* sub-pools, call @c apr_allocator_get_owner().
*
Modified: subversion/branches/compressed-pristines/subversion/include/svn_props.h
URL: http://svn.apache.org/viewvc/subversion/branches/compressed-pristines/subversion/include/svn_props.h?rev=1373783&r1=1373782&r2=1373783&view=diff
==============================================================================
--- subversion/branches/compressed-pristines/subversion/include/svn_props.h (original)
+++ subversion/branches/compressed-pristines/subversion/include/svn_props.h Thu Aug 16 10:17:48 2012
@@ -111,7 +111,7 @@ svn_prop_array_to_hash(const apr_array_h
/**
* Creates a deep copy of @a hash (keys <tt>const char *</tt> and
- * values <tt>const svn_string_t</tt>) in @a pool.
+ * values <tt>const svn_string_t *</tt>) in @a pool.
*
* @since New in 1.6.
*/
Modified: subversion/branches/compressed-pristines/subversion/include/svn_ra.h
URL: http://svn.apache.org/viewvc/subversion/branches/compressed-pristines/subversion/include/svn_ra.h?rev=1373783&r1=1373782&r2=1373783&view=diff
==============================================================================
--- subversion/branches/compressed-pristines/subversion/include/svn_ra.h (original)
+++ subversion/branches/compressed-pristines/subversion/include/svn_ra.h Thu Aug 16 10:17:48 2012
@@ -120,6 +120,19 @@ typedef svn_error_t *(*svn_ra_invalidate
const char *name,
apr_pool_t *pool);
+/** This is a function type which allows the RA layer to fetch the
+ * cached pristine file contents whose checksum is @a checksum, if
+ * any. @a *contents will be a read stream containing those contents
+ * if they are found; NULL otherwise.
+ *
+ * @since New in 1.8.
+ */
+typedef svn_error_t *
+(*svn_ra_get_wc_contents_func_t)(void *baton,
+ svn_stream_t **contents,
+ const svn_checksum_t *checksum,
+ apr_pool_t *pool);
+
/** A function type for retrieving the youngest revision from a repos. */
typedef svn_error_t *(*svn_ra_get_latest_revnum_func_t)(
@@ -138,6 +151,7 @@ typedef svn_error_t *(*svn_ra_get_client
apr_pool_t *pool);
+
/**
* A callback function type for use in @c get_file_revs.
* @a baton is provided by the caller, @a path is the pathname of the file
@@ -516,6 +530,11 @@ typedef struct svn_ra_callbacks2_t
*/
svn_ra_get_client_string_func_t get_client_string;
+ /** Working copy file content fetching function.
+ * @since New in 1.8.
+ */
+ svn_ra_get_wc_contents_func_t get_wc_contents;
+
} svn_ra_callbacks2_t;
/** Similar to svn_ra_callbacks2_t, except that the progress
@@ -594,6 +613,17 @@ typedef struct svn_ra_session_t svn_ra_s
* corrected_url is NULL, return an #SVN_ERR_RA_SESSION_URL_MISMATCH
* error. Allocate all returned items in @a pool.
*
+ * The @a repos_URL need not point to the root of the repository: subject
+ * to authorization, it may point to any path within the repository, even
+ * a path at which no node exists in the repository. The session will
+ * remember this URL as its "session URL" (also called "session root URL"),
+ * until changed by svn_ra_reparent(). Many RA functions take or return
+ * paths that are relative to the session URL.
+ *
+ * If a @a corrected_url is returned, it will point to the same path
+ * within the new repository root URL that @a repos_URL pointed to within
+ * the old repository root URL.
+ *
* Return @c SVN_ERR_RA_UUID_MISMATCH if @a uuid is non-NULL and not equal
* to the UUID of the repository at @c repos_URL.
*
@@ -602,7 +632,10 @@ typedef struct svn_ra_session_t svn_ra_s
*
* @a config is a hash mapping <tt>const char *</tt> keys to
* @c svn_config_t * values. For example, the @c svn_config_t for the
- * "~/.subversion/config" file is under the key "config".
+ * "~/.subversion/config" file is under the key "config". @a config may
+ * be NULL. This function examines some config settings under the
+ * "servers" key (if present) before loading the required RA module, and
+ * the RA module may also examine any config settings.
*
* All RA requests require a session; they will continue to
* use @a pool for memory allocation.
@@ -680,7 +713,7 @@ svn_ra_reparent(svn_ra_session_t *ra_ses
const char *url,
apr_pool_t *pool);
-/** Set @a *url to the repository URL to which @a ra_session was
+/** Set @a *url to the session URL -- the URL to which @a ra_session was
* opened or most recently reparented.
*
* @since New in 1.5.
@@ -691,8 +724,8 @@ svn_ra_get_session_url(svn_ra_session_t
apr_pool_t *pool);
-/** Convert @a url into a path relative to the URL at which @a ra_session
- * is parented, setting @a *rel_path to that value. If @a url is not
+/** Convert @a url into a path relative to the session URL of @a ra_session,
+ * setting @a *rel_path to that value. If @a url is not
* a child of the session URL, return @c SVN_ERR_RA_ILLEGAL_URL.
*
* The returned path is uri decoded to allow using it with the ra or other
@@ -2008,7 +2041,7 @@ svn_ra_print_ra_libraries(svn_stringbuf_
*/
typedef struct svn_ra_plugin_t
{
- /** The proper name of the RA library, (like "ra_neon" or "ra_local") */
+ /** The proper name of the RA library, (like "ra_serf" or "ra_local") */
const char *name;
/** Short doc string printed out by `svn --version` */
@@ -2279,7 +2312,7 @@ typedef svn_error_t *(*svn_ra_init_func_
/* Public RA implementations. */
-/** Initialize libsvn_ra_neon.
+/** Initialize libsvn_ra_serf.
*
* @deprecated Provided for backward compatibility with the 1.1 API. */
SVN_DEPRECATED
Modified: subversion/branches/compressed-pristines/subversion/include/svn_repos.h
URL: http://svn.apache.org/viewvc/subversion/branches/compressed-pristines/subversion/include/svn_repos.h?rev=1373783&r1=1373782&r2=1373783&view=diff
==============================================================================
--- subversion/branches/compressed-pristines/subversion/include/svn_repos.h (original)
+++ subversion/branches/compressed-pristines/subversion/include/svn_repos.h Thu Aug 16 10:17:48 2012
@@ -1971,7 +1971,11 @@ svn_repos_fs_begin_txn_for_commit(svn_fs
*
* ### Someday: before a txn is created, some kind of read-hook could
* be called here.
+ *
+ * @note This function was never fully implemented, nor used. Ignore it.
+ * @deprecated Provided for backward compatibility with the 1.7 API.
*/
+SVN_DEPRECATED
svn_error_t *
svn_repos_fs_begin_txn_for_update(svn_fs_txn_t **txn_p,
svn_repos_t *repos,
@@ -1980,6 +1984,8 @@ svn_repos_fs_begin_txn_for_update(svn_fs
apr_pool_t *pool);
+/** @} */
+
/** @defgroup svn_repos_fs_locks Repository lock wrappers
* @{
*/
@@ -2398,6 +2404,7 @@ svn_repos_node_from_baton(void *edit_bat
/* The RFC822-style headers in our dumpfile format. */
#define SVN_REPOS_DUMPFILE_MAGIC_HEADER "SVN-fs-dump-format-version"
#define SVN_REPOS_DUMPFILE_FORMAT_VERSION 3
+#define SVN_REPOS_DUMPFILE_FORMAT_VERSION_DELTAS 3
#define SVN_REPOS_DUMPFILE_UUID "UUID"
#define SVN_REPOS_DUMPFILE_CONTENT_LENGTH "Content-length"
@@ -2699,21 +2706,17 @@ svn_repos_load_fs(svn_repos_t *repos,
/**
- * A vtable that is driven by svn_repos_parse_dumpstream2().
+ * A vtable that is driven by svn_repos_parse_dumpstream3().
*
- * @since New in 1.1.
+ * @since New in 1.8.
*/
-typedef struct svn_repos_parse_fns2_t
+typedef struct svn_repos_parse_fns3_t
{
- /** The parser has discovered a new revision record within the
- * parsing session represented by @a parse_baton. All the headers are
- * placed in @a headers (allocated in @a pool), which maps <tt>const
- * char *</tt> header-name ==> <tt>const char *</tt> header-value.
- * The @a revision_baton received back (also allocated in @a pool)
- * represents the revision.
+ /** The parser has discovered a new "magic header" record within the
+ * parsing session represented by @a parse_baton. The dump-format
+ * version number is @a version.
*/
- svn_error_t *(*new_revision_record)(void **revision_baton,
- apr_hash_t *headers,
+ svn_error_t *(*magic_header_record)(int version,
void *parse_baton,
apr_pool_t *pool);
@@ -2725,6 +2728,18 @@ typedef struct svn_repos_parse_fns2_t
void *parse_baton,
apr_pool_t *pool);
+ /** The parser has discovered a new revision record within the
+ * parsing session represented by @a parse_baton. All the headers are
+ * placed in @a headers (allocated in @a pool), which maps <tt>const
+ * char *</tt> header-name ==> <tt>const char *</tt> header-value.
+ * The @a revision_baton received back (also allocated in @a pool)
+ * represents the revision.
+ */
+ svn_error_t *(*new_revision_record)(void **revision_baton,
+ apr_hash_t *headers,
+ void *parse_baton,
+ apr_pool_t *pool);
+
/** The parser has discovered a new node record within the current
* revision represented by @a revision_baton. All the headers are
* placed in @a headers (as with @c new_revision_record), allocated in
@@ -2787,22 +2802,28 @@ typedef struct svn_repos_parse_fns2_t
*/
svn_error_t *(*close_revision)(void *revision_baton);
-} svn_repos_parse_fns2_t;
-
-/** @deprecated Provided for backward compatibility with the 1.2 API. */
-typedef svn_repos_parse_fns2_t svn_repos_parser_fns2_t;
+} svn_repos_parse_fns3_t;
/**
* Read and parse dumpfile-formatted @a stream, calling callbacks in
* @a parse_fns/@a parse_baton, and using @a pool for allocations.
*
+ * If @a deltas_are_text is @c TRUE, handle text-deltas with the @a
+ * set_fulltext callback. This is useful when manipulating a dump
+ * stream without loading it. Otherwise handle text-deltas with the
+ * @a apply_textdelta callback.
+ *
* If @a cancel_func is not @c NULL, it is called periodically with
* @a cancel_baton as argument to see if the client wishes to cancel
* the dump.
*
* This parser has built-in knowledge of the dumpfile format, but only
- * in a general sense:
+ * in a limited sense:
+ *
+ * * it recognizes the "magic" format-version header.
+ *
+ * * it recognizes the UUID header.
*
* * it recognizes revision and node records by looking for either
* a REVISION_NUMBER or NODE_PATH headers.
@@ -2814,14 +2835,16 @@ typedef svn_repos_parse_fns2_t svn_repos
* and text, and pass the pieces to the vtable.
*
* This is enough knowledge to make it easy on vtable implementors,
- * but still allow expansion of the format: most headers are ignored.
+ * but still allow expansion of the format: most headers do not have
+ * to be handled explicitly.
*
- * @since New in 1.1.
+ * @since New in 1.8.
*/
svn_error_t *
-svn_repos_parse_dumpstream2(svn_stream_t *stream,
- const svn_repos_parse_fns2_t *parse_fns,
+svn_repos_parse_dumpstream3(svn_stream_t *stream,
+ const svn_repos_parse_fns3_t *parse_fns,
void *parse_baton,
+ svn_boolean_t deltas_are_text,
svn_cancel_func_t cancel_func,
void *cancel_baton,
apr_pool_t *pool);
@@ -2862,7 +2885,7 @@ svn_repos_parse_dumpstream2(svn_stream_t
* @since New in 1.8.
*/
svn_error_t *
-svn_repos_get_fs_build_parser4(const svn_repos_parse_fns2_t **parser,
+svn_repos_get_fs_build_parser4(const svn_repos_parse_fns3_t **parser,
void **parse_baton,
svn_repos_t *repos,
svn_revnum_t start_rev,
@@ -2875,44 +2898,59 @@ svn_repos_get_fs_build_parser4(const svn
void *notify_baton,
apr_pool_t *pool);
+
/**
- * Similar to svn_repos_get_fs_build_parser4(), but with @a start_rev
- * and @a end_rev always passed as #SVN_INVALID_REVNUM.
+ * A vtable that is driven by svn_repos_parse_dumpstream2().
+ * Similar to #svn_repos_parse_fns3_t except that it lacks
+ * the delete_node_property and apply_textdelta callbacks.
*
* @deprecated Provided for backward compatibility with the 1.7 API.
- * @since New in 1.7.
*/
-SVN_DEPRECATED
-svn_error_t *
-svn_repos_get_fs_build_parser3(const svn_repos_parse_fns2_t **parser,
- void **parse_baton,
- svn_repos_t *repos,
- svn_boolean_t use_history,
- svn_boolean_t validate_props,
- enum svn_repos_load_uuid uuid_action,
- const char *parent_dir,
- svn_repos_notify_func_t notify_func,
- void *notify_baton,
- apr_pool_t *pool);
+typedef struct svn_repos_parse_fns2_t
+{
+ /** Same as #svn_repos_parse_fns3_t.new_revision_record. */
+ svn_error_t *(*new_revision_record)(void **revision_baton,
+ apr_hash_t *headers,
+ void *parse_baton,
+ apr_pool_t *pool);
+ /** Same as #svn_repos_parse_fns3_t.uuid_record. */
+ svn_error_t *(*uuid_record)(const char *uuid,
+ void *parse_baton,
+ apr_pool_t *pool);
+ /** Same as #svn_repos_parse_fns3_t.new_node_record. */
+ svn_error_t *(*new_node_record)(void **node_baton,
+ apr_hash_t *headers,
+ void *revision_baton,
+ apr_pool_t *pool);
+ /** Same as #svn_repos_parse_fns3_t.set_revision_property. */
+ svn_error_t *(*set_revision_property)(void *revision_baton,
+ const char *name,
+ const svn_string_t *value);
+ /** Same as #svn_repos_parse_fns3_t.set_node_property. */
+ svn_error_t *(*set_node_property)(void *node_baton,
+ const char *name,
+ const svn_string_t *value);
+ /** Same as #svn_repos_parse_fns3_t.delete_node_property. */
+ svn_error_t *(*delete_node_property)(void *node_baton,
+ const char *name);
+ /** Same as #svn_repos_parse_fns3_t.remove_node_props. */
+ svn_error_t *(*remove_node_props)(void *node_baton);
+ /** Same as #svn_repos_parse_fns3_t.set_fulltext. */
+ svn_error_t *(*set_fulltext)(svn_stream_t **stream,
+ void *node_baton);
+ /** Same as #svn_repos_parse_fns3_t.apply_textdelta. */
+ svn_error_t *(*apply_textdelta)(svn_txdelta_window_handler_t *handler,
+ void **handler_baton,
+ void *node_baton);
+ /** Same as #svn_repos_parse_fns3_t.close_node. */
+ svn_error_t *(*close_node)(void *node_baton);
+ /** Same as #svn_repos_parse_fns3_t.close_revision. */
+ svn_error_t *(*close_revision)(void *revision_baton);
+} svn_repos_parse_fns2_t;
+
+/** @deprecated Provided for backward compatibility with the 1.7 API. */
+typedef svn_repos_parse_fns2_t svn_repos_parser_fns2_t;
-/**
- * Similar to svn_repos_get_fs_build_parser3(), but with @a outstream
- * in place if a #svn_repos_notify_func_t and baton and with
- * @a validate_props always FALSE.
- *
- * @since New in 1.1.
- * @deprecated Provided for backward compatibility with the 1.6 API.
- */
-SVN_DEPRECATED
-svn_error_t *
-svn_repos_get_fs_build_parser2(const svn_repos_parse_fns2_t **parser,
- void **parse_baton,
- svn_repos_t *repos,
- svn_boolean_t use_history,
- enum svn_repos_load_uuid uuid_action,
- svn_stream_t *outstream,
- const char *parent_dir,
- apr_pool_t *pool);
/**
* A vtable that is driven by svn_repos_parse_dumpstream().
@@ -2958,6 +2996,21 @@ typedef struct svn_repos_parse_fns_t
/**
+ * Similar to svn_repos_parse_dumpstream3(), but uses the more limited
+ * #svn_repos_parser_fns2_t vtable type.
+ *
+ * @deprecated Provided for backward compatibility with the 1.7 API.
+ */
+SVN_DEPRECATED
+svn_error_t *
+svn_repos_parse_dumpstream2(svn_stream_t *stream,
+ const svn_repos_parser_fns2_t *parse_fns,
+ void *parse_baton,
+ svn_cancel_func_t cancel_func,
+ void *cancel_baton,
+ apr_pool_t *pool);
+
+/**
* Similar to svn_repos_parse_dumpstream2(), but uses the more limited
* #svn_repos_parser_fns_t vtable type.
*
@@ -2972,6 +3025,45 @@ svn_repos_parse_dumpstream(svn_stream_t
void *cancel_baton,
apr_pool_t *pool);
+/**
+ * Similar to svn_repos_get_fs_build_parser4(), but with @a start_rev
+ * and @a end_rev always passed as #SVN_INVALID_REVNUM, and yielding
+ * the more limited svn_repos_parse_fns2_t.
+ *
+ * @since New in 1.7.
+ * @deprecated Provided for backward compatibility with the 1.7 API.
+ */
+SVN_DEPRECATED
+svn_error_t *
+svn_repos_get_fs_build_parser3(const svn_repos_parse_fns2_t **parser,
+ void **parse_baton,
+ svn_repos_t *repos,
+ svn_boolean_t use_history,
+ svn_boolean_t validate_props,
+ enum svn_repos_load_uuid uuid_action,
+ const char *parent_dir,
+ svn_repos_notify_func_t notify_func,
+ void *notify_baton,
+ apr_pool_t *pool);
+
+/**
+ * Similar to svn_repos_get_fs_build_parser3(), but with @a outstream
+ * in place if a #svn_repos_notify_func_t and baton and with
+ * @a validate_props always FALSE.
+ *
+ * @since New in 1.1.
+ * @deprecated Provided for backward compatibility with the 1.6 API.
+ */
+SVN_DEPRECATED
+svn_error_t *
+svn_repos_get_fs_build_parser2(const svn_repos_parse_fns2_t **parser,
+ void **parse_baton,
+ svn_repos_t *repos,
+ svn_boolean_t use_history,
+ enum svn_repos_load_uuid uuid_action,
+ svn_stream_t *outstream,
+ const char *parent_dir,
+ apr_pool_t *pool);
/**
* Similar to svn_repos_get_fs_build_parser2(), but yields the more
Modified: subversion/branches/compressed-pristines/subversion/include/svn_sorts.h
URL: http://svn.apache.org/viewvc/subversion/branches/compressed-pristines/subversion/include/svn_sorts.h?rev=1373783&r1=1373782&r2=1373783&view=diff
==============================================================================
--- subversion/branches/compressed-pristines/subversion/include/svn_sorts.h (original)
+++ subversion/branches/compressed-pristines/subversion/include/svn_sorts.h Thu Aug 16 10:17:48 2012
@@ -80,6 +80,13 @@ typedef struct svn_sort__item_t {
apr_array_header_t *array;
array = svn_sort__hash(hsh, svn_sort_compare_items_as_paths, pool);
@endcode
+ *
+ * This function works like svn_sort_compare_items_lexically() except that it
+ * orders children in subdirectories directly after their parents. This allows
+ * using the given ordering for a depth first walk, but at a performance
+ * penalty. Code that doesn't need this special behavior for children, e.g. when
+ * sorting files at a single directory level should use
+ * svn_sort_compare_items_lexically() instead.
*/
int
svn_sort_compare_items_as_paths(const svn_sort__item_t *a,
Modified: subversion/branches/compressed-pristines/subversion/include/svn_types.h
URL: http://svn.apache.org/viewvc/subversion/branches/compressed-pristines/subversion/include/svn_types.h?rev=1373783&r1=1373782&r2=1373783&view=diff
==============================================================================
--- subversion/branches/compressed-pristines/subversion/include/svn_types.h (original)
+++ subversion/branches/compressed-pristines/subversion/include/svn_types.h Thu Aug 16 10:17:48 2012
@@ -910,6 +910,10 @@ typedef struct svn_log_entry_t
* Whether @a revision should be interpreted as non-inheritable in the
* same sense of #svn_merge_range_t.
*
+ * Only set when this #svn_log_entry_t instance is returned by the
+ * libsvn_client mergeinfo apis. Currently always FALSE when the
+ * #svn_log_entry_t instance is reported by the ra layer.
+ *
* @since New in 1.7.
*/
svn_boolean_t non_inheritable;
Modified: subversion/branches/compressed-pristines/subversion/include/svn_utf.h
URL: http://svn.apache.org/viewvc/subversion/branches/compressed-pristines/subversion/include/svn_utf.h?rev=1373783&r1=1373782&r2=1373783&view=diff
==============================================================================
--- subversion/branches/compressed-pristines/subversion/include/svn_utf.h (original)
+++ subversion/branches/compressed-pristines/subversion/include/svn_utf.h Thu Aug 16 10:17:48 2012
@@ -236,6 +236,12 @@ svn_utf_cstring_from_utf8_string(const c
const svn_string_t *src,
apr_pool_t *pool);
+/** Return the display width of UTF-8-encoded C string @a cstr.
+ * If the string is not printable or invalid UTF-8, return -1.
+ * @since New in 1.8. */
+int
+svn_utf_cstring_utf8_width(const char *cstr);
+
#ifdef __cplusplus
}
#endif /* __cplusplus */
Modified: subversion/branches/compressed-pristines/subversion/include/svn_wc.h
URL: http://svn.apache.org/viewvc/subversion/branches/compressed-pristines/subversion/include/svn_wc.h?rev=1373783&r1=1373782&r2=1373783&view=diff
==============================================================================
--- subversion/branches/compressed-pristines/subversion/include/svn_wc.h (original)
+++ subversion/branches/compressed-pristines/subversion/include/svn_wc.h Thu Aug 16 10:17:48 2012
@@ -1219,7 +1219,32 @@ typedef enum svn_wc_notify_action_t
/** The operation skipped the path because it was conflicted.
* @since New in 1.7. */
- svn_wc_notify_skip_conflicted
+ svn_wc_notify_skip_conflicted,
+
+ /** Just the lock on a file was removed during update.
+ * @since New in 1.8. */
+ svn_wc_notify_update_broken_lock,
+
+ /** Operation failed because a node is obstructed.
+ * @since New in 1.8. */
+ svn_wc_notify_failed_obstruction,
+
+ /** Conflict resolver is starting.
+ * This can be used by clients to detect when to display conflict summary
+ * information, for example.
+ * @since New in 1.8. */
+ svn_wc_notify_conflict_resolver_starting,
+
+ /** Conflict resolver is done.
+ * This can be used by clients to detect when to display conflict summary
+ * information, for example.
+ * @since New in 1.8. */
+ svn_wc_notify_conflict_resolver_done,
+
+ /** The current operation left local changes of something that was deleted
+ * The changes are available on (and below) the notified path
+ * @since New in 1.8. */
+ svn_wc_notify_left_local_modifications
} svn_wc_notify_action_t;
@@ -1569,6 +1594,8 @@ typedef enum svn_wc_conflict_reason_t
/** Object is moved away. @since New in 1.8. */
svn_wc_conflict_reason_moved_away,
/** Object is moved away and was edited post-move. @since New in 1.8. */
+ /* ### Do we really need this. The edit state is on a different node,
+ which might just change while the tree conflict exists? */
svn_wc_conflict_reason_moved_away_and_edited,
/** Object is moved here. @since New in 1.8. */
svn_wc_conflict_reason_moved_here
@@ -1634,14 +1661,17 @@ typedef struct svn_wc_conflict_version_t
svn_revnum_t peg_rev;
/** path within repos; must not start with '/' */
+ /* ### should have been called repos_relpath, but we can't change this. */
const char *path_in_repos;
- /* @todo We may decide to add the repository UUID, to handle conflicts
- * properly during a repository move. */
/** @} */
/** Info about this node */
svn_node_kind_t node_kind; /* note that 'none' is a legitimate value */
+ /** UUID of the repository
+ * @since New in 1.8. */
+ const char *repos_uuid;
+
/* @todo Add metadata about a local copy of the node, if and when
* we store one. */
@@ -1655,11 +1685,26 @@ typedef struct svn_wc_conflict_version_t
*
* Set the @c repos_url field of the created struct to @a repos_url, the
* @c path_in_repos field to @a path_in_repos, the @c peg_rev field to
- * @a peg_rev and the the @c node_kind to @c node_kind. Make only shallow
+ * @a peg_rev and the @c node_kind to @c node_kind. Make only shallow
* copies of the pointer arguments.
*
+ * @since New in 1.8.
+ */
+svn_wc_conflict_version_t *
+svn_wc_conflict_version_create2(const char *repos_root_url,
+ const char *repos_uuid,
+ const char *repos_relpath,
+ svn_revnum_t revision,
+ svn_node_kind_t kind,
+ apr_pool_t *result_pool);
+
+/** Similar to svn_wc_conflict_version_create2(), but doesn't set all
+ * required values.
+ *
* @since New in 1.6.
+ * @deprecated Provided for backward compatibility with the 1.7 API.
*/
+SVN_DEPRECATED
svn_wc_conflict_version_t *
svn_wc_conflict_version_create(const char *repos_url,
const char *path_in_repos,
@@ -1689,9 +1734,9 @@ svn_wc_conflict_version_dup(const svn_wc
* @note Fields may be added to the end of this structure in future
* versions. Therefore, to preserve binary compatibility, users
* should not directly allocate structures of this type but should use
- * svn_wc_create_conflict_description_text2() or
- * svn_wc_create_conflict_description_prop2() or
- * svn_wc_create_conflict_description_tree2() instead.
+ * svn_wc_conflict_description_create_text2() or
+ * svn_wc_conflict_description_create_prop2() or
+ * svn_wc_conflict_description_create_tree2() instead.
*
* @since New in 1.7.
*/
@@ -2011,7 +2056,10 @@ typedef enum svn_wc_conflict_choice_t
svn_wc_conflict_choose_mine_full, /**< own version */
svn_wc_conflict_choose_theirs_conflict, /**< incoming (for conflicted hunks) */
svn_wc_conflict_choose_mine_conflict, /**< own (for conflicted hunks) */
- svn_wc_conflict_choose_merged /**< merged version */
+ svn_wc_conflict_choose_merged, /**< merged version */
+
+ /* @since New in 1.8. */
+ svn_wc_conflict_choose_unspecified /**< undecided */
} svn_wc_conflict_choice_t;
@@ -2616,24 +2664,22 @@ svn_wc_has_binary_prop(svn_boolean_t *ha
* with regard to the base revision, else set @a *modified_p to zero.
* @a local_abspath is the absolute path to the file.
*
- * If @a force_comparison is @c TRUE, this function will not allow
- * early return mechanisms that avoid actual content comparison.
- * Instead, if there is a text base, a full byte-by-byte comparison
- * will be done, and the entry checksum verified as well. (This means
- * that if the text base is much longer than the working file, every
- * byte of the text base will still be examined.)
+ * This function uses some heuristics to avoid byte-by-byte comparisons
+ * against the base text (eg. file size and its modification time).
*
* If @a local_abspath does not exist, consider it unmodified. If it exists
* but is not under revision control (not even scheduled for
* addition), return the error #SVN_ERR_ENTRY_NOT_FOUND.
*
+ * @a unused is ignored.
+ *
* @since New in 1.7.
*/
svn_error_t *
svn_wc_text_modified_p2(svn_boolean_t *modified_p,
svn_wc_context_t *wc_ctx,
const char *local_abspath,
- svn_boolean_t force_comparison,
+ svn_boolean_t unused,
apr_pool_t *scratch_pool);
/** Similar to svn_wc_text_modified_p2(), but with a relative path and
@@ -4520,7 +4566,7 @@ svn_wc_add_from_disk(svn_wc_context_t *w
* working copy as a copy of the original location. The separate working
* copy will be integrated by this step. In this case, which is only used
* by code like that of "svn cp URL@rev path" @a copyfrom_url and
- * @a copyfrom_rev MUST BE the the url and revision of @a local_abspath
+ * @a copyfrom_rev MUST BE the url and revision of @a local_abspath
* in the separate working copy.
*
* 2a) If the node was not versioned before it will be scheduled as a local
@@ -5852,23 +5898,6 @@ svn_wc_get_switch_editor(svn_revnum_t *t
* @{
*/
-/* A word about the implementation of working copy property storage:
- *
- * Since properties are key/val pairs, you'd think we store them in
- * some sort of Berkeley DB-ish format, and even store pending changes
- * to them that way too.
- *
- * However, we already have libsvn_subr/hashdump.c working, and it
- * uses a human-readable format. That will be very handy when we're
- * debugging, and presumably we will not be dealing with any huge
- * properties or property lists initially. Therefore, we will
- * continue to use hashdump as the internal mechanism for storing and
- * reading from property lists, but note that the interface here is
- * _not_ dependent on that. We can swap in a DB-based implementation
- * at any time and users of this library will never know the
- * difference.
- */
-
/** Set @a *props to a hash table mapping <tt>char *</tt> names onto
* <tt>svn_string_t *</tt> values for all the regular properties of
* @a local_abspath. Allocate the table, names, and values in
@@ -6588,7 +6617,7 @@ typedef enum svn_wc_merge_outcome_t
* receive the changes, then translated back again.
*
* If @a target_abspath is absent, or present but not under version
- * control, then set @a *merge_outcome to #svn_wc_merge_no_merge and
+ * control, then set @a *merge_content_outcome to #svn_wc_merge_no_merge and
* return success without merging anything. (The reasoning is that if
* the file is not versioned, then it is probably unrelated to the
* changes being considered, so they should not be merged into it.
@@ -6606,8 +6635,16 @@ typedef enum svn_wc_merge_outcome_t
* svn_diff_file_options_parse()). @a merge_options must contain
* <tt>const char *</tt> elements.
*
- * The outcome of the merge is returned in @a *merge_outcome. If there
- * is a conflict and @a dry_run is @c FALSE, then attempt to call @a
+ * If @a merge_props_state is non-NULL @a propchanges is merged before
+ * merging the text. (If @a merge_props_outcome is NULL, no property changes
+* are merged and @a prop_changes is only used to determine the merge result)
+ * The result of the property merge is stored in @a *merge_props_state. If
+ * there is a conflict and @a dry_run is @c FALSE, then attempt to call @a
+ * conflict_func with @a conflict_baton (if non-NULL). If the conflict
+ * callback cannot resolve the conflict, then a property conflict is installed.
+ *
+ * The outcome of the text merge is returned in @a *merge_text_outcome. If
+ * there is a conflict and @a dry_run is @c FALSE, then attempt to call @a
* conflict_func with @a conflict_baton (if non-NULL). If the
* conflict callback cannot resolve the conflict, then:
*
@@ -6642,8 +6679,39 @@ typedef enum svn_wc_merge_outcome_t
*
* Use @a scratch_pool for any temporary allocation.
*
+ * @since New in 1.8.
+ */ /* ### BH: Two kinds of outcome is not how it should be */
+svn_error_t *
+svn_wc_merge5(enum svn_wc_merge_outcome_t *merge_content_outcome,
+ enum svn_wc_notify_state_t *merge_props_state,
+ svn_wc_context_t *wc_ctx,
+ const char *left_abspath,
+ const char *right_abspath,
+ const char *target_abspath,
+ const char *left_label,
+ const char *right_label,
+ const char *target_label,
+ const svn_wc_conflict_version_t *left_version,
+ const svn_wc_conflict_version_t *right_version,
+ svn_boolean_t dry_run,
+ const char *diff3_cmd,
+ const apr_array_header_t *merge_options,
+ apr_hash_t *original_props,
+ const apr_array_header_t *prop_diff,
+ svn_wc_conflict_resolver_func2_t conflict_func,
+ void *conflict_baton,
+ svn_cancel_func_t cancel_func,
+ void *cancel_baton,
+ apr_pool_t *scratch_pool);
+
+/** Similar to svn_wc_merge4() but doesn't allow property changes. Instead of
+ * handling this in a single operation, a separate call to svn_wc_merge_props3()
+ * before calling svn_wc_merge4() is needed
+ *
* @since New in 1.7.
+ * @deprecated Provided for backwards compatibility with the 1.7 API.
*/
+SVN_DEPRECATED
svn_error_t *
svn_wc_merge4(enum svn_wc_merge_outcome_t *merge_outcome,
svn_wc_context_t *wc_ctx,
@@ -6665,6 +6733,7 @@ svn_wc_merge4(enum svn_wc_merge_outcome_
void *cancel_baton,
apr_pool_t *scratch_pool);
+
/** Similar to svn_wc_merge4() but takes relative paths and an access
* baton. It doesn't support a cancel function or tracking origin version
* information.
Modified: subversion/branches/compressed-pristines/subversion/include/svn_xml.h
URL: http://svn.apache.org/viewvc/subversion/branches/compressed-pristines/subversion/include/svn_xml.h?rev=1373783&r1=1373782&r2=1373783&view=diff
==============================================================================
--- subversion/branches/compressed-pristines/subversion/include/svn_xml.h (original)
+++ subversion/branches/compressed-pristines/subversion/include/svn_xml.h Thu Aug 16 10:17:48 2012
@@ -228,7 +228,7 @@ svn_xml_signal_bailout(svn_error_t *erro
*/
const char *
svn_xml_get_attr_value(const char *name,
- const char **atts);
+ const char *const *atts);
Modified: subversion/branches/compressed-pristines/subversion/libsvn_auth_kwallet/kwallet.cpp
URL: http://svn.apache.org/viewvc/subversion/branches/compressed-pristines/subversion/libsvn_auth_kwallet/kwallet.cpp?rev=1373783&r1=1373782&r2=1373783&view=diff
==============================================================================
--- subversion/branches/compressed-pristines/subversion/libsvn_auth_kwallet/kwallet.cpp (original)
+++ subversion/branches/compressed-pristines/subversion/libsvn_auth_kwallet/kwallet.cpp Thu Aug 16 10:17:48 2012
@@ -60,6 +60,9 @@
/* KWallet simple provider, puts passwords in KWallet */
/*-----------------------------------------------------------------------*/
+static int q_argc = 1;
+static char q_argv0[] = "svn"; // Build non-const char * from string constant
+static char *q_argv[] = { q_argv0 };
static const char *
get_application_name(apr_hash_t *parameters,
@@ -212,12 +215,11 @@ kwallet_password_get(svn_boolean_t *done
QCoreApplication *app;
if (! qApp)
{
- int argc = 1;
- app = new QCoreApplication(argc, (char *[1]) {(char *) "svn"});
+ int argc = q_argc;
+ app = new QCoreApplication(argc, q_argv);
}
- KCmdLineArgs::init(1,
- (char *[1]) {(char *) "svn"},
+ KCmdLineArgs::init(q_argc, q_argv,
get_application_name(parameters, pool),
"subversion",
ki18n(get_application_name(parameters, pool)),
@@ -289,12 +291,11 @@ kwallet_password_set(svn_boolean_t *done
QCoreApplication *app;
if (! qApp)
{
- int argc = 1;
- app = new QCoreApplication(argc, (char *[1]) {(char *) "svn"});
+ int argc = q_argc;
+ app = new QCoreApplication(argc, q_argv);
}
- KCmdLineArgs::init(1,
- (char *[1]) {(char *) "svn"},
+ KCmdLineArgs::init(q_argc, q_argv,
get_application_name(parameters, pool),
"subversion",
ki18n(get_application_name(parameters, pool)),
Modified: subversion/branches/compressed-pristines/subversion/libsvn_client/add.c
URL: http://svn.apache.org/viewvc/subversion/branches/compressed-pristines/subversion/libsvn_client/add.c?rev=1373783&r1=1373782&r2=1373783&view=diff
==============================================================================
--- subversion/branches/compressed-pristines/subversion/libsvn_client/add.c (original)
+++ subversion/branches/compressed-pristines/subversion/libsvn_client/add.c Thu Aug 16 10:17:48 2012
@@ -898,8 +898,8 @@ mkdir_urls(const apr_array_header_t *url
/* Fetch RA commit editor */
SVN_ERR(svn_ra__register_editor_shim_callbacks(ra_session,
- svn_client__get_shim_callbacks(ctx->wc_ctx,
- NULL, pool)));
+ svn_client__get_shim_callbacks(ctx->wc_ctx, NULL,
+ pool)));
SVN_ERR(svn_ra_get_commit_editor3(ra_session, &editor, &edit_baton,
commit_revprops,
commit_callback,
Modified: subversion/branches/compressed-pristines/subversion/libsvn_client/blame.c
URL: http://svn.apache.org/viewvc/subversion/branches/compressed-pristines/subversion/libsvn_client/blame.c?rev=1373783&r1=1373782&r2=1373783&view=diff
==============================================================================
--- subversion/branches/compressed-pristines/subversion/libsvn_client/blame.c (original)
+++ subversion/branches/compressed-pristines/subversion/libsvn_client/blame.c Thu Aug 16 10:17:48 2012
@@ -593,6 +593,7 @@ svn_client_blame5(const char *target,
struct file_rev_baton frb;
svn_ra_session_t *ra_session;
svn_revnum_t start_revnum, end_revnum;
+ svn_client__pathrev_t *end_loc;
struct blame *walk, *walk_merged = NULL;
apr_pool_t *iterpool;
svn_stream_t *last_stream;
@@ -610,9 +611,10 @@ svn_client_blame5(const char *target,
SVN_ERR(svn_dirent_get_absolute(&target_abspath_or_url, target, pool));
/* Get an RA plugin for this filesystem object. */
- SVN_ERR(svn_client__ra_session_from_path(&ra_session, &end_revnum, NULL,
- target, NULL, peg_revision, end,
- ctx, pool));
+ SVN_ERR(svn_client__ra_session_from_path2(&ra_session, &end_loc,
+ target, NULL, peg_revision, end,
+ ctx, pool));
+ end_revnum = end_loc->rev;
SVN_ERR(svn_client__get_revision_number(&start_revnum, NULL, ctx->wc_ctx,
target_abspath_or_url, ra_session,
Modified: subversion/branches/compressed-pristines/subversion/libsvn_client/cat.c
URL: http://svn.apache.org/viewvc/subversion/branches/compressed-pristines/subversion/libsvn_client/cat.c?rev=1373783&r1=1373782&r2=1373783&view=diff
==============================================================================
--- subversion/branches/compressed-pristines/subversion/libsvn_client/cat.c (original)
+++ subversion/branches/compressed-pristines/subversion/libsvn_client/cat.c Thu Aug 16 10:17:48 2012
@@ -183,11 +183,10 @@ svn_client_cat2(svn_stream_t *out,
apr_pool_t *pool)
{
svn_ra_session_t *ra_session;
- svn_revnum_t rev;
+ svn_client__pathrev_t *loc;
svn_string_t *eol_style;
svn_string_t *keywords;
apr_hash_t *props;
- const char *url;
svn_stream_t *output = out;
svn_error_t *err;
@@ -227,20 +226,21 @@ svn_client_cat2(svn_stream_t *out,
}
/* Get an RA plugin for this filesystem object. */
- SVN_ERR(svn_client__ra_session_from_path(&ra_session, &rev,
- &url, path_or_url, NULL,
- peg_revision,
- revision, ctx, pool));
+ SVN_ERR(svn_client__ra_session_from_path2(&ra_session, &loc,
+ path_or_url, NULL,
+ peg_revision,
+ revision, ctx, pool));
/* Grab some properties we need to know in order to figure out if anything
special needs to be done with this file. */
- err = svn_ra_get_file(ra_session, "", rev, NULL, NULL, &props, pool);
+ err = svn_ra_get_file(ra_session, "", loc->rev, NULL, NULL, &props, pool);
if (err)
{
if (err->apr_err == SVN_ERR_FS_NOT_FILE)
{
return svn_error_createf(SVN_ERR_CLIENT_IS_DIRECTORY, err,
- _("URL '%s' refers to a directory"), url);
+ _("URL '%s' refers to a directory"),
+ loc->url);
}
else
{
@@ -284,7 +284,7 @@ svn_client_cat2(svn_stream_t *out,
SVN_ERR(svn_subst_build_keywords2
(&kw, keywords->data,
cmt_rev->data,
- url,
+ loc->url,
when,
cmt_author ? cmt_author->data : NULL,
pool));
@@ -297,7 +297,7 @@ svn_client_cat2(svn_stream_t *out,
eol_str, FALSE, kw, TRUE, pool);
}
- SVN_ERR(svn_ra_get_file(ra_session, "", rev, output, NULL, NULL, pool));
+ SVN_ERR(svn_ra_get_file(ra_session, "", loc->rev, output, NULL, NULL, pool));
if (out != output)
/* Close the interjected stream */