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 [8/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/private/svn_utf_private.h
URL: http://svn.apache.org/viewvc/subversion/branches/ra-git/subversion/include/private/svn_utf_private.h?rev=1717223&r1=1717222&r2=1717223&view=diff
==============================================================================
--- subversion/branches/ra-git/subversion/include/private/svn_utf_private.h (original)
+++ subversion/branches/ra-git/subversion/include/private/svn_utf_private.h Mon Nov 30 10:24:16 2015
@@ -204,9 +204,13 @@ svn_utf__glob(svn_boolean_t *match,
svn_membuf_t *string_buf,
svn_membuf_t *temp_buf);
-/* Return the version of the wrapped utf8proc library. */
+/* Return the compiled version of the wrapped utf8proc library. */
const char *
-svn_utf__utf8proc_version(void);
+svn_utf__utf8proc_compiled_version(void);
+
+/* Return the runtime version of the wrapped utf8proc library. */
+const char *
+svn_utf__utf8proc_runtime_version(void);
/* Convert an UTF-16 (or UCS-2) string to UTF-8, returning the pointer
* in RESULT. If BIG_ENDIAN is set, then UTF16STR is big-endian;
Modified: subversion/branches/ra-git/subversion/include/private/svn_wc_private.h
URL: http://svn.apache.org/viewvc/subversion/branches/ra-git/subversion/include/private/svn_wc_private.h?rev=1717223&r1=1717222&r2=1717223&view=diff
==============================================================================
--- subversion/branches/ra-git/subversion/include/private/svn_wc_private.h (original)
+++ subversion/branches/ra-git/subversion/include/private/svn_wc_private.h Mon Nov 30 10:24:16 2015
@@ -82,6 +82,8 @@ svn_wc__get_file_external_editor(const s
const char *recorded_url,
const svn_opt_revision_t *recorded_peg_rev,
const svn_opt_revision_t *recorded_rev,
+ svn_wc_conflict_resolver_func2_t conflict_func,
+ void *conflict_baton,
svn_cancel_func_t cancel_func,
void *cancel_baton,
svn_wc_notify_func2_t notify_func,
@@ -1847,6 +1849,17 @@ svn_wc__diff7(const char **root_relpath,
apr_pool_t *result_pool,
apr_pool_t *scratch_pool);
+/**
+ * Read all conflicts at LOCAL_ABSPATH into an array containing pointers to
+ * svn_wc_conflict_description2_t data structures alloated in RESULT_POOL.
+ */
+svn_error_t *
+svn_wc__read_conflict_descriptions2_t(const apr_array_header_t **conflicts,
+ svn_wc_context_t *wc_ctx,
+ const char *local_abspath,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
+
#ifdef __cplusplus
}
#endif /* __cplusplus */
Modified: subversion/branches/ra-git/subversion/include/svn_base64.h
URL: http://svn.apache.org/viewvc/subversion/branches/ra-git/subversion/include/svn_base64.h?rev=1717223&r1=1717222&r2=1717223&view=diff
==============================================================================
--- subversion/branches/ra-git/subversion/include/svn_base64.h (original)
+++ subversion/branches/ra-git/subversion/include/svn_base64.h Mon Nov 30 10:24:16 2015
@@ -46,11 +46,24 @@ extern "C" {
*/
/** Return a writable generic stream which will encode binary data in
- * base64 format and write the encoded data to @a output. Be sure to
- * close the stream when done writing in order to squeeze out the last
- * bit of encoded data. The stream is allocated in @a pool.
+ * base64 format and write the encoded data to @a output. If @a break_lines
+ * is true, newlines will be inserted periodically; otherwise the output
+ * stream will only consist of base64 encoding characters. Be sure to close
+ * the stream when done writing in order to squeeze out the last bit of
+ * encoded data. The stream is allocated in @a pool.
*/
svn_stream_t *
+svn_base64_encode2(svn_stream_t *output,
+ svn_boolean_t break_lines,
+ apr_pool_t *pool);
+
+/**
+ * Same as svn_base64_encode2, but with @a break_lines always TRUE.
+ *
+ * @deprecated Provided for backward compatibility with the 1.9 API.
+ */
+SVN_DEPRECATED
+svn_stream_t *
svn_base64_encode(svn_stream_t *output,
apr_pool_t *pool);
Modified: subversion/branches/ra-git/subversion/include/svn_client.h
URL: http://svn.apache.org/viewvc/subversion/branches/ra-git/subversion/include/svn_client.h?rev=1717223&r1=1717222&r2=1717223&view=diff
==============================================================================
--- subversion/branches/ra-git/subversion/include/svn_client.h (original)
+++ subversion/branches/ra-git/subversion/include/svn_client.h Mon Nov 30 10:24:16 2015
@@ -4098,16 +4098,23 @@ svn_client_mergeinfo_log_eligible(const
* @{
*/
-/** Recursively vacuum a working copy directory @a dir, removing unnecessary
- * data.
+/** Recursively vacuum a working copy directory @a dir_abspath,
+ * removing unnecessary data.
*
* If @a include_externals is @c TRUE, recurse into externals and vacuum them
* as well.
*
* If @a remove_unversioned_items is @c TRUE, remove unversioned items
- * in @a dir after successful working copy cleanup.
+ * in @a dir_abspath after successful working copy cleanup.
* If @a remove_ignored_items is @c TRUE, remove ignored unversioned items
- * in @a dir after successful working copy cleanup.
+ * in @a dir_abspath after successful working copy cleanup.
+ *
+ * If @a fix_recorded_timestamps is @c TRUE, this function fixes recorded
+ * timestamps for unmodified files in the working copy, reducing comparision
+ * time on future checks.
+ *
+ * If @a vacuum_pristines is @c TRUE, and @a dir_abspath points to the working
+ * copy root unreferenced files in the pristine store are removed.
*
* When asked to remove unversioned or ignored items, and the working copy
* is already locked, return #SVN_ERR_WC_LOCKED. This prevents accidental
@@ -4348,6 +4355,486 @@ svn_client_revert(const apr_array_header
/** @} */
+/**
+ * @defgroup Conflicts Dealing with conflicted paths.
+ *
+ * @{
+ */
+
+/**
+ * An opaque type which represents a conflicted node in the working copy.
+ *
+ * @since New in 1.10.
+ */
+typedef struct svn_client_conflict_t svn_client_conflict_t;
+
+/**
+ * An opaque type which represents a resolution option for a conflict.
+ *
+ * @since New in 1.10.
+ */
+typedef struct svn_client_conflict_option_t svn_client_conflict_option_t;
+
+/**
+ * A public enumuneration of conflict option IDs.
+ *
+ * @since New in 1.10, unless noted otherwise.
+ */
+typedef enum svn_client_conflict_option_id_t {
+
+ /* These values intentionally mirror svn_wc_conflict_choice_t. */
+ svn_client_conflict_option_undefined = -1, /* for private use only */
+ svn_client_conflict_option_postpone = 0,
+ svn_client_conflict_option_base_text,
+ svn_client_conflict_option_incoming_text,
+ svn_client_conflict_option_working_text,
+ svn_client_conflict_option_incoming_text_where_conflicted,
+ svn_client_conflict_option_working_text_where_conflicted,
+ svn_client_conflict_option_merged_text,
+ svn_client_conflict_option_unspecified
+ /* Values derived from svn_wc_conflict_choice_t end here. */
+
+} svn_client_conflict_option_id_t;
+
+/**
+ * Set a merged property value on @a option to @a merged_propval.
+ *
+ * Setting the merged value is required before resolving the property
+ * conflict using an option with ID svn_client_conflict_option_merged_text.
+ *
+ * The contents of @a merged_propval are not copied, so the storage it
+ * points to needs to remain valid until svn_client_conflict_prop_resolve()
+ * has been called with @a option.
+ *
+ * @since New in 1.10.
+ */
+void
+svn_client_conflict_option_set_merged_propval(
+ svn_client_conflict_option_t *option,
+ const svn_string_t *merged_propval);
+
+/**
+ * Given an @a option_id, try to find the corresponding option in @a options,
+ * which is an array of svn_client_conflict_option_t * elements.
+ *
+ * Return NULL if no corresponding option can be be found.
+ *
+ * @since New in 1.10.
+ */
+svn_client_conflict_option_t *
+svn_client_conflict_option_find_by_id(
+ apr_array_header_t *options,
+ svn_client_conflict_option_id_t option_id);
+
+/**
+ * Return a conflict for the conflicted path @a local_abspath.
+ *
+ * @since New in 1.10.
+ */
+svn_error_t *
+svn_client_conflict_get(svn_client_conflict_t **conflict,
+ const char *local_abspath,
+ svn_client_ctx_t *ctx,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
+
+/**
+ * Return a conflict corresponding to legacy conflict description @a desc.
+ *
+ * @since New in 1.10.
+ */
+svn_error_t *
+svn_client_conflict_from_wc_description2_t(
+ svn_client_conflict_t **conflict,
+ const svn_wc_conflict_description2_t *desc,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
+
+/**
+* Indicate the types of conflicts present on the working copy node
+* described by @a conflict. Any output argument may be @c NULL if
+* the caller is not interested in the status of a particular type.
+*
+* The returned @a *props_conflicted array is allocated in @a result_pool.
+* It contains the names of conflicted properties. If no property conflict
+* exists, the array will contain no elements.
+*
+* @since New in 1.10.
+*/
+svn_error_t *
+svn_client_conflict_get_conflicted(svn_boolean_t *text_conflicted,
+ apr_array_header_t **props_conflicted,
+ svn_boolean_t *tree_conflicted,
+ svn_client_conflict_t *conflict,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
+
+/**
+ * Set @a *options to an array of pointers to svn_client_conflict_option_t
+ * objects applicable to text conflicts described by @a conflict.
+ *
+ * @since New in 1.10.
+ */
+svn_error_t *
+svn_client_conflict_text_get_resolution_options(apr_array_header_t **options,
+ svn_client_conflict_t *conflict,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
+
+/**
+ * Set @a *options to an array of pointers to svn_client_conflict_option_t
+ * objects applicable to property conflicts described by @a conflict.
+ *
+ * @since New in 1.10.
+ */
+svn_error_t *
+svn_client_conflict_prop_get_resolution_options(apr_array_header_t **options,
+ svn_client_conflict_t *conflict,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
+
+/**
+ * Set @a *options to an array of pointers to svn_client_conflict_option_t
+ * objects applicable to the tree conflict described by @a conflict.
+ *
+ * @since New in 1.10.
+ */
+svn_error_t *
+svn_client_conflict_tree_get_resolution_options(apr_array_header_t **options,
+ svn_client_conflict_t *conflict,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
+
+/**
+ * Return an ID for @a option. This ID can be used by callers to associate
+ * arbitrary data with a particular conflict resolution option.
+ *
+ * The ID of a particular resolution option will never change in future
+ * revisions of this API.
+ *
+ * @since New in 1.10.
+ */
+svn_client_conflict_option_id_t
+svn_client_conflict_option_get_id(svn_client_conflict_option_t *option);
+
+/**
+ * Return a textual human-readable description of @a option, allocated in
+ * @a result_pool. The description is encoded in UTF-8 and may contain
+ * multiple lines separated by @c APR_EOL_STR.
+ *
+ * Additionally, the description may be localized to the language used
+ * by the current locale.
+ *
+ * @since New in 1.10.
+ */
+svn_error_t *
+svn_client_conflict_option_describe(const char **description,
+ svn_client_conflict_option_t *option,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
+
+/**
+ * Return the kind of conflict (text conflict, property conflict,
+ * or tree conflict) represented by @a conflict.
+ *
+ * New in 1.10.
+ */
+svn_wc_conflict_kind_t
+svn_client_conflict_get_kind(const svn_client_conflict_t *conflict);
+
+/**
+ * Return the absolute path to the conflicted working copy node described
+ * by @a conflict.
+ *
+ * @since New in 1.10.
+ */
+const char *
+svn_client_conflict_get_local_abspath(const svn_client_conflict_t *conflict);
+
+/**
+ * Return the operation during which the conflict described by @a
+ * conflict was recorded.
+ *
+ * @since New in 1.10.
+ */
+svn_wc_operation_t
+svn_client_conflict_get_operation(const svn_client_conflict_t *conflict);
+
+/**
+ * Return the action an update, switch, or merge operation attempted to
+ * perform on the working copy node described by @a conflict.
+ *
+ * @since New in 1.10.
+ */
+svn_wc_conflict_action_t
+svn_client_conflict_get_incoming_change(const svn_client_conflict_t *conflict);
+
+/**
+ * Return the reason why the attempted action performed by an update, switch,
+ * or merge operation conflicted with the state of the node in the working copy.
+ *
+ * During update and switch operations this local change is part of uncommitted
+ * modifications in the working copy. During merge operations it may
+ * additionally be part of the history of the merge target branch, anywhere
+ * between the common ancestor revision and the working copy revision.
+ *
+ * @since New in 1.10.
+ */
+svn_wc_conflict_reason_t
+svn_client_conflict_get_local_change(const svn_client_conflict_t *conflict);
+
+/**
+ * Return information about the repository associated with @a conflict.
+ * In case of a foreign-repository merge this will differ from the
+ * repository information associated with the merge target working copy.
+ *
+ * @since New in 1.10.
+ */
+svn_error_t *
+svn_client_conflict_get_repos_info(const char **repos_root_url,
+ const char **repos_uuid,
+ const svn_client_conflict_t *conflict,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
+
+/**
+ * Return the repository-relative location and the node kind of the incoming
+ * old version of the conflicted node described by @a conflict.
+ *
+ * If the repository-relative path is not available, the @a
+ * *incoming_old_repos_relpath will be set to @c NULL,
+ *
+ * If the peg revision is not available, @a *incoming_old_regrev will be
+ * set to SVN_INVALID_REVNUM.
+ *
+ * If the node kind is not available or if the node does not exist at the
+ * specified path and revision, @a *incoming_old_node_kind will be set to
+ * svn_node_none.
+ * ### Should return svn_node_unkown if not available?
+ *
+ * Any output parameter may be set to @c NULL by the caller to indicate that
+ * a particular piece of information should not be returned.
+ *
+ * In case of tree conflicts, this path@revision does not necessarily exist
+ * in the repository, and it does not necessarily represent the incoming
+ * change which is responsible for the occurance of the tree conflict.
+ * The responsible incoming change is generally located somewhere between
+ * the old and new incoming versions.
+ *
+ * @since New in 1.10.
+ */
+svn_error_t *
+svn_client_conflict_get_incoming_old_repos_location(
+ const char **incoming_old_repos_relpath,
+ svn_revnum_t *incoming_old_regrev,
+ svn_node_kind_t *incoming_old_node_kind,
+ const svn_client_conflict_t *conflict,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
+
+/**
+ * Like svn_client_conflict_get_incoming_old_repos_location(), expect this
+ * function returns the same data for the incoming new version.
+ *
+ * The same note about tree conflicts applies.
+ *
+ * @since New in 1.10.
+ */
+svn_error_t *
+svn_client_conflict_get_incoming_new_repos_location(
+ const char **incoming_new_repos_relpath,
+ svn_revnum_t *incoming_new_regrev,
+ svn_node_kind_t *incoming_new_node_kind,
+ const svn_client_conflict_t *conflict,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
+
+/**
+ * Return the node kind of the tree conflict victim described by @a conflict.
+ * The victim is the local node in the working copy which was affected by the
+ * tree conflict at the time the conflict was raised.
+ *
+ * @since New in 1.10.
+ */
+svn_node_kind_t
+svn_client_conflict_tree_get_victim_node_kind(
+ const svn_client_conflict_t *conflict);
+
+/**
+ * Resolve a tree @a conflict using resolution option @a option.
+ *
+ * @since New in 1.10.
+ */
+svn_error_t *
+svn_client_conflict_tree_resolve(svn_client_conflict_t *conflict,
+ svn_client_conflict_option_t *option,
+ apr_pool_t *scratch_pool);
+
+/**
+ * If the provided @a option_id is the ID of an option which resolves
+ * @a conflict, resolve the tree conflict using that option.
+ * Else, return an error.
+ *
+ * @since New in 1.10.
+ */
+svn_error_t *
+svn_client_conflict_tree_resolve_by_id(
+ svn_client_conflict_t *conflict,
+ svn_client_conflict_option_id_t option_id,
+ apr_pool_t *scratch_pool);
+
+/**
+ * Return the ID of the option this tree @a conflict has been resolved to.
+ * If the conflict has not been resolved yet, then return
+ * @c svn_client_conflict_option_undefined.
+ *
+ * @since New in 1.10.
+ */
+svn_client_conflict_option_id_t
+svn_client_conflict_tree_get_resolution(const svn_client_conflict_t *conflict);
+
+
+/**
+ * Return the name of the conflicted property represented by @a conflict.
+ *
+ * @since New in 1.10.
+ */
+const char *
+svn_client_conflict_prop_get_propname(const svn_client_conflict_t *conflict);
+
+/**
+ * Return the path to the legacy property conflicts reject file
+ * for the property conflicts represented by @a conflict.
+ *
+ * This function exists for backwards compatibility only and should not be
+ * used in new code.
+ *
+ * @since New in 1.10.
+ */
+const char *
+svn_client_conflict_prop_get_reject_abspath(
+ const svn_client_conflict_t *conflict);
+
+/**
+ * Return the set of property values involved in the property conflict
+ * described by @a conflict. If a property value is unavailable the
+ * corresponding output argument is set to @c NULL.
+ *
+ * A 3-way diff of these property values can be generated with
+ * svn_diff_mem_string_diff3(). A merged version with conflict
+ * markers can be generated with svn_diff_mem_string_output_merge3().
+ *
+ * @since New in 1.10.
+ */
+svn_error_t *
+svn_client_conflict_prop_get_propvals(const svn_string_t **base_propval,
+ const svn_string_t **working_propval,
+ const svn_string_t **incoming_old_propval,
+ const svn_string_t **incoming_new_propval,
+ const svn_client_conflict_t *conflict,
+ apr_pool_t *result_pool);
+
+/**
+ * Resolve a property @a conflict in property @a propname using resolution
+ * option @a option. To resolve all properties to the same option at once,
+ * set @a propname to the empty string "".
+ *
+ * @since New in 1.10.
+ */
+svn_error_t *
+svn_client_conflict_prop_resolve(svn_client_conflict_t *conflict,
+ const char *propname,
+ svn_client_conflict_option_t *option,
+ apr_pool_t *scratch_pool);
+/**
+ * If the provided @a option_id is the ID of an option which resolves
+ * @a conflict, resolve the property conflict in property @a propname
+ * using that option. Else, return an error.
+ *
+ * @since New in 1.10.
+ */
+svn_error_t *
+svn_client_conflict_prop_resolve_by_id(
+ svn_client_conflict_t *conflict,
+ const char *propname,
+ svn_client_conflict_option_id_t option_id,
+ apr_pool_t *scratch_pool);
+
+/**
+ * Return the ID of the option this property @a conflict in property
+ * @a propname has been resolved to.
+ * If the conflict has not been resolved yet, then return
+ * @c svn_client_conflict_option_undefined.
+ *
+ * @since New in 1.10.
+ */
+svn_client_conflict_option_id_t
+svn_client_conflict_prop_get_resolution(const svn_client_conflict_t *conflict,
+ const char *propname);
+
+/**
+ * Return the MIME-type of the working version of the text-conflicted file
+ * described by @a conflict.
+ *
+ * ### Really needed? What about base/incoming_old/incoming_new values?
+ * @since: New in 1.10.
+ */
+const char *
+svn_client_conflict_text_get_mime_type(const svn_client_conflict_t *conflict);
+
+/**
+ * Return absolute paths to the versions of the text-conflicted file
+ * described by @a conflict.
+ *
+ * If a particular content is not available, it is set to @c NULL.
+ *
+ * ### Should this be returning svn_stream_t instead of paths?
+ * @since: New in 1.10.
+ */
+svn_error_t *
+svn_client_conflict_text_get_contents(const char **base_abspath,
+ const char **working_abspath,
+ const char **incoming_old_abspath,
+ const char **incoming_new_abspath,
+ const svn_client_conflict_t *conflict,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
+
+/**
+ * Resolve a text @a conflict using resolution option @a option.
+ *
+ * @since New in 1.10.
+ */
+svn_error_t *
+svn_client_conflict_text_resolve(svn_client_conflict_t *conflict,
+ svn_client_conflict_option_t *option,
+ apr_pool_t *scratch_pool);
+
+/**
+ * If the provided @a option_id is the ID of an option which resolves
+ * @a conflict, resolve the text conflict using that option.
+ * Else, return an error.
+ *
+ * @since New in 1.10.
+ */
+svn_error_t *
+svn_client_conflict_text_resolve_by_id(
+ svn_client_conflict_t *conflict,
+ svn_client_conflict_option_id_t option_id,
+ apr_pool_t *scratch_pool);
+
+/**
+ * Return the ID of the option this text @a conflict has been resolved to.
+ * If the conflict has not been resolved yet, then return
+ * @c svn_client_conflict_option_undefined.
+ *
+ * @since New in 1.10.
+ */
+svn_client_conflict_option_id_t
+svn_client_conflict_text_get_resolution(const svn_client_conflict_t *conflict);
+
+/** @} */
+
/**
* @defgroup Resolved Mark conflicted paths as resolved.
*
Modified: subversion/branches/ra-git/subversion/include/svn_cmdline.h
URL: http://svn.apache.org/viewvc/subversion/branches/ra-git/subversion/include/svn_cmdline.h?rev=1717223&r1=1717222&r2=1717223&view=diff
==============================================================================
--- subversion/branches/ra-git/subversion/include/svn_cmdline.h (original)
+++ subversion/branches/ra-git/subversion/include/svn_cmdline.h Mon Nov 30 10:24:16 2015
@@ -374,6 +374,7 @@ svn_cmdline_create_auth_baton2(svn_auth_
* @deprecated Provided for backward compatibility with the 1.8 API.
* @since New in 1.6.
*/
+SVN_DEPRECATED
svn_error_t *
svn_cmdline_create_auth_baton(svn_auth_baton_t **ab,
svn_boolean_t non_interactive,
Modified: subversion/branches/ra-git/subversion/include/svn_config.h
URL: http://svn.apache.org/viewvc/subversion/branches/ra-git/subversion/include/svn_config.h?rev=1717223&r1=1717222&r2=1717223&view=diff
==============================================================================
--- subversion/branches/ra-git/subversion/include/svn_config.h (original)
+++ subversion/branches/ra-git/subversion/include/svn_config.h Mon Nov 30 10:24:16 2015
@@ -63,6 +63,12 @@ typedef struct svn_config_t svn_config_t
* @{
*/
+/* If you add a new SVN_CONFIG_* category/section/option macro to this group,
+ * you have to re-run gen-make.py manually.
+ *
+ * ### This should be fixed in the build system; see issue #4581.
+ */
+
/* This list of #defines is intentionally presented as a nested list
that matches the in-config hierarchy. */
@@ -76,18 +82,27 @@ typedef struct svn_config_t svn_config_t
#define SVN_CONFIG_OPTION_HTTP_PROXY_EXCEPTIONS "http-proxy-exceptions"
#define SVN_CONFIG_OPTION_HTTP_TIMEOUT "http-timeout"
#define SVN_CONFIG_OPTION_HTTP_COMPRESSION "http-compression"
+/** @deprecated Not used since 1.8. */
#define SVN_CONFIG_OPTION_NEON_DEBUG_MASK "neon-debug-mask"
+/** @since New in 1.5. */
#define SVN_CONFIG_OPTION_HTTP_AUTH_TYPES "http-auth-types"
#define SVN_CONFIG_OPTION_SSL_AUTHORITY_FILES "ssl-authority-files"
#define SVN_CONFIG_OPTION_SSL_TRUST_DEFAULT_CA "ssl-trust-default-ca"
#define SVN_CONFIG_OPTION_SSL_CLIENT_CERT_FILE "ssl-client-cert-file"
#define SVN_CONFIG_OPTION_SSL_CLIENT_CERT_PASSWORD "ssl-client-cert-password"
+/** @deprecated Not used since 1.8.
+ * @since New in 1.5. */
#define SVN_CONFIG_OPTION_SSL_PKCS11_PROVIDER "ssl-pkcs11-provider"
+/** @since New in 1.5. */
#define SVN_CONFIG_OPTION_HTTP_LIBRARY "http-library"
+/** @since New in 1.1. */
#define SVN_CONFIG_OPTION_STORE_PASSWORDS "store-passwords"
+/** @since New in 1.6. */
#define SVN_CONFIG_OPTION_STORE_PLAINTEXT_PASSWORDS "store-plaintext-passwords"
#define SVN_CONFIG_OPTION_STORE_AUTH_CREDS "store-auth-creds"
+/** @since New in 1.6. */
#define SVN_CONFIG_OPTION_STORE_SSL_CLIENT_CERT_PP "store-ssl-client-cert-pp"
+/** @since New in 1.6. */
#define SVN_CONFIG_OPTION_STORE_SSL_CLIENT_CERT_PP_PLAINTEXT \
"store-ssl-client-cert-pp-plaintext"
#define SVN_CONFIG_OPTION_USERNAME "username"
@@ -123,6 +138,7 @@ typedef struct svn_config_t svn_config_t
#define SVN_CONFIG_OPTION_DIFF_EXTENSIONS "diff-extensions"
#define SVN_CONFIG_OPTION_DIFF3_CMD "diff3-cmd"
#define SVN_CONFIG_OPTION_DIFF3_HAS_PROGRAM_ARG "diff3-has-program-arg"
+/** @since New in 1.5. */
#define SVN_CONFIG_OPTION_MERGE_TOOL_CMD "merge-tool-cmd"
#define SVN_CONFIG_SECTION_MISCELLANY "miscellany"
#define SVN_CONFIG_OPTION_GLOBAL_IGNORES "global-ignores"
@@ -133,8 +149,11 @@ typedef struct svn_config_t svn_config_t
#define SVN_CONFIG_OPTION_ENABLE_AUTO_PROPS "enable-auto-props"
/** @since New in 1.9. */
#define SVN_CONFIG_OPTION_ENABLE_MAGIC_FILE "enable-magic-file"
+/** @since New in 1.2. */
#define SVN_CONFIG_OPTION_NO_UNLOCK "no-unlock"
+/** @since New in 1.5. */
#define SVN_CONFIG_OPTION_MIMETYPES_FILE "mime-types-file"
+/** @since New in 1.5. */
#define SVN_CONFIG_OPTION_PRESERVED_CF_EXTS "preserved-conflict-file-exts"
/** @since New in 1.7. */
#define SVN_CONFIG_OPTION_INTERACTIVE_CONFLICTS "interactive-conflicts"
@@ -172,9 +191,13 @@ typedef struct svn_config_t svn_config_t
#define SVN_CONFIG_OPTION_FORCE_USERNAME_CASE "force-username-case"
/** @since New in 1.8. */
#define SVN_CONFIG_OPTION_HOOKS_ENV "hooks-env"
+/** @since New in 1.5. */
#define SVN_CONFIG_SECTION_SASL "sasl"
+/** @since New in 1.5. */
#define SVN_CONFIG_OPTION_USE_SASL "use-sasl"
+/** @since New in 1.5. */
#define SVN_CONFIG_OPTION_MIN_SSF "min-encryption"
+/** @since New in 1.5. */
#define SVN_CONFIG_OPTION_MAX_SSF "max-encryption"
/* For repository password database */
@@ -782,7 +805,8 @@ svn_config_write_auth_data(apr_hash_t *h
* fully purged) to allow perusal and selective removal of credentials.
*
* @a cred_kind and @a realmstring specify the key of the credential.
- * @a hash contains the hash data associated with the record.
+ * @a hash contains the hash data associated with the record. @a walk_baton
+ * is the baton passed to svn_config_walk_auth_data().
*
* Before returning set @a *delete_cred to TRUE to remove the credential from
* the cache; leave @a *delete_cred unchanged or set it to FALSE to keep the
Modified: subversion/branches/ra-git/subversion/include/svn_dav.h
URL: http://svn.apache.org/viewvc/subversion/branches/ra-git/subversion/include/svn_dav.h?rev=1717223&r1=1717222&r2=1717223&view=diff
==============================================================================
--- subversion/branches/ra-git/subversion/include/svn_dav.h (original)
+++ subversion/branches/ra-git/subversion/include/svn_dav.h Mon Nov 30 10:24:16 2015
@@ -386,6 +386,15 @@ extern "C" {
#define SVN_DAV_NS_DAV_SVN_REVERSE_FILE_REVS\
SVN_DAV_PROP_NS_DAV "svn/reverse-file-revs"
+/** Presence of this in a DAV header in an OPTIONS response indicates
+ * that the transmitter (in this case, the server) knows how to handle
+ * svndiff1 format encoding.
+ *
+ * @since New in 1.10.
+ */
+#define SVN_DAV_NS_DAV_SVN_SVNDIFF1\
+ SVN_DAV_PROP_NS_DAV "svn/svndiff1"
+
/** @} */
Modified: subversion/branches/ra-git/subversion/include/svn_diff.h
URL: http://svn.apache.org/viewvc/subversion/branches/ra-git/subversion/include/svn_diff.h?rev=1717223&r1=1717222&r2=1717223&view=diff
==============================================================================
--- subversion/branches/ra-git/subversion/include/svn_diff.h (original)
+++ subversion/branches/ra-git/subversion/include/svn_diff.h Mon Nov 30 10:24:16 2015
@@ -412,6 +412,9 @@ typedef enum svn_diff_conflict_display_s
/** Given a vtable of @a output_fns/@a output_baton for consuming
* differences, output the differences in @a diff.
*
+ * If not @c NULL, call @a cancel_func with @a cancel_baton once or multiple
+ * times while processing larger diffs.
+ *
* @since New in 1.9.
*/
svn_error_t *
@@ -628,6 +631,9 @@ svn_diff_file_diff4(svn_diff_t **diff,
* will be used in the generated diff output. Otherwise the legacy compile
* time default will be used.
*
+ * If not @c NULL, call @a cancel_func with @a cancel_baton once or multiple
+ * times while processing larger diffs.
+ *
* @since New in 1.9.
*/
svn_error_t *
@@ -645,7 +651,7 @@ svn_diff_file_output_unified4(svn_stream
void *cancel_baton,
apr_pool_t *scratch_pool);
-/** Similar to svn_diff_file_output_unified3(), but without cancel
+/** Similar to svn_diff_file_output_unified4(), but without cancel
* support and with @a context_size set to -1.
*
* @since New in 1.5.
@@ -705,7 +711,11 @@ svn_diff_file_output_unified(svn_stream_
* @a conflict_latest to be displayed as conflict markers in the output.
* If @a conflict_original, @a conflict_modified, @a conflict_latest and/or
* @a conflict_separator is @c NULL, a default marker will be displayed.
- * @a conflict_style dictates how conflicts are displayed.
+ * @a conflict_style dictates how conflicts are displayed.
+ * Uses @a scratch_pool for temporary allocations.
+ *
+ * If not @c NULL, call @a cancel_func with @a cancel_baton once or multiple
+ * times while processing larger diffs.
*
* @since New in 1.9.
*/
@@ -722,7 +732,7 @@ svn_diff_file_output_merge3(svn_stream_t
svn_diff_conflict_display_style_t conflict_style,
svn_cancel_func_t cancel_func,
void *cancel_baton,
- apr_pool_t *pool);
+ apr_pool_t *scratch_pool);
/** Similar to svn_diff_file_output_merge3, but without cancel support.
*
@@ -782,7 +792,10 @@ svn_diff_file_output_merge(svn_stream_t
* Either @a original or @a latest may be NULL to describe that the version
* didn't exist.
*
- * Writes the ouput to @a output_stream.
+ * Writes the output to @a output_stream.
+ *
+ * If not @c NULL, call @a cancel_func with @a cancel_baton once or multiple
+ * times while processing larger diffs.
*
* @since New in 1.9.
*/
@@ -858,6 +871,11 @@ svn_diff_mem_string_diff4(svn_diff_t **d
* will be used in the generated diff output. Otherwise the legacy compile
* time default will be used.
*
+ * If not @c NULL, call @a cancel_func with @a cancel_baton once or multiple
+ * times while processing larger diffs.
+ *
+ * Uses @a scratch_pool for temporary allocations.
+ *
* @since New in 1.9
*/
svn_error_t *
@@ -873,7 +891,7 @@ svn_diff_mem_string_output_unified3(svn_
int context_size,
svn_cancel_func_t cancel_func,
void *cancel_baton,
- apr_pool_t *pool);
+ apr_pool_t *scratch_pool);
/** Similar to svn_diff_mem_string_output_unified3() but without
* cancel support and with @a context_size set to -1.
@@ -924,6 +942,11 @@ svn_diff_mem_string_output_unified(svn_s
*
* @a conflict_style dictates how conflicts are displayed.
*
+ * If not @c NULL, call @a cancel_func with @a cancel_baton once or multiple
+ * times while processing larger diffs.
+ *
+ * Uses @a scratch_pool for temporary allocations.
+ *
* @since New in 1.9.
*/
svn_error_t *
@@ -939,7 +962,7 @@ svn_diff_mem_string_output_merge3(svn_st
svn_diff_conflict_display_style_t style,
svn_cancel_func_t cancel_func,
void *cancel_baton,
- apr_pool_t *pool);
+ apr_pool_t *scratch_pool);
/** Similar to svn_diff_mem_string_output_merge2(), but without cancel support.
*
@@ -1189,6 +1212,39 @@ typedef struct svn_prop_patch_t {
} svn_prop_patch_t;
/**
+ * A binary patch representation. This basically describes replacing one
+ * exact binary representation with another one.
+ *
+ * @since New in 1.10. */
+typedef struct svn_diff_binary_patch_t svn_diff_binary_patch_t;
+
+/**
+ * Creates a stream allocated in @a result_pool from which the original
+ * (pre-patch-application) version of the binary patched file can be read.
+ *
+ * @note Like many svn_diff_get functions over patches, this is implemented
+ * as reading from the backing patch file. Therefore it is recommended to
+ * read the whole stream before using other functions on the same patch file.
+ *
+ * @since New in 1.10 */
+svn_stream_t *
+svn_diff_get_binary_diff_original_stream(const svn_diff_binary_patch_t *bpatch,
+ apr_pool_t *result_pool);
+
+/**
+ * Creates a stream allocated in @a result_pool from which the resulting
+ * (post-patch-application) version of the binary patched file can be read.
+ *
+ * @note Like many svn_diff_get functions over patches, this is implemented
+ * as reading from the backing patch file. Therefore it is recommended to
+ * read the whole stream before using other functions on the same patch file.
+ *
+ * @since New in 1.10 */
+svn_stream_t *
+svn_diff_get_binary_diff_result_stream(const svn_diff_binary_patch_t *bpatch,
+ apr_pool_t *result_pool);
+
+/**
* Data type to manage parsing of patches.
* API users should not allocate structures of this type directly.
*
@@ -1226,6 +1282,45 @@ typedef struct svn_patch_t {
* @since New in 1.9. */
svn_mergeinfo_t mergeinfo;
svn_mergeinfo_t reverse_mergeinfo;
+
+ /**
+ * Declares that there is a binary conflict and contains the information
+ * to apply it as parsed from the file.
+ * @since New in 1.10. */
+ svn_diff_binary_patch_t *binary_patch;
+
+ /** The old and new executability bits, as retrieved from the patch file, from
+ * the git-like mode headers.
+ *
+ * A patch may specify an executability change via @a old_executable_bit and
+ * @a new_executable_bit, via a #SVN_PROP_EXECUTABLE propchange hunk, or both
+ * ways. It is upto caller how to decide how conflicting information is
+ * handled.
+ *
+ * #svn_tristate_unknown indicates the patch does not specify the
+ * corresponding bit.
+ *
+ * @since New in 1.10.
+ */
+ svn_tristate_t old_executable_bit;
+ svn_tristate_t new_executable_bit;
+
+ /** The old and new symlink bits, as retrieved from the patch file, from
+ * the git-like mode headers.
+ *
+ * A patch may specify a symlink change via @a old_symlink_bit and
+ * @a new_symlink_bit, via a #SVN_PROP_SPECIAL propchange hunk, or both
+ * ways. It is upto caller how to decide how conflicting information is
+ * handled. Most implementations will currently just describe a replacement
+ * of the file though.
+ *
+ * #svn_tristate_unknown indicates the patch does not specify the
+ * corresponding bit.
+ *
+ * @since New in 1.10.
+ */
+ svn_tristate_t old_symlink_bit;
+ svn_tristate_t new_symlink_bit;
} svn_patch_t;
/** An opaque type representing an open patch file.
Modified: subversion/branches/ra-git/subversion/include/svn_dirent_uri.h
URL: http://svn.apache.org/viewvc/subversion/branches/ra-git/subversion/include/svn_dirent_uri.h?rev=1717223&r1=1717222&r2=1717223&view=diff
==============================================================================
--- subversion/branches/ra-git/subversion/include/svn_dirent_uri.h (original)
+++ subversion/branches/ra-git/subversion/include/svn_dirent_uri.h Mon Nov 30 10:24:16 2015
@@ -363,9 +363,9 @@ svn_relpath_dirname(const char *relpath,
* @since New in 1.9.
*/
const char *
-svn_relpath_limit(const char *relpath,
- int max_components,
- apr_pool_t *result_pool);
+svn_relpath_prefix(const char *relpath,
+ int max_components,
+ apr_pool_t *result_pool);
/** Divide the canonicalized @a uri into a uri @a *dirpath and a
Modified: subversion/branches/ra-git/subversion/include/svn_error.h
URL: http://svn.apache.org/viewvc/subversion/branches/ra-git/subversion/include/svn_error.h?rev=1717223&r1=1717222&r2=1717223&view=diff
==============================================================================
--- subversion/branches/ra-git/subversion/include/svn_error.h (original)
+++ subversion/branches/ra-git/subversion/include/svn_error.h Mon Nov 30 10:24:16 2015
@@ -165,18 +165,16 @@ svn_error_wrap_apr(apr_status_t status,
...)
__attribute__((format(printf, 2, 3)));
-/** A quick n' easy way to create a wrapped exception with your own
- * message, before throwing it up the stack. (It uses all of the
- * @a child's fields.)
+/** If @a child is SVN_NO_ERROR, return SVN_NO_ERROR.
+ * Else, prepend a new error to the error chain of @a child. The new error
+ * uses @a new_msg as error message but all other error attributes (such
+ * as the error code) are copied from @a child.
*/
svn_error_t *
svn_error_quick_wrap(svn_error_t *child,
const char *new_msg);
-/** A quick n' easy way to create a wrapped exception with your own
- * printf-style error message produced by passing @a fmt, using
- * apr_psprintf(), before throwing it up the stack. (It uses all of the
- * @a child's fields.)
+/** Like svn_error_quick_wrap(), but with format string support.
*
* @since New in 1.9.
*/
@@ -455,7 +453,10 @@ svn_error_t *svn_error_purge_tracing(svn
err->apr_err == SVN_ERR_FS_NOT_FOUND || \
err->apr_err == SVN_ERR_FS_OUT_OF_DATE || \
err->apr_err == SVN_ERR_FS_BAD_LOCK_TOKEN || \
- err->apr_err == SVN_ERR_REPOS_HOOK_FAILURE)
+ err->apr_err == SVN_ERR_REPOS_HOOK_FAILURE || \
+ err->apr_err == SVN_ERR_FS_NO_SUCH_REVISION || \
+ err->apr_err == SVN_ERR_FS_OUT_OF_DATE || \
+ err->apr_err == SVN_ERR_FS_NOT_FILE)
/**
* Return TRUE if @a err is an error specifically related to unlocking
Modified: subversion/branches/ra-git/subversion/include/svn_error_codes.h
URL: http://svn.apache.org/viewvc/subversion/branches/ra-git/subversion/include/svn_error_codes.h?rev=1717223&r1=1717222&r2=1717223&view=diff
==============================================================================
--- subversion/branches/ra-git/subversion/include/svn_error_codes.h (original)
+++ subversion/branches/ra-git/subversion/include/svn_error_codes.h Mon Nov 30 10:24:16 2015
@@ -868,6 +868,11 @@ SVN_ERROR_START
SVN_ERR_FS_CATEGORY_START + 63,
"Invalid generation number data.")
+ /** @since New in 1.10. */
+ SVN_ERRDEF(SVN_ERR_FS_CORRUPT_REVPROP_MANIFEST,
+ SVN_ERR_FS_CATEGORY_START + 64,
+ "Revprop manifest corrupt.")
+
/* repos errors */
SVN_ERRDEF(SVN_ERR_REPOS_LOCKED,
@@ -922,11 +927,6 @@ SVN_ERROR_START
SVN_ERR_REPOS_CATEGORY_START + 10,
"Repository upgrade is not supported")
- /** @since New in 1.9. */
- SVN_ERRDEF(SVN_ERR_REPOS_CORRUPTED,
- SVN_ERR_REPOS_CATEGORY_START + 11,
- "Repository is corrupt")
-
/* generic RA errors */
SVN_ERRDEF(SVN_ERR_RA_ILLEGAL_URL,
@@ -1066,6 +1066,11 @@ SVN_ERROR_START
SVN_ERR_RA_DAV_CATEGORY_START + 14,
"The server state conflicts with the requested preconditions")
+ /** @since New in 1.9 */
+ SVN_ERRDEF(SVN_ERR_RA_DAV_METHOD_NOT_ALLOWED,
+ SVN_ERR_RA_DAV_CATEGORY_START + 15,
+ "The URL doesn't allow the requested method")
+
/* ra_local errors */
SVN_ERRDEF(SVN_ERR_RA_LOCAL_REPOS_NOT_FOUND,
@@ -1492,6 +1497,11 @@ SVN_ERROR_START
SVN_ERR_CL_CATEGORY_START + 11,
"Failed processing one or more externals definitions")
+ /** @since New in 1.9. */
+ SVN_ERRDEF(SVN_ERR_CL_REPOS_VERIFY_FAILED,
+ SVN_ERR_CL_CATEGORY_START + 12,
+ "Repository verification failed")
+
/* ra_svn errors */
SVN_ERRDEF(SVN_ERR_RA_SVN_CMD_ERR,
@@ -1532,6 +1542,16 @@ SVN_ERROR_START
SVN_ERR_RA_SVN_CATEGORY_START + 8,
"Editor drive was aborted")
+ /** @since New in 1.10 */
+ SVN_ERRDEF(SVN_ERR_RA_SVN_REQUEST_SIZE,
+ SVN_ERR_RA_SVN_CATEGORY_START + 9,
+ "Client request too long")
+
+ /** @since New in 1.10 */
+ SVN_ERRDEF(SVN_ERR_RA_SVN_RESPONSE_SIZE,
+ SVN_ERR_RA_SVN_CATEGORY_START + 10,
+ "Server response too long")
+
/* libsvn_auth errors */
/* this error can be used when an auth provider doesn't have
@@ -1589,12 +1609,20 @@ SVN_ERROR_START
SVN_ERR_DIFF_CATEGORY_START + 0,
"Diff data source modified unexpectedly")
+ /** @since New in 1.10 */
+ SVN_ERRDEF(SVN_ERR_DIFF_UNEXPECTED_DATA,
+ SVN_ERR_DIFF_CATEGORY_START + 1,
+ "Diff data unexpected")
+
/* libsvn_ra_serf errors */
- /** @since New in 1.5. */
+ /** @since New in 1.5.
+ @deprecated SSPI now handled by serf rather than libsvn_ra_serf. */
SVN_ERRDEF(SVN_ERR_RA_SERF_SSPI_INITIALISATION_FAILED,
SVN_ERR_RA_SERF_CATEGORY_START + 0,
"Initialization of SSPI library failed")
- /** @since New in 1.5. */
+ /** @since New in 1.5.
+ @deprecated Certificate verification now handled by serf rather
+ than libsvn_ra_serf. */
SVN_ERRDEF(SVN_ERR_RA_SERF_SSL_CERT_UNTRUSTED,
SVN_ERR_RA_SERF_CATEGORY_START + 1,
"Server SSL certificate untrusted")
Modified: subversion/branches/ra-git/subversion/include/svn_fs.h
URL: http://svn.apache.org/viewvc/subversion/branches/ra-git/subversion/include/svn_fs.h?rev=1717223&r1=1717222&r2=1717223&view=diff
==============================================================================
--- subversion/branches/ra-git/subversion/include/svn_fs.h (original)
+++ subversion/branches/ra-git/subversion/include/svn_fs.h Mon Nov 30 10:24:16 2015
@@ -65,6 +65,30 @@ svn_fs_version(void);
/** An object representing a Subversion filesystem. */
typedef struct svn_fs_t svn_fs_t;
+/**
+ * @defgroup svn_fs_backend_names Built-in back-ends
+ * Constants defining the currently supported built-in filesystem backends.
+ *
+ * @see svn_fs_type
+ * @{
+ */
+/** @since New in 1.1. */
+#define SVN_FS_TYPE_BDB "bdb"
+/** @since New in 1.1. */
+#define SVN_FS_TYPE_FSFS "fsfs"
+
+/**
+ * EXPERIMENTAL filesystem backend.
+ *
+ * It is not ready for general production use. Please consult the
+ * respective release notes on suggested usage scenarios.
+ *
+ * @since New in 1.9.
+ */
+#define SVN_FS_TYPE_FSX "fsx"
+
+/** @} */
+
/**
* @name Filesystem configuration options
@@ -89,7 +113,7 @@ typedef struct svn_fs_t svn_fs_t;
*
* "2" is allowed, too and means "enable if efficient",
* i.e. this will not create warning at runtime if there
- * if no efficient support for revprop caching.
+ * is no efficient support for revprop caching.
*
* @since New in 1.8.
*/
@@ -139,23 +163,10 @@ typedef struct svn_fs_t svn_fs_t;
/* Note to maintainers: if you add further SVN_FS_CONFIG_FSFS_CACHE_* knobs,
update fs_fs.c:verify_as_revision_before_current_plus_plus(). */
-/* See also svn_fs_type(). */
-/** @since New in 1.1. */
-#define SVN_FS_CONFIG_FS_TYPE "fs-type"
-/** @since New in 1.1. */
-#define SVN_FS_TYPE_BDB "bdb"
-/** @since New in 1.1. */
-#define SVN_FS_TYPE_FSFS "fsfs"
-
-/**
- * EXPERIMENTAL filesystem backend.
+/** Select the filesystem type. See also #svn_fs_type().
*
- * It is not ready for general production use. Please consult the
- * respective release notes on suggested usage scenarios.
- *
- * @since New in 1.9.
- */
-#define SVN_FS_TYPE_FSX "fsx"
+ * @since New in 1.1. */
+#define SVN_FS_CONFIG_FS_TYPE "fs-type"
/** Create repository format compatible with Subversion versions
* earlier than 1.4.
@@ -185,9 +196,9 @@ typedef struct svn_fs_t svn_fs_t;
*/
#define SVN_FS_CONFIG_PRE_1_8_COMPATIBLE "pre-1.8-compatible"
-/** Create repository format compatible with Subversion versions
- * earlier than 1.9. The value must be a version in the same format
- * as #SVN_VER_NUMBER.
+/** Create repository format compatible with the specified Subversion
+ * release. The value must be a version in the same format as
+ * #SVN_VER_NUMBER and cannot exceed the current version.
*
* @note The @c patch component would often be ignored, due to our forward
* compatibility promises within minor release lines. It should therefore
@@ -258,11 +269,13 @@ svn_fs_set_warning_func(svn_fs_t *fs,
* @c NULL, the options it contains modify the behavior of the
* filesystem. The interpretation of @a fs_config is specific to the
* filesystem back-end. The new filesystem may be closed by
- * destroying @a pool.
+ * destroying @a result_pool.
+ *
+ * Use @a scratch_pool for temporary allocations.
*
* @note The lifetime of @a fs_config must not be shorter than @a
- * pool's. It's a good idea to allocate @a fs_config from @a pool or
- * one of its ancestors.
+ * result_pool's. It's a good idea to allocate @a fs_config from
+ * @a result_pool or one of its ancestors.
*
* If @a fs_config contains a value for #SVN_FS_CONFIG_FS_TYPE, that
* value determines the filesystem type for the new filesystem.
@@ -278,8 +291,22 @@ svn_fs_set_warning_func(svn_fs_t *fs,
* though the caller should not rely upon any particular default if they
* wish to ensure that a filesystem of a specific type is created.
*
+ * @since New in 1.10.
+ */
+svn_error_t *
+svn_fs_create2(svn_fs_t **fs_p,
+ const char *path,
+ apr_hash_t *fs_config,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
+
+/**
+ * Like svn_fs_create2(), but without @a scratch_pool.
+ *
+ * @deprecated Provided for backward compatibility with the 1.9 API.
* @since New in 1.1.
*/
+SVN_DEPRECATED
svn_error_t *
svn_fs_create(svn_fs_t **fs_p,
const char *path,
@@ -291,8 +318,9 @@ svn_fs_create(svn_fs_t **fs_p,
* return a pointer to it in @a *fs_p. If @a fs_config is not @c
* NULL, the options it contains modify the behavior of the
* filesystem. The interpretation of @a fs_config is specific to the
- * filesystem back-end. The opened filesystem may be closed by
- * destroying @a result_pool.
+ * filesystem back-end. The opened filesystem will be allocated in
+ * @a result_pool may be closed by clearing or destroying that pool.
+ * Use @a scratch_pool for temporary allocations.
*
* @note The lifetime of @a fs_config must not be shorter than @a
* result_pool's. It's a good idea to allocate @a fs_config from
@@ -346,25 +374,25 @@ typedef enum svn_fs_upgrade_notify_actio
svn_fs_upgrade_format_bumped
} svn_fs_upgrade_notify_action_t;
-/** The type of a upgrade notification function. @a number is specifc
+/** The type of an upgrade notification function. @a number is specifc
* to @a action (see #svn_fs_upgrade_notify_action_t); @a action is the
* type of action being performed. @a baton is the corresponding baton
- * for the notification function, and @a pool can be used for temporary
- * allocations, but will be cleared between invocations.
+ * for the notification function, and @a scratch_pool can be used for
+ * temporary allocations, but will be cleared between invocations.
*
* @since New in 1.9.
*/
typedef svn_error_t *(*svn_fs_upgrade_notify_t)(void *baton,
apr_uint64_t number,
svn_fs_upgrade_notify_action_t action,
- apr_pool_t *pool);
+ apr_pool_t *scratch_pool);
/**
* Upgrade the Subversion filesystem located in the directory @a path
* to the latest version supported by this library. Return
* #SVN_ERR_FS_UNSUPPORTED_UPGRADE and make no changes to the
- * filesystem if the requested upgrade is not supported. Use @a pool
- * for necessary allocations.
+ * filesystem if the requested upgrade is not supported. Use
+ * @a scratch_pool for temporary allocations.
*
* The optional @a notify_func callback is only a general feedback that
* the operation is still in process but may be called in e.g. random shard
@@ -374,7 +402,7 @@ typedef svn_error_t *(*svn_fs_upgrade_no
* the user to preempt this potentially lengthy operation.
*
* @note You probably don't want to use this directly. Take a look at
- * svn_repos_upgrade() instead.
+ * svn_repos_upgrade2() instead.
*
* @note Canceling an upgrade is legal but may leave remnants of previous
* format data that may not be cleaned up automatically by later calls.
@@ -387,7 +415,7 @@ svn_fs_upgrade2(const char *path,
void *notify_baton,
svn_cancel_func_t cancel_func,
void *cancel_baton,
- apr_pool_t *pool);
+ apr_pool_t *scratch_pool);
/**
* Like svn_fs_upgrade2 but with notify_func, notify_baton, cancel_func
@@ -474,13 +502,14 @@ svn_fs_delete_fs(const char *path,
/** The type of a hotcopy notification function. @a start_revision and
* @a end_revision indicate the copied revision range. @a baton is the
- * corresponding baton for the notification function, and @a pool can be
- * used for temporary allocations, but will be cleared between invocations.
+ * corresponding baton for the notification function, and @a scratch_pool
+ * can be used for temporary allocations, but will be cleared between
+ * invocations.
*/
typedef void (*svn_fs_hotcopy_notify_t)(void *baton,
svn_revnum_t start_revision,
svn_revnum_t end_revision,
- apr_pool_t *pool);
+ apr_pool_t *scratch_pool);
/**
* Copy a possibly live Subversion filesystem from @a src_path to
@@ -497,9 +526,13 @@ typedef void (*svn_fs_hotcopy_notify_t)(
* For each revision range copied, @a notify_func will be called with
* staring and ending revision numbers (both inclusive and not necessarily
* different) and with the @a notify_baton. Currently, this notification
- * is only supported in the FSFS backend. @a notify_func may be @c NULL
+ * 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.
@@ -871,27 +904,39 @@ svn_fs_access_add_lock_token(svn_fs_acce
* @{
*/
-/** Defines the possible ways two arbitrary nodes may be related.
+/** Defines the possible ways two arbitrary (root, path)-pairs may be
+ * related.
*
* @since New in 1.9.
*/
typedef enum svn_fs_node_relation_t
{
- /** The nodes are not related.
- * Nodes from different repositories are always unrelated.
- * #svn_fs_compare_ids would return the value -1 in this case.
+ /** The (root, path)-pairs are not related, i.e. none of the other cases
+ * apply. If the roots refer to different @c svn_fs_t instances, then
+ * they are always considered unrelated - even if the underlying
+ * repository is the same.
*/
svn_fs_node_unrelated = 0,
- /** They are the same physical node, i.e. there is no intervening change.
- * However, due to lazy copying, there may be part of different parent
- * copies. #svn_fs_compare_ids would return the value 0 in this case.
+ /** No changes have been made between the (root, path)-pairs, i.e. they
+ * have the same (relative) nodes in their sub-trees, corresponding sub-
+ * tree nodes have the same contents as well as properties and report the
+ * same "created-path" and "created-rev" data. This implies having a
+ * common ancestor.
+ *
+ * However, due to efficiency considerations, the FS implementation may
+ * report some combinations as merely having a common ancestor
+ * (@a svn_fs_node_common_ancestor) instead of actually being unchanged.
*/
- svn_fs_node_same,
+ svn_fs_node_unchanged,
- /** The nodes have a common ancestor (which may be one of these nodes)
- * but are not the same.
- * #svn_fs_compare_ids would return the value 1 in this case.
+ /** The (root, path)-pairs have a common ancestor (which may be one of
+ * them) but there are changes between them, i.e. they don't fall into
+ * the @c svn_fs_node_unchanged category.
+ *
+ * Due to efficiency considerations, the FS implementation may falsely
+ * classify some combinations as merely having a common ancestor that
+ * are, in fact, unchanged (@a svn_fs_node_unchanged).
*/
svn_fs_node_common_ancestor
@@ -904,9 +949,9 @@ typedef struct svn_fs_id_t svn_fs_id_t;
/** Return -1, 0, or 1 if node revisions @a a and @a b are respectively
* unrelated, equivalent, or otherwise related (part of the same node).
*
- * @note Using FS ID based functions is now discouraged and may be fully
- * deprecated in future releases. New code should use #svn_fs_node_relation()
- * and #svn_fs_node_relation_t instead.
+ * @note Consider using the more expressive #svn_fs_node_relation() instead.
+ *
+ * @see #svn_fs_node_relation
*/
int
svn_fs_compare_ids(const svn_fs_id_t *a,
@@ -917,9 +962,9 @@ svn_fs_compare_ids(const svn_fs_id_t *a,
/** Return TRUE if node revisions @a id1 and @a id2 are related (part of the
* same node), else return FALSE.
*
- * @note Using FS ID based functions is now discouraged and may be fully
- * deprecated in future releases. New code should use #svn_fs_node_relation()
- * and #svn_fs_node_relation_t instead.
+ * @note Consider using the more expressive #svn_fs_node_relation() instead.
+ *
+ * @see #svn_fs_node_relation
*/
svn_boolean_t
svn_fs_check_related(const svn_fs_id_t *id1,
@@ -1031,15 +1076,12 @@ svn_fs_unparse_id(const svn_fs_id_t *id,
* set.
*
* The Subversion filesystem will make a best effort to not reuse
- * transaction names. The Berkeley DB backend generates transaction
- * names using a sequence, or a counter, which is stored in the BDB
+ * transaction names. The BDB and FSFS backends generate transaction
+ * names using a sequence, or a counter, which is stored in the
* database. Each new transaction increments the counter. The
* current value of the counter is not serialized into a filesystem
* dump file, so dumping and restoring the repository will reset the
- * sequence and reuse transaction names. The FSFS backend generates a
- * transaction name using the hostname, process ID and current time in
- * microseconds since 00:00:00 January 1, 1970 UTC. So it is
- * extremely unlikely that a transaction name will be reused.
+ * sequence and so may reuse transaction names.
*
* @defgroup svn_fs_txns Filesystem transactions
* @{
@@ -1396,7 +1438,7 @@ svn_fs_revision_root_revision(svn_fs_roo
* Unicode canonical decomposition and ordering. No directory entry
* may be named '.', '..', or the empty string. Given a directory
* entry name which fails to meet these requirements, a filesystem
- * function returns an SVN_ERR_FS_PATH_SYNTAX error.
+ * function returns an #SVN_ERR_FS_PATH_SYNTAX error.
*
* A directory path is a sequence of zero or more directory entry
* names, separated by slash characters (U+002f), and possibly ending
@@ -1404,7 +1446,7 @@ svn_fs_revision_root_revision(svn_fs_roo
* characters are treated as if they were a single slash. If a path
* ends with a slash, it refers to the same node it would without the
* slash, but that node must be a directory, or else the function
- * returns an SVN_ERR_FS_NOT_DIRECTORY error.
+ * may return an #SVN_ERR_FS_NOT_DIRECTORY error.
*
* A path consisting of the empty string, or a string containing only
* slashes, refers to the root directory.
@@ -1715,7 +1757,7 @@ svn_fs_node_id(const svn_fs_id_t **id_p,
* are related and return the result in @a relation. There is no restriction
* concerning the roots: They may refer to different repositories, be in
* arbitrary revision order and any of them may pertain to a transaction.
- * @a pool is used for temporary allocations.
+ * @a scratch_pool is used for temporary allocations.
*
* @note Paths from different svn_fs_t will be reported as unrelated even
* if the underlying physical repository is the same.
@@ -1728,14 +1770,17 @@ svn_fs_node_relation(svn_fs_node_relatio
const char *path_a,
svn_fs_root_t *root_b,
const char *path_b,
- apr_pool_t *pool);
+ apr_pool_t *scratch_pool);
-/** Set @a *revision to the revision in which @a path under @a root was
- * created. Use @a pool for any temporary allocations. @a *revision will
+/** Set @a *revision to the revision in which the node-revision identified
+ * by @a path under @a root was created; that is, to the revision in which
+ * @a path under @a root was last modified. @a *revision will
* be set to #SVN_INVALID_REVNUM for uncommitted nodes (i.e. modified nodes
* under a transaction root). Note that the root of an unmodified transaction
* is not itself considered to be modified; in that case, return the revision
* upon which the transaction was based.
+ *
+ * Use @a pool for any temporary allocations.
*/
svn_error_t *
svn_fs_node_created_rev(svn_revnum_t *revision,
@@ -1794,6 +1839,18 @@ svn_fs_node_proplist(apr_hash_t **table_
const char *path,
apr_pool_t *pool);
+/** Set @a *has_props to TRUE if the node @a path in @a root has properties
+ * and to FALSE if it doesn't have properties. Perform temporary allocations
+ * in @a scratch_pool.
+ *
+ * @since New in 1.9.
+ */
+svn_error_t *
+svn_fs_node_has_props(svn_boolean_t *has_props,
+ svn_fs_root_t *root,
+ const char *path,
+ apr_pool_t *scratch_pool);
+
/** Change a node's property's value, or add/delete a property.
*
@@ -1818,7 +1875,16 @@ svn_fs_change_node_prop(svn_fs_root_t *r
* differ from those at @a path2 under @a root2, or set it to #FALSE if they
* are the same. Both paths must exist under their respective roots, and
* both roots must be in the same filesystem.
- * Do any necessary temporary allocation in @a pool.
+ * Do any necessary temporary allocation in @a scratch_pool.
+ *
+ * @note For the purposes of preserving accurate history, certain bits of
+ * code (such as the repository dump code) need to care about the distinction
+ * between situations when the properties are "different" and "have changed
+ * across two points in history". We have a pair of functions that can
+ * answer both of these questions, svn_fs_props_different() and
+ * svn_fs_props_changed(). See issue 4598 for more details.
+ *
+ * @see svn_fs_props_changed
*
* @since New in 1.9.
*/
@@ -1828,12 +1894,10 @@ svn_fs_props_different(svn_boolean_t *di
const char *path1,
svn_fs_root_t *root2,
const char *path2,
- apr_pool_t *pool);
+ apr_pool_t *scratch_pool);
-/** Determine if the properties of two path/root combinations are different.
- * In contrast to #svn_fs_props_different, we only perform a quick test and
- * allow for false positives.
+/** Determine if the properties of two path/root combinations have changed.
*
* Set @a *changed_p to #TRUE if the properties at @a path1 under @a root1
* differ from those at @a path2 under @a root2, or set it to #FALSE if they
@@ -1841,15 +1905,19 @@ svn_fs_props_different(svn_boolean_t *di
* both roots must be in the same filesystem.
* Do any necessary temporary allocation in @a pool.
*
- * @note The behavior is implementation dependent in that the false
- * positives reported may differ from release to release and backend to
- * backend. There is also no guarantee that there will be false positives
- * at all.
- *
- * @note Prior to Subversion 1.9, this function would return false negatives
- * as well for FSFS: If @a root1 and @a root2 were both transaction roots
- * and the proplists of both paths had been changed in their respective
- * transactions, @a changed_p would be set to #FALSE.
+ * @note For the purposes of preserving accurate history, certain bits of
+ * code (such as the repository dump code) need to care about the distinction
+ * between situations when the properties are "different" and "have changed
+ * across two points in history". We have a pair of functions that can
+ * answer both of these questions, svn_fs_props_different() and
+ * svn_fs_props_changed(). See issue 4598 for more details.
+ *
+ * @note This function can currently return false negatives for FSFS:
+ * If @a root1 and @a root2 were both transaction roots and the proplists
+ * of both paths had been changed in their respective transactions,
+ * @a changed_p would be set to #FALSE.
+ *
+ * @see svn_fs_props_different
*/
svn_error_t *
svn_fs_props_changed(svn_boolean_t *changed_p,
@@ -2069,7 +2137,8 @@ svn_fs_dir_entries(apr_hash_t **entries_
* #svn_fs_dir_entries for @a root and determine an optimized ordering
* in which data access would most likely be efficient. Set @a *ordered_p
* to a newly allocated APR array of pointers to these #svn_fs_dirent_t
- * structures. Allocate the array (but not its contents) in @a pool.
+ * structures. Allocate the array (but not its contents) in @a result_pool
+ * and use @a scratch_pool for temporaries.
*
* @since New in 1.9.
*/
@@ -2077,7 +2146,8 @@ svn_error_t *
svn_fs_dir_optimal_order(apr_array_header_t **ordered_p,
svn_fs_root_t *root,
apr_hash_t *entries,
- apr_pool_t *pool);
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
/** Create a new directory named @a path in @a root. The new directory has
* no entries, and no properties. @a root must be the root of a transaction,
@@ -2367,13 +2437,23 @@ svn_fs_apply_text(svn_stream_t **content
apr_pool_t *pool);
-/** Check if the contents of two root/path combos have changed.
+/** Check if the contents of two root/path combos are different.
*
* Set @a *different_p to #TRUE if the file contents at @a path1 under
* @a root1 differ from those at @a path2 under @a root2, or set it to
* #FALSE if they are the same. Both paths must exist under their
* respective roots, and both roots must be in the same filesystem.
- * Do any necessary temporary allocation in @a pool.
+ * Do any necessary temporary allocation in @a scratch_pool.
+ *
+ * @note For the purposes of preserving accurate history, certain bits of
+ * code (such as the repository dump code) need to care about the distinction
+ * between situations when two files have "different" content and when the
+ * contents of a given file "have changed" across two points in its history.
+ * We have a pair of functions that can answer both of these questions,
+ * svn_fs_contents_different() and svn_fs_contents_changed(). See issue
+ * 4598 for more details.
+ *
+ * @see svn_fs_contents_changed
*
* @since New in 1.9.
*/
@@ -2383,11 +2463,9 @@ svn_fs_contents_different(svn_boolean_t
const char *path1,
svn_fs_root_t *root2,
const char *path2,
- apr_pool_t *pool);
+ apr_pool_t *scratch_pool);
-/** Check if the contents of two root/path combos have changed. In
- * contrast to #svn_fs_contents_different, we only perform a quick test
- * and allow for false positives.
+/** Check if the contents of two root/path combos have changed.
*
* Set @a *changed_p to #TRUE if the file contents at @a path1 under
* @a root1 differ from those at @a path2 under @a root2, or set it to
@@ -2395,10 +2473,18 @@ svn_fs_contents_different(svn_boolean_t
* respective roots, and both roots must be in the same filesystem.
* Do any necessary temporary allocation in @a pool.
*
- * @note The behavior is implementation dependent in that the false
- * positives reported may differ from release to release and backend to
- * backend. There is also no guarantee that there will be false positives
- * at all.
+ * @note svn_fs_contents_changed() was not designed to be used to detect
+ * when two files have different content, but really to detect when the
+ * contents of a given file have changed across two points in its history.
+ * For the purposes of preserving accurate history, certain bits of code
+ * (such as the repository dump code) need to care about this distinction.
+ * For example, it's not an error from the FS API point of view to call
+ * svn_fs_apply_textdelta() and explicitly set a file's contents to exactly
+ * what they were before the edit was made. We have a pair of functions
+ * that can answer both of these questions, svn_fs_contents_changed() and
+ * svn_fs_contents_different(). See issue 4598 for more details.
+ *
+ * @see svn_fs_contents_different
*/
svn_error_t *
svn_fs_contents_changed(svn_boolean_t *changed_p,
@@ -2434,7 +2520,7 @@ svn_fs_youngest_rev(svn_revnum_t *younge
* Set @a *supports_version to the version number of the minimum Subversion GA
* release that can read and write @a fs.
*
- * @see svn_repos_info_format()
+ * @see svn_repos_info_format
*
* @since New in 1.9.
*/
@@ -2472,12 +2558,71 @@ svn_fs_deltify_revision(svn_fs_t *fs,
svn_revnum_t revision,
apr_pool_t *pool);
+/** Make sure that all completed revision property changes to the filesystem
+ * underlying @a fs are actually visible through @a fs. Use @a scratch_pool
+ * for temporary allocations.
+ *
+ * This is an explicit synchronization barrier for revprop changes made
+ * through different #svn_fs_t for the same underlying filesystem. Any
+ * revprop change through @a fs acts as an implicit barrier, i.e. that
+ * object will see all completed revprop changes up to an including its own.
+ * Only #svn_fs_revision_prop2 and #svn_fs_revision_proplist2 have an option
+ * to not synchronize with on-disk data and potentially return outdated data
+ * as old as the last barrier.
+ *
+ * The intended use of this is implementing efficient queries in upper layers
+ * where the result only needs to include all changes up the the start of
+ * that query but does not need to pick up on changes while the query is
+ * running:
+ *
+ * @code
+ SVN_ERR(svn_fs_deltify_revision(fs, pool);
+ for (i = 0; i < n; i++)
+ SVN_ERR(svn_fs_revision_prop2(&authors[i], fs, revs[i], "svn:author",
+ FALSE, pool, pool)); @endcode
+ *
+ * @see svn_fs_revision_prop2, svn_fs_revision_proplist2
+ *
+ * @since New in 1.10.
+ */
+svn_error_t *
+svn_fs_refresh_revision_props(svn_fs_t *fs,
+ apr_pool_t *scratch_pool);
/** Set @a *value_p to the value of the property named @a propname on
* revision @a rev in the filesystem @a fs. If @a rev has no property by
- * that name, set @a *value_p to zero. Allocate the result in @a pool.
+ * that name, set @a *value_p to zero.
+ *
+ * If @a refresh is set, this call acts as a read barrier and is guaranteed
+ * to return the latest value. Otherwise, it may return data as old as the
+ * last synchronization point but can be much faster to access - in
+ * particular for packed repositories.
+ *
+ * Allocate the result in @a result_pool and use @a scratch_pool for
+ * temporary allocations.
+ *
+ * @see svn_fs_refresh_revision_props
+ *
+ * @since New in 1.10.
*/
svn_error_t *
+svn_fs_revision_prop2(svn_string_t **value_p,
+ svn_fs_t *fs,
+ svn_revnum_t rev,
+ const char *propname,
+ svn_boolean_t refresh,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
+
+/** Like #svn_fs_revision_prop2 but using @a pool for @a scratch_pool as
+ * well as @a result_pool and setting @a refresh to #TRUE.
+ *
+ * @see svn_fs_refresh_revision_props
+ *
+ * @deprecated For backward compatibility with 1.9.
+ */
+SVN_DEPRECATED
+svn_error_t *
svn_fs_revision_prop(svn_string_t **value_p,
svn_fs_t *fs,
svn_revnum_t rev,
@@ -2488,15 +2633,41 @@ svn_fs_revision_prop(svn_string_t **valu
/** Set @a *table_p to the entire property list of revision @a rev in
* filesystem @a fs, as an APR hash table allocated in @a pool. The table
* maps <tt>char *</tt> property names to #svn_string_t * values; the names
- * and values are allocated in @a pool.
+ * and values are allocated in @a result_pool. Use @a scratch_pool for
+ * temporary allocations.
+ *
+ * If @a refresh is set, this call acts as a read barrier and is guaranteed
+ * to return the latest value. Otherwise, it may return data as old as the
+ * last synchronization point but can be much faster to access - in
+ * particular for packed repositories.
+ *
+ * @see svn_fs_refresh_revision_props
+ *
+ * @since New in 1.10.
+ *
+ */
+svn_error_t *
+svn_fs_revision_proplist2(apr_hash_t **table_p,
+ svn_fs_t *fs,
+ svn_revnum_t rev,
+ svn_boolean_t refresh,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
+
+/** Like svn_fs_revision_proplist2 but using @a pool for @a scratch_pool as
+ * well as @a result_pool and setting @a refresh to #TRUE.
+ *
+ * @see svn_fs_refresh_revision_props
+ *
+ * @deprecated For backward compatibility with 1.9.
*/
+SVN_DEPRECATED
svn_error_t *
svn_fs_revision_proplist(apr_hash_t **table_p,
svn_fs_t *fs,
svn_revnum_t rev,
apr_pool_t *pool);
-
/** Change a revision's property's value, or add/delete a property.
*
* - @a fs is a filesystem, and @a rev is the revision in that filesystem
@@ -2615,14 +2786,14 @@ svn_fs_set_uuid(svn_fs_t *fs,
/** Lock information for use with svn_fs_lock_many() [and svn_repos_fs_...].
*
- * @see svn_fs_lock_target_create().
+ * @see svn_fs_lock_target_create
*
* @since New in 1.9.
*/
typedef struct svn_fs_lock_target_t svn_fs_lock_target_t;
-/** Create an <tt>svn_fs_lock_target_t</tt> allocated in @a pool. @a
- * token can be NULL and @a current_rev can be SVN_INVALID_REVNUM.
+/** Create an <tt>svn_fs_lock_target_t</tt> allocated in @a result_pool.
+ * @a token can be NULL and @a current_rev can be SVN_INVALID_REVNUM.
*
* The @a token is not duplicated and so must have a lifetime at least as
* long as the returned target object.
@@ -2631,7 +2802,7 @@ typedef struct svn_fs_lock_target_t svn_
*/
svn_fs_lock_target_t *svn_fs_lock_target_create(const char *token,
svn_revnum_t current_rev,
- apr_pool_t *pool);
+ apr_pool_t *result_pool);
/** Update @a target changing the token to @a token, @a token can be NULL.
*
@@ -2651,7 +2822,12 @@ void svn_fs_lock_target_set_token(svn_fs
* returns, use svn_error_dup() to preserve the error.
*
* If the callback returns an error no further callbacks will be made
- * and svn_fs_lock_many/svn_fs_unlock_many will return an error.
+ * and svn_fs_lock_many/svn_fs_unlock_many will return an error. The
+ * caller cannot rely on any particular order for these callbacks and
+ * cannot rely on interrupting the underlying operation by returning
+ * an error. Returning an error stops the callbacks but any locks
+ * that would have been reported in further callbacks may, or may not,
+ * still be created/released.
*
* @since New in 1.9.
*/
@@ -2659,7 +2835,7 @@ typedef svn_error_t *(*svn_fs_lock_callb
const char *path,
const svn_lock_t *lock,
svn_error_t *fs_err,
- apr_pool_t *pool);
+ apr_pool_t *scratch_pool);
/** Lock the paths in @a lock_targets in @a fs.
*
@@ -2699,13 +2875,17 @@ typedef svn_error_t *(*svn_fs_lock_callb
*
* For each path in @a lock_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.
*
* The lock and path passed to @a lock_callback will be allocated in
* @a result_pool. Use @a scratch_pool for temporary allocations.
*
* @note At this time, only files can be locked.
*
+ * @note This function is not atomic. If it returns an error, some targets
+ * may remain unlocked while others may have been locked.
+ *
* @note You probably don't want to use this directly. Take a look at
* svn_repos_fs_lock_many() instead.
*
@@ -2773,11 +2953,15 @@ svn_fs_generate_lock_token(const char **
* For each path in @a unlock_targets @a lock_callback will be invoked
* passing @a lock_baton and error that apply to path. The @a 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.
*
* The path passed to 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.
+ *
* @note You probably don't want to use this directly. Take a look at
* svn_repos_fs_unlock_many() instead.
*
@@ -2906,7 +3090,13 @@ typedef enum svn_fs_pack_notify_action_t
/** packing of the shard revprops has completed
@since New in 1.7. */
- svn_fs_pack_notify_end_revprop
+ svn_fs_pack_notify_end_revprop,
+
+ /** pack has been a no-op for this repository. The next / future packable
+ shard will be given. If the shard is -1, then the repository does not
+ support packing at all.
+ @since New in 1.10. */
+ svn_fs_pack_notify_noop
} svn_fs_pack_notify_action_t;
@@ -3045,7 +3235,7 @@ typedef struct svn_fs_fsfs_info_t {
* @note Zero (0) if (but not iff) the format does not support packing. */
svn_revnum_t min_unpacked_rev;
- /* TRUE if logical addressing is enabled for this repository.
+ /** TRUE if logical addressing is enabled for this repository.
* FALSE if repository uses physical addressing. */
svn_boolean_t log_addressing;
/* ### TODO: information about fsfs.conf? rep-cache.db? write locks? */
@@ -3080,10 +3270,10 @@ typedef struct svn_fs_fsx_info_t {
} svn_fs_fsx_info_t;
-/** @see svn_fs_info()
+/** @see svn_fs_info
* @since New in 1.9. */
typedef struct svn_fs_info_placeholder_t {
- /** @see svn_fs_type() */
+ /** @see svn_fs_type */
const char *fs_type;
/* Do not add new fields here, to maintain compatibility with the first
@@ -3093,10 +3283,11 @@ typedef struct svn_fs_info_placeholder_t
/**
* Set @a *fs_info to a struct describing @a fs. The type of the
* struct depends on the backend: for #SVN_FS_TYPE_FSFS, the struct will be
- * of type #svn_fs_fsfs_info_t; otherwise, the struct is guaranteed to be
+ * of type #svn_fs_fsfs_info_t; for #SVN_FS_TYPE_FSX, it will be of type
+ * #svn_fs_fsx_info_t; otherwise, the struct is guaranteed to be
* (compatible with) #svn_fs_info_placeholder_t.
*
- * @see #svn_fs_fsfs_info_t
+ * @see #svn_fs_fsfs_info_t, #svn_fs_fsx_info_t
*
* @since New in 1.9.
*/
@@ -3107,10 +3298,11 @@ svn_fs_info(const svn_fs_info_placeholde
apr_pool_t *scratch_pool);
/**
- * Return a duplicate of @a info, allocated in @a pool. The returned struct
- * will be of the same type as the passed-in struct, which itself must have
- * been returned from svn_fs_info() or svn_fs_info_dup(). No part of the new
- * structure will be shared with @a info (except static string constants).
+ * Return a duplicate of @a info, allocated in @a result_pool. The returned
+ * struct will be of the same type as the passed-in struct, which itself
+ * must have been returned from svn_fs_info() or svn_fs_info_dup(). No part
+ * of the new structure will be shared with @a info (except static string
+ * constants). Use @a scratch_pool for temporary allocations.
*
* @see #svn_fs_info_placeholder_t, #svn_fs_fsfs_info_t
*
Modified: subversion/branches/ra-git/subversion/include/svn_hash.h
URL: http://svn.apache.org/viewvc/subversion/branches/ra-git/subversion/include/svn_hash.h?rev=1717223&r1=1717222&r2=1717223&view=diff
==============================================================================
--- subversion/branches/ra-git/subversion/include/svn_hash.h (original)
+++ subversion/branches/ra-git/subversion/include/svn_hash.h Mon Nov 30 10:24:16 2015
@@ -252,14 +252,14 @@ svn_hash_from_cstring_keys(apr_hash_t **
void *
svn_hash__gets(apr_hash_t *ht, const char *key);
+#define svn_hash_gets(ht, key) \
+ svn_hash__gets(ht, key)
+#else
/** Shortcut for apr_hash_get() with a const char * key.
*
* @since New in 1.8.
*/
#define svn_hash_gets(ht, key) \
- svn_hash__gets(ht, key)
-#else
-#define svn_hash_gets(ht, key) \
apr_hash_get(ht, key, APR_HASH_KEY_STRING)
#endif
@@ -267,14 +267,14 @@ svn_hash__gets(apr_hash_t *ht, const cha
void
svn_hash__sets(apr_hash_t *ht, const char *key, const void *value);
+#define svn_hash_sets(ht, key, val) \
+ svn_hash__sets(ht, key, val)
+#else
/** Shortcut for apr_hash_set() with a const char * key.
*
* @since New in 1.8.
*/
#define svn_hash_sets(ht, key, val) \
- svn_hash__sets(ht, key, val)
-#else
-#define svn_hash_sets(ht, key, val) \
apr_hash_set(ht, key, APR_HASH_KEY_STRING, val)
#endif