| /** |
| * @copyright |
| * ==================================================================== |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| * ==================================================================== |
| * @endcopyright |
| * |
| * @file svn_ra.h |
| * @brief Repository Access |
| */ |
| |
| #ifndef SVN_RA_H |
| #define SVN_RA_H |
| |
| #include <apr.h> |
| #include <apr_pools.h> |
| #include <apr_hash.h> |
| #include <apr_tables.h> |
| #include <apr_time.h> |
| #include <apr_file_io.h> /* for apr_file_t */ |
| |
| #include "svn_types.h" |
| #include "svn_string.h" |
| #include "svn_delta.h" |
| #include "svn_auth.h" |
| #include "svn_mergeinfo.h" |
| |
| #ifdef __cplusplus |
| extern "C" { |
| #endif /* __cplusplus */ |
| |
| |
| |
| /* Misc. declarations */ |
| |
| /** |
| * Get libsvn_ra version information. |
| * |
| * @since New in 1.1. |
| */ |
| const svn_version_t * |
| svn_ra_version(void); |
| |
| |
| /** This is a function type which allows the RA layer to fetch working |
| * copy (WC) properties. |
| * |
| * The @a baton is provided along with the function pointer and should |
| * be passed back in. This will be the @a callback_baton or the |
| * @a close_baton as appropriate. |
| * |
| * @a path is relative to the "root" of the session, defined by the |
| * @a repos_URL passed to svn_ra_open5() vtable call. |
| * |
| * @a name is the name of the property to fetch. If the property is present, |
| * then it is returned in @a value. Otherwise, @a *value is set to @c NULL. |
| */ |
| typedef svn_error_t *(*svn_ra_get_wc_prop_func_t)(void *baton, |
| const char *path, |
| const char *name, |
| const svn_string_t **value, |
| apr_pool_t *pool); |
| |
| /** This is a function type which allows the RA layer to store new |
| * working copy properties during update-like operations. See the |
| * comments for @c svn_ra_get_wc_prop_func_t for @a baton, @a path, and |
| * @a name. The @a value is the value that will be stored for the property; |
| * a NULL @a value means the property will be deleted. |
| */ |
| typedef svn_error_t *(*svn_ra_set_wc_prop_func_t)(void *baton, |
| const char *path, |
| const char *name, |
| const svn_string_t *value, |
| apr_pool_t *pool); |
| |
| /** This is a function type which allows the RA layer to store new |
| * working copy properties as part of a commit. See the comments for |
| * @c svn_ra_get_wc_prop_func_t for @a baton, @a path, and @a name. |
| * The @a value is the value that will be stored for the property; a |
| * @c NULL @a value means the property will be deleted. |
| * |
| * Note that this might not actually store the new property before |
| * returning, but instead schedule it to be changed as part of |
| * post-commit processing (in which case a successful commit means the |
| * properties got written). Thus, during the commit, it is possible |
| * to invoke this function to set a new value for a wc prop, then read |
| * the wc prop back from the working copy and get the *old* value. |
| * Callers beware. |
| */ |
| typedef svn_error_t *(*svn_ra_push_wc_prop_func_t)(void *baton, |
| const char *path, |
| const char *name, |
| const svn_string_t *value, |
| apr_pool_t *pool); |
| |
| /** This is a function type which allows the RA layer to invalidate |
| * (i.e., remove) wcprops recursively. See the documentation for |
| * @c svn_ra_get_wc_prop_func_t for @a baton, @a path, and @a name. |
| * |
| * Unlike @c svn_ra_push_wc_prop_func_t, this has immediate effect. If |
| * it returns success, the wcprops have been removed. |
| */ |
| typedef svn_error_t *(*svn_ra_invalidate_wc_props_func_t)(void *baton, |
| const char *path, |
| const char *name, |
| apr_pool_t *pool); |
| |
| /** This is a function type which allows the RA layer to fetch the |
| * cached pristine file contents whose checksum is @a checksum, if |
| * any. @a *contents will be a read stream containing those contents |
| * if they are found; NULL otherwise. |
| * |
| * @since New in 1.8. |
| */ |
| typedef svn_error_t * |
| (*svn_ra_get_wc_contents_func_t)(void *baton, |
| svn_stream_t **contents, |
| const svn_checksum_t *checksum, |
| apr_pool_t *pool); |
| |
| |
| /** A function type for retrieving the youngest revision from a repos. |
| * @deprecated Provided for backward compatibility with the 1.8 API. |
| */ |
| /* ### It seems this type was never used by the API, since 1.0.0. */ |
| typedef svn_error_t *(*svn_ra_get_latest_revnum_func_t)( |
| void *session_baton, |
| svn_revnum_t *latest_revnum); |
| |
| /** A function type which allows the RA layer to ask about any |
| * customizations to the client name string. This is primarily used |
| * by HTTP-based RA layers wishing to extend the string reported to |
| * Apache/mod_dav_svn via the User-agent HTTP header. |
| * |
| * @since New in 1.5. |
| */ |
| typedef svn_error_t *(*svn_ra_get_client_string_func_t)(void *baton, |
| const char **name, |
| apr_pool_t *pool); |
| |
| |
| |
| /** |
| * A callback function type for use in @c get_file_revs. |
| * @a baton is provided by the caller, @a path is the pathname of the file |
| * in revision @a rev and @a rev_props are the revision properties. |
| * If @a delta_handler and @a delta_baton are non-NULL, they may be set to a |
| * handler/baton which will be called with the delta between the previous |
| * revision and this one after the return of this callback. They may be |
| * left as NULL/NULL. |
| * @a prop_diffs is an array of svn_prop_t elements indicating the property |
| * delta for this and the previous revision. |
| * @a pool may be used for temporary allocations, but you can't rely |
| * on objects allocated to live outside of this particular call and the |
| * immediately following calls to @a *delta_handler, if any. |
| * |
| * @since New in 1.1. |
| */ |
| typedef svn_error_t *(*svn_ra_file_rev_handler_t)( |
| void *baton, |
| const char *path, |
| svn_revnum_t rev, |
| apr_hash_t *rev_props, |
| svn_txdelta_window_handler_t *delta_handler, |
| void **delta_baton, |
| apr_array_header_t *prop_diffs, |
| apr_pool_t *pool); |
| |
| /** |
| * Callback function type for locking and unlocking actions. |
| * |
| * @since New in 1.2. |
| * |
| * @a do_lock is TRUE when locking @a path, and FALSE |
| * otherwise. |
| * |
| * @a lock is a lock for @a path or NULL if @a do_lock is FALSE or @a ra_err is |
| * non-NULL. |
| * |
| * @a ra_err is NULL unless the ra layer encounters a locking related |
| * error which it passes back for notification purposes. The caller |
| * is responsible for clearing @a ra_err after the callback is run. |
| * |
| * @a baton is a closure object; it should be provided by the |
| * implementation, and passed by the caller. @a pool may be used for |
| * temporary allocation. |
| */ |
| typedef svn_error_t *(*svn_ra_lock_callback_t)(void *baton, |
| const char *path, |
| svn_boolean_t do_lock, |
| const svn_lock_t *lock, |
| svn_error_t *ra_err, |
| apr_pool_t *pool); |
| |
| /** |
| * Callback function type for progress notification. |
| * |
| * @a progress is the number of bytes already transferred, @a total is |
| * the total number of bytes to transfer or -1 if it's not known, @a |
| * baton is the callback baton. |
| * |
| * @since New in 1.3. |
| */ |
| typedef void (*svn_ra_progress_notify_func_t)(apr_off_t progress, |
| apr_off_t total, |
| void *baton, |
| apr_pool_t *pool); |
| |
| /** |
| * Callback function type for replay_range actions. |
| * |
| * This callback function should provide replay_range with an editor which |
| * will be driven with the received replay reports from the master repository. |
| * |
| * @a revision is the target revision number of the received replay report. |
| * |
| * @a *editor and @a *edit_baton should provided by the callback implementation. |
| * |
| * @a replay_baton is the baton as originally passed to replay_range. |
| * |
| * @a revprops contains key/value pairs for each revision properties for this |
| * revision. |
| * |
| * @since New in 1.5. |
| */ |
| typedef svn_error_t *(*svn_ra_replay_revstart_callback_t)( |
| svn_revnum_t revision, |
| void *replay_baton, |
| const svn_delta_editor_t **editor, |
| void **edit_baton, |
| apr_hash_t *rev_props, |
| apr_pool_t *pool); |
| |
| /** |
| * Callback function type for replay_range actions. |
| * |
| * This callback function should close the editor. |
| * |
| * @a revision is the target revision number of the received replay report. |
| * |
| * @a editor and @a edit_baton are the values provided by the REVSTART callback. |
| * |
| * @a replay_baton is the baton as originally passed to replay_range. |
| * |
| * @a revprops contains key/value pairs for each revision properties for this |
| * revision. |
| * |
| * @since New in 1.5. |
| */ |
| typedef svn_error_t *(*svn_ra_replay_revfinish_callback_t)( |
| svn_revnum_t revision, |
| void *replay_baton, |
| const svn_delta_editor_t *editor, |
| void *edit_baton, |
| apr_hash_t *rev_props, |
| apr_pool_t *pool); |
| |
| |
| /** |
| * Callback function that checks if an ra_svn tunnel called |
| * @a tunnel_name is handled by the callbacks or the default |
| * implementation. |
| * |
| * @a tunnel_baton is the baton as originally passed to ra_open. |
| * |
| * @since New in 1.9. |
| */ |
| typedef svn_boolean_t (*svn_ra_check_tunnel_func_t)( |
| void *tunnel_baton, const char *tunnel_name); |
| |
| /** |
| * Callback function for closing a tunnel in ra_svn. |
| * |
| * This function will be called when the pool that owns the tunnel |
| * connection is cleared or destroyed. |
| * |
| * @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. |
| * |
| * @since New in 1.9. |
| */ |
| typedef void (*svn_ra_close_tunnel_func_t)( |
| void *close_baton, void *tunnel_baton); |
| |
| /** |
| * Callback function for opening a tunnel in ra_svn. |
| * |
| * Given the @a tunnel_name, tunnel @a user and server @a hostname and |
| * @a port, open a tunnel to the server and return its file handles, |
| * which are owned by @a pool, in @a request and @a response. |
| * |
| * @a request and @a response represent the standard input and output, |
| * respectively, of the process on the other end of the tunnel. |
| * |
| * If @a *close_func is set it will be called with @a close_baton when |
| * the tunnel is closed. |
| * |
| * The optional @a cancel_func callback can be invoked as usual to allow |
| * the user to preempt potentially lengthy operations. |
| * |
| * @a tunnel_baton is the baton as set in the callbacks. |
| * |
| * @since New in 1.9. |
| */ |
| typedef svn_error_t *(*svn_ra_open_tunnel_func_t)( |
| svn_stream_t **request, svn_stream_t **response, |
| svn_ra_close_tunnel_func_t *close_func, void **close_baton, |
| void *tunnel_baton, |
| const char *tunnel_name, const char *user, |
| const char *hostname, int port, |
| svn_cancel_func_t cancel_func, void *cancel_baton, |
| apr_pool_t *pool); |
| |
| |
| /** |
| * The update Reporter. |
| * |
| * A vtable structure which allows a working copy to describe a subset |
| * (or possibly all) of its working-copy to an RA layer, for the |
| * purposes of an update, switch, status, or diff operation. |
| * |
| * Paths for report calls are relative to the target (not the anchor) |
| * of the operation. Report calls must be made in depth-first order: |
| * parents before children, all children of a parent before any |
| * siblings of the parent. The first report call must be a set_path |
| * with a @a path argument of "" and a valid revision. (If the target |
| * of the operation is locally deleted or missing, use the anchor's |
| * revision.) If the target of the operation is deleted or switched |
| * relative to the anchor, follow up the initial set_path call with a |
| * link_path or delete_path call with a @a path argument of "" to |
| * indicate that. In no other case may there be two report |
| * descriptions for the same path. If the target of the operation is |
| * a locally added file or directory (which previously did not exist), |
| * it may be reported as having revision 0 or as having the parent |
| * directory's revision. |
| * |
| * @since New in 1.5. |
| */ |
| typedef struct svn_ra_reporter3_t |
| { |
| /** Describe a working copy @a path as being at a particular |
| * @a revision and having depth @a depth. |
| * |
| * @a revision may be SVN_INVALID_REVNUM if (for example) @a path |
| * represents a locally-added path with no revision number, or @a |
| * depth is @c svn_depth_exclude. |
| * |
| * @a path may not be underneath a path on which set_path() was |
| * previously called with @c svn_depth_exclude in this report. |
| * |
| * If @a start_empty is set and @a path is a directory, the |
| * implementor should assume the directory has no entries or props. |
| * |
| * This will *override* any previous set_path() calls made on parent |
| * paths. @a path is relative to the URL specified in svn_ra_open5(). |
| * |
| * If @a lock_token is non-NULL, it is the lock token for @a path in the WC. |
| * |
| * All temporary allocations are done in @a pool. |
| */ |
| svn_error_t *(*set_path)(void *report_baton, |
| const char *path, |
| svn_revnum_t revision, |
| svn_depth_t depth, |
| svn_boolean_t start_empty, |
| const char *lock_token, |
| apr_pool_t *pool); |
| |
| /** Describing a working copy @a path as missing. |
| * |
| * @a path may not be underneath a path on which set_path() was |
| * previously called with @c svn_depth_exclude in this report. |
| * |
| * All temporary allocations are done in @a pool. |
| */ |
| svn_error_t *(*delete_path)(void *report_baton, |
| const char *path, |
| apr_pool_t *pool); |
| |
| /** Like set_path(), but differs in that @a path in the working copy |
| * (relative to the root of the report driver) isn't a reflection of |
| * @a path in the repository (relative to the URL specified when |
| * opening the RA layer), but is instead a reflection of a different |
| * repository @a url at @a revision, and has depth @a depth. |
| * |
| * @a path may not be underneath a path on which set_path() was |
| * previously called with @c svn_depth_exclude in this report. |
| * |
| * If @a start_empty is set and @a path is a directory, |
| * the implementor should assume the directory has no entries or props. |
| * |
| * If @a lock_token is non-NULL, it is the lock token for @a path in the WC. |
| * |
| * All temporary allocations are done in @a pool. |
| */ |
| svn_error_t *(*link_path)(void *report_baton, |
| const char *path, |
| const char *url, |
| svn_revnum_t revision, |
| svn_depth_t depth, |
| svn_boolean_t start_empty, |
| const char *lock_token, |
| apr_pool_t *pool); |
| |
| /** WC calls this when the state report is finished; any directories |
| * or files not explicitly `set' are assumed to be at the |
| * baseline revision originally passed into do_update(). No other |
| * reporting functions, including abort_report, should be called after |
| * calling this function. |
| */ |
| svn_error_t *(*finish_report)(void *report_baton, |
| apr_pool_t *pool); |
| |
| /** If an error occurs during a report, this routine should cause the |
| * filesystem transaction to be aborted & cleaned up. No other reporting |
| * functions should be called after calling this function. |
| */ |
| svn_error_t *(*abort_report)(void *report_baton, |
| apr_pool_t *pool); |
| |
| } svn_ra_reporter3_t; |
| |
| /** |
| * Similar to @c svn_ra_reporter3_t, but without support for depths. |
| * |
| * @deprecated Provided for backward compatibility with the 1.4 API. |
| */ |
| typedef struct svn_ra_reporter2_t |
| { |
| /** Similar to the corresponding field in @c svn_ra_reporter3_t, but |
| * with @a depth always set to @c svn_depth_infinity. */ |
| svn_error_t *(*set_path)(void *report_baton, |
| const char *path, |
| svn_revnum_t revision, |
| svn_boolean_t start_empty, |
| const char *lock_token, |
| apr_pool_t *pool); |
| |
| /** Same as the corresponding field in @c svn_ra_reporter3_t. */ |
| svn_error_t *(*delete_path)(void *report_baton, |
| const char *path, |
| apr_pool_t *pool); |
| |
| /** Similar to the corresponding field in @c svn_ra_reporter3_t, but |
| * with @a depth always set to @c svn_depth_infinity. */ |
| svn_error_t *(*link_path)(void *report_baton, |
| const char *path, |
| const char *url, |
| svn_revnum_t revision, |
| svn_boolean_t start_empty, |
| const char *lock_token, |
| apr_pool_t *pool); |
| |
| /** Same as the corresponding field in @c svn_ra_reporter3_t. */ |
| svn_error_t *(*finish_report)(void *report_baton, |
| apr_pool_t *pool); |
| |
| /** Same as the corresponding field in @c svn_ra_reporter3_t. */ |
| svn_error_t *(*abort_report)(void *report_baton, |
| apr_pool_t *pool); |
| |
| } svn_ra_reporter2_t; |
| |
| /** |
| * Similar to @c svn_ra_reporter2_t, but without support for lock tokens. |
| * |
| * @deprecated Provided for backward compatibility with the 1.1 API. |
| */ |
| typedef struct svn_ra_reporter_t |
| { |
| /** Similar to the corresponding field in @c svn_ra_reporter2_t, but |
| * with @a lock_token always set to NULL. */ |
| svn_error_t *(*set_path)(void *report_baton, |
| const char *path, |
| svn_revnum_t revision, |
| svn_boolean_t start_empty, |
| apr_pool_t *pool); |
| |
| /** Same as the corresponding field in @c svn_ra_reporter2_t. */ |
| svn_error_t *(*delete_path)(void *report_baton, |
| const char *path, |
| apr_pool_t *pool); |
| |
| /** Similar to the corresponding field in @c svn_ra_reporter2_t, but |
| * with @a lock_token always set to NULL. */ |
| svn_error_t *(*link_path)(void *report_baton, |
| const char *path, |
| const char *url, |
| svn_revnum_t revision, |
| svn_boolean_t start_empty, |
| apr_pool_t *pool); |
| |
| /** Same as the corresponding field in @c svn_ra_reporter2_t. */ |
| svn_error_t *(*finish_report)(void *report_baton, |
| apr_pool_t *pool); |
| |
| /** Same as the corresponding field in @c svn_ra_reporter2_t. */ |
| svn_error_t *(*abort_report)(void *report_baton, |
| apr_pool_t *pool); |
| } svn_ra_reporter_t; |
| |
| |
| /** A collection of callbacks implemented by libsvn_client which allows |
| * an RA layer to "pull" information from the client application, or |
| * possibly store information. libsvn_client passes this vtable to |
| * svn_ra_open5(). |
| * |
| * Each routine takes a @a callback_baton originally provided with the |
| * vtable. |
| * |
| * Clients must use svn_ra_create_callbacks() to allocate and |
| * initialize this structure. |
| * |
| * @since New in 1.3. |
| */ |
| typedef struct svn_ra_callbacks2_t |
| { |
| /** Open a unique temporary file for writing in the working copy. |
| * This file will be automatically deleted when @a fp is closed. |
| * |
| * @deprecated This callback should no longer be used by RA layers. |
| */ |
| svn_error_t *(*open_tmp_file)(apr_file_t **fp, |
| void *callback_baton, |
| apr_pool_t *pool); |
| |
| /** An authentication baton, created by the application, which is |
| * capable of retrieving all known types of credentials. |
| */ |
| svn_auth_baton_t *auth_baton; |
| |
| /*** The following items may be set to NULL to disallow the RA layer |
| to perform the respective operations of the vtable functions. |
| Perhaps WC props are not defined or are in invalid for this |
| session, or perhaps the commit operation this RA session will |
| perform is a server-side only one that shouldn't do post-commit |
| processing on a working copy path. ***/ |
| |
| /** Fetch working copy properties. |
| * |
| * @note we might have a problem if the RA layer ever wants a property |
| * that corresponds to a different revision of the file than |
| * what is in the WC. we'll cross that bridge one day... |
| */ |
| svn_ra_get_wc_prop_func_t get_wc_prop; |
| |
| /** Immediately set new values for working copy properties. */ |
| svn_ra_set_wc_prop_func_t set_wc_prop; |
| |
| /** Schedule new values for working copy properties. */ |
| svn_ra_push_wc_prop_func_t push_wc_prop; |
| |
| /** Invalidate working copy properties. */ |
| svn_ra_invalidate_wc_props_func_t invalidate_wc_props; |
| |
| /** Notification callback used for progress information. |
| * May be NULL if not used. |
| */ |
| svn_ra_progress_notify_func_t progress_func; |
| |
| /** Notification callback baton, used with progress_func. */ |
| void *progress_baton; |
| |
| /** Cancellation function |
| * |
| * As its baton, the general callback baton is used |
| * |
| * @since New in 1.5 |
| */ |
| svn_cancel_func_t cancel_func; |
| |
| /** Client string customization callback function |
| * @since New in 1.5 |
| */ |
| svn_ra_get_client_string_func_t get_client_string; |
| |
| /** Working copy file content fetching function. |
| * @since New in 1.8. |
| */ |
| svn_ra_get_wc_contents_func_t get_wc_contents; |
| |
| /** Check-tunnel callback |
| * |
| * If not @c NULL, and open_tunnel_func is also not @c NULL, this |
| * callback will be invoked to check if open_tunnel_func should be |
| * used to create a specific tunnel, or if the default tunnel |
| * implementation (either built-in or configured in the client |
| * configuration file) should be used instead. |
| * @since New in 1.9. |
| */ |
| svn_ra_check_tunnel_func_t check_tunnel_func; |
| |
| /** Open-tunnel callback |
| * |
| * If not @c NULL, this callback will be invoked to create a tunnel |
| * for a ra_svn connection that needs one, overriding any tunnel |
| * definitions in the client config file. This callback is used only |
| * for ra_svn and ignored by the other RA modules. |
| * @since New in 1.9. |
| */ |
| svn_ra_open_tunnel_func_t open_tunnel_func; |
| |
| /** A baton used with open_tunnel_func and close_tunnel_func. |
| * @since New in 1.9. |
| */ |
| void *tunnel_baton; |
| } svn_ra_callbacks2_t; |
| |
| /** Similar to svn_ra_callbacks2_t, except that the progress |
| * notification function and baton is missing. |
| * |
| * @deprecated Provided for backward compatibility with the 1.2 API. |
| */ |
| typedef struct svn_ra_callbacks_t |
| { |
| svn_error_t *(*open_tmp_file)(apr_file_t **fp, |
| void *callback_baton, |
| apr_pool_t *pool); |
| |
| svn_auth_baton_t *auth_baton; |
| |
| svn_ra_get_wc_prop_func_t get_wc_prop; |
| |
| svn_ra_set_wc_prop_func_t set_wc_prop; |
| |
| svn_ra_push_wc_prop_func_t push_wc_prop; |
| |
| svn_ra_invalidate_wc_props_func_t invalidate_wc_props; |
| |
| } svn_ra_callbacks_t; |
| |
| |
| |
| /*----------------------------------------------------------------------*/ |
| |
| /* Public Interfaces. */ |
| |
| /** |
| * Initialize the RA library. This function must be called before using |
| * any function in this header, except the deprecated APIs based on |
| * @c svn_ra_plugin_t, or svn_ra_version(). This function must not be called |
| * simultaneously in multiple threads. @a pool must live |
| * longer than any open RA sessions. |
| * |
| * @since New in 1.2. |
| */ |
| svn_error_t * |
| svn_ra_initialize(apr_pool_t *pool); |
| |
| /** Initialize a callback structure. |
| * Set @a *callbacks to a ra callbacks object, allocated in @a pool. |
| * |
| * Clients must use this function to allocate and initialize @c |
| * svn_ra_callbacks2_t structures. |
| * |
| * @since New in 1.3. |
| */ |
| svn_error_t * |
| svn_ra_create_callbacks(svn_ra_callbacks2_t **callbacks, |
| apr_pool_t *pool); |
| |
| /** |
| * A repository access session. This object is used to perform requests |
| * to a repository, identified by a URL. |
| * |
| * @since New in 1.2. |
| */ |
| typedef struct svn_ra_session_t svn_ra_session_t; |
| |
| /** |
| * Open a repository access session to the repository at @a repos_URL, |
| * or inform the caller regarding a correct URL by which to access |
| * that repository. |
| * |
| * If @a repos_URL can be used successfully to access the repository, |
| * set @a *session_p to an opaque object representing a repository |
| * session for the repository and (if @a corrected_url is non-NULL) |
| * set @a *corrected_url to NULL. If there's a better URL that the |
| * caller should try and @a corrected_url is non-NULL, set |
| * @a *session_p to NULL and @a *corrected_url to the corrected URL. If |
| * there's a better URL that the caller should try, and @a |
| * corrected_url is NULL, return an #SVN_ERR_RA_SESSION_URL_MISMATCH |
| * error. Allocate all returned items in @a pool. |
| * |
| * The @a repos_URL need not point to the root of the repository: subject |
| * to authorization, it may point to any path within the repository, even |
| * a path at which no node exists in the repository. The session will |
| * remember this URL as its "session URL" (also called "session root URL"), |
| * until changed by svn_ra_reparent(). Many RA functions take or return |
| * paths that are relative to the session URL. |
| * |
| * If a @a corrected_url is returned, it will point to the same path |
| * within the new repository root URL that @a repos_URL pointed to within |
| * the old repository root URL. |
| * |
| * If @a redirect_url is not NULL and a @corrected_url is returned, then |
| * @a redirect_url contains a non-canonicalized version of @a corrected_url, |
| * as communicated in the network protocol used by the RA provider. |
| * THe @a redirect_url should be used for to detect redirection loops. |
| * Canonicalization may change the protocol-level URL in a way that |
| * makes detection of redirect loops impossible in some cases since URLs which |
| * are different at the protocol layer could map to the same canonicalized URL. |
| * |
| * Return @c SVN_ERR_RA_UUID_MISMATCH if @a uuid is non-NULL and not equal |
| * to the UUID of the repository at @c repos_URL. |
| * |
| * @a callbacks/@a callback_baton is a table of callbacks provided by the |
| * client; see @c svn_ra_callbacks2_t. |
| * |
| * @a config is a hash mapping <tt>const char *</tt> keys to |
| * @c svn_config_t * values. For example, the @c svn_config_t for the |
| * "~/.subversion/config" file is under the key "config". @a config may |
| * be NULL. This function examines some config settings under the |
| * "servers" key (if present) before loading the required RA module, and |
| * the RA module may also examine any config settings. |
| * |
| * All RA requests require a session; they will continue to |
| * use @a pool for memory allocation. |
| * |
| * @see svn_client_open_ra_session(). |
| * |
| * @since New in 1.14. |
| */ |
| svn_error_t * |
| svn_ra_open5(svn_ra_session_t **session_p, |
| const char **corrected_url, |
| const char **redirect_url, |
| const char *repos_URL, |
| const char *uuid, |
| const svn_ra_callbacks2_t *callbacks, |
| void *callback_baton, |
| apr_hash_t *config, |
| apr_pool_t *pool); |
| |
| /** Similar to svn_ra_open5(), but with @a redirect_url always passed |
| * as @c NULL. |
| * |
| * @since New in 1.7. |
| * @deprecated Provided for backward compatibility with the 1.13 API. |
| */ |
| SVN_DEPRECATED |
| svn_error_t * |
| svn_ra_open4(svn_ra_session_t **session_p, |
| const char **corrected_url, |
| const char *repos_URL, |
| const char *uuid, |
| const svn_ra_callbacks2_t *callbacks, |
| void *callback_baton, |
| apr_hash_t *config, |
| apr_pool_t *pool); |
| |
| /** Similar to svn_ra_open4(), but with @a corrected_url always passed |
| * as @c NULL. |
| * |
| * @since New in 1.5. |
| * @deprecated Provided for backward compatibility with the 1.6 API. |
| */ |
| SVN_DEPRECATED |
| svn_error_t * |
| svn_ra_open3(svn_ra_session_t **session_p, |
| const char *repos_URL, |
| const char *uuid, |
| const svn_ra_callbacks2_t *callbacks, |
| void *callback_baton, |
| apr_hash_t *config, |
| apr_pool_t *pool); |
| |
| /** |
| * Similar to svn_ra_open3(), but with @a uuid set to @c NULL. |
| * |
| * @since New in 1.3. |
| * @deprecated Provided for backward compatibility with the 1.4 API. |
| */ |
| SVN_DEPRECATED |
| svn_error_t * |
| svn_ra_open2(svn_ra_session_t **session_p, |
| const char *repos_URL, |
| const svn_ra_callbacks2_t *callbacks, |
| void *callback_baton, |
| apr_hash_t *config, |
| apr_pool_t *pool); |
| |
| /** |
| * @see svn_ra_open2(). |
| * @since New in 1.2. |
| * @deprecated Provided for backward compatibility with the 1.2 API. |
| */ |
| SVN_DEPRECATED |
| svn_error_t * |
| svn_ra_open(svn_ra_session_t **session_p, |
| const char *repos_URL, |
| const svn_ra_callbacks_t *callbacks, |
| void *callback_baton, |
| apr_hash_t *config, |
| apr_pool_t *pool); |
| |
| /** Change the root URL of an open @a ra_session to point to a new path in the |
| * same repository. @a url is the new root URL. Use @a pool for |
| * temporary allocations. |
| * |
| * If @a url has a different repository root than the current session |
| * URL, return @c SVN_ERR_RA_ILLEGAL_URL. |
| * |
| * @since New in 1.4. |
| */ |
| svn_error_t * |
| svn_ra_reparent(svn_ra_session_t *ra_session, |
| const char *url, |
| apr_pool_t *pool); |
| |
| /** Set @a *url to the session URL -- the URL to which @a ra_session was |
| * opened or most recently reparented. |
| * |
| * @since New in 1.5. |
| */ |
| svn_error_t * |
| svn_ra_get_session_url(svn_ra_session_t *ra_session, |
| const char **url, |
| apr_pool_t *pool); |
| |
| |
| /** Convert @a url into a path relative to the session URL of @a ra_session, |
| * setting @a *rel_path to that value. If @a url is not |
| * a child of the session URL, return @c SVN_ERR_RA_ILLEGAL_URL. |
| * |
| * The returned path is uri decoded to allow using it with the ra or other |
| * apis as a valid relpath. |
| * |
| * @since New in 1.7. |
| */ |
| svn_error_t * |
| svn_ra_get_path_relative_to_session(svn_ra_session_t *ra_session, |
| const char **rel_path, |
| const char *url, |
| apr_pool_t *pool); |
| |
| /** Convert @a url into a path relative to the repository root URL of |
| * the repository with which @a ra_session is associated, setting @a |
| * *rel_path to that value. If @a url is not a child of repository |
| * root URL, return @c SVN_ERR_RA_ILLEGAL_URL. |
| * |
| * The returned path is uri decoded to allow using it with the ra or other |
| * apis as a valid relpath. |
| * |
| * @since New in 1.7. |
| */ |
| svn_error_t * |
| svn_ra_get_path_relative_to_root(svn_ra_session_t *ra_session, |
| const char **rel_path, |
| const char *url, |
| apr_pool_t *pool); |
| |
| /** |
| * Get the latest revision number from the repository of @a session. |
| * |
| * Use @a pool for memory allocation. |
| * |
| * @since New in 1.2. |
| */ |
| svn_error_t * |
| svn_ra_get_latest_revnum(svn_ra_session_t *session, |
| svn_revnum_t *latest_revnum, |
| apr_pool_t *pool); |
| |
| /** |
| * Get the latest revision number at time @a tm in the repository of |
| * @a session. |
| * |
| * Use @a pool for memory allocation. |
| * |
| * @since New in 1.2. |
| */ |
| svn_error_t * |
| svn_ra_get_dated_revision(svn_ra_session_t *session, |
| svn_revnum_t *revision, |
| apr_time_t tm, |
| apr_pool_t *pool); |
| |
| /** |
| * Set the property @a name to @a value on revision @a rev in the repository |
| * of @a session. |
| * |
| * If @a value is @c NULL, delete the named revision property. |
| * |
| * If the server advertises the #SVN_RA_CAPABILITY_ATOMIC_REVPROPS capability |
| * and @a old_value_p is not @c NULL, then changing the property will fail with |
| * an error chain that contains #SVN_ERR_FS_PROP_BASEVALUE_MISMATCH if the |
| * present value of the property is not @a *old_value_p. (This is an atomic |
| * test-and-set). |
| * @a *old_value_p may be @c NULL, representing that the property must be not |
| * already set. |
| * |
| * If the capability is not advertised, then @a old_value_p MUST be @c NULL. |
| * |
| * Please note that properties attached to revisions are @em unversioned. |
| * |
| * Use @a pool for memory allocation. |
| * |
| * @see svn_fs_change_rev_prop2(), svn_error_find_cause(). |
| * |
| * @since New in 1.7. |
| */ |
| svn_error_t * |
| svn_ra_change_rev_prop2(svn_ra_session_t *session, |
| svn_revnum_t rev, |
| const char *name, |
| const svn_string_t *const *old_value_p, |
| const svn_string_t *value, |
| apr_pool_t *pool); |
| |
| /** |
| * Similar to svn_ra_change_rev_prop2(), but with @a old_value_p set |
| * to @c NULL. |
| * |
| * @since New in 1.2. |
| * @deprecated Provided for backward compatibility with the 1.6 API. |
| */ |
| SVN_DEPRECATED |
| svn_error_t * |
| svn_ra_change_rev_prop(svn_ra_session_t *session, |
| svn_revnum_t rev, |
| const char *name, |
| const svn_string_t *value, |
| apr_pool_t *pool); |
| |
| /** |
| * Set @a *props to the list of unversioned properties attached to revision |
| * @a rev in the repository of @a session. The hash maps |
| * (<tt>const char *</tt>) names to (<tt>@c svn_string_t *</tt>) values. |
| * |
| * Use @a pool for memory allocation. |
| * |
| * @since New in 1.2. |
| */ |
| svn_error_t * |
| svn_ra_rev_proplist(svn_ra_session_t *session, |
| svn_revnum_t rev, |
| apr_hash_t **props, |
| apr_pool_t *pool); |
| |
| /** |
| * Set @a *value to the value of unversioned property @a name attached to |
| * revision @a rev in the repository of @a session. If @a rev has no |
| * property by that name, set @a *value to @c NULL. |
| * |
| * Use @a pool for memory allocation. |
| * |
| * @since New in 1.2. |
| */ |
| svn_error_t * |
| svn_ra_rev_prop(svn_ra_session_t *session, |
| svn_revnum_t rev, |
| const char *name, |
| svn_string_t **value, |
| apr_pool_t *pool); |
| |
| /** |
| * Set @a *editor and @a *edit_baton to an editor for committing |
| * changes to the repository of @a session, setting the revision |
| * properties from @a revprop_table. The revisions being committed |
| * against are passed to the editor functions, starting with the rev |
| * argument to @c open_root. The path root of the commit is the @a |
| * session's URL. |
| * |
| * @a revprop_table is a hash mapping <tt>const char *</tt> property |
| * names to @c svn_string_t property values. The commit log message |
| * is expected to be in the @c SVN_PROP_REVISION_LOG element. @a |
| * revprop_table can not contain either of @c SVN_PROP_REVISION_DATE |
| * or @c SVN_PROP_REVISION_AUTHOR. |
| * |
| * Before @c close_edit returns, but after the commit has succeeded, |
| * it will invoke @a commit_callback (if non-NULL) with filled-in |
| * #svn_commit_info_t *, @a commit_baton, and @a pool or some subpool |
| * thereof as arguments. If @a commit_callback returns an error, that error |
| * will be returned from @c * close_edit, otherwise @c close_edit will return |
| * successfully (unless it encountered an error before invoking |
| * @a commit_callback). |
| * |
| * The callback will not be called if the commit was a no-op |
| * (i.e. nothing was committed); |
| * |
| * @a lock_tokens, if non-NULL, is a hash mapping <tt>const char |
| * *</tt> paths (relative to the URL of @a session) to <tt> |
| * const char *</tt> lock tokens. The server checks that the |
| * correct token is provided for each committed, locked path. @a lock_tokens |
| * must live during the whole commit operation. |
| * |
| * If @a keep_locks is @c TRUE, then do not release locks on |
| * committed objects. Else, automatically release such locks. |
| * |
| * The caller may not perform any RA operations using @a session before |
| * finishing the edit. |
| * |
| * Use @a pool for memory allocation. |
| * |
| * @since New in 1.5. |
| * |
| * @note Like most commit editors, the returned editor requires that the |
| * @c copyfrom_path parameter passed to its @c add_file and @c add_directory |
| * methods is a URL, not a relative path. |
| */ |
| svn_error_t * |
| svn_ra_get_commit_editor3(svn_ra_session_t *session, |
| const svn_delta_editor_t **editor, |
| void **edit_baton, |
| apr_hash_t *revprop_table, |
| svn_commit_callback2_t commit_callback, |
| void *commit_baton, |
| apr_hash_t *lock_tokens, |
| svn_boolean_t keep_locks, |
| apr_pool_t *pool); |
| |
| /** |
| * Same as svn_ra_get_commit_editor3(), but with @c revprop_table set |
| * to a hash containing the @c SVN_PROP_REVISION_LOG property set |
| * to the value of @a log_msg. |
| * |
| * @since New in 1.4. |
| * |
| * @deprecated Provided for backward compatibility with the 1.4 API. |
| */ |
| SVN_DEPRECATED |
| svn_error_t * |
| svn_ra_get_commit_editor2(svn_ra_session_t *session, |
| const svn_delta_editor_t **editor, |
| void **edit_baton, |
| const char *log_msg, |
| svn_commit_callback2_t commit_callback, |
| void *commit_baton, |
| apr_hash_t *lock_tokens, |
| svn_boolean_t keep_locks, |
| apr_pool_t *pool); |
| |
| /** |
| * Same as svn_ra_get_commit_editor2(), but uses @c svn_commit_callback_t. |
| * |
| * @since New in 1.2. |
| * |
| * @deprecated Provided for backward compatibility with the 1.3 API. |
| */ |
| SVN_DEPRECATED |
| svn_error_t * |
| svn_ra_get_commit_editor(svn_ra_session_t *session, |
| const svn_delta_editor_t **editor, |
| void **edit_baton, |
| const char *log_msg, |
| svn_commit_callback_t callback, |
| void *callback_baton, |
| apr_hash_t *lock_tokens, |
| svn_boolean_t keep_locks, |
| apr_pool_t *pool); |
| |
| /** |
| * Fetch the contents and properties of file @a path at @a revision. |
| * @a revision may be SVN_INVALID_REVNUM, indicating that the HEAD |
| * revision should be used. Interpret @a path relative to the URL in |
| * @a session. Use @a pool for all allocations. |
| * |
| * If @a revision is @c SVN_INVALID_REVNUM and @a fetched_rev is not |
| * @c NULL, then set @a *fetched_rev to the actual revision that was |
| * retrieved. |
| * |
| * If @a stream is non @c NULL, push the contents of the file at @a |
| * stream, do not call svn_stream_close() when finished. |
| * |
| * If @a props is non @c NULL, set @a *props to contain the properties of |
| * the file. 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 stream handlers for @a stream may not perform any RA |
| * operations using @a session. |
| * |
| * @since New in 1.2. |
| */ |
| svn_error_t * |
| svn_ra_get_file(svn_ra_session_t *session, |
| const char *path, |
| svn_revnum_t revision, |
| svn_stream_t *stream, |
| svn_revnum_t *fetched_rev, |
| apr_hash_t **props, |
| apr_pool_t *pool); |
| |
| /** |
| * If @a dirents is non @c NULL, set @a *dirents to contain all the entries |
| * of directory @a path at @a revision. The keys of @a dirents will be |
| * entry names (<tt>const char *</tt>), and the values dirents |
| * (<tt>@c svn_dirent_t *</tt>). Use @a pool for all allocations. |
| * |
| * @a dirent_fields controls which portions of the <tt>@c svn_dirent_t</tt> |
| * objects are filled in. To have them completely filled in just pass |
| * @c SVN_DIRENT_ALL, otherwise pass the bitwise OR of all the @c SVN_DIRENT_ |
| * fields you would like to have returned to you. |
| * |
| * @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 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, 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. |
| */ |
| svn_error_t * |
| svn_ra_get_dir2(svn_ra_session_t *session, |
| apr_hash_t **dirents, |
| svn_revnum_t *fetched_rev, |
| apr_hash_t **props, |
| const char *path, |
| svn_revnum_t revision, |
| apr_uint32_t dirent_fields, |
| apr_pool_t *pool); |
| |
| /** |
| * Similar to @c svn_ra_get_dir2, but with @c SVN_DIRENT_ALL for the |
| * @a dirent_fields parameter. |
| * |
| * @since New in 1.2. |
| * |
| * @deprecated Provided for compatibility with the 1.3 API. |
| */ |
| SVN_DEPRECATED |
| svn_error_t * |
| svn_ra_get_dir(svn_ra_session_t *session, |
| const char *path, |
| svn_revnum_t revision, |
| apr_hash_t **dirents, |
| svn_revnum_t *fetched_rev, |
| apr_hash_t **props, |
| apr_pool_t *pool); |
| |
| /** |
| * Callback type to be used with svn_ra_list(). It will be invoked for |
| * every directory entry found. |
| * |
| * The full path of the entry is given in @a rel_path and @a dirent contains |
| * various additional information. Only the elements of @a dirent specified |
| * by the @a dirent_fields argument to svn_ra_list() will be valid. |
| * |
| * @a baton is the user-provided receiver baton. @a scratch_pool may be |
| * used for temporary allocations. |
| * |
| * @since New in 1.10. |
| */ |
| typedef svn_error_t *(* svn_ra_dirent_receiver_t)(const char *rel_path, |
| svn_dirent_t *dirent, |
| void *baton, |
| apr_pool_t *scratch_pool); |
| |
| /** |
| * Efficiently list everything within a sub-tree. Specify a glob pattern |
| * to search for specific files and folders. |
| * |
| * In @a session, walk the sub-tree starting at @a path at @a revision down |
| * to the given @a depth. For each directory entry found, @a receiver will |
| * be called with @a receiver_baton. The starting @a path will be reported |
| * as well. Because retrieving elements of a #svn_dirent_t can be |
| * expensive, you need to select them individually via flags set in |
| * @a dirent_fields. |
| * |
| * @a patterns is an optional array of <tt>const char *</tt>. If it is |
| * not @c NULL, only those directory entries will be reported whose last |
| * path segment matches at least one of these patterns. This feature uses |
| * apr_fnmatch() for glob matching and requiring '.' to matched by dots |
| * in the path. |
| * |
| * @a path must point to a directory and @a depth must be at least |
| * #svn_depth_empty. |
| * |
| * If the server doesn't support the 'list' command, return |
| * #SVN_ERR_UNSUPPORTED_FEATURE in preference to any other error that |
| * might otherwise be returned. |
| * |
| * Use @a scratch_pool for temporary memory allocation. |
| * |
| * @since New in 1.10. |
| */ |
| svn_error_t * |
| svn_ra_list(svn_ra_session_t *session, |
| const char *path, |
| svn_revnum_t revision, |
| const apr_array_header_t *patterns, |
| svn_depth_t depth, |
| apr_uint32_t dirent_fields, |
| svn_ra_dirent_receiver_t receiver, |
| void *receiver_baton, |
| apr_pool_t *scratch_pool); |
| |
| /** |
| * Set @a *catalog to a mergeinfo catalog for the paths in @a paths. |
| * If no mergeinfo is available, set @a *catalog to @c NULL. The |
| * requested mergeinfo hashes are for @a paths (which are relative to |
| * @a session's URL) in @a revision. If one of the paths does not exist |
| * in that revision, return SVN_ERR_FS_NOT_FOUND. |
| * |
| * @a inherit indicates whether explicit, explicit or inherited, or |
| * only inherited mergeinfo for @a paths is retrieved. |
| * |
| * If @a include_descendants is TRUE, then additionally return the |
| * mergeinfo for any descendant of any element of @a paths which has |
| * the @c SVN_PROP_MERGEINFO property explicitly set on it. (Note |
| * that inheritance is only taken into account for the elements in @a |
| * paths; descendants of the elements in @a paths which get their |
| * mergeinfo via inheritance are not included in @a *catalog.) |
| * |
| * Allocate the returned values in @a pool. |
| * |
| * If @a revision is @c SVN_INVALID_REVNUM, it defaults to youngest. |
| * |
| * If the server doesn't support retrieval of mergeinfo (which can |
| * happen even for file:// URLs, if the repository itself hasn't been |
| * upgraded), return @c SVN_ERR_UNSUPPORTED_FEATURE in preference to |
| * any other error that might otherwise be returned. |
| * |
| * @since New in 1.5. |
| */ |
| svn_error_t * |
| svn_ra_get_mergeinfo(svn_ra_session_t *session, |
| svn_mergeinfo_catalog_t *catalog, |
| const apr_array_header_t *paths, |
| svn_revnum_t revision, |
| svn_mergeinfo_inheritance_t inherit, |
| svn_boolean_t include_descendants, |
| apr_pool_t *pool); |
| |
| /** |
| * Ask the RA layer to update a working copy to a new revision. |
| * |
| * The client initially provides an @a update_editor/@a update_baton to the |
| * RA layer; this editor contains knowledge of where the change will |
| * begin in the working copy (when @c open_root() is called). |
| * |
| * In return, the client receives a @a reporter/@a report_baton. The |
| * client then describes its working copy by making calls into the |
| * @a reporter. |
| * |
| * When finished, the client calls @a reporter->finish_report(). The |
| * RA layer then does a complete drive of @a update_editor, ending with |
| * @a update_editor->close_edit(), to update the working copy. |
| * |
| * @a update_target is an optional single path component to restrict |
| * the scope of the update to just that entry (in the directory |
| * represented by the @a session's URL). If @a update_target is the |
| * empty string, the entire directory is updated. |
| * |
| * Update the target only as deeply as @a depth indicates. |
| * |
| * If @a send_copyfrom_args is TRUE, then ask the server to send |
| * copyfrom arguments to add_file() and add_directory() when possible. |
| * (Note: this means that any subsequent txdeltas coming from the |
| * server are presumed to apply against the copied file!) |
| * |
| * Use @a ignore_ancestry to control whether or not items being |
| * updated will be checked for relatedness first. Unrelated items |
| * are typically transmitted to the editor as a deletion of one thing |
| * and the addition of another, but if this flag is @c TRUE, |
| * unrelated items will be diffed as if they were related. |
| * |
| * The working copy will be updated to @a revision_to_update_to, or the |
| * "latest" revision if this arg is invalid. |
| * |
| * The caller may not perform any RA operations using @a session before |
| * finishing the report, and may not perform any RA operations using |
| * @a session from within the editing operations of @a update_editor. |
| * |
| * Allocate @a *reporter and @a *report_baton in @a result_pool. Use |
| * @a scratch_pool for temporary allocations. |
| * |
| * @note The reporter provided by this function does NOT supply copy- |
| * from information to the diff editor callbacks. |
| * |
| * @note In order to prevent pre-1.5 servers from doing more work than |
| * needed, and sending too much data back, a pre-1.5 'recurse' |
| * directive may be sent to the server, based on @a depth. |
| * |
| * @note Pre Subversion 1.8 svnserve based servers never ignore ancestry. |
| * |
| * @note This differs from calling svn_ra_do_switch3() with the current |
| * URL of the target node. Update changes only the revision numbers, |
| * leaving any switched subtrees still switched, whereas switch changes |
| * every node in the tree to a child of the same URL. |
| * |
| * @since New in 1.8. |
| */ |
| svn_error_t * |
| svn_ra_do_update3(svn_ra_session_t *session, |
| const svn_ra_reporter3_t **reporter, |
| void **report_baton, |
| svn_revnum_t revision_to_update_to, |
| const char *update_target, |
| svn_depth_t depth, |
| svn_boolean_t send_copyfrom_args, |
| svn_boolean_t ignore_ancestry, |
| const svn_delta_editor_t *update_editor, |
| void *update_baton, |
| apr_pool_t *result_pool, |
| apr_pool_t *scratch_pool); |
| |
| /** |
| * Similar to svn_ra_do_update3(), but always ignoring ancestry. |
| * |
| * @since New in 1.5. |
| * @deprecated Provided for compatibility with the 1.4 API. |
| */ |
| SVN_DEPRECATED |
| svn_error_t * |
| svn_ra_do_update2(svn_ra_session_t *session, |
| const svn_ra_reporter3_t **reporter, |
| void **report_baton, |
| svn_revnum_t revision_to_update_to, |
| const char *update_target, |
| svn_depth_t depth, |
| svn_boolean_t send_copyfrom_args, |
| const svn_delta_editor_t *update_editor, |
| void *update_baton, |
| apr_pool_t *pool); |
| |
| /** |
| * Similar to svn_ra_do_update2(), but taking @c svn_ra_reporter2_t |
| * instead of @c svn_ra_reporter3_t; if @a recurse is true, pass @c |
| * svn_depth_infinity for @a depth, else pass @c svn_depth_files; and |
| * with @a send_copyfrom_args always false. |
| * |
| * @deprecated Provided for compatibility with the 1.4 API. |
| */ |
| SVN_DEPRECATED |
| svn_error_t * |
| svn_ra_do_update(svn_ra_session_t *session, |
| const svn_ra_reporter2_t **reporter, |
| void **report_baton, |
| svn_revnum_t revision_to_update_to, |
| const char *update_target, |
| svn_boolean_t recurse, |
| const svn_delta_editor_t *update_editor, |
| void *update_baton, |
| apr_pool_t *pool); |
| |
| |
| /** |
| * Ask the RA layer to switch a working copy to a new revision and URL. |
| * |
| * This is similar to svn_ra_do_update3(), but also changes the URL of |
| * every node in the target tree to a child of the @a switch_url. In |
| * contrast, update changes only the revision numbers, leaving any |
| * switched subtrees still switched. |
| * |
| * @note Pre Subversion 1.8 svnserve based servers always ignore ancestry |
| * and never send copyfrom data. |
| * |
| * @since New in 1.8. |
| */ |
| svn_error_t * |
| svn_ra_do_switch3(svn_ra_session_t *session, |
| const svn_ra_reporter3_t **reporter, |
| void **report_baton, |
| svn_revnum_t revision_to_switch_to, |
| const char *switch_target, |
| svn_depth_t depth, |
| const char *switch_url, |
| svn_boolean_t send_copyfrom_args, |
| svn_boolean_t ignore_ancestry, |
| const svn_delta_editor_t *switch_editor, |
| void *switch_baton, |
| apr_pool_t *result_pool, |
| apr_pool_t *scratch_pool); |
| |
| /** |
| * Similar to svn_ra_do_switch3(), but always ignoring ancestry and |
| * never sending copyfrom_args. |
| * |
| * @since New in 1.5. |
| * @deprecated Provided for compatibility with the 1.7 API. |
| */ |
| SVN_DEPRECATED |
| svn_error_t * |
| svn_ra_do_switch2(svn_ra_session_t *session, |
| const svn_ra_reporter3_t **reporter, |
| void **report_baton, |
| svn_revnum_t revision_to_switch_to, |
| const char *switch_target, |
| svn_depth_t depth, |
| const char *switch_url, |
| const svn_delta_editor_t *switch_editor, |
| void *switch_baton, |
| apr_pool_t *pool); |
| |
| /** |
| * Similar to svn_ra_do_switch2(), but taking @c svn_ra_reporter2_t |
| * instead of @c svn_ra_reporter3_t, and therefore only able to report |
| * @c svn_depth_infinity for depths. The switch itself is performed |
| * according to @a recurse: if TRUE, then use @c svn_depth_infinity |
| * for @a depth, else use @c svn_depth_files. |
| * |
| * @deprecated Provided for compatibility with the 1.4 API. |
| */ |
| SVN_DEPRECATED |
| svn_error_t * |
| svn_ra_do_switch(svn_ra_session_t *session, |
| const svn_ra_reporter2_t **reporter, |
| void **report_baton, |
| svn_revnum_t revision_to_switch_to, |
| const char *switch_target, |
| svn_boolean_t recurse, |
| const char *switch_url, |
| const svn_delta_editor_t *switch_editor, |
| void *switch_baton, |
| apr_pool_t *pool); |
| |
| /** |
| * Ask the RA layer to describe the status of a working copy with respect |
| * to @a revision of the repository (or HEAD, if @a revision is invalid). |
| * |
| * The client initially provides a @a status_editor/@a status_baton to the RA |
| * layer; this editor contains knowledge of where the change will |
| * begin in the working copy (when open_root() is called). |
| * |
| * In return, the client receives a @a reporter/@a report_baton. The |
| * client then describes its working copy by making calls into the |
| * @a reporter. |
| * |
| * When finished, the client calls @a reporter->finish_report(). The RA |
| * layer then does a complete drive of @a status_editor, ending with |
| * close_edit(), to report, essentially, what would be modified in |
| * the working copy were the client to call do_update(). |
| * @a status_target is an optional single path component will restrict |
| * the scope of the status report to an entry in the directory |
| * represented by the @a session's URL, or empty if the entire directory |
| * is meant to be examined. |
| * |
| * Get status as deeply as @a depth indicates. If @a depth is |
| * #svn_depth_unknown, get the status down to the ambient depth of the |
| * working copy. If @a depth is deeper than the working copy, include changes |
| * that would be needed to populate the working copy to that depth. |
| * |
| * The caller may not perform any RA operations using @a session |
| * before finishing the report, and may not perform any RA operations |
| * using @a session from within the editing operations of @a status_editor. |
| * |
| * Use @a pool for memory allocation. |
| * |
| * @note The reporter provided by this function does NOT supply copy- |
| * from information to the diff editor callbacks. |
| * |
| * @note In order to prevent pre-1.5 servers from doing more work than |
| * needed, and sending too much data back, a pre-1.5 'recurse' |
| * directive may be sent to the server, based on @a depth. |
| * |
| * @since New in 1.5. |
| */ |
| svn_error_t * |
| svn_ra_do_status2(svn_ra_session_t *session, |
| const svn_ra_reporter3_t **reporter, |
| void **report_baton, |
| const char *status_target, |
| svn_revnum_t revision, |
| svn_depth_t depth, |
| const svn_delta_editor_t *status_editor, |
| void *status_baton, |
| apr_pool_t *pool); |
| |
| |
| /** |
| * Similar to svn_ra_do_status2(), but taking @c svn_ra_reporter2_t |
| * instead of @c svn_ra_reporter3_t, and therefore only able to report |
| * @c svn_depth_infinity for depths. The status operation itself is |
| * performed according to @a recurse: if TRUE, then @a depth is |
| * @c svn_depth_infinity, else it is @c svn_depth_immediates. |
| * |
| * @deprecated Provided for compatibility with the 1.4 API. |
| */ |
| SVN_DEPRECATED |
| svn_error_t * |
| svn_ra_do_status(svn_ra_session_t *session, |
| const svn_ra_reporter2_t **reporter, |
| void **report_baton, |
| const char *status_target, |
| svn_revnum_t revision, |
| svn_boolean_t recurse, |
| const svn_delta_editor_t *status_editor, |
| void *status_baton, |
| apr_pool_t *pool); |
| |
| /** |
| * Ask the RA layer to 'diff' a working copy against @a versus_url; |
| * it's another form of svn_ra_do_update2(). |
| * |
| * @note This function cannot be used to diff a single file, only a |
| * working copy directory. See the svn_ra_do_switch3() function |
| * for more details. |
| * |
| * The client initially provides a @a diff_editor/@a diff_baton to the RA |
| * layer; this editor contains knowledge of where the common diff |
| * root is in the working copy (when open_root() is called). |
| * |
| * In return, the client receives a @a reporter/@a report_baton. The |
| * client then describes its working copy by making calls into the |
| * @a reporter. |
| * |
| * When finished, the client calls @a reporter->finish_report(). The |
| * RA layer then does a complete drive of @a diff_editor, ending with |
| * close_edit(), to transmit the diff. |
| * |
| * @a diff_target is an optional single path component will restrict |
| * the scope of the diff to an entry in the directory represented by |
| * the @a session's URL, or empty if the entire directory is meant to be |
| * one of the diff paths. |
| * |
| * The working copy will be diffed against @a versus_url as it exists |
| * in revision @a revision, or as it is in head if @a revision is |
| * @c SVN_INVALID_REVNUM. |
| * |
| * Use @a ignore_ancestry to control whether or not items being |
| * diffed will be checked for relatedness first. Unrelated items |
| * are typically transmitted to the editor as a deletion of one thing |
| * and the addition of another, but if this flag is @c TRUE, |
| * unrelated items will be diffed as if they were related. |
| * |
| * Diff only as deeply as @a depth indicates. |
| * |
| * The caller may not perform any RA operations using @a session before |
| * finishing the report, and may not perform any RA operations using |
| * @a session from within the editing operations of @a diff_editor. |
| * |
| * @a text_deltas instructs the driver of the @a diff_editor to enable |
| * the generation of text deltas. If @a text_deltas is FALSE the window |
| * handler returned by apply_textdelta will be called once with a NULL |
| * @c svn_txdelta_window_t pointer. |
| * |
| * Use @a pool for memory allocation. |
| * |
| * @note The reporter provided by this function does NOT supply copy- |
| * from information to the diff editor callbacks. |
| * |
| * @note In order to prevent pre-1.5 servers from doing more work than |
| * needed, and sending too much data back, a pre-1.5 'recurse' |
| * directive may be sent to the server, based on @a depth. |
| * |
| * @since New in 1.5. |
| */ |
| svn_error_t * |
| svn_ra_do_diff3(svn_ra_session_t *session, |
| const svn_ra_reporter3_t **reporter, |
| void **report_baton, |
| svn_revnum_t revision, |
| const char *diff_target, |
| svn_depth_t depth, |
| svn_boolean_t ignore_ancestry, |
| svn_boolean_t text_deltas, |
| const char *versus_url, |
| const svn_delta_editor_t *diff_editor, |
| void *diff_baton, |
| apr_pool_t *pool); |
| |
| /** |
| * Similar to svn_ra_do_diff3(), but taking @c svn_ra_reporter2_t |
| * instead of @c svn_ra_reporter3_t, and therefore only able to report |
| * @c svn_depth_infinity for depths. Perform the diff according to |
| * @a recurse: if TRUE, then @a depth is @c svn_depth_infinity, else |
| * it is @c svn_depth_files. |
| * |
| * @deprecated Provided for compatibility with the 1.4 API. |
| */ |
| SVN_DEPRECATED |
| svn_error_t * |
| svn_ra_do_diff2(svn_ra_session_t *session, |
| const svn_ra_reporter2_t **reporter, |
| void **report_baton, |
| svn_revnum_t revision, |
| const char *diff_target, |
| svn_boolean_t recurse, |
| svn_boolean_t ignore_ancestry, |
| svn_boolean_t text_deltas, |
| const char *versus_url, |
| const svn_delta_editor_t *diff_editor, |
| void *diff_baton, |
| apr_pool_t *pool); |
| |
| |
| /** |
| * Similar to svn_ra_do_diff2(), but with @a text_deltas set to @c TRUE. |
| * |
| * @deprecated Provided for backward compatibility with the 1.3 API. |
| */ |
| SVN_DEPRECATED |
| svn_error_t * |
| svn_ra_do_diff(svn_ra_session_t *session, |
| const svn_ra_reporter2_t **reporter, |
| void **report_baton, |
| svn_revnum_t revision, |
| const char *diff_target, |
| svn_boolean_t recurse, |
| svn_boolean_t ignore_ancestry, |
| const char *versus_url, |
| const svn_delta_editor_t *diff_editor, |
| void *diff_baton, |
| apr_pool_t *pool); |
| |
| /** |
| * Invoke @a receiver with @a receiver_baton on each log message from |
| * @a start to @a end. @a start may be greater or less than @a end; |
| * this just controls whether the log messages are processed in descending |
| * or ascending revision number order. |
| * |
| * If @a start or @a end is @c SVN_INVALID_REVNUM, it defaults to youngest. |
| * |
| * If @a paths is non-NULL and has one or more elements, then only show |
| * 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 repository root of @a session. |
| * |
| * If @a limit is greater than zero only invoke @a receiver on the first |
| * @a limit logs. |
| * |
| * If @a discover_changed_paths, then each call to @a receiver passes a |
| * <tt>const apr_hash_t *</tt> for the receiver's @a changed_paths argument; |
| * the hash's keys are all the paths committed in that revision, the hash's |
| * values are <tt>const svn_log_changed_path2_t *</tt> for each committed |
| * path. Otherwise, each call to receiver passes NULL for @a changed_paths. |
| * |
| * If @a strict_node_history is set, copy history will not be traversed |
| * (if any exists) when harvesting the revision logs for each path. |
| * |
| * If @a include_merged_revisions is set, log information for revisions |
| * which have been merged to @a targets will also be returned. |
| * |
| * If @a revprops is NULL, retrieve all revision properties; else, retrieve |
| * only the revision properties named by the (const char *) array elements |
| * (i.e. retrieve none if the array is empty). |
| * |
| * If any invocation of @a receiver returns error, return that error |
| * immediately and without wrapping it. |
| * |
| * If @a start or @a end is a non-existent revision, return the error |
| * @c SVN_ERR_FS_NO_SUCH_REVISION, without ever invoking @a receiver. |
| * |
| * See also the documentation for @c svn_log_message_receiver_t. |
| * |
| * The caller may not invoke any RA operations using @a session from |
| * within @a receiver. |
| * |
| * Use @a pool for memory allocation. |
| * |
| * @note If @a paths is NULL or empty, the result depends on the |
| * server. Pre-1.5 servers will send nothing; 1.5 servers will |
| * effectively perform the log operation on the root of the |
| * repository. This behavior may be changed in the future to ensure |
| * consistency across all pedigrees of server. |
| * |
| * @note Pre-1.5 servers do not support custom revprop retrieval; if @a |
| * revprops is NULL or contains a revprop other than svn:author, svn:date, |
| * or svn:log, an @c SVN_ERR_RA_NOT_IMPLEMENTED error is returned. |
| * |
| * @since New in 1.5. |
| */ |
| svn_error_t * |
| svn_ra_get_log2(svn_ra_session_t *session, |
| const apr_array_header_t *paths, |
| svn_revnum_t start, |
| svn_revnum_t end, |
| int limit, |
| svn_boolean_t discover_changed_paths, |
| svn_boolean_t strict_node_history, |
| svn_boolean_t include_merged_revisions, |
| const apr_array_header_t *revprops, |
| svn_log_entry_receiver_t receiver, |
| void *receiver_baton, |
| apr_pool_t *pool); |
| |
| /** |
| * Similar to svn_ra_get_log2(), but uses @c svn_log_message_receiver_t |
| * instead of @c svn_log_entry_receiver_t. Also, @a |
| * include_merged_revisions is set to @c FALSE and @a revprops is |
| * svn:author, svn:date, and svn:log. |
| * |
| * @since New in 1.2. |
| * @deprecated Provided for backward compatibility with the 1.4 API. |
| */ |
| SVN_DEPRECATED |
| svn_error_t * |
| svn_ra_get_log(svn_ra_session_t *session, |
| const apr_array_header_t *paths, |
| svn_revnum_t start, |
| svn_revnum_t end, |
| int limit, |
| svn_boolean_t discover_changed_paths, |
| svn_boolean_t strict_node_history, |
| svn_log_message_receiver_t receiver, |
| void *receiver_baton, |
| apr_pool_t *pool); |
| |
| /** |
| * Set @a *kind to the node kind associated with @a path at @a revision. |
| * If @a path does not exist under @a revision, set @a *kind to |
| * @c svn_node_none. @a path is relative to the @a session's parent URL. |
| * |
| * Use @a pool for memory allocation. |
| * |
| * @since New in 1.2. |
| */ |
| svn_error_t * |
| svn_ra_check_path(svn_ra_session_t *session, |
| const char *path, |
| svn_revnum_t revision, |
| svn_node_kind_t *kind, |
| apr_pool_t *pool); |
| |
| /** |
| * Set @a *dirent to an @c svn_dirent_t associated with @a path at @a |
| * revision. @a path is relative to the @a session's parent's URL. |
| * If @a path does not exist in @a revision, set @a *dirent to NULL. |
| * |
| * Use @a pool for memory allocation. |
| * |
| * @since New in 1.2. |
| */ |
| svn_error_t * |
| svn_ra_stat(svn_ra_session_t *session, |
| const char *path, |
| svn_revnum_t revision, |
| svn_dirent_t **dirent, |
| apr_pool_t *pool); |
| |
| |
| /** |
| * Set @a *uuid to the repository's UUID, allocated in @a pool. |
| * |
| * @since New in 1.5. |
| */ |
| svn_error_t * |
| svn_ra_get_uuid2(svn_ra_session_t *session, |
| const char **uuid, |
| apr_pool_t *pool); |
| |
| /** |
| * Similar to svn_ra_get_uuid2(), but returns the value allocated in |
| * @a session's pool. |
| * |
| * @deprecated Provided for backward compatibility with the 1.4 API. |
| * @since New in 1.2. |
| */ |
| SVN_DEPRECATED |
| svn_error_t * |
| svn_ra_get_uuid(svn_ra_session_t *session, |
| const char **uuid, |
| apr_pool_t *pool); |
| |
| /** |
| * Set @a *url to the repository's root URL, allocated in @a pool. |
| * The value will not include a trailing '/'. The returned URL is |
| * guaranteed to be a prefix of the @a session's URL. |
| * |
| * @since New in 1.5. |
| */ |
| svn_error_t * |
| svn_ra_get_repos_root2(svn_ra_session_t *session, |
| const char **url, |
| apr_pool_t *pool); |
| |
| |
| /** |
| * Similar to svn_ra_get_repos_root2(), but returns the value |
| * allocated in @a session's pool. |
| * |
| * @deprecated Provided for backward compatibility with the 1.4 API. |
| * @since New in 1.2. |
| */ |
| SVN_DEPRECATED |
| svn_error_t * |
| svn_ra_get_repos_root(svn_ra_session_t *session, |
| const char **url, |
| apr_pool_t *pool); |
| |
| /** |
| * Set @a *locations to the locations (at the repository revisions |
| * @a location_revisions) of the file identified by @a path in |
| * @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. |
| * |
| * Use @a pool for all allocations. |
| * |
| * @since New in 1.2. |
| */ |
| svn_error_t * |
| svn_ra_get_locations(svn_ra_session_t *session, |
| apr_hash_t **locations, |
| const char *path, |
| svn_revnum_t peg_revision, |
| const apr_array_header_t *location_revisions, |
| apr_pool_t *pool); |
| |
| |
| /** |
| * Call @a receiver (with @a receiver_baton) for each segment in the |
| * location history of @a path in @a peg_revision, working backwards in |
| * time from @a start_rev to @a end_rev. |
| * |
| * @a end_rev may be @c SVN_INVALID_REVNUM to indicate that you want |
| * to trace the history of the object to its origin. |
| * |
| * @a start_rev may be @c SVN_INVALID_REVNUM to indicate "the HEAD |
| * revision". Otherwise, @a start_rev must be younger than @a end_rev |
| * (unless @a end_rev is @c SVN_INVALID_REVNUM). |
| * |
| * @a peg_revision may be @c SVN_INVALID_REVNUM to indicate "the HEAD |
| * revision", and must evaluate to be at least as young as @a start_rev. |
| * |
| * Use @a pool for all allocations. |
| * |
| * @since New in 1.5. |
| */ |
| svn_error_t * |
| svn_ra_get_location_segments(svn_ra_session_t *session, |
| const char *path, |
| svn_revnum_t peg_revision, |
| svn_revnum_t start_rev, |
| svn_revnum_t end_rev, |
| svn_location_segment_receiver_t receiver, |
| void *receiver_baton, |
| apr_pool_t *pool); |
| |
| /** |
| * Retrieve a subset of the interesting revisions of a file @a path |
| * as seen in revision @a end (see svn_fs_history_prev() for a |
| * definition of "interesting revisions"). Invoke @a handler with |
| * @a handler_baton as its first argument for each such revision. |
| * @a session is an open RA session. Use @a pool for all allocations. |
| * |
| * If there is an interesting revision of the file that is less than or |
| * equal to @a start, the iteration will begin at that revision. |
| * Else, the iteration will begin at the first revision of the file in |
| * the repository, which has to be less than or equal to @a end. Note |
| * that if the function succeeds, @a handler will have been called at |
| * least once. |
| * |
| * In a series of calls to @a handler, the file contents for the first |
| * interesting revision will be provided as a text delta against the |
| * empty file. In the following calls, the delta will be against the |
| * fulltext contents for the previous call. |
| * |
| * If @a include_merged_revisions is TRUE, revisions which are |
| * included as a result of a merge between @a start and @a end will be |
| * included. |
| * |
| * @note This functionality is not available in pre-1.1 servers. If the |
| * server doesn't implement it, an alternative (but much slower) |
| * implementation based on svn_ra_get_log2() is used. |
| * |
| * On subversion 1.8 and newer servers this function has been enabled |
| * 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 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 |
| * the current and the previous call. |
| * |
| * @since New in 1.5. |
| */ |
| svn_error_t * |
| svn_ra_get_file_revs2(svn_ra_session_t *session, |
| const char *path, |
| svn_revnum_t start, |
| svn_revnum_t end, |
| svn_boolean_t include_merged_revisions, |
| svn_file_rev_handler_t handler, |
| void *handler_baton, |
| apr_pool_t *pool); |
| |
| /** |
| * Similar to svn_ra_get_file_revs2(), but with @a include_merged_revisions |
| * set to FALSE. |
| * |
| * @since New in 1.2. |
| * @deprecated Provided for backward compatibility with the 1.4 API. |
| */ |
| SVN_DEPRECATED |
| svn_error_t * |
| svn_ra_get_file_revs(svn_ra_session_t *session, |
| const char *path, |
| svn_revnum_t start, |
| svn_revnum_t end, |
| svn_ra_file_rev_handler_t handler, |
| void *handler_baton, |
| apr_pool_t *pool); |
| |
| /** |
| * Lock each path in @a path_revs, which is a hash whose keys are the |
| * paths to be locked, and whose values are the corresponding base |
| * revisions for each path. The keys are (const char *) and the |
| * revisions are (svn_revnum_t *). |
| * |
| * Note that locking is never anonymous, so any server implementing |
| * this function will have to "pull" a username from the client, if |
| * it hasn't done so already. |
| * |
| * @a comment is optional: it's either an xml-escapable string |
| * which describes the lock, or it is NULL. |
| * |
| * If any path is already locked by a different user, then call @a |
| * lock_func/@a lock_baton with an error. If @a steal_lock is TRUE, |
| * then "steal" the existing lock(s) anyway, even if the RA username |
| * does not match the current lock's owner. Delete any lock on the |
| * path, and unconditionally create a new lock. |
| * |
| * For each path, if its base revision (in @a path_revs) is a valid |
| * revnum, then do an out-of-dateness check. If the revnum is less |
| * than the last-changed-revision of any path (or if a path doesn't |
| * exist in HEAD), call @a lock_func/@a lock_baton with an |
| * SVN_ERR_RA_OUT_OF_DATE error. |
| * |
| * After successfully locking a file, @a lock_func is called with the |
| * @a lock_baton. |
| * |
| * Use @a pool for temporary allocations. |
| * |
| * @since New in 1.2. |
| */ |
| svn_error_t * |
| svn_ra_lock(svn_ra_session_t *session, |
| apr_hash_t *path_revs, |
| const char *comment, |
| svn_boolean_t steal_lock, |
| svn_ra_lock_callback_t lock_func, |
| void *lock_baton, |
| apr_pool_t *pool); |
| |
| /** |
| * Remove the repository lock for each path in @a path_tokens. |
| * @a path_tokens is a hash whose keys are the paths to be locked, and |
| * whose values are the corresponding lock tokens for each path. If |
| * the path has no corresponding lock token, or if @a break_lock is TRUE, |
| * then the corresponding value shall be "". |
| * |
| * Note that unlocking is never anonymous, so any server |
| * implementing this function will have to "pull" a username from |
| * the client, if it hasn't done so already. |
| * |
| * If @a token points to a lock, but the RA username doesn't match the |
| * lock's owner, call @a lock_func/@a lock_baton with an error. If @a |
| * break_lock is TRUE, however, instead allow the lock to be "broken" |
| * by the RA user. |
| * |
| * After successfully unlocking a path, @a lock_func is called with |
| * the @a lock_baton. |
| * |
| * Use @a pool for temporary allocations. |
| * |
| * @since New in 1.2. |
| */ |
| svn_error_t * |
| svn_ra_unlock(svn_ra_session_t *session, |
| apr_hash_t *path_tokens, |
| svn_boolean_t break_lock, |
| svn_ra_lock_callback_t lock_func, |
| void *lock_baton, |
| apr_pool_t *pool); |
| |
| /** |
| * If @a path is locked, set @a *lock to an svn_lock_t which |
| * represents the lock, allocated in @a pool. |
| * |
| * If @a path is not locked or does not exist in HEAD, set @a *lock to NULL. |
| * |
| * @note Before 1.9, this function could return SVN_ERR_FS_NOT_FOUND |
| * when @a path didn't exist in HEAD on specific ra layers. |
| * |
| * @since New in 1.2. |
| */ |
| svn_error_t * |
| svn_ra_get_lock(svn_ra_session_t *session, |
| svn_lock_t **lock, |
| const char *path, |
| apr_pool_t *pool); |
| |
| /** |
| * Set @a *locks to a hashtable which represents all locks on or |
| * below @a path. |
| * |
| * @a depth limits the returned locks to those associated with paths |
| * within the specified depth of @a path, and must be one of the |
| * following values: #svn_depth_empty, #svn_depth_files, |
| * #svn_depth_immediates, or #svn_depth_infinity. |
| * |
| * The hashtable maps (const char *) absolute fs paths to (const |
| * svn_lock_t *) structures. The hashtable -- and all keys and |
| * values -- are allocated in @a pool. |
| * |
| * @note It is not considered an error for @a path to not exist in HEAD. |
| * Such a search will simply return no locks. |
| * |
| * @note This functionality is not available in pre-1.2 servers. If the |
| * server doesn't implement it, an @c SVN_ERR_RA_NOT_IMPLEMENTED error is |
| * returned. |
| * |
| * @since New in 1.7. |
| */ |
| svn_error_t * |
| svn_ra_get_locks2(svn_ra_session_t *session, |
| apr_hash_t **locks, |
| const char *path, |
| svn_depth_t depth, |
| apr_pool_t *pool); |
| |
| /** |
| * Similar to svn_ra_get_locks2(), but with @a depth always passed as |
| * #svn_depth_infinity. |
| * |
| * @since New in 1.2. |
| * @deprecated Provided for backward compatibility with the 1.6 API. |
| */ |
| SVN_DEPRECATED |
| svn_error_t * |
| svn_ra_get_locks(svn_ra_session_t *session, |
| apr_hash_t **locks, |
| const char *path, |
| apr_pool_t *pool); |
| |
| |
| /** |
| * Replay the changes from a range of revisions between @a start_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 |
| * revision will be replayed. |
| * When replaying the revision is finished, callback @a revfinish_func will be |
| * called so the editor can be closed. |
| * |
| * Changes will be limited to those that occur under @a session's URL, and |
| * the server will assume that the client has no knowledge of revisions |
| * prior to @a low_water_mark. These two limiting factors define the portion |
| * of the tree that the server will assume the client already has knowledge of, |
| * and thus any copies of data from outside that part of the tree will be |
| * sent in their entirety, not as simple copies or deltas against a previous |
| * version. |
| * |
| * If @a send_deltas is @c TRUE, the actual text and property changes in |
| * the revision will be sent, otherwise dummy text deltas and NULL property |
| * changes will be sent instead. |
| * |
| * @a pool is used for all allocation. |
| * |
| * @since New in 1.5. |
| */ |
| svn_error_t * |
| svn_ra_replay_range(svn_ra_session_t *session, |
| svn_revnum_t start_revision, |
| svn_revnum_t end_revision, |
| svn_revnum_t low_water_mark, |
| svn_boolean_t send_deltas, |
| svn_ra_replay_revstart_callback_t revstart_func, |
| svn_ra_replay_revfinish_callback_t revfinish_func, |
| void *replay_baton, |
| apr_pool_t *pool); |
| |
| /** |
| * Replay the changes from @a revision through @a editor and @a edit_baton. |
| * |
| * Changes will be limited to those that occur under @a session's URL, and |
| * the server will assume that the client has no knowledge of revisions |
| * prior to @a low_water_mark. These two limiting factors define the portion |
| * of the tree that the server will assume the client already has knowledge of, |
| * and thus any copies of data from outside that part of the tree will be |
| * sent in their entirety, not as simple copies or deltas against a previous |
| * version. |
| * |
| * If @a send_deltas is @c TRUE, the actual text and property changes in |
| * the revision will be sent, otherwise dummy text deltas and null property |
| * changes will be sent instead. |
| * |
| * @a pool is used for all allocation. |
| * |
| * @since New in 1.4. |
| */ |
| svn_error_t * |
| svn_ra_replay(svn_ra_session_t *session, |
| svn_revnum_t revision, |
| svn_revnum_t low_water_mark, |
| svn_boolean_t send_deltas, |
| const svn_delta_editor_t *editor, |
| void *edit_baton, |
| apr_pool_t *pool); |
| |
| /** |
| * Given @a path at revision @a peg_revision, set @a *revision_deleted to the |
| * revision @a path was first deleted, within the inclusive revision range |
| * defined by @a peg_revision and @a end_revision. @a path is relative |
| * to the URL in @a session. |
| * |
| * If @a path does not exist at @a peg_revision or was not deleted within |
| * the specified range, then set @a *revision_deleted to @c SVN_INVALID_REVNUM. |
| * If @a peg_revision or @a end_revision are invalid or if @a peg_revision is |
| * greater than @a end_revision, then return @c SVN_ERR_CLIENT_BAD_REVISION. |
| * |
| * Use @a pool for all allocations. |
| * |
| * @since New in 1.6. |
| */ |
| svn_error_t * |
| svn_ra_get_deleted_rev(svn_ra_session_t *session, |
| const char *path, |
| svn_revnum_t peg_revision, |
| svn_revnum_t end_revision, |
| svn_revnum_t *revision_deleted, |
| apr_pool_t *pool); |
| |
| /** |
| * Set @a *inherited_props to a depth-first ordered array of |
| * #svn_prop_inherited_item_t * structures representing the properties |
| * inherited by @a path at @a revision (or the 'head' revision if |
| * @a revision is @c SVN_INVALID_REVNUM). Interpret @a path relative to |
| * the URL in @a session. Use @a pool for all allocations. If no |
| * inheritable properties are found, then set @a *inherited_props to |
| * an empty array. |
| * |
| * The #svn_prop_inherited_item_t->path_or_url members of the |
| * #svn_prop_inherited_item_t * structures in @a *inherited_props are |
| * paths relative to the repository root URL (of the repository which |
| * @a ra_session is associated). |
| * |
| * Allocate @a *inherited_props in @a result_pool. Use @a scratch_pool |
| * for temporary allocations. |
| * |
| * @since New in 1.8. |
| */ |
| svn_error_t * |
| svn_ra_get_inherited_props(svn_ra_session_t *session, |
| apr_array_header_t **inherited_props, |
| const char *path, |
| svn_revnum_t revision, |
| apr_pool_t *result_pool, |
| apr_pool_t *scratch_pool); |
| |
| /** |
| * @defgroup Capabilities Dynamically query the server's capabilities. |
| * |
| * @{ |
| */ |
| |
| /** |
| * Set @a *has to TRUE if the server represented by @a session has |
| * @a capability (one of the capabilities beginning with |
| * @c "SVN_RA_CAPABILITY_"), else set @a *has to FALSE. |
| * |
| * If @a capability isn't recognized, throw @c SVN_ERR_UNKNOWN_CAPABILITY, |
| * with the effect on @a *has undefined. |
| * |
| * Use @a pool for all allocation. |
| * |
| * @since New in 1.5. |
| */ |
| svn_error_t * |
| svn_ra_has_capability(svn_ra_session_t *session, |
| svn_boolean_t *has, |
| const char *capability, |
| apr_pool_t *pool); |
| |
| /** |
| * The capability of understanding @c svn_depth_t (e.g., the server |
| * understands what the client means when the client describes the |
| * depth of a working copy to the server.) |
| * |
| * @since New in 1.5. |
| */ |
| #define SVN_RA_CAPABILITY_DEPTH "depth" |
| |
| /** |
| * The capability of doing the right thing with merge-tracking |
| * information. This capability should be reported bidirectionally, |
| * because some repositories may want to reject clients that do not |
| * self-report as knowing how to handle merge-tracking. |
| * |
| * @since New in 1.5. |
| */ |
| #define SVN_RA_CAPABILITY_MERGEINFO "mergeinfo" |
| |
| /** |
| * The capability of retrieving arbitrary revprops in svn_ra_get_log2. |
| * |
| * @since New in 1.5. |
| */ |
| #define SVN_RA_CAPABILITY_LOG_REVPROPS "log-revprops" |
| |
| /** |
| * The capability of replaying a directory in the repository (partial replay). |
| * |
| * @since New in 1.5. |
| */ |
| #define SVN_RA_CAPABILITY_PARTIAL_REPLAY "partial-replay" |
| |
| /** |
| * The capability of including revision properties in a commit. |
| * |
| * @since New in 1.5. |
| */ |
| #define SVN_RA_CAPABILITY_COMMIT_REVPROPS "commit-revprops" |
| |
| /** |
| * The capability of specifying (and atomically verifying) expected |
| * preexisting values when modifying revprops. |
| * |
| * @since New in 1.7. |
| */ |
| #define SVN_RA_CAPABILITY_ATOMIC_REVPROPS "atomic-revprops" |
| |
| /** |
| * The capability to get inherited properties. |
| * |
| * @since New in 1.8. |
| */ |
| #define SVN_RA_CAPABILITY_INHERITED_PROPS "inherited-props" |
| |
| /** |
| * The capability of a server to automatically remove transaction |
| * properties prefixed with #SVN_PROP_TXN_PREFIX. |
| * |
| * @since New in 1.8. |
| */ |
| #define SVN_RA_CAPABILITY_EPHEMERAL_TXNPROPS "ephemeral-txnprops" |
| |
| /** |
| * The capability of a server to walk revisions backwards in |
| * svn_ra_get_file_revs2 |
| * |
| * @since New in 1.8. |
| */ |
| #define SVN_RA_CAPABILITY_GET_FILE_REVS_REVERSE "get-file-revs-reversed" |
| |
| /** |
| * The capability of a server to understand the list command. |
| * |
| * @since New in 1.10. |
| */ |
| #define SVN_RA_CAPABILITY_LIST "list" |
| |
| |
| /* *** PLEASE READ THIS IF YOU ADD A NEW CAPABILITY *** |
| * |
| * RA layers generally fetch all capabilities when asked about any |
| * capability, to save future round trips. So if you add a new |
| * capability here, make sure to update the RA layers to remember |
| * it after any capabilities query. |
| * |
| * Also note that capability strings should not include colons, |
| * because we pass a list of client capabilities to the start-commit |
| * hook as a single, colon-separated string. |
| */ |
| |
| /** @} */ |
| |
| |
| /** |
| * Append a textual list of all available RA modules to the stringbuf |
| * @a output. |
| * |
| * @since New in 1.2. |
| */ |
| svn_error_t * |
| svn_ra_print_modules(svn_stringbuf_t *output, |
| apr_pool_t *pool); |
| |
| |
| /** |
| * Similar to svn_ra_print_modules(). |
| * @a ra_baton is ignored. |
| * |
| * @deprecated Provided for backward compatibility with the 1.1 API. |
| */ |
| SVN_DEPRECATED |
| svn_error_t * |
| svn_ra_print_ra_libraries(svn_stringbuf_t **descriptions, |
| void *ra_baton, |
| apr_pool_t *pool); |
| |
| |
| |
| /** |
| * Using this callback struct is similar to calling the newer public |
| * interface that is based on @c svn_ra_session_t. |
| * |
| * @deprecated Provided for backward compatibility with the 1.1 API. |
| */ |
| typedef struct svn_ra_plugin_t |
| { |
| /** The proper name of the RA library, (like "ra_serf" or "ra_local") */ |
| const char *name; |
| |
| /** Short doc string printed out by `svn --version` */ |
| const char *description; |
| |
| /* The vtable hooks */ |
| |
| /** Call svn_ra_open() and set @a session_baton to an object representing |
| * the new session. All other arguments are passed to svn_ra_open(). |
| */ |
| svn_error_t *(*open)(void **session_baton, |
| const char *repos_URL, |
| const svn_ra_callbacks_t *callbacks, |
| void *callback_baton, |
| apr_hash_t *config, |
| apr_pool_t *pool); |
| |
| /** Call svn_ra_get_latest_revnum() with the session associated with |
| * @a session_baton and all other arguments. |
| */ |
| svn_error_t *(*get_latest_revnum)(void *session_baton, |
| svn_revnum_t *latest_revnum, |
| apr_pool_t *pool); |
| |
| /** Call svn_ra_get_dated_revision() with the session associated with |
| * @a session_baton and all other arguments. |
| */ |
| svn_error_t *(*get_dated_revision)(void *session_baton, |
| svn_revnum_t *revision, |
| apr_time_t tm, |
| apr_pool_t *pool); |
| |
| /** Call svn_ra_change_rev_prop() with the session associated with |
| * @a session_baton and all other arguments. |
| */ |
| svn_error_t *(*change_rev_prop)(void *session_baton, |
| svn_revnum_t rev, |
| const char *name, |
| const svn_string_t *value, |
| apr_pool_t *pool); |
| |
| /** Call svn_ra_rev_proplist() with the session associated with |
| * @a session_baton and all other arguments. |
| */ |
| svn_error_t *(*rev_proplist)(void *session_baton, |
| svn_revnum_t rev, |
| apr_hash_t **props, |
| apr_pool_t *pool); |
| |
| /** Call svn_ra_rev_prop() with the session associated with |
| * @a session_baton and all other arguments. |
| */ |
| svn_error_t *(*rev_prop)(void *session_baton, |
| svn_revnum_t rev, |
| const char *name, |
| svn_string_t **value, |
| apr_pool_t *pool); |
| |
| /** Call svn_ra_get_commit_editor() with the session associated with |
| * @a session_baton and all other arguments plus @a lock_tokens set to |
| * @c NULL and @a keep_locks set to @c TRUE. |
| */ |
| svn_error_t *(*get_commit_editor)(void *session_baton, |
| const svn_delta_editor_t **editor, |
| void **edit_baton, |
| const char *log_msg, |
| svn_commit_callback_t callback, |
| void *callback_baton, |
| apr_pool_t *pool); |
| |
| /** Call svn_ra_get_file() with the session associated with |
| * @a session_baton and all other arguments. |
| */ |
| svn_error_t *(*get_file)(void *session_baton, |
| const char *path, |
| svn_revnum_t revision, |
| svn_stream_t *stream, |
| svn_revnum_t *fetched_rev, |
| apr_hash_t **props, |
| apr_pool_t *pool); |
| |
| /** Call svn_ra_get_dir() with the session associated with |
| * @a session_baton and all other arguments. |
| */ |
| svn_error_t *(*get_dir)(void *session_baton, |
| const char *path, |
| svn_revnum_t revision, |
| apr_hash_t **dirents, |
| svn_revnum_t *fetched_rev, |
| apr_hash_t **props, |
| apr_pool_t *pool); |
| |
| /** Call svn_ra_do_update() with the session associated with |
| * @a session_baton and all other arguments. |
| */ |
| svn_error_t *(*do_update)(void *session_baton, |
| const svn_ra_reporter_t **reporter, |
| void **report_baton, |
| svn_revnum_t revision_to_update_to, |
| const char *update_target, |
| svn_boolean_t recurse, |
| const svn_delta_editor_t *update_editor, |
| void *update_baton, |
| apr_pool_t *pool); |
| |
| /** Call svn_ra_do_switch() with the session associated with |
| * @a session_baton and all other arguments. |
| */ |
| svn_error_t *(*do_switch)(void *session_baton, |
| const svn_ra_reporter_t **reporter, |
| void **report_baton, |
| svn_revnum_t revision_to_switch_to, |
| const char *switch_target, |
| svn_boolean_t recurse, |
| const char *switch_url, |
| const svn_delta_editor_t *switch_editor, |
| void *switch_baton, |
| apr_pool_t *pool); |
| |
| /** Call svn_ra_do_status() with the session associated with |
| * @a session_baton and all other arguments. |
| */ |
| svn_error_t *(*do_status)(void *session_baton, |
| const svn_ra_reporter_t **reporter, |
| void **report_baton, |
| const char *status_target, |
| svn_revnum_t revision, |
| svn_boolean_t recurse, |
| const svn_delta_editor_t *status_editor, |
| void *status_baton, |
| apr_pool_t *pool); |
| |
| /** Call svn_ra_do_diff() with the session associated with |
| * @a session_baton and all other arguments. |
| */ |
| svn_error_t *(*do_diff)(void *session_baton, |
| const svn_ra_reporter_t **reporter, |
| void **report_baton, |
| svn_revnum_t revision, |
| const char *diff_target, |
| svn_boolean_t recurse, |
| svn_boolean_t ignore_ancestry, |
| const char *versus_url, |
| const svn_delta_editor_t *diff_editor, |
| void *diff_baton, |
| apr_pool_t *pool); |
| |
| /** Call svn_ra_get_log() with the session associated with |
| * @a session_baton and all other arguments. @a limit is set to 0. |
| */ |
| svn_error_t *(*get_log)(void *session_baton, |
| const apr_array_header_t *paths, |
| svn_revnum_t start, |
| svn_revnum_t end, |
| svn_boolean_t discover_changed_paths, |
| svn_boolean_t strict_node_history, |
| svn_log_message_receiver_t receiver, |
| void *receiver_baton, |
| apr_pool_t *pool); |
| |
| /** Call svn_ra_check_path() with the session associated with |
| * @a session_baton and all other arguments. |
| */ |
| svn_error_t *(*check_path)(void *session_baton, |
| const char *path, |
| svn_revnum_t revision, |
| svn_node_kind_t *kind, |
| apr_pool_t *pool); |
| |
| /** Call svn_ra_get_uuid() with the session associated with |
| * @a session_baton and all other arguments. |
| */ |
| svn_error_t *(*get_uuid)(void *session_baton, |
| const char **uuid, |
| apr_pool_t *pool); |
| |
| /** Call svn_ra_get_repos_root() with the session associated with |
| * @a session_baton and all other arguments. |
| */ |
| svn_error_t *(*get_repos_root)(void *session_baton, |
| const char **url, |
| apr_pool_t *pool); |
| |
| /** |
| * Call svn_ra_get_locations() with the session associated with |
| * @a session_baton and all other arguments. |
| * |
| * @since New in 1.1. |
| */ |
| svn_error_t *(*get_locations)(void *session_baton, |
| apr_hash_t **locations, |
| const char *path, |
| svn_revnum_t peg_revision, |
| apr_array_header_t *location_revisions, |
| apr_pool_t *pool); |
| |
| /** |
| * Call svn_ra_get_file_revs() with the session associated with |
| * @a session_baton and all other arguments. |
| * |
| * @since New in 1.1. |
| */ |
| svn_error_t *(*get_file_revs)(void *session_baton, |
| const char *path, |
| svn_revnum_t start, |
| svn_revnum_t end, |
| svn_ra_file_rev_handler_t handler, |
| void *handler_baton, |
| apr_pool_t *pool); |
| |
| /** |
| * Return the plugin's version information. |
| * |
| * @since New in 1.1. |
| */ |
| const svn_version_t *(*get_version)(void); |
| |
| |
| } svn_ra_plugin_t; |
| |
| /** |
| * All "ra_FOO" implementations *must* export a function named |
| * svn_ra_FOO_init() of type @c svn_ra_init_func_t. |
| * |
| * When called by libsvn_client, this routine adds an entry (or |
| * entries) to the hash table for any URL schemes it handles. The hash |
| * value must be of type (<tt>@c svn_ra_plugin_t *</tt>). @a pool is a |
| * pool for allocating configuration / one-time data. |
| * |
| * This type is defined to use the "C Calling Conventions" to ensure that |
| * abi_version is the first parameter. The RA plugin must check that value |
| * before accessing the other parameters. |
| * |
| * ### need to force this to be __cdecl on Windows... how?? |
| * |
| * @deprecated Provided for backward compatibility with the 1.1 API. |
| */ |
| typedef svn_error_t *(*svn_ra_init_func_t)(int abi_version, |
| apr_pool_t *pool, |
| apr_hash_t *hash); |
| |
| /** |
| * The current ABI (Application Binary Interface) version for the |
| * RA plugin model. This version number will change when the ABI |
| * between the SVN core (e.g. libsvn_client) and the RA plugin changes. |
| * |
| * An RA plugin should verify that the passed version number is acceptable |
| * before accessing the rest of the parameters, and before returning any |
| * information. |
| * |
| * It is entirely acceptable for an RA plugin to accept multiple ABI |
| * versions. It can simply interpret the parameters based on the version, |
| * and it can return different plugin structures. |
| * |
| * |
| * <pre> |
| * VSN DATE REASON FOR CHANGE |
| * --- ---------- ------------------------------------------------ |
| * 1 2001-02-17 Initial revision. |
| * 2 2004-06-29 Preparing for svn 1.1, which adds new RA vtable funcs. |
| * 2005-01-19 Rework the plugin interface and don't provide the vtable |
| * to the client. Separate ABI versions are no longer used. |
| * </pre> |
| * |
| * @deprecated Provided for backward compatibility with the 1.0 API. |
| */ |
| #define SVN_RA_ABI_VERSION 2 |
| |
| /* Public RA implementations. */ |
| |
| /** Initialize libsvn_ra_serf. |
| * |
| * @deprecated Provided for backward compatibility with the 1.1 API. */ |
| SVN_DEPRECATED |
| svn_error_t * |
| svn_ra_dav_init(int abi_version, |
| apr_pool_t *pool, |
| apr_hash_t *hash); |
| |
| /** Initialize libsvn_ra_local. |
| * |
| * @deprecated Provided for backward compatibility with the 1.1 API. */ |
| SVN_DEPRECATED |
| svn_error_t * |
| svn_ra_local_init(int abi_version, |
| apr_pool_t *pool, |
| apr_hash_t *hash); |
| |
| /** Initialize libsvn_ra_svn. |
| * |
| * @deprecated Provided for backward compatibility with the 1.1 API. */ |
| SVN_DEPRECATED |
| svn_error_t * |
| svn_ra_svn_init(int abi_version, |
| apr_pool_t *pool, |
| apr_hash_t *hash); |
| |
| /** Initialize libsvn_ra_serf. |
| * |
| * @since New in 1.4. |
| * @deprecated Provided for backward compatibility with the 1.1 API. */ |
| SVN_DEPRECATED |
| svn_error_t * |
| svn_ra_serf_init(int abi_version, |
| apr_pool_t *pool, |
| apr_hash_t *hash); |
| |
| |
| /** |
| * Initialize the compatibility wrapper, using @a pool for any allocations. |
| * The caller must hold on to @a ra_baton as long as the RA library is used. |
| * |
| * @deprecated Provided for backward compatibility with the 1.1 API. |
| */ |
| SVN_DEPRECATED |
| svn_error_t * |
| svn_ra_init_ra_libs(void **ra_baton, |
| apr_pool_t *pool); |
| |
| /** |
| * Return an RA vtable-@a library which can handle URL. A number of |
| * svn_client_* routines will call this internally, but client apps might |
| * use it too. $a ra_baton is a baton obtained by a call to |
| * svn_ra_init_ra_libs(). |
| * |
| * @deprecated Provided for backward compatibility with the 1.1 API. |
| */ |
| SVN_DEPRECATED |
| svn_error_t * |
| svn_ra_get_ra_library(svn_ra_plugin_t **library, |
| void *ra_baton, |
| const char *url, |
| apr_pool_t *pool); |
| |
| #ifdef __cplusplus |
| } |
| #endif /* __cplusplus */ |
| |
| #endif /* SVN_RA_H */ |
| |