You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by rh...@apache.org on 2015/11/30 11:24:23 UTC
svn commit: r1717223 [9/50] - in /subversion/branches/ra-git: ./ build/
build/ac-macros/ build/generator/ build/generator/templates/
contrib/hook-scripts/ notes/ notes/api-errata/1.9/ notes/move-tracking/
subversion/ subversion/bindings/ctypes-python/c...
Modified: subversion/branches/ra-git/subversion/include/svn_io.h
URL: http://svn.apache.org/viewvc/subversion/branches/ra-git/subversion/include/svn_io.h?rev=1717223&r1=1717222&r2=1717223&view=diff
==============================================================================
--- subversion/branches/ra-git/subversion/include/svn_io.h (original)
+++ subversion/branches/ra-git/subversion/include/svn_io.h Mon Nov 30 10:24:16 2015
@@ -689,11 +689,9 @@ svn_io_files_contents_three_same_p(svn_b
* closing the file, attempt to delete the file before returning the error.
*
* Write the data in 'binary' mode (#APR_FOPEN_BINARY). If @a contents
- * is null, create an empty file.
+ * is @c NULL, create an empty file.
*
* Use @a pool for memory allocations.
- *
- * @since
*/
svn_error_t *
svn_io_file_create(const char *file,
@@ -707,9 +705,9 @@ svn_io_file_create(const char *file,
* closing the file, attempt to delete the file before returning the error.
*
* Write the data in 'binary' mode (#APR_FOPEN_BINARY). If @a length is
- * zero, create an empty file; in this case @a contents may be null.
+ * zero, create an empty file; in this case @a contents may be @c NULL.
*
- * Use @a pool for memory allocations.
+ * Use @a scratch_pool for temporary allocations.
*
* @since New in 1.9.
*/
@@ -717,20 +715,20 @@ svn_error_t *
svn_io_file_create_bytes(const char *file,
const void *contents,
apr_size_t length,
- apr_pool_t *pool);
+ apr_pool_t *scratch_pool);
/** Create an empty file at utf8-encoded path @a file.
*
* @a file must not already exist. If an error occurs while
* closing the file, attempt to delete the file before returning the error.
*
- * Use @a pool for memory allocations.
+ * Use @a scratch_pool for temporary allocations.
*
* @since New in 1.9.
*/
svn_error_t *
svn_io_file_create_empty(const char *file,
- apr_pool_t *pool);
+ apr_pool_t *scratch_pool);
/**
* Lock file at @a lock_file. If @a exclusive is TRUE,
@@ -1104,11 +1102,29 @@ svn_stream_from_aprfile(apr_file_t *file
apr_pool_t *pool);
/** Set @a *in to a generic stream connected to stdin, allocated in
- * @a pool. The stream and its underlying APR handle will be closed
- * when @a pool is cleared or destroyed.
+ * @a pool. If @a buffered is set, APR buffering will be enabled.
+ * The stream and its underlying APR handle will be closed when @a pool
+ * is cleared or destroyed.
+ *
+ * @note APR buffering will try to fill the whole internal buffer before
+ * serving read requests. This may be inappropriate for interactive
+ * applications where stdin will not deliver any more data unless
+ * the application processed the data already received.
+ *
+ * @since New in 1.10.
+ */
+svn_error_t *
+svn_stream_for_stdin2(svn_stream_t **in,
+ svn_boolean_t buffered,
+ apr_pool_t *pool);
+
+/** Similar to svn_stream_for_stdin2(), but with buffering being disabled.
*
* @since New in 1.7.
+ *
+ * @deprecated Provided for backward compatibility with the 1.9 API.
*/
+SVN_DEPRECATED
svn_error_t *
svn_stream_for_stdin(svn_stream_t **in,
apr_pool_t *pool);
@@ -1131,19 +1147,30 @@ svn_error_t *
svn_stream_for_stdout(svn_stream_t **out,
apr_pool_t *pool);
-/** Set @a *str to a string buffer allocated in @a pool that contains all
- * data from the current position in @a stream to its end. @a len_hint
- * specifies the initial capacity of the string buffer and may be 0. The
- * buffer gets automatically resized to fit the actual amount of data being
- * read from @a stream.
+/** Read the contents of @a stream into memory, from its current position
+ * to its end, returning the data in @a *result. The stream will be closed
+ * when it has been successfully and completely read.
+ *
+ * @a len_hint gives a hint about the expected length, in bytes, of the
+ * actual data that will be read from the stream. It may be 0, meaning no
+ * hint is being provided. Efficiency in time and/or in space may be
+ * better (and in general will not be worse) when the actual data length
+ * is equal or approximately equal to the length hint.
+ *
+ * The returned memory is allocated in @a result_pool.
+ *
+ * @note The present implementation is efficient when @a len_hint is big
+ * enough (but not vastly bigger than necessary), and also for actual
+ * lengths up to 64 bytes when @a len_hint is 0. Otherwise it can incur
+ * significant time and space overheads. See source code for details.
*
* @since New in 1.9.
*/
svn_error_t *
-svn_stringbuf_from_stream(svn_stringbuf_t **str,
+svn_stringbuf_from_stream(svn_stringbuf_t **result,
svn_stream_t *stream,
apr_size_t len_hint,
- apr_pool_t *pool);
+ apr_pool_t *result_pool);
/** Return a generic stream connected to stringbuf @a str. Allocate the
* stream in @a pool.
@@ -1504,25 +1531,44 @@ svn_stream_contents_same(svn_boolean_t *
apr_pool_t *pool);
-/** Read the contents of @a stream into memory, returning the data in
- * @a result. The stream will be closed when it has been successfully and
- * completely read.
+/** Read the contents of @a stream into memory, from its current position
+ * to its end, returning the data in @a *result. The stream will be closed
+ * when it has been successfully and completely read.
+ *
+ * @a len_hint gives a hint about the expected length, in bytes, of the
+ * actual data that will be read from the stream. It may be 0, meaning no
+ * hint is being provided. Efficiency in time and/or in space may be
+ * better (and in general will not be worse) when the actual data length
+ * is equal or approximately equal to the length hint.
*
* The returned memory is allocated in @a result_pool, and any temporary
- * allocations are performed in @a scratch_pool.
+ * allocations may be performed in @a scratch_pool.
*
- * @note due to memory pseudo-reallocation behavior (due to pools), this
- * can be a memory-intensive operation for large files.
+ * @note The present implementation is efficient when @a len_hint is big
+ * enough (but not vastly bigger than necessary), and also for actual
+ * lengths up to 64 bytes when @a len_hint is 0. Otherwise it can incur
+ * significant time and space overheads. See source code for details.
*
- * @since New in 1.6
+ * @since New in 1.10
*/
svn_error_t *
+svn_string_from_stream2(svn_string_t **result,
+ svn_stream_t *stream,
+ apr_size_t len_hint,
+ apr_pool_t *result_pool);
+
+/** Similar to svn_string_from_stream2(), but always passes 0 for
+ * @a len_hint.
+ *
+ * @deprecated Provided for backwards compatibility with the 1.9 API.
+ */
+SVN_DEPRECATED
+svn_error_t *
svn_string_from_stream(svn_string_t **result,
svn_stream_t *stream,
apr_pool_t *result_pool,
apr_pool_t *scratch_pool);
-
/** A function type provided for use as a callback from
* @c svn_stream_lazyopen_create().
*
@@ -2177,6 +2223,18 @@ svn_io_file_info_get(apr_finfo_t *finfo,
apr_pool_t *pool);
+/** Set @a *filesize_p to the size of @a file. Use @a pool for temporary
+ * allocations.
+ *
+ * @note Use svn_io_file_info_get() to get more information about
+ * apr_file_t.
+ *
+ * @since New in 1.10
+ */
+svn_error_t *
+svn_io_file_size_get(svn_filesize_t *filesize_p, apr_file_t *file,
+ apr_pool_t *pool);
+
/** Wrapper for apr_file_read(). */
svn_error_t *
svn_io_file_read(apr_file_t *file,
@@ -2227,12 +2285,12 @@ svn_io_file_seek(apr_file_t *file,
* internal data buffer to @a block_size bytes and to read data aligned to
* multiples of that value. The beginning of the block will be returned
* in @a buffer_start, if that is not NULL.
- * Uses @a pool for temporary allocations.
+ * Uses @a scratch_pool for temporary allocations.
*
- * @note Due to limitations of the APR API, in particular pre-1.3 APR,
- * the alignment may not be successful. If you never use any other seek
- * function on @a file, you are, however, virtually guaranteed to get at
- * least 4kByte alignments for all reads.
+ * @note Due to limitations of the APR API, the alignment may not be
+ * successful. If you never use any other seek function on @a file,
+ * however, you are virtually guaranteed to get at least 4kByte alignment
+ * for all reads.
*
* @note Calling this for non-buffered files is legal but inefficient.
*
@@ -2243,7 +2301,7 @@ svn_io_file_aligned_seek(apr_file_t *fil
apr_off_t block_size,
apr_off_t *buffer_start,
apr_off_t offset,
- apr_pool_t *pool);
+ apr_pool_t *scratch_pool);
/** Wrapper for apr_file_write(). */
svn_error_t *
@@ -2278,13 +2336,29 @@ svn_io_file_write_full(apr_file_t *file,
* If @a copy_perms_path is not NULL, copy the permissions applied on @a
* @a copy_perms_path on the temporary file before renaming.
*
- * @note This function uses advanced file control operations to flush buffers
- * to disk that aren't always accessible and can be very expensive. Avoid
- * using this function in cases where the file should just work on any
- * network filesystem.
+ * If @a flush_to_disk is non-zero, do not return until the node has
+ * actually been written on the disk.
*
- * @since New in 1.9.
- */
+ * @note The flush to disk operation can be very expensive on systems
+ * that implement flushing on all IO layers, like Windows. Please use
+ * @a flush_to_disk flag only for critical data.
+ *
+ * @since New in 1.10.
+ */
+svn_error_t *
+svn_io_write_atomic2(const char *final_path,
+ const void *buf,
+ apr_size_t nbytes,
+ const char *copy_perms_path,
+ svn_boolean_t flush_to_disk,
+ apr_pool_t *scratch_pool);
+
+/** Similar to svn_io_write_atomic2(), but with @a flush_to_disk set
+* to @c TRUE.
+*
+* @deprecated Provided for backward compatibility with the 1.9 API
+*/
+SVN_DEPRECATED
svn_error_t *
svn_io_write_atomic(const char *final_path,
const void *buf,
@@ -2334,10 +2408,27 @@ svn_io_stat(apr_finfo_t *finfo,
* @a from_path to a new path @a to_path within the same filesystem.
* In some cases, an existing node at @a to_path will be overwritten.
*
- * A wrapper for apr_file_rename(). @a from_path and @a to_path are
- * utf8-encoded.
+ * @a from_path and @a to_path are utf8-encoded. If @a flush_to_disk
+ * is non-zero, do not return until the node has actually been moved on
+ * the disk.
+ *
+ * @note The flush to disk operation can be very expensive on systems
+ * that implement flushing on all IO layers, like Windows. Please use
+ * @a flush_to_disk flag only for critical data.
+ *
+ * @since New in 1.10.
*/
svn_error_t *
+svn_io_file_rename2(const char *from_path, const char *to_path,
+ svn_boolean_t flush_to_disk, apr_pool_t *pool);
+
+/** Similar to svn_io_file_rename2(), but with @a flush_to_disk set
+ * to @c FALSE.
+ *
+ * @deprecated Provided for backward compatibility with the 1.9 API
+ */
+SVN_DEPRECATED
+svn_error_t *
svn_io_file_rename(const char *from_path,
const char *to_path,
apr_pool_t *pool);
Modified: subversion/branches/ra-git/subversion/include/svn_ra.h
URL: http://svn.apache.org/viewvc/subversion/branches/ra-git/subversion/include/svn_ra.h?rev=1717223&r1=1717222&r2=1717223&view=diff
==============================================================================
--- subversion/branches/ra-git/subversion/include/svn_ra.h (original)
+++ subversion/branches/ra-git/subversion/include/svn_ra.h Mon Nov 30 10:24:16 2015
@@ -306,7 +306,7 @@ typedef svn_boolean_t (*svn_ra_check_tun
* This function will be called when the pool that owns the tunnel
* connection is cleared or destroyed.
*
- * @a tunnel_context is the baton as returned from the
+ * @a close_baton is the baton as returned from the
* svn_ra_open_tunnel_func_t.
*
* @a tunnel_baton was returned by the open-tunnel callback.
@@ -1111,16 +1111,15 @@ svn_ra_get_file(svn_ra_session_t *sessio
* @a path is interpreted relative to the URL in @a session.
*
* If @a revision is @c SVN_INVALID_REVNUM (meaning 'head') and
- * @a *fetched_rev is not @c NULL, then this function will set
+ * @a fetched_rev is not @c NULL, then this function will set
* @a *fetched_rev to the actual revision that was retrieved. (Some
* callers want to know, and some don't.)
*
* If @a props is non @c NULL, set @a *props to contain the properties of
- * the directory. This means @em all properties: not just ones controlled by
- * the user and stored in the repository fs, but non-tweakable ones
- * generated by the SCM system itself (e.g. 'wcprops', 'entryprops',
- * etc.) The keys are <tt>const char *</tt>, values are
- * <tt>@c svn_string_t *</tt>.
+ * the directory, including properties that are non-tweakable and
+ * generated by the SCM system itself (such as #svn_prop_wc_kind and
+ * #svn_prop_entry_kind properties). The keys are <tt>const char *</tt>,
+ * values are <tt>@c svn_string_t *</tt>.
*
* @since New in 1.4.
*/
@@ -1573,7 +1572,7 @@ svn_ra_do_diff(svn_ra_session_t *session
* revisions in which at least one of @a paths was changed (i.e., if
* file, text or props changed; if dir, props changed or an entry
* was added or deleted). Each path is an <tt>const char *</tt>, relative
- * to the @a session's common parent.
+ * to the repository root of @a session.
*
* If @a limit is greater than zero only invoke @a receiver on the first
* @a limit logs.
@@ -1740,9 +1739,10 @@ svn_ra_get_repos_root(svn_ra_session_t *
/**
* Set @a *locations to the locations (at the repository revisions
* @a location_revisions) of the file identified by @a path in
- * @a peg_revision. @a path is relative to the URL to which
- * @a session was opened. @a location_revisions is an array of
- * @c svn_revnum_t's. @a *locations will be a mapping from the revisions to
+ * @a peg_revision (passing @c SVN_INVALID_REVNUM is an error).
+ * @a path is relative to the URL to which @a session was opened.
+ * @a location_revisions is an array of @c svn_revnum_t's.
+ * @a *locations will be a mapping from the revisions to
* their appropriate absolute paths. If the file doesn't exist in a
* location_revision, that revision will be ignored.
*
@@ -1819,7 +1819,7 @@ svn_ra_get_location_segments(svn_ra_sess
* to support reversion of the revision range for @a include_merged_revision
* @c FALSE reporting by switching @a end with @a start.
*
- * @note Prior to Subversion 1.9, this function may accept delta handlers
+ * @note Prior to Subversion 1.9, this function may request delta handlers
* from @a handler even for empty text deltas. Starting with 1.9, the
* delta handler / baton return arguments passed to @a handler will be
* #NULL unless there is an actual difference in the file contents between
@@ -1989,7 +1989,7 @@ svn_ra_get_locks(svn_ra_session_t *sessi
/**
* Replay the changes from a range of revisions between @a start_revision
- * and @a end_revision.
+ * and @a end_revision (inclusive).
*
* When receiving information for one revision, a callback @a revstart_func is
* called; this callback will provide an editor and baton through which the
Modified: subversion/branches/ra-git/subversion/include/svn_ra_svn.h
URL: http://svn.apache.org/viewvc/subversion/branches/ra-git/subversion/include/svn_ra_svn.h?rev=1717223&r1=1717222&r2=1717223&view=diff
==============================================================================
--- subversion/branches/ra-git/subversion/include/svn_ra_svn.h (original)
+++ subversion/branches/ra-git/subversion/include/svn_ra_svn.h Mon Nov 30 10:24:16 2015
@@ -141,16 +141,21 @@ typedef struct svn_ra_svn_cmd_entry_t
svn_boolean_t terminate;
} svn_ra_svn_cmd_entry_t;
+/** Data types defined by the svn:// protocol. */
+typedef enum
+{
+ SVN_RA_SVN_NUMBER,
+ SVN_RA_SVN_STRING,
+ SVN_RA_SVN_WORD,
+ SVN_RA_SVN_LIST
+} svn_ra_svn_item_kind_t;
+
/** Memory representation of an on-the-wire data item. */
typedef struct svn_ra_svn_item_t
{
/** Variant indicator. */
- enum {
- SVN_RA_SVN_NUMBER,
- SVN_RA_SVN_STRING,
- SVN_RA_SVN_WORD,
- SVN_RA_SVN_LIST
- } kind;
+ svn_ra_svn_item_kind_t kind;
+
/** Variant data. */
union {
apr_uint64_t number;
@@ -184,13 +189,38 @@ typedef svn_error_t *(*svn_ra_svn_edit_c
* It defines the number of bytes that must have been sent since the last
* check before the next check will be made.
*
+ * If @a max_in is not 0, error out and close the connection whenever more
+ * than @a max_in bytes are received for a command (e.g. a client request).
+ * If @a max_out is not 0, error out and close the connection whenever more
+ * than @a max_out bytes have been send as response to some command.
+ *
+ * @note The limits enforced may vary slightly by +/- the I/O buffer size.
+ *
* @note If @a out_stream is an wrapped apr_file_t* the backing file will be
* used for some operations.
*
* Allocate the result in @a pool.
*
+ * @since New in 1.10
+ */
+svn_ra_svn_conn_t *svn_ra_svn_create_conn5(apr_socket_t *sock,
+ svn_stream_t *in_stream,
+ svn_stream_t *out_stream,
+ int compression_level,
+ apr_size_t zero_copy_limit,
+ apr_size_t error_check_interval,
+ apr_uint64_t max_in,
+ apr_uint64_t max_out,
+ apr_pool_t *result_pool);
+
+
+/** Similar to svn_ra_svn_create_conn5() but with @a max_in and @a max_out
+ * set to 0.
+ *
* @since New in 1.9
+ * @deprecated Provided for backward compatibility with the 1.9 API.
*/
+SVN_DEPRECATED
svn_ra_svn_conn_t *svn_ra_svn_create_conn4(apr_socket_t *sock,
svn_stream_t *in_stream,
svn_stream_t *out_stream,
Modified: subversion/branches/ra-git/subversion/include/svn_repos.h
URL: http://svn.apache.org/viewvc/subversion/branches/ra-git/subversion/include/svn_repos.h?rev=1717223&r1=1717222&r2=1717223&view=diff
==============================================================================
--- subversion/branches/ra-git/subversion/include/svn_repos.h (original)
+++ subversion/branches/ra-git/subversion/include/svn_repos.h Mon Nov 30 10:24:16 2015
@@ -234,9 +234,6 @@ typedef enum svn_repos_notify_action_t
/** The structure of a revision is being verified. @since New in 1.8. */
svn_repos_notify_verify_rev_structure,
- /** A revision is found with corruption/errors. @since New in 1.9. */
- svn_repos_notify_failure,
-
/** A revprop shard got packed. @since New in 1.9. */
svn_repos_notify_pack_revprops,
@@ -247,10 +244,16 @@ typedef enum svn_repos_notify_action_t
svn_repos_notify_format_bumped,
/** A revision range was copied. @since New in 1.9. */
- svn_repos_notify_hotcopy_rev_range
+ svn_repos_notify_hotcopy_rev_range,
+
+ /** The repository pack did not do anything. @since New in 1.10. */
+ svn_repos_notify_pack_noop,
+
+ /** The revision properties got set. @since New in 1.10. */
+ svn_repos_notify_load_revprop_set
} svn_repos_notify_action_t;
-/** The type of error occurring.
+/** The type of warning occurring.
*
* @since New in 1.7.
*/
@@ -348,11 +351,6 @@ typedef struct svn_repos_notify_t
/** For #svn_repos_notify_load_node_start, the path of the node. */
const char *path;
- /** For #svn_repos_notify_failure, this error chain indicates what
- went wrong during verification.
- @since New in 1.9. */
- svn_error_t *err;
-
/** For #svn_repos_notify_hotcopy_rev_range, the start of the copied
revision range.
@since New in 1.9. */
@@ -559,15 +557,18 @@ svn_repos_has_capability(svn_repos_t *re
apr_pool_t *pool);
/**
- * Return a set capabilities supported by the running Subversion library and by
- * @a repos. (Capabilities supported by this version of Subversion but not by
- * @a repos are not listed. This may happen when svn_repos_upgrade2() has not
- * been called after a software upgrade.)
+ * Return a set of @a capabilities supported by the running Subversion
+ * library and by @a repos. (Capabilities supported by this version of
+ * Subversion but not by @a repos are not listed. This may happen when
+ * svn_repos_upgrade2() has not been called after a software upgrade.)
*
- * The set is represented as a hash whose keys are the set members. The values
- * are not defined.
+ * The set is represented as a hash whose const char * keys are the set
+ * members. The values are not defined.
*
- * @see svn_repos_info_format()
+ * Allocate @a capabilities in @a result_pool and use @a scratch_pool for
+ * temporary allocations.
+ *
+ * @see svn_repos_info_format
*
* @since New in 1.9.
*/
@@ -626,12 +627,15 @@ svn_fs_t *
svn_repos_fs(svn_repos_t *repos);
/** Return the type of filesystem associated with repository object
- * @a repos allocated in @a pool.
+ * @a repos allocated in @a result_pool.
+ *
+ * @see #svn_fs_backend_names
*
* @since New in 1.9.
*/
const char *
-svn_repos_fs_type(svn_repos_t *repos, apr_pool_t *pool);
+svn_repos_fs_type(svn_repos_t *repos,
+ apr_pool_t *result_pool);
/** Make a hot copy of the Subversion repository found at @a src_path
* to @a dst_path.
@@ -650,10 +654,16 @@ svn_repos_fs_type(svn_repos_t *repos, ap
* called with the @a notify_baton and a notification structure containing
* appropriate values in @c start_revision and @c end_revision (both
* inclusive). @c start_revision might be equal to @c end_revision in
- * case the copied range consists of a single revision. Currently, this
- * notification is only supported for FSFS repositories. @a notify_func
+ * case the copied range consists of a single revision. Currently, this
+ * notification is not triggered by the BDB backend. @a notify_func
* may be @c NULL if this notification is not required.
*
+ * The optional @a cancel_func callback will be invoked with
+ * @a cancel_baton as usual to allow the user to preempt this potentially
+ * lengthy operation.
+ *
+ * Use @a scratch_pool for temporary allocations.
+ *
* @since New in 1.9.
*/
svn_error_t *
@@ -665,7 +675,7 @@ svn_repos_hotcopy3(const char *src_path,
void *notify_baton,
svn_cancel_func_t cancel_func,
void *cancel_baton,
- apr_pool_t *pool);
+ apr_pool_t *scratch_pool);
/**
* Like svn_repos_hotcopy3(), but with @a notify_func and @a notify_baton
@@ -1523,19 +1533,19 @@ svn_repos_replay(svn_fs_root_t *root,
* after the commit has succeeded) @c close_edit will invoke
* @a commit_callback with a filled-in #svn_commit_info_t *, @a commit_baton,
* and @a pool or some subpool thereof as arguments. The @c repos_root field
- * of the #svn_commit_info_t is null. If @a commit_callback
+ * of the #svn_commit_info_t is @c NULL. If @a commit_callback
* returns an error, that error will be returned from @c close_edit,
* otherwise if there was a post-commit hook failure, then that error
* will be returned with code SVN_ERR_REPOS_POST_COMMIT_HOOK_FAILED.
- * (Note that prior to Subversion 1.6, @a commit_callback cannot be NULL; if
- * you don't need a callback, pass a dummy function.)
+ * (Note that prior to Subversion 1.6, @a commit_callback cannot be @c NULL;
+ * if you don't need a callback, pass a dummy function.)
*
* Calling @a (*editor)->abort_edit aborts the commit, and will also
* abort the commit transaction unless @a txn was supplied (not @c
* NULL). Callers who supply their own transactions are responsible
* for cleaning them up (either by committing them, or aborting them).
*
- * @since New in 1.5. Since 1.6, @a commit_callback can be null.
+ * @since New in 1.5. Since 1.6, @a commit_callback can be @c NULL.
*
* @note Yes, @a repos_url_decoded is a <em>decoded</em> URL. We realize
* that's sorta wonky. Sorry about that.
@@ -2083,7 +2093,7 @@ svn_repos_fs_get_mergeinfo(svn_mergeinfo
* the revision range for @a include_merged_revision @c FALSE reporting by
* switching @a start with @a end.
*
- * @note Prior to Subversion 1.9, this function may accept delta handlers
+ * @note Prior to Subversion 1.9, this function may request delta handlers
* from @a handler even for empty text deltas. Starting with 1.9, the
* delta handler / baton return arguments passed to @a handler will be
* #NULL unless there is an actual difference in the file contents between
@@ -2253,10 +2263,12 @@ svn_repos_fs_begin_txn_for_update(svn_fs
* The pre-lock is run for every path in @a targets. Those targets for
* which the pre-lock is successful are passed to svn_fs_lock_many and
* the post-lock is run for those that are successfully locked.
+ * Pre-lock hook errors are passed to @a lock_callback.
*
* For each path in @a targets @a lock_callback will be invoked
* passing @a lock_baton and the lock and error that apply to path.
- * @a lock_callback can be NULL in which case it is not called.
+ * @a lock_callback can be NULL in which case it is not called and any
+ * errors that would have been passed to the callback are not reported.
*
* If an error occurs when running the post-lock hook the error is
* returned wrapped with #SVN_ERR_REPOS_POST_LOCK_HOOK_FAILED. If the
@@ -2269,6 +2281,11 @@ svn_repos_fs_begin_txn_for_update(svn_fs
* The lock and path passed to @a lock_callback will be allocated in
* @a result_pool. Use @a scratch_pool for temporary allocations.
*
+ * @note This function is not atomic. If it returns an error, some targets
+ * may remain unlocked while others may have been locked.
+ *
+ * @see svn_fs_lock_many
+ *
* @since New in 1.9.
*/
svn_error_t *
@@ -2306,12 +2323,14 @@ svn_repos_fs_lock(svn_lock_t **lock,
* The pre-unlock hook is run for every path in @a targets. Those
* targets for which the pre-unlock is successful are passed to
* svn_fs_unlock_many and the post-unlock is run for those that are
- * successfully unlocked.
+ * successfully unlocked. Pre-unlock hook errors are passed to @a
+ * lock_callback.
*
* For each path in @a targets @a lock_callback will be invoked
* passing @a lock_baton and error that apply to path. The lock
* passed to the callback will be NULL. @a lock_callback can be NULL
- * in which case it is not called.
+ * in which case it is not called and any errors that would have been
+ * passed to the callback are not reported.
*
* If an error occurs when running the post-unlock hook, return the
* original error wrapped with #SVN_ERR_REPOS_POST_UNLOCK_HOOK_FAILED.
@@ -2321,6 +2340,11 @@ svn_repos_fs_lock(svn_lock_t **lock,
* The path passed to @a lock_callback will be allocated in @a result_pool.
* Use @a scratch_pool for temporary allocations.
*
+ * @note This function is not atomic. If it returns an error, some targets
+ * may remain locked while others may have been unlocked.
+ *
+ * @see svn_fs_unlock_many
+ *
* @since New in 1.9.
*/
svn_error_t *
@@ -2702,12 +2726,13 @@ svn_repos_node_from_baton(void *edit_bat
*
* Set @a *repos_format to the repository format number of @a repos, which is
* an integer that increases when incompatible changes are made (such as
- * by #svn_repos_upgrade).
+ * by #svn_repos_upgrade2).
*
- * Set @a *supports_version to the version number of the minimum Subversion GA
- * release that can read and write @a repos.
+ * Set @a *supports_version to the version number of the minimum Subversion
+ * GA release that can read and write @a repos; allocate it in
+ * @a result_pool. Use @a scratch_pool for temporary allocations.
*
- * @see svn_fs_info_format(), svn_repos_capabilities()
+ * @see svn_fs_info_format, svn_repos_capabilities
*
* @since New in 1.9.
*/
@@ -2798,6 +2823,28 @@ enum svn_repos_load_uuid
svn_repos_load_uuid_force
};
+/** Callback type for use with svn_repos_verify_fs3(). @a revision
+ * and @a verify_err are the details of a single verification failure
+ * that occurred during the svn_repos_verify_fs3() call. @a baton is
+ * the same baton given to svn_repos_verify_fs3(). @a scratch_pool is
+ * provided for the convenience of the implementor, who should not
+ * expect it to live longer than a single callback call.
+ *
+ * @a verify_err will be cleared and becomes invalid after the callback
+ * returns, use svn_error_dup() to preserve the error. If a callback uses
+ * @a verify_err as the return value or as a part of the return value, it
+ * should also call svn_error_dup() for @a verify_err. Implementors of this
+ * callback are forbidden to call svn_error_clear() for @a verify_err.
+ *
+ * @see svn_repos_verify_fs3
+ *
+ * @since New in 1.9.
+ */
+typedef svn_error_t *(*svn_repos_verify_callback_t)(void *baton,
+ svn_revnum_t revision,
+ svn_error_t *verify_err,
+ apr_pool_t *scratch_pool);
+
/**
* Verify the contents of the file system in @a repos.
*
@@ -2808,9 +2855,6 @@ enum svn_repos_load_uuid
* range, then also verify "global invariants" of the repository, as
* described in svn_fs_verify().
*
- * When a failure is found, if @a keep_going is @c TRUE then continue
- * verification from the next revision, otherwise stop.
- *
* If @a check_normalization is @c TRUE, report any name collisions
* within the same directory or svn:mergeinfo property where the names
* differ only in character representation, but are otherwise
@@ -2821,25 +2865,31 @@ enum svn_repos_load_uuid
* file context reconstruction and verification. For FSFS format 7+ and
* FSX, this allows for a very fast check against external corruption.
*
+ * If @a verify_callback is not @c NULL, call it with @a verify_baton upon
+ * receiving an FS-specific structure failure or a revision verification
+ * failure. Set @c revision callback argument to #SVN_INVALID_REVNUM or
+ * to the revision number respectively. Set @c verify_err to svn_error_t
+ * describing the reason of the failure. @c verify_err will be cleared
+ * after the callback returns, use svn_error_dup() to preserve the error.
+ * If @a verify_callback returns an error different from #SVN_NO_ERROR,
+ * stop verifying the repository and immediately return the error from
+ * @a verify_callback.
+ *
+ * If @a verify_callback is @c NULL, this function returns the first
+ * encountered verification error or #SVN_NO_ERROR if there were no failures
+ * during the verification. Errors that prevent the verification process
+ * from continuing, such as #SVN_ERR_CANCELLED, are returned immediately
+ * and do not trigger an invocation of @a verify_callback.
+ *
* If @a notify_func is not null, then call it with @a notify_baton and
* with a notification structure in which the fields are set as follows.
- * (For a warning or error notification that does not apply to a specific
- * revision, the revision number is #SVN_INVALID_REVNUM.)
+ * (For a warning that does not apply to a specific revision, the revision
+ * number is #SVN_INVALID_REVNUM.)
*
* For each FS-specific structure warning:
* @c action = svn_repos_notify_verify_rev_structure
* @c revision = the revision or #SVN_INVALID_REVNUM
*
- * For a FS-specific structure failure:
- * @c action = #svn_repos_notify_failure
- * @c revision = #SVN_INVALID_REVNUM
- * @c err = the corresponding error chain
- *
- * For each revision verification failure:
- * @c action = #svn_repos_notify_failure
- * @c revision = the revision
- * @c err = the corresponding error chain
- *
* For each revision verification warning:
* @c action = #svn_repos_notify_warning
* @c warning and @c warning_str fields set accordingly
@@ -2861,10 +2911,7 @@ enum svn_repos_load_uuid
*
* Use @a scratch_pool for temporary allocation.
*
- * Return an error if there were any failures during verification, or
- * #SVN_NO_ERROR if there were no failures. A failure means an event that,
- * if a notification callback were provided, would send a notification
- * with @c action = #svn_repos_notify_failure.
+ * @see svn_repos_verify_callback_t
*
* @since New in 1.9.
*/
@@ -2872,18 +2919,20 @@ svn_error_t *
svn_repos_verify_fs3(svn_repos_t *repos,
svn_revnum_t start_rev,
svn_revnum_t end_rev,
- svn_boolean_t keep_going,
svn_boolean_t check_normalization,
svn_boolean_t metadata_only,
svn_repos_notify_func_t notify_func,
void *notify_baton,
+ svn_repos_verify_callback_t verify_callback,
+ void *verify_baton,
svn_cancel_func_t cancel,
void *cancel_baton,
apr_pool_t *scratch_pool);
/**
- * Like svn_repos_verify_fs3(), but with @a keep_going,
- * @a check_normalization and @a metadata_only set to @c FALSE.
+ * Like svn_repos_verify_fs3(), but with @a verify_callback and
+ * @a verify_baton set to @c NULL and with @a check_normalization
+ * and @a metadata_only set to @c FALSE.
*
* @since New in 1.7.
* @deprecated Provided for backward compatibility with the 1.8 API.
@@ -2940,6 +2989,12 @@ svn_repos_verify_fs(svn_repos_t *repos,
* be done with full plain text. A dump with @a use_deltas set cannot
* be loaded by Subversion 1.0.x.
*
+ * If @a include_revprops is @c TRUE, output the revision properties as
+ * well, otherwise omit them.
+ *
+ * If @a include_changes is @c TRUE, output the revision contents, i.e.
+ * tree and node changes.
+ *
* If @a notify_func is not null, then call it with @a notify_baton and
* with a notification structure in which the fields are set as follows.
* (For a warning or error notification that does not apply to a specific
@@ -2971,8 +3026,31 @@ svn_repos_verify_fs(svn_repos_t *repos,
*
* Use @a scratch_pool for temporary allocation.
*
+ * @since New in 1.10.
+ */
+svn_error_t *
+svn_repos_dump_fs4(svn_repos_t *repos,
+ svn_stream_t *stream,
+ svn_revnum_t start_rev,
+ svn_revnum_t end_rev,
+ svn_boolean_t incremental,
+ svn_boolean_t use_deltas,
+ svn_boolean_t include_revprops,
+ svn_boolean_t include_changes,
+ svn_repos_notify_func_t notify_func,
+ void *notify_baton,
+ svn_cancel_func_t cancel_func,
+ void *cancel_baton,
+ apr_pool_t *pool);
+
+/**
+ * Similar to svn_repos_dump_fs4(), but with @a include_revprops and
+ * @a include_changes both set to @c TRUE.
+ *
* @since New in 1.7.
+ * @deprecated Provided for backward compatibility with the 1.9 API.
*/
+SVN_DEPRECATED
svn_error_t *
svn_repos_dump_fs3(svn_repos_t *repos,
svn_stream_t *dumpstream,
@@ -3176,6 +3254,52 @@ svn_repos_load_fs(svn_repos_t *repos,
void *cancel_baton,
apr_pool_t *pool);
+/**
+ * Read and parse dumpfile-formatted @a dumpstream, extracting the
+ * revision properties from it and apply them to the already-open
+ * @a repos. Use @a scratch_pool for temporary allocations.
+ *
+ * If, after filtering by the @a start_rev and @a end_rev, the dumpstream
+ * contains revisions missing in @a repos, an error will be thrown.
+ *
+ * @a start_rev and @a end_rev act as filters, the lower and upper
+ * (inclusive) range values of revisions in @a dumpstream which will
+ * be loaded. Either both of these values are #SVN_INVALID_REVNUM (in
+ * which case no revision-based filtering occurs at all), or both are
+ * valid revisions (where @a start_rev is older than or equivalent to
+ * @a end_rev).
+ *
+ * If @a validate_props is set, then validate Subversion revision
+ * properties (those in the svn: namespace) against established
+ * rules for those things.
+ *
+ * If @a ignore_dates is set, ignore any revision datestamps found in
+ * @a dumpstream, keeping whatever timestamps the revisions currently
+ * have.
+ *
+ * If non-NULL, use @a notify_func and @a notify_baton to send notification
+ * of events to the caller.
+ *
+ * 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 load.
+ *
+ * @remark No repository hooks will be triggered.
+ *
+ * @since New in 1.10.
+ */
+svn_error_t *
+svn_repos_load_fs_revprops(svn_repos_t *repos,
+ svn_stream_t *dumpstream,
+ svn_revnum_t start_rev,
+ svn_revnum_t end_rev,
+ svn_boolean_t validate_props,
+ svn_boolean_t ignore_dates,
+ svn_repos_notify_func_t notify_func,
+ void *notify_baton,
+ svn_cancel_func_t cancel_func,
+ void *cancel_baton,
+ apr_pool_t *scratch_pool);
/**
* A vtable that is driven by svn_repos_parse_dumpstream3().
@@ -3319,6 +3443,9 @@ typedef struct svn_repos_parse_fns3_t
* could stop reading entirely after the youngest required rev.
*
* @since New in 1.8.
+
+ * @since Starting in 1.10, @a parse_fns may contain #NULL pointers for
+ * those callbacks that the caller is not interested in.
*/
svn_error_t *
svn_repos_parse_dumpstream3(svn_stream_t *stream,
@@ -3378,7 +3505,7 @@ svn_repos_parse_dumpstream3(svn_stream_t
* @since New in 1.9.
*/
svn_error_t *
-svn_repos_get_fs_build_parser5(const svn_repos_parse_fns3_t **callbacks,
+svn_repos_get_fs_build_parser5(const svn_repos_parse_fns3_t **parser,
void **parse_baton,
svn_repos_t *repos,
svn_revnum_t start_rev,
Modified: subversion/branches/ra-git/subversion/include/svn_string.h
URL: http://svn.apache.org/viewvc/subversion/branches/ra-git/subversion/include/svn_string.h?rev=1717223&r1=1717222&r2=1717223&view=diff
==============================================================================
--- subversion/branches/ra-git/subversion/include/svn_string.h (original)
+++ subversion/branches/ra-git/subversion/include/svn_string.h Mon Nov 30 10:24:16 2015
@@ -305,7 +305,7 @@ svn_stringbuf_fillchar(svn_stringbuf_t *
* The advantages extend beyond the actual call because the reduced
* register pressure allows for more optimization within the caller.
*
- * reallocs if necessary. @a targetstr is affected, nothing else is.
+ * Reallocs if necessary. @a targetstr is affected, nothing else is.
* @since New in 1.7.
*/
void
@@ -314,7 +314,7 @@ svn_stringbuf_appendbyte(svn_stringbuf_t
/** Append the array of bytes @a bytes of length @a count onto @a targetstr.
*
- * reallocs if necessary. @a targetstr is affected, nothing else is.
+ * Reallocs if necessary. @a targetstr is affected, nothing else is.
*
* @since 1.9 @a bytes can be NULL if @a count is zero.
*/
@@ -325,7 +325,7 @@ svn_stringbuf_appendbytes(svn_stringbuf_
/** Append @a byte @a count times onto @a targetstr.
*
- * reallocs if necessary. @a targetstr is affected, nothing else is.
+ * Reallocs if necessary. @a targetstr is affected, nothing else is.
* @since New in 1.9.
*/
void
@@ -335,7 +335,7 @@ svn_stringbuf_appendfill(svn_stringbuf_t
/** Append the stringbuf @c appendstr onto @a targetstr.
*
- * reallocs if necessary. @a targetstr is affected, nothing else is.
+ * Reallocs if necessary. @a targetstr is affected, nothing else is.
*/
void
svn_stringbuf_appendstr(svn_stringbuf_t *targetstr,
@@ -343,7 +343,7 @@ svn_stringbuf_appendstr(svn_stringbuf_t
/** Append the C string @a cstr onto @a targetstr.
*
- * reallocs if necessary. @a targetstr is affected, nothing else is.
+ * Reallocs if necessary. @a targetstr is affected, nothing else is.
*/
void
svn_stringbuf_appendcstr(svn_stringbuf_t *targetstr,
@@ -541,7 +541,17 @@ svn_cstring_casecmp(const char *str1, co
* Assume that the number is represented in base @a base.
* Raise an error if conversion fails (e.g. due to overflow), or if the
* converted number is smaller than @a minval or larger than @a maxval.
+ *
* Leading whitespace in @a str is skipped in a locale-dependent way.
+ * After that, the string may contain an optional '+' (positive, default)
+ * or '-' (negative) character, followed by an optional '0x' prefix if
+ * @a base is 0 or 16, followed by numeric digits appropriate for the base.
+ * If there are any more characters after the numeric digits, an error is
+ * returned.
+ *
+ * If @a base is zero, then a leading '0x' or '0X' prefix means hexadecimal,
+ * else a leading '0' means octal (implemented, though not documented, in
+ * apr_strtoi64() in APR 0.9.0 through 1.5.0), else use base ten.
*
* @since New in 1.7.
*/
@@ -554,7 +564,8 @@ svn_cstring_strtoi64(apr_int64_t *n, con
* Parse the C string @a str into a 64 bit number, and return it in @a *n.
* Assume that the number is represented in base 10.
* Raise an error if conversion fails (e.g. due to overflow).
- * Leading whitespace in @a str is skipped in a locale-dependent way.
+ *
+ * The behaviour otherwise is as described for svn_cstring_strtoi64().
*
* @since New in 1.7.
*/
@@ -565,7 +576,8 @@ svn_cstring_atoi64(apr_int64_t *n, const
* Parse the C string @a str into a 32 bit number, and return it in @a *n.
* Assume that the number is represented in base 10.
* Raise an error if conversion fails (e.g. due to overflow).
- * Leading whitespace in @a str is skipped in a locale-dependent way.
+ *
+ * The behaviour otherwise is as described for svn_cstring_strtoi64().
*
* @since New in 1.7.
*/
@@ -577,7 +589,21 @@ svn_cstring_atoi(int *n, const char *str
* it in @a *n. Assume that the number is represented in base @a base.
* Raise an error if conversion fails (e.g. due to overflow), or if the
* converted number is smaller than @a minval or larger than @a maxval.
+ *
* Leading whitespace in @a str is skipped in a locale-dependent way.
+ * After that, the string may contain an optional '+' (positive, default)
+ * or '-' (negative) character, followed by an optional '0x' prefix if
+ * @a base is 0 or 16, followed by numeric digits appropriate for the base.
+ * If there are any more characters after the numeric digits, an error is
+ * returned.
+ *
+ * If @a base is zero, then a leading '0x' or '0X' prefix means hexadecimal,
+ * else a leading '0' means octal (implemented, though not documented, in
+ * apr_strtoi64() in APR 0.9.0 through 1.5.0), else use base ten.
+ *
+ * @warning The implementation used since version 1.7 returns an error
+ * if the parsed number is greater than APR_INT64_MAX, even if it is not
+ * greater than @a maxval.
*
* @since New in 1.7.
*/
@@ -590,7 +616,9 @@ svn_cstring_strtoui64(apr_uint64_t *n, c
* Parse the C string @a str into an unsigned 64 bit number, and return
* it in @a *n. Assume that the number is represented in base 10.
* Raise an error if conversion fails (e.g. due to overflow).
- * Leading whitespace in @a str is skipped in a locale-dependent way.
+ *
+ * The behaviour otherwise is as described for svn_cstring_strtoui64(),
+ * including the upper limit of APR_INT64_MAX.
*
* @since New in 1.7.
*/
@@ -601,7 +629,9 @@ svn_cstring_atoui64(apr_uint64_t *n, con
* Parse the C string @a str into an unsigned 32 bit number, and return
* it in @a *n. Assume that the number is represented in base 10.
* Raise an error if conversion fails (e.g. due to overflow).
- * Leading whitespace in @a str is skipped in a locale-dependent way.
+ *
+ * The behaviour otherwise is as described for svn_cstring_strtoui64(),
+ * including the upper limit of APR_INT64_MAX.
*
* @since New in 1.7.
*/
Modified: subversion/branches/ra-git/subversion/include/svn_types.h
URL: http://svn.apache.org/viewvc/subversion/branches/ra-git/subversion/include/svn_types.h?rev=1717223&r1=1717222&r2=1717223&view=diff
==============================================================================
--- subversion/branches/ra-git/subversion/include/svn_types.h (original)
+++ subversion/branches/ra-git/subversion/include/svn_types.h Mon Nov 30 10:24:16 2015
@@ -150,17 +150,22 @@ typedef int svn_boolean_t;
-/** Declaration of the null pointer constant type.
+/* Declaration of a unique type, never defined, for the SVN_VA_NULL macro.
*
- * @since New in 1.9.
+ * NOTE: Private. Not for direct use by third-party code.
*/
-struct svn_null_pointer_constant_stdarg_sentinel_t;
+struct svn__null_pointer_constant_stdarg_sentinel_t;
/** Null pointer constant used as a sentinel in variable argument lists.
*
+ * Use of this macro ensures that the argument is of the correct size when a
+ * pointer is expected. (The macro @c NULL is not defined as a pointer on
+ * all systems, and the arguments to variadic functions are not converted
+ * automatically to the expected type.)
+ *
* @since New in 1.9.
*/
-#define SVN_VA_NULL ((struct svn_null_pointer_constant_stdarg_sentinel_t*)0)
+#define SVN_VA_NULL ((struct svn__null_pointer_constant_stdarg_sentinel_t*)0)
/* See? (char*)NULL -- They have the same length, but the cast looks ugly. */
Modified: subversion/branches/ra-git/subversion/include/svn_user.h
URL: http://svn.apache.org/viewvc/subversion/branches/ra-git/subversion/include/svn_user.h?rev=1717223&r1=1717222&r2=1717223&view=diff
==============================================================================
--- subversion/branches/ra-git/subversion/include/svn_user.h (original)
+++ subversion/branches/ra-git/subversion/include/svn_user.h Mon Nov 30 10:24:16 2015
@@ -45,6 +45,9 @@ svn_user_get_name(apr_pool_t *pool);
* any necessary allocation, returning NULL on error.
*
* @since New in 1.4.
+ * @since 1.10 returns a canonical path. Earlier versions returned a
+ * non-canonical path if the operating system reported a non-canonical
+ * path such as "/home/user/" or "//home/user".
*/
const char *
svn_user_get_homedir(apr_pool_t *pool);
Modified: subversion/branches/ra-git/subversion/include/svn_wc.h
URL: http://svn.apache.org/viewvc/subversion/branches/ra-git/subversion/include/svn_wc.h?rev=1717223&r1=1717222&r2=1717223&view=diff
==============================================================================
--- subversion/branches/ra-git/subversion/include/svn_wc.h (original)
+++ subversion/branches/ra-git/subversion/include/svn_wc.h Mon Nov 30 10:24:16 2015
@@ -1859,11 +1859,11 @@ typedef struct svn_wc_conflict_descripti
/** Info on the "merge-right source" or "their" version of incoming change. */
const svn_wc_conflict_version_t *src_right_version;
- /* For property conflicts, the absolute path to the .prej file.
+ /** For property conflicts, the absolute path to the .prej file.
* @since New in 1.9. */
const char *prop_reject_abspath;
- /* For property conflicts, the local base value of the property, i.e. the
+ /** For property conflicts, the local base value of the property, i.e. the
* value of the property as of the BASE revision of the working copy.
* For conflicts created during update/switch this contains the
* post-update/switch property value. The pre-update/switch value can
@@ -1872,20 +1872,20 @@ typedef struct svn_wc_conflict_descripti
* @since New in 1.9. */
const svn_string_t *prop_value_base;
- /* For property conflicts, the local working value of the property,
+ /** For property conflicts, the local working value of the property,
* i.e. the value of the property in the working copy, possibly with
* local modiciations.
* Only set if available, so might be @c NULL.
* @since New in 1.9. */
const svn_string_t *prop_value_working;
- /* For property conflicts, the incoming old value of the property,
+ /** For property conflicts, the incoming old value of the property,
* i.e. the value the property had at @c src_left_version.
* Only set if available, so might be @c NULL.
* @since New in 1.9 */
const svn_string_t *prop_value_incoming_old;
- /* For property conflicts, the incoming new value of the property,
+ /** For property conflicts, the incoming new value of the property,
* i.e. the value the property had at @c src_right_version.
* Only set if available, so might be @c NULL.
* @since New in 1.9 */
@@ -1911,8 +1911,9 @@ typedef struct svn_wc_conflict_descripti
/** The path that is in conflict (for a tree conflict, it is the victim) */
const char *path;
- /** The node type of the path being operated on (for a tree conflict,
- * ### which version?) */
+ /** The local node type of the path being operated on (for a tree conflict,
+ * this specifies the local node kind, which may be (and typically is)
+ * different than the left and right kind) */
svn_node_kind_t node_kind;
/** What sort of conflict are we describing? */
@@ -2063,7 +2064,7 @@ svn_wc_conflict_description_create_prop(
*
* Set the @c local_abspath field of the created struct to @a local_abspath
* (which must be an absolute path), the @c kind field to
- * #svn_wc_conflict_kind_tree, the @c local_node_kind to @a local_node_kind,
+ * #svn_wc_conflict_kind_tree, the @c node_kind to @a node_kind,
* the @c operation to @a operation, the @c src_left_version field to
* @a src_left_version, and the @c src_right_version field to
* @a src_right_version.
@@ -2104,7 +2105,7 @@ svn_wc_conflict_description_create_tree(
/** Return a duplicate of @a conflict, allocated in @a result_pool.
* A deep copy of all members will be made.
*
- * @since New in 1.7.
+ * @since New in 1.9.
*/
svn_wc_conflict_description2_t *
svn_wc_conflict_description2_dup(
@@ -2131,8 +2132,11 @@ svn_wc__conflict_description2_dup(
*/
typedef enum svn_wc_conflict_choice_t
{
- /** Undefined; for internal use only.
- This value is never returned in svn_wc_conflict_result_t.
+ /** Undefined; for private use only.
+ This value must never be returned in svn_wc_conflict_result_t,
+ but a separate value, unequal to all other pre-defined values may
+ be useful in conflict resolver implementations to signal that no
+ choice is made yet.
* @since New in 1.9
*/
svn_wc_conflict_choose_undefined = -1,
@@ -3836,8 +3840,8 @@ typedef struct svn_wc_status3_t
svn_boolean_t file_external;
- /** The actual kind of the node in the working copy. May differ from kind
- * on obstructions, deletes, etc. svn_node_unknown if unavailable.
+ /** The actual kind of the node in the working copy. May differ from
+ * @a kind on obstructions, deletes, etc. #svn_node_unknown if unavailable.
*
* @since New in 1.9 */
svn_node_kind_t actual_kind;
@@ -4657,6 +4661,9 @@ svn_wc_delete(const char *path,
* If @a local_abspath does not exist as file, directory or symlink, return
* #SVN_ERR_WC_PATH_NOT_FOUND.
*
+ * If @a notify_func is non-NULL, invoke it with @a notify_baton to report
+ * the item being added.
+ *
* ### TODO: Split into add_dir, add_file, add_symlink?
*
* @since New in 1.9.
@@ -4672,7 +4679,7 @@ svn_wc_add_from_disk3(svn_wc_context_t *
/**
* Similar to svn_wc_add_from_disk3(), but always passes FALSE for
- * @a skip_som_prop_canon
+ * @a skip_checks
*
* @since New in 1.8.
* @deprecated Provided for backward compatibility with the 1.8 API.
@@ -7304,6 +7311,12 @@ svn_wc_get_pristine_copy_path(const char
* points during the operation. If it returns an error (typically
* #SVN_ERR_CANCELLED), return that error immediately.
*
+ * If @a notify_func is non-NULL, invoke it with @a notify_baton to report
+ * the progress of the operation.
+ *
+ * @note In 1.9, @a notify_func does not get called at all. This may change
+ * in later releases.
+ *
* @since New in 1.9.
*/
svn_error_t *
Modified: subversion/branches/ra-git/subversion/include/svn_x509.h
URL: http://svn.apache.org/viewvc/subversion/branches/ra-git/subversion/include/svn_x509.h?rev=1717223&r1=1717222&r2=1717223&view=diff
==============================================================================
--- subversion/branches/ra-git/subversion/include/svn_x509.h (original)
+++ subversion/branches/ra-git/subversion/include/svn_x509.h Mon Nov 30 10:24:16 2015
@@ -188,7 +188,7 @@ svn_x509_certinfo_get_hostnames(const sv
* Given an @a oid return a null-terminated C string representation.
* For example an OID with the bytes "\x2A\x86\x48\x86\xF7\x0D\x01\x09\x01"
* would be converted to the string "1.2.840.113549.1.9.1". Returns
- * NULL if the @oid can't be represented as a string.
+ * NULL if the @a oid can't be represented as a string.
*
* @since New in 1.9. */
const char *
Modified: subversion/branches/ra-git/subversion/libsvn_auth_kwallet/kwallet.cpp
URL: http://svn.apache.org/viewvc/subversion/branches/ra-git/subversion/libsvn_auth_kwallet/kwallet.cpp?rev=1717223&r1=1717222&r2=1717223&view=diff
==============================================================================
--- subversion/branches/ra-git/subversion/libsvn_auth_kwallet/kwallet.cpp (original)
+++ subversion/branches/ra-git/subversion/libsvn_auth_kwallet/kwallet.cpp Mon Nov 30 10:24:16 2015
@@ -47,6 +47,7 @@
#include "svn_auth.h"
#include "svn_config.h"
#include "svn_error.h"
+#include "svn_hash.h"
#include "svn_io.h"
#include "svn_pools.h"
#include "svn_string.h"
@@ -135,34 +136,36 @@ get_wid(void)
return wid;
}
+/* Forward definition */
+static apr_status_t
+kwallet_terminate(void *data);
+
static KWallet::Wallet *
get_wallet(QString wallet_name,
apr_hash_t *parameters)
{
KWallet::Wallet *wallet =
- static_cast<KWallet::Wallet *> (apr_hash_get(parameters,
- "kwallet-wallet",
- APR_HASH_KEY_STRING));
- if (! wallet && ! apr_hash_get(parameters,
- "kwallet-opening-failed",
- APR_HASH_KEY_STRING))
+ static_cast<KWallet::Wallet *> (svn_hash_gets(parameters,
+ "kwallet-wallet"));
+ if (! wallet && ! svn_hash_gets(parameters, "kwallet-opening-failed"))
{
wallet = KWallet::Wallet::openWallet(wallet_name, get_wid(),
KWallet::Wallet::Synchronous);
- }
- if (wallet)
- {
- apr_hash_set(parameters,
- "kwallet-wallet",
- APR_HASH_KEY_STRING,
- wallet);
- }
- else
- {
- apr_hash_set(parameters,
- "kwallet-opening-failed",
- APR_HASH_KEY_STRING,
- "");
+
+ if (wallet)
+ {
+ svn_hash_sets(parameters, "kwallet-wallet", wallet);
+
+ apr_pool_cleanup_register(apr_hash_pool_get(parameters),
+ parameters, kwallet_terminate,
+ apr_pool_cleanup_null);
+
+ svn_hash_sets(parameters, "kwallet-initialized", "");
+ }
+ else
+ {
+ svn_hash_sets(parameters, "kwallet-opening-failed", "");
+ }
}
return wallet;
}
@@ -171,14 +174,12 @@ static apr_status_t
kwallet_terminate(void *data)
{
apr_hash_t *parameters = static_cast<apr_hash_t *> (data);
- if (apr_hash_get(parameters, "kwallet-initialized", APR_HASH_KEY_STRING))
+ if (svn_hash_gets(parameters, "kwallet-initialized"))
{
KWallet::Wallet *wallet = get_wallet(NULL, parameters);
delete wallet;
- apr_hash_set(parameters,
- "kwallet-initialized",
- APR_HASH_KEY_STRING,
- NULL);
+ svn_hash_sets(parameters, "kwallet-wallet", NULL);
+ svn_hash_sets(parameters, "kwallet-initialized", NULL);
}
return APR_SUCCESS;
}
@@ -236,10 +237,6 @@ kwallet_password_get(svn_boolean_t *done
KWallet::Wallet *wallet = get_wallet(wallet_name, parameters);
if (wallet)
{
- apr_hash_set(parameters,
- "kwallet-initialized",
- APR_HASH_KEY_STRING,
- "");
if (wallet->setFolder(folder))
{
QString q_password;
@@ -254,9 +251,6 @@ kwallet_password_get(svn_boolean_t *done
}
}
- apr_pool_cleanup_register(pool, parameters, kwallet_terminate,
- apr_pool_cleanup_null);
-
return SVN_NO_ERROR;
}
@@ -310,10 +304,6 @@ kwallet_password_set(svn_boolean_t *done
KWallet::Wallet *wallet = get_wallet(wallet_name, parameters);
if (wallet)
{
- apr_hash_set(parameters,
- "kwallet-initialized",
- APR_HASH_KEY_STRING,
- "");
if (! wallet->hasFolder(folder))
{
wallet->createFolder(folder);
@@ -329,9 +319,6 @@ kwallet_password_set(svn_boolean_t *done
}
}
- apr_pool_cleanup_register(pool, parameters, kwallet_terminate,
- apr_pool_cleanup_null);
-
return SVN_NO_ERROR;
}
Modified: subversion/branches/ra-git/subversion/libsvn_client/client.h
URL: http://svn.apache.org/viewvc/subversion/branches/ra-git/subversion/libsvn_client/client.h?rev=1717223&r1=1717222&r2=1717223&view=diff
==============================================================================
--- subversion/branches/ra-git/subversion/libsvn_client/client.h (original)
+++ subversion/branches/ra-git/subversion/libsvn_client/client.h Mon Nov 30 10:24:16 2015
@@ -73,52 +73,6 @@ typedef struct svn_client__private_ctx_t
svn_client__private_ctx_t *
svn_client__get_private_ctx(svn_client_ctx_t *ctx);
-
-/* Set *REVNUM to the revision number identified by REVISION.
-
- If REVISION->kind is svn_opt_revision_number, just use
- REVISION->value.number, ignoring LOCAL_ABSPATH and RA_SESSION.
-
- Else if REVISION->kind is svn_opt_revision_committed,
- svn_opt_revision_previous, or svn_opt_revision_base, or
- svn_opt_revision_working, then the revision can be identified
- purely based on the working copy's administrative information for
- LOCAL_ABSPATH, so RA_SESSION is ignored. If LOCAL_ABSPATH is not
- under revision control, return SVN_ERR_UNVERSIONED_RESOURCE, or if
- LOCAL_ABSPATH is null, return SVN_ERR_CLIENT_VERSIONED_PATH_REQUIRED.
-
- Else if REVISION->kind is svn_opt_revision_date or
- svn_opt_revision_head, then RA_SESSION is used to retrieve the
- revision from the repository (using REVISION->value.date in the
- former case), and LOCAL_ABSPATH is ignored. If RA_SESSION is null,
- return SVN_ERR_CLIENT_RA_ACCESS_REQUIRED.
-
- Else if REVISION->kind is svn_opt_revision_unspecified, set
- *REVNUM to SVN_INVALID_REVNUM.
-
- If YOUNGEST_REV is non-NULL, it is an in/out parameter. If
- *YOUNGEST_REV is valid, use it as the youngest revision in the
- repository (regardless of reality) -- don't bother to lookup the
- true value for HEAD, and don't return any value in *REVNUM greater
- than *YOUNGEST_REV. If *YOUNGEST_REV is not valid, and a HEAD
- lookup is required to populate *REVNUM, then also populate
- *YOUNGEST_REV with the result. This is useful for making multiple
- serialized calls to this function with a basically static view of
- the repository, avoiding race conditions which could occur between
- multiple invocations with HEAD lookup requests.
-
- Else return SVN_ERR_CLIENT_BAD_REVISION.
-
- Use SCRATCH_POOL for any temporary allocation. */
-svn_error_t *
-svn_client__get_revision_number(svn_revnum_t *revnum,
- svn_revnum_t *youngest_rev,
- svn_wc_context_t *wc_ctx,
- const char *local_abspath,
- svn_ra_session_t *ra_session,
- const svn_opt_revision_t *revision,
- apr_pool_t *scratch_pool);
-
/* Set *ORIGINAL_REPOS_RELPATH and *ORIGINAL_REVISION to the original location
that served as the source of the copy from which PATH_OR_URL at REVISION was
created, or NULL and SVN_INVALID_REVNUM (respectively) if PATH_OR_URL at
@@ -1118,9 +1072,13 @@ svn_client__ensure_revprop_table(apr_has
EXPAND_KEYWORDS operates as per the EXPAND argument to
svn_subst_stream_translated, which see. If NORMALIZE_EOLS is TRUE and
LOCAL_ABSPATH requires translation, then normalize the line endings in
- *NORMAL_STREAM.
+ *NORMAL_STREAM to "\n" if the stream has svn:eol-style set.
+
+ Note that this IS NOT the repository normal form of the stream as that
+ would use "\r\n" if set to CRLF and "\r" if set to CR.
- Uses SCRATCH_POOL for temporary allocations. */
+ The stream is allocated in RESULT_POOL and temporary SCRATCH_POOL is
+ used for temporary allocations. */
svn_error_t *
svn_client__get_normalized_stream(svn_stream_t **normal_stream,
svn_wc_context_t *wc_ctx,
Modified: subversion/branches/ra-git/subversion/libsvn_client/copy.c
URL: http://svn.apache.org/viewvc/subversion/branches/ra-git/subversion/libsvn_client/copy.c?rev=1717223&r1=1717222&r2=1717223&view=diff
==============================================================================
--- subversion/branches/ra-git/subversion/libsvn_client/copy.c (original)
+++ subversion/branches/ra-git/subversion/libsvn_client/copy.c Mon Nov 30 10:24:16 2015
@@ -300,10 +300,12 @@ make_external_description(const char **n
return SVN_NO_ERROR;
}
-/* Pin all externals listed in EXTERNALS_PROP_VAL to their last-changed
- * revision. Return a new property value in *PINNED_EXTERNALS allocated
- * in RESULT_POOL. LOCAL_ABSPATH_OR_URL is the path or URL defining the
- * svn:externals property. Use SCRATCH_POOL for temporary allocations.
+/* Pin all externals listed in EXTERNALS_PROP_VAL to their
+ * last-changed revision. Set *PINNED_EXTERNALS to a new property
+ * value allocated in RESULT_POOL, or to NULL if none of the externals
+ * in EXTERNALS_PROP_VAL were changed. LOCAL_ABSPATH_OR_URL is the
+ * path or URL defining the svn:externals property. Use SCRATCH_POOL
+ * for temporary allocations.
*/
static svn_error_t *
pin_externals_prop(svn_string_t **pinned_externals,
@@ -319,6 +321,7 @@ pin_externals_prop(svn_string_t **pinned
apr_array_header_t *external_items;
apr_array_header_t *parser_infos;
apr_array_header_t *items_to_pin;
+ int pinned_items;
int i;
apr_pool_t *iterpool;
@@ -330,13 +333,22 @@ pin_externals_prop(svn_string_t **pinned
scratch_pool));
if (externals_to_pin)
- items_to_pin = svn_hash_gets((apr_hash_t *)externals_to_pin,
- local_abspath_or_url);
+ {
+ items_to_pin = svn_hash_gets((apr_hash_t *)externals_to_pin,
+ local_abspath_or_url);
+ if (!items_to_pin)
+ {
+ /* No pinning at all for this path. */
+ *pinned_externals = NULL;
+ return SVN_NO_ERROR;
+ }
+ }
else
items_to_pin = NULL;
buf = svn_stringbuf_create_empty(scratch_pool);
iterpool = svn_pool_create(scratch_pool);
+ pinned_items = 0;
for (i = 0; i < external_items->nelts; i++)
{
svn_wc_external_item2_t *item;
@@ -386,11 +398,13 @@ pin_externals_prop(svn_string_t **pinned
if (item->peg_revision.kind == svn_opt_revision_date)
{
+ /* Already pinned ... copy the peg date. */
external_pegrev.kind = svn_opt_revision_date;
external_pegrev.value.date = item->peg_revision.value.date;
}
else if (item->peg_revision.kind == svn_opt_revision_number)
{
+ /* Already pinned ... copy the peg revision number. */
external_pegrev.kind = svn_opt_revision_number;
external_pegrev.value.number = item->peg_revision.value.number;
}
@@ -400,6 +414,9 @@ pin_externals_prop(svn_string_t **pinned
item->peg_revision.kind == svn_opt_revision_head ||
item->peg_revision.kind == svn_opt_revision_unspecified);
+ /* We're actually going to change the peg revision. */
+ ++pinned_items;
+
if (svn_path_is_url(local_abspath_or_url))
{
const char *resolved_url;
@@ -539,14 +556,19 @@ pin_externals_prop(svn_string_t **pinned
}
svn_pool_destroy(iterpool);
- *pinned_externals = svn_string_create_from_buf(buf, result_pool);
+ if (pinned_items > 0)
+ *pinned_externals = svn_string_create_from_buf(buf, result_pool);
+ else
+ *pinned_externals = NULL;
return SVN_NO_ERROR;
}
-/* Return, in *NEW_EXTERNALS, a new hash of externals definitions, some or
- * which all of which are pinned. If EXTERNALS_TO_PIN is NULL, pin all
- * externals, else pin the externals mentioned in EXTERNALS_TO_PIN.
+/* Return, in *PINNED_EXTERNALS, a new hash mapping URLs or local abspaths
+ * to svn:externals property values (as const char *), where some or all
+ * external references have been pinned.
+ * If EXTERNALS_TO_PIN is NULL, pin all externals, else pin the externals
+ * mentioned in EXTERNALS_TO_PIN.
* The pinning operation takes place as part of the copy operation for
* the source/destination pair PAIR. Use RA_SESSION and REPOS_ROOT_URL
* to contact the repository containing the externals definition, if neccesary.
@@ -554,7 +576,7 @@ pin_externals_prop(svn_string_t **pinned
* neccessary. Allocate *NEW_EXTERNALS in RESULT_POOL.
* Use SCRATCH_POOL for temporary allocations. */
static svn_error_t *
-resolve_pinned_externals(apr_hash_t **new_externals,
+resolve_pinned_externals(apr_hash_t **pinned_externals,
const apr_hash_t *externals_to_pin,
svn_client__copy_pair_t *pair,
svn_ra_session_t *ra_session,
@@ -568,7 +590,7 @@ resolve_pinned_externals(apr_hash_t **ne
apr_hash_index_t *hi;
apr_pool_t *iterpool;
- *new_externals = apr_hash_make(result_pool);
+ *pinned_externals = apr_hash_make(result_pool);
if (svn_path_is_url(pair->src_abspath_or_url))
{
@@ -630,15 +652,19 @@ resolve_pinned_externals(apr_hash_t **ne
externals_to_pin,
repos_root_url, local_abspath_or_url, ctx,
result_pool, iterpool));
- if (svn_path_is_url(pair->src_abspath_or_url))
- relpath = svn_uri_skip_ancestor(pair->src_abspath_or_url,
- local_abspath_or_url,
- result_pool);
- else
- relpath = svn_dirent_skip_ancestor(pair->src_abspath_or_url,
- local_abspath_or_url);
- SVN_ERR_ASSERT(relpath);
- svn_hash_sets(*new_externals, relpath, new_propval);
+ if (new_propval)
+ {
+ if (svn_path_is_url(pair->src_abspath_or_url))
+ relpath = svn_uri_skip_ancestor(pair->src_abspath_or_url,
+ local_abspath_or_url,
+ result_pool);
+ else
+ relpath = svn_dirent_skip_ancestor(pair->src_abspath_or_url,
+ local_abspath_or_url);
+ SVN_ERR_ASSERT(relpath);
+
+ svn_hash_sets(*pinned_externals, relpath, new_propval);
+ }
}
svn_pool_destroy(iterpool);
@@ -1616,7 +1642,10 @@ repos_to_repos_copy(const apr_array_head
&& (relpath != NULL && *relpath != '\0'))
{
info->resurrection = TRUE;
- top_url = svn_uri_dirname(top_url, pool);
+ top_url = svn_uri_get_longest_ancestor(
+ top_url,
+ svn_uri_dirname(pair->dst_abspath_or_url, pool),
+ pool);
SVN_ERR(svn_ra_reparent(ra_session, top_url, pool));
}
}
@@ -1668,13 +1697,9 @@ repos_to_repos_copy(const apr_array_head
SVN_ERR(svn_ra_check_path(ra_session, dst_rel, SVN_INVALID_REVNUM,
&dst_kind, pool));
if (dst_kind != svn_node_none)
- {
- const char *path = svn_uri_skip_ancestor(repos_root,
- pair->dst_abspath_or_url,
- pool);
- return svn_error_createf(SVN_ERR_FS_ALREADY_EXISTS, NULL,
- _("Path '/%s' already exists"), path);
- }
+ return svn_error_createf(SVN_ERR_FS_ALREADY_EXISTS, NULL,
+ _("Path '%s' already exists"),
+ pair->dst_abspath_or_url);
/* More info for our INFO structure. */
info->src_path = src_rel; /* May be NULL, if outside RA session scope */
@@ -1920,6 +1945,9 @@ queue_prop_change_commit_items(const cha
item->url = commit_url;
item->kind = svn_node_dir;
item->state_flags = SVN_CLIENT_COMMIT_ITEM_PROP_MODS;
+
+ item->incoming_prop_changes = apr_array_make(result_pool, 1,
+ sizeof(svn_prop_t *));
APR_ARRAY_PUSH(commit_items, svn_client_commit_item3_t *) = item;
}
else
@@ -2405,7 +2433,7 @@ repos_to_wc_copy_single(svn_boolean_t *t
pool));
/* Move the temporary disk tree into place. */
- SVN_ERR(svn_io_file_rename(tmp_abspath, dst_abspath, pool));
+ SVN_ERR(svn_io_file_rename2(tmp_abspath, dst_abspath, FALSE, pool));
}
else
{
@@ -2534,7 +2562,7 @@ repos_to_wc_copy_single(svn_boolean_t *t
static svn_error_t *
repos_to_wc_copy_locked(svn_boolean_t *timestamp_sleep,
const apr_array_header_t *copy_pairs,
- const char *top_dst_path,
+ const char *top_dst_abspath,
svn_boolean_t ignore_externals,
svn_boolean_t pin_externals,
const apr_hash_t *externals_to_pin,
@@ -2554,39 +2582,25 @@ repos_to_wc_copy_locked(svn_boolean_t *t
/* Decide whether the two repositories are the same or not. */
{
- svn_error_t *src_err, *dst_err;
- const char *parent;
const char *parent_abspath;
const char *src_uuid, *dst_uuid;
/* Get the repository uuid of SRC_URL */
- src_err = svn_ra_get_uuid2(ra_session, &src_uuid, iterpool);
- if (src_err && src_err->apr_err != SVN_ERR_RA_NO_REPOS_UUID)
- return svn_error_trace(src_err);
+ SVN_ERR(svn_ra_get_uuid2(ra_session, &src_uuid, iterpool));
/* Get repository uuid of dst's parent directory, since dst may
not exist. ### TODO: we should probably walk up the wc here,
in case the parent dir has an imaginary URL. */
if (copy_pairs->nelts == 1)
- parent = svn_dirent_dirname(top_dst_path, scratch_pool);
+ parent_abspath = svn_dirent_dirname(top_dst_abspath, scratch_pool);
else
- parent = top_dst_path;
+ parent_abspath = top_dst_abspath;
- SVN_ERR(svn_dirent_get_absolute(&parent_abspath, parent, scratch_pool));
- dst_err = svn_client_get_repos_root(NULL /* root_url */, &dst_uuid,
- parent_abspath, ctx,
- iterpool, iterpool);
- if (dst_err && dst_err->apr_err != SVN_ERR_RA_NO_REPOS_UUID)
- return dst_err;
-
- /* If either of the UUIDs are nonexistent, then at least one of
- the repositories must be very old. Rather than punish the
- user, just assume the repositories are different, so no
- copy-history is attempted. */
- if (src_err || dst_err || (! src_uuid) || (! dst_uuid))
- same_repositories = FALSE;
- else
- same_repositories = (strcmp(src_uuid, dst_uuid) == 0);
+ SVN_ERR(svn_client_get_repos_root(NULL /* root_url */, &dst_uuid,
+ parent_abspath, ctx,
+ iterpool, iterpool));
+ /* ### Also check repos_root_url? */
+ same_repositories = (strcmp(src_uuid, dst_uuid) == 0);
}
/* Perform the move for each of the copy_pairs. */
@@ -2622,7 +2636,7 @@ repos_to_wc_copy(svn_boolean_t *timestam
apr_pool_t *pool)
{
svn_ra_session_t *ra_session;
- const char *top_src_url, *top_dst_path;
+ const char *top_src_url, *top_dst_abspath;
apr_pool_t *iterpool = svn_pool_create(pool);
const char *lock_abspath;
int i;
@@ -2647,13 +2661,13 @@ repos_to_wc_copy(svn_boolean_t *timestam
pair->src_abspath_or_url = apr_pstrdup(pool, src);
}
- SVN_ERR(get_copy_pair_ancestors(copy_pairs, &top_src_url, &top_dst_path,
+ SVN_ERR(get_copy_pair_ancestors(copy_pairs, &top_src_url, &top_dst_abspath,
NULL, pool));
- lock_abspath = top_dst_path;
+ lock_abspath = top_dst_abspath;
if (copy_pairs->nelts == 1)
{
top_src_url = svn_uri_dirname(top_src_url, pool);
- lock_abspath = svn_dirent_dirname(top_dst_path, pool);
+ lock_abspath = svn_dirent_dirname(top_dst_abspath, pool);
}
/* Open a repository session to the longest common src ancestor. We do not
@@ -2725,7 +2739,7 @@ repos_to_wc_copy(svn_boolean_t *timestam
SVN_WC__CALL_WITH_WRITE_LOCK(
repos_to_wc_copy_locked(timestamp_sleep,
- copy_pairs, top_dst_path, ignore_externals,
+ copy_pairs, top_dst_abspath, ignore_externals,
pin_externals, externals_to_pin,
ra_session, ctx, pool),
ctx->wc_ctx, lock_abspath, FALSE, pool);