You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by ar...@apache.org on 2012/07/30 08:39:38 UTC
svn commit: r1367002 [3/21] - in /subversion/branches/svn-bisect: ./ build/
build/ac-macros/ build/generator/ build/generator/templates/
contrib/client-side/emacs/ contrib/server-side/mod_dontdothat/ notes/
notes/api-errata/1.7/ notes/http-and-webdav/ ...
Modified: subversion/branches/svn-bisect/subversion/bindings/swig/ruby/libsvn_swig_ruby/swigutil_rb.c
URL: http://svn.apache.org/viewvc/subversion/branches/svn-bisect/subversion/bindings/swig/ruby/libsvn_swig_ruby/swigutil_rb.c?rev=1367002&r1=1367001&r2=1367002&view=diff
==============================================================================
--- subversion/branches/svn-bisect/subversion/bindings/swig/ruby/libsvn_swig_ruby/swigutil_rb.c (original)
+++ subversion/branches/svn-bisect/subversion/bindings/swig/ruby/libsvn_swig_ruby/swigutil_rb.c Mon Jul 30 06:39:28 2012
@@ -1313,6 +1313,9 @@ DEFINE_APR_ARRAY_TO_ARRAY(VALUE, svn_swi
DEFINE_APR_ARRAY_TO_ARRAY(VALUE, svn_swig_rb_apr_array_to_array_merge_range,
c2r_merge_range_dup, EMPTY_CPP_ARGUMENT,
svn_merge_range_t *, NULL)
+DEFINE_APR_ARRAY_TO_ARRAY(VALUE, svn_swig_rb_apr_array_to_array_auth_provider_object,
+ c2r_swig_type, EMPTY_CPP_ARGUMENT,
+ svn_auth_provider_object_t *, "svn_auth_provider_object_t*")
static VALUE
c2r_merge_range_array(void *value, void *ctx)
@@ -2960,6 +2963,41 @@ svn_swig_rb_auth_simple_prompt_func(svn_
}
svn_error_t *
+svn_swig_rb_auth_gnome_keyring_unlock_prompt_func(char **keyring_passwd,
+ const char *keyring_name,
+ void *baton,
+ apr_pool_t *pool)
+{
+ svn_error_t *err = SVN_NO_ERROR;
+ VALUE proc, rb_pool;
+ *keyring_passwd = NULL;
+
+ svn_swig_rb_from_baton((VALUE)baton, &proc, &rb_pool);
+
+ if (!NIL_P(proc)) {
+ char error_message[] =
+ "svn_auth_gnome_keyring_unlock_prompt_func_t should"
+ "return a string, not '%s'.";
+
+ callback_baton_t cbb;
+ VALUE result;
+
+ cbb.receiver = proc;
+ cbb.message = id_call;
+ cbb.args = rb_ary_new3(1, c2r_string2(keyring_name));
+ result = invoke_callback_handle_error((VALUE)(&cbb), rb_pool, &err);
+
+ if (!NIL_P(result)) {
+ if (!RTEST(rb_obj_is_kind_of(result, rb_cString)))
+ rb_raise(rb_eTypeError, error_message, r2c_inspect(result));
+ *keyring_passwd = (char *)r2c_string(result, NULL, pool);
+ }
+ }
+
+ return err;
+}
+
+svn_error_t *
svn_swig_rb_auth_username_prompt_func(svn_auth_cred_username_t **cred,
void *baton,
const char *realm,
Modified: subversion/branches/svn-bisect/subversion/bindings/swig/ruby/libsvn_swig_ruby/swigutil_rb.h
URL: http://svn.apache.org/viewvc/subversion/branches/svn-bisect/subversion/bindings/swig/ruby/libsvn_swig_ruby/swigutil_rb.h?rev=1367002&r1=1367001&r2=1367002&view=diff
==============================================================================
--- subversion/branches/svn-bisect/subversion/bindings/swig/ruby/libsvn_swig_ruby/swigutil_rb.h (original)
+++ subversion/branches/svn-bisect/subversion/bindings/swig/ruby/libsvn_swig_ruby/swigutil_rb.h Mon Jul 30 06:39:28 2012
@@ -154,6 +154,8 @@ SVN_RB_SWIG_SWIGUTIL_EXPORT
VALUE svn_swig_rb_apr_array_to_array_external_item2(const apr_array_header_t *ary);
SVN_RB_SWIG_SWIGUTIL_EXPORT
VALUE svn_swig_rb_apr_array_to_array_merge_range(const apr_array_header_t *ary);
+SVN_RB_SWIG_SWIGUTIL_EXPORT
+VALUE svn_swig_rb_apr_array_to_array_auth_provider_object(const apr_array_header_t *ary);
SVN_RB_SWIG_SWIGUTIL_EXPORT
VALUE svn_swig_rb_prop_apr_array_to_hash_prop(const apr_array_header_t *ary);
@@ -378,6 +380,13 @@ svn_error_t *svn_swig_rb_wc_relocation_v
/* auth provider callbacks */
SVN_RB_SWIG_SWIGUTIL_EXPORT
+svn_error_t * svn_swig_rb_auth_gnome_keyring_unlock_prompt_func(
+ char **keyring_passwd,
+ const char *keyring_name,
+ void *baton,
+ apr_pool_t *pool);
+
+SVN_RB_SWIG_SWIGUTIL_EXPORT
svn_error_t *svn_swig_rb_auth_simple_prompt_func(
svn_auth_cred_simple_t **cred,
void *baton,
Modified: subversion/branches/svn-bisect/subversion/bindings/swig/ruby/svn/core.rb
URL: http://svn.apache.org/viewvc/subversion/branches/svn-bisect/subversion/bindings/swig/ruby/svn/core.rb?rev=1367002&r1=1367001&r2=1367002&view=diff
==============================================================================
--- subversion/branches/svn-bisect/subversion/bindings/swig/ruby/svn/core.rb (original)
+++ subversion/branches/svn-bisect/subversion/bindings/swig/ruby/svn/core.rb Mon Jul 30 06:39:28 2012
@@ -279,6 +279,10 @@ module Svn
add_prompt_provider("ssl_client_cert_pw", args, prompt, klass)
end
+ def add_platform_specific_client_providers(config=nil)
+ add_providers(Core.auth_get_platform_specific_client_providers(config))
+ end
+
private
def add_prompt_provider(name, args, prompt, credential_class)
real_prompt = Proc.new do |*prompt_args|
@@ -294,6 +298,10 @@ module Svn
end
def add_provider(provider)
+ add_providers([provider])
+ end
+
+ def add_providers(new_providers)
if auth_baton
providers = auth_baton.providers
parameters = auth_baton.parameters
@@ -301,7 +309,7 @@ module Svn
providers = []
parameters = {}
end
- self.auth_baton = AuthBaton.new(providers + [provider], parameters)
+ self.auth_baton = AuthBaton.new(providers + new_providers, parameters)
end
end
Modified: subversion/branches/svn-bisect/subversion/bindings/swig/ruby/test/test_delta.rb
URL: http://svn.apache.org/viewvc/subversion/branches/svn-bisect/subversion/bindings/swig/ruby/test/test_delta.rb?rev=1367002&r1=1367001&r2=1367002&view=diff
==============================================================================
--- subversion/branches/svn-bisect/subversion/bindings/swig/ruby/test/test_delta.rb (original)
+++ subversion/branches/svn-bisect/subversion/bindings/swig/ruby/test/test_delta.rb Mon Jul 30 06:39:28 2012
@@ -77,7 +77,7 @@ class SvnDeltaTest < Test::Unit::TestCas
if composed_window.nil?
composed_window = window
else
- composed_window = composed_window.compose(window)
+ composed_window = window.compose(composed_window)
end
end
Modified: subversion/branches/svn-bisect/subversion/bindings/swig/ruby/test/util.rb
URL: http://svn.apache.org/viewvc/subversion/branches/svn-bisect/subversion/bindings/swig/ruby/test/util.rb?rev=1367002&r1=1367001&r2=1367002&view=diff
==============================================================================
--- subversion/branches/svn-bisect/subversion/bindings/swig/ruby/test/util.rb (original)
+++ subversion/branches/svn-bisect/subversion/bindings/swig/ruby/test/util.rb Mon Jul 30 06:39:28 2012
@@ -42,7 +42,7 @@ module SvnTestUtil
@repos_uri = "file://#{@full_repos_path.sub(/^\/?/, '/')}"
@svnserve_host = "127.0.0.1"
@svnserve_ports = (64152..64282).collect{|x| x.to_s}
- @wc_base_dir = File.join(Dir.tmpdir, "wc-tmp")
+ @wc_base_dir = Dir.mktmpdir
@wc_path = File.join(@wc_base_dir, "wc")
@full_wc_path = File.expand_path(@wc_path)
@tmp_path = "tmp"
Modified: subversion/branches/svn-bisect/subversion/include/private/svn_auth_private.h
URL: http://svn.apache.org/viewvc/subversion/branches/svn-bisect/subversion/include/private/svn_auth_private.h?rev=1367002&r1=1367001&r2=1367002&view=diff
==============================================================================
--- subversion/branches/svn-bisect/subversion/include/private/svn_auth_private.h (original)
+++ subversion/branches/svn-bisect/subversion/include/private/svn_auth_private.h Mon Jul 30 06:39:28 2012
@@ -53,9 +53,12 @@ extern "C" {
from an external store, using REALMSTRING and USERNAME as keys.
(The behavior is undefined if REALMSTRING or USERNAME are NULL.)
If NON_INTERACTIVE is set, the user must not be involved in the
- retrieval process. POOL is used for any necessary allocation. */
-typedef svn_boolean_t (*svn_auth__password_get_t)
- (const char **password,
+ retrieval process. Set *DONE to TRUE if a password was stored
+ in *PASSWORD, to FALSE otherwise. POOL is used for any necessary
+ allocation. */
+typedef svn_error_t * (*svn_auth__password_get_t)
+ (svn_boolean_t *done,
+ const char **password,
apr_hash_t *creds,
const char *realmstring,
const char *username,
@@ -66,10 +69,12 @@ typedef svn_boolean_t (*svn_auth__passwo
/* A function that stores PASSWORD (or some encrypted version thereof)
either directly in CREDS, or externally using REALMSTRING and USERNAME
as keys into the external store. If NON_INTERACTIVE is set, the user
- must not be involved in the storage process. POOL is used for any
- necessary allocation. */
-typedef svn_boolean_t (*svn_auth__password_set_t)
- (apr_hash_t *creds,
+ must not be involved in the storage process. Set *DONE to TRUE if the
+ password was store, to FALSE otherwise. POOL is used for any necessary
+ allocation. */
+typedef svn_error_t * (*svn_auth__password_set_t)
+ (svn_boolean_t *done,
+ apr_hash_t *creds,
const char *realmstring,
const char *username,
const char *password,
@@ -111,8 +116,9 @@ svn_auth__simple_save_creds_helper(svn_b
/* Implementation of svn_auth__password_get_t that retrieves
the plaintext password from CREDS when USERNAME matches the stored
credentials. */
-svn_boolean_t
-svn_auth__simple_password_get(const char **password,
+svn_error_t *
+svn_auth__simple_password_get(svn_boolean_t *done,
+ const char **password,
apr_hash_t *creds,
const char *realmstring,
const char *username,
@@ -122,8 +128,9 @@ svn_auth__simple_password_get(const char
/* Implementation of svn_auth__password_set_t that stores
the plaintext password in CREDS. */
-svn_boolean_t
-svn_auth__simple_password_set(apr_hash_t *creds,
+svn_error_t *
+svn_auth__simple_password_set(svn_boolean_t *done,
+ apr_hash_t *creds,
const char *realmstring,
const char *username,
const char *password,
@@ -169,8 +176,9 @@ svn_auth__ssl_client_cert_pw_file_save_c
/* This implements the svn_auth__password_get_t interface.
Set **PASSPHRASE to the plaintext passphrase retrieved from CREDS;
ignore other parameters. */
-svn_boolean_t
-svn_auth__ssl_client_cert_pw_get(const char **passphrase,
+svn_error_t *
+svn_auth__ssl_client_cert_pw_get(svn_boolean_t *done,
+ const char **passphrase,
apr_hash_t *creds,
const char *realmstring,
const char *username,
@@ -180,8 +188,9 @@ svn_auth__ssl_client_cert_pw_get(const c
/* This implements the svn_auth__password_set_t interface.
Store PASSPHRASE in CREDS; ignore other parameters. */
-svn_boolean_t
-svn_auth__ssl_client_cert_pw_set(apr_hash_t *creds,
+svn_error_t *
+svn_auth__ssl_client_cert_pw_set(svn_boolean_t *done,
+ apr_hash_t *creds,
const char *realmstring,
const char *username,
const char *passphrase,
Modified: subversion/branches/svn-bisect/subversion/include/private/svn_cache.h
URL: http://svn.apache.org/viewvc/subversion/branches/svn-bisect/subversion/include/private/svn_cache.h?rev=1367002&r1=1367001&r2=1367002&view=diff
==============================================================================
--- subversion/branches/svn-bisect/subversion/include/private/svn_cache.h (original)
+++ subversion/branches/svn-bisect/subversion/include/private/svn_cache.h Mon Jul 30 06:39:28 2012
@@ -295,8 +295,9 @@ svn_cache__membuffer_cache_create(svn_me
* svn_string_t; if @a serialize_func is NULL, then the data is
* assumed to be an svn_stringbuf_t.
*
- * These caches themselves are thread safe, the shared @a memcache may
- * be not, depending on its creation parameters.
+ * If @a thread_safe is true, and APR is compiled with threads, all
+ * accesses to the cache will be protected with a mutex, if the shared
+ * @a memcache has also been created with thread_safe flag set.
*
* These caches do not support svn_cache__iter.
*/
@@ -307,6 +308,7 @@ svn_cache__create_membuffer_cache(svn_ca
svn_cache__deserialize_func_t deserialize,
apr_ssize_t klen,
const char *prefix,
+ svn_boolean_t thread_safe,
apr_pool_t *result_pool);
/**
@@ -340,9 +342,9 @@ svn_cache__is_cachable(svn_cache__t *cac
/**
* Fetches a value indexed by @a key from @a cache into @a *value,
* setting @a *found to TRUE iff it is in the cache and FALSE if it is
- * not found. The value is copied into @a result_pool using the copy
+ * not found. @a key may be NULL in which case @a *found will be
+ * FALSE. The value is copied into @a result_pool using the deserialize
* function provided to the cache's constructor.
- * ### what copy function? there are serialize/deserialize functions, no copy functions
*/
svn_error_t *
svn_cache__get(void **value,
@@ -355,7 +357,8 @@ svn_cache__get(void **value,
* Stores the value @a value under the key @a key in @a cache. Uses @a
* scratch_pool for temporary allocations. The cache makes copies of
* @a key and @a value if necessary (that is, @a key and @a value may
- * have shorter lifetimes than the cache).
+ * have shorter lifetimes than the cache). @a key may be NULL in which
+ * case the cache will remain unchanged.
*
* If there is already a value for @a key, this will replace it. Bear
* in mind that in some circumstances this may leak memory (that is,
@@ -399,8 +402,10 @@ svn_cache__iter(svn_boolean_t *completed
/**
* Similar to svn_cache__get() but will call a specific de-serialization
* function @a func. @a found will be set depending on whether the @a key
- * has been found. Even if that reports @c TRUE, @a values may still return
- * a @c NULL pointer depending on the logic inside @a func.
+ * has been found. Even if that reports @c TRUE, @a value may still return
+ * a @c NULL pointer depending on the logic inside @a func. For a @a NULL
+ * @a key, no data will be found. @a value will be allocated in
+ * @a result_pool.
*/
svn_error_t *
svn_cache__get_partial(void **value,
@@ -415,8 +420,8 @@ svn_cache__get_partial(void **value,
* Find the item identified by @a key in the @a cache. If it has been found,
* call @a func for it and @a baton to potentially modify the data. Changed
* data will be written back to the cache. If the item cannot be found,
- * @a func does not get called. @a scratch_pool is used for temporary
- * allocations.
+ * or if @a key is NULL, @a func does not get called. @a scratch_pool is
+ * used for temporary allocations.
*/
svn_error_t *
svn_cache__set_partial(svn_cache__t *cache,
Modified: subversion/branches/svn-bisect/subversion/include/private/svn_client_private.h
URL: http://svn.apache.org/viewvc/subversion/branches/svn-bisect/subversion/include/private/svn_client_private.h?rev=1367002&r1=1367001&r2=1367002&view=diff
==============================================================================
--- subversion/branches/svn-bisect/subversion/include/private/svn_client_private.h (original)
+++ subversion/branches/svn-bisect/subversion/include/private/svn_client_private.h Mon Jul 30 06:39:28 2012
@@ -59,6 +59,29 @@ svn_client__create_status(svn_client_sta
apr_pool_t *result_pool,
apr_pool_t *scratch_pool);
+/* Set *ANCESTOR_URL and *ANCESTOR_REVISION to the URL and revision,
+ * respectively, of the youngest common ancestor of the two locations
+ * PATH_OR_URL1@REV1 and PATH_OR_URL2@REV2. Set *ANCESTOR_RELPATH to
+ * NULL and *ANCESTOR_REVISION to SVN_INVALID_REVNUM if they have no
+ * common ancestor. This function assumes that PATH_OR_URL1@REV1 and
+ * PATH_OR_URL2@REV2 both refer to the same repository.
+ *
+ * Use the authentication baton cached in CTX to authenticate against
+ * the repository.
+ *
+ * See also svn_client__get_youngest_common_ancestor().
+ */
+svn_error_t *
+svn_client__youngest_common_ancestor(const char **ancestor_url,
+ svn_revnum_t *ancestor_rev,
+ const char *path_or_url1,
+ const svn_opt_revision_t *revision1,
+ const char *path_or_url2,
+ const svn_opt_revision_t *revision2,
+ svn_client_ctx_t *ctx,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
+
#ifdef __cplusplus
}
#endif /* __cplusplus */
Modified: subversion/branches/svn-bisect/subversion/include/private/svn_cmdline_private.h
URL: http://svn.apache.org/viewvc/subversion/branches/svn-bisect/subversion/include/private/svn_cmdline_private.h?rev=1367002&r1=1367001&r2=1367002&view=diff
==============================================================================
--- subversion/branches/svn-bisect/subversion/include/private/svn_cmdline_private.h (original)
+++ subversion/branches/svn-bisect/subversion/include/private/svn_cmdline_private.h Mon Jul 30 06:39:28 2012
@@ -92,7 +92,7 @@ svn_cmdline__parse_config_option(apr_arr
apr_pool_t *pool);
/** Sets the config options in @a config_options, an apr array containing
- * svn_cmdline__config_argument_t* elements to the configuration in @a cfg,
+ * @c svn_cmdline__config_argument_t* elements, to the configuration in @a cfg,
* a hash mapping of <tt>const char *</tt> configuration file names to
* @c svn_config_t *'s. Write warnings to stderr.
*
Modified: subversion/branches/svn-bisect/subversion/include/private/svn_debug.h
URL: http://svn.apache.org/viewvc/subversion/branches/svn-bisect/subversion/include/private/svn_debug.h?rev=1367002&r1=1367001&r2=1367002&view=diff
==============================================================================
--- subversion/branches/svn-bisect/subversion/include/private/svn_debug.h (original)
+++ subversion/branches/svn-bisect/subversion/include/private/svn_debug.h Mon Jul 30 06:39:28 2012
@@ -37,13 +37,17 @@
extern "C" {
#endif /* __cplusplus */
-/* A couple helper functions for the macros below. */
+/* A few helper functions for the macros below. */
void
svn_dbg__preamble(const char *file, long line, FILE *output);
void
svn_dbg__printf(const char *fmt, ...)
__attribute__((format(printf, 1, 2)));
-
+void
+svn_dbg__print_props(apr_hash_t *props,
+ const char *header_fmt,
+ ...)
+ __attribute__((format(printf, 2, 3)));
/* Print to stdout. Edit this line if you need stderr. */
#define SVN_DBG_OUTPUT stdout
@@ -55,6 +59,7 @@ svn_dbg__printf(const char *fmt, ...)
#ifdef SVN_DBG_QUIET
#define SVN_DBG(ARGS) svn_dbg__preamble(__FILE__, __LINE__, NULL)
+#define SVN_DBG_PROPS(ARGS) svn_dbg__preamble(__FILE__, __LINE__, NULL)
#else
@@ -77,6 +82,9 @@ svn_dbg__printf(const char *fmt, ...)
*/
#define SVN_DBG(ARGS) (svn_dbg__preamble(__FILE__, __LINE__, SVN_DBG_OUTPUT), \
svn_dbg__printf ARGS)
+#define SVN_DBG_PROPS(ARGS) (svn_dbg__preamble(__FILE__, __LINE__, \
+ SVN_DBG_OUTPUT), \
+ svn_dbg__print_props ARGS)
#endif
Modified: subversion/branches/svn-bisect/subversion/include/private/svn_error_private.h
URL: http://svn.apache.org/viewvc/subversion/branches/svn-bisect/subversion/include/private/svn_error_private.h?rev=1367002&r1=1367001&r2=1367002&view=diff
==============================================================================
--- subversion/branches/svn-bisect/subversion/include/private/svn_error_private.h (original)
+++ subversion/branches/svn-bisect/subversion/include/private/svn_error_private.h Mon Jul 30 06:39:28 2012
@@ -39,6 +39,14 @@ extern "C" {
svn_boolean_t
svn_error__is_tracing_link(svn_error_t *err);
+/**
+ * Converts a zlib error to an svn_error_t. zerr is the error code,
+ * function is the function name, message is an optional extra part
+ * of the error message and may be NULL.
+ */
+svn_error_t *
+svn_error__wrap_zlib(int zerr, const char *function, const char *message);
+
#ifdef __cplusplus
}
#endif /* __cplusplus */
Modified: subversion/branches/svn-bisect/subversion/include/private/svn_fs_util.h
URL: http://svn.apache.org/viewvc/subversion/branches/svn-bisect/subversion/include/private/svn_fs_util.h?rev=1367002&r1=1367001&r2=1367002&view=diff
==============================================================================
--- subversion/branches/svn-bisect/subversion/include/private/svn_fs_util.h (original)
+++ subversion/branches/svn-bisect/subversion/include/private/svn_fs_util.h Mon Jul 30 06:39:28 2012
@@ -44,7 +44,11 @@ extern "C" {
ignored) we want any paths that are physically stored in the
underlying database to look consistent. Specifically, absolute
filesystem paths should begin with '/', and all redundant and trailing '/'
- characters be removed. */
+ characters be removed.
+
+ This is similar to svn_fspath__canonicalize() but doesn't treat "."
+ segments as special.
+*/
const char *
svn_fs__canonicalize_abspath(const char *path, apr_pool_t *pool);
Modified: subversion/branches/svn-bisect/subversion/include/private/svn_fspath.h
URL: http://svn.apache.org/viewvc/subversion/branches/svn-bisect/subversion/include/private/svn_fspath.h?rev=1367002&r1=1367001&r2=1367002&view=diff
==============================================================================
--- subversion/branches/svn-bisect/subversion/include/private/svn_fspath.h (original)
+++ subversion/branches/svn-bisect/subversion/include/private/svn_fspath.h Mon Jul 30 06:39:28 2012
@@ -55,6 +55,9 @@ svn_fspath__is_canonical(const char *fsp
* The returned fspath may be statically allocated or allocated from
* @a pool.
*
+ * This is similar to svn_fs__canonicalize_abspath() but also treats "."
+ * segments as special.
+ *
* @since New in 1.7.
*/
const char *
Modified: subversion/branches/svn-bisect/subversion/include/private/svn_mutex.h
URL: http://svn.apache.org/viewvc/subversion/branches/svn-bisect/subversion/include/private/svn_mutex.h?rev=1367002&r1=1367001&r2=1367002&view=diff
==============================================================================
--- subversion/branches/svn-bisect/subversion/include/private/svn_mutex.h (original)
+++ subversion/branches/svn-bisect/subversion/include/private/svn_mutex.h Mon Jul 30 06:39:28 2012
@@ -55,7 +55,7 @@ typedef void svn_mutex__t;
#endif
-/** Initialize the @a *mutex. If @a enable_mutex is TRUE, the mutex will
+/** Initialize the @a *mutex. If @a mutex_required is TRUE, the mutex will
* actually be created with a lifetime defined by @a result_pool. Otherwise,
* the pointer will be set to @c NULL and @ref svn_mutex__lock as well as
* @ref svn_mutex__unlock will be no-ops.
@@ -64,7 +64,7 @@ typedef void svn_mutex__t;
*/
svn_error_t *
svn_mutex__init(svn_mutex__t **mutex,
- svn_boolean_t enable_mutex,
+ svn_boolean_t mutex_required,
apr_pool_t *result_pool);
/** Acquire the @a mutex, if that has been enabled in @ref svn_mutex__init.
Modified: subversion/branches/svn-bisect/subversion/include/private/svn_ra_private.h
URL: http://svn.apache.org/viewvc/subversion/branches/svn-bisect/subversion/include/private/svn_ra_private.h?rev=1367002&r1=1367001&r2=1367002&view=diff
==============================================================================
--- subversion/branches/svn-bisect/subversion/include/private/svn_ra_private.h (original)
+++ subversion/branches/svn-bisect/subversion/include/private/svn_ra_private.h Mon Jul 30 06:39:28 2012
@@ -31,6 +31,7 @@
#include "svn_error.h"
#include "svn_ra.h"
+#include "svn_delta.h"
#ifdef __cplusplus
extern "C" {
@@ -126,6 +127,11 @@ svn_ra__get_fspath_relative_to_root(svn_
const char *url,
apr_pool_t *pool);
+/** Register CALLBACKS to be used with the Ev2 shims in RA_SESSION. */
+svn_error_t *
+svn_ra__register_editor_shim_callbacks(svn_ra_session_t *ra_session,
+ svn_delta_shim_callbacks_t *callbacks);
+
#ifdef __cplusplus
}
#endif /* __cplusplus */
Modified: subversion/branches/svn-bisect/subversion/include/private/svn_repos_private.h
URL: http://svn.apache.org/viewvc/subversion/branches/svn-bisect/subversion/include/private/svn_repos_private.h?rev=1367002&r1=1367001&r2=1367002&view=diff
==============================================================================
--- subversion/branches/svn-bisect/subversion/include/private/svn_repos_private.h (original)
+++ subversion/branches/svn-bisect/subversion/include/private/svn_repos_private.h Mon Jul 30 06:39:28 2012
@@ -44,6 +44,14 @@ extern "C" {
*
* Use @a pool for temporary allocations.
*
+ * @note This function is used to implement server-side validation.
+ * Consequently, if you make this function stricter in what it accepts, you
+ * (a) break svnsync'ing of existing repositories that contain now-invalid
+ * properties, (b) do not preclude such invalid values from entering the
+ * repository via tools that use the svn_fs_* API directly (possibly
+ * including svnadmin and svnlook). This has happened before and there
+ * are known (documented, but unsupported) upgrade paths in some cases.
+ *
* @since New in 1.7.
*/
svn_error_t *
Modified: subversion/branches/svn-bisect/subversion/include/private/svn_subr_private.h
URL: http://svn.apache.org/viewvc/subversion/branches/svn-bisect/subversion/include/private/svn_subr_private.h?rev=1367002&r1=1367001&r2=1367002&view=diff
==============================================================================
--- subversion/branches/svn-bisect/subversion/include/private/svn_subr_private.h (original)
+++ subversion/branches/svn-bisect/subversion/include/private/svn_subr_private.h Mon Jul 30 06:39:28 2012
@@ -25,6 +25,7 @@
#define SVN_SUBR_PRIVATE_H
#include "svn_types.h"
+#include "svn_io.h"
#ifdef __cplusplus
@@ -188,6 +189,16 @@ svn_spillbuf__reader_write(svn_spillbuf_
apr_size_t len,
apr_pool_t *scratch_pool);
+
+/* Return a stream built on top of a spillbuf, using the same arguments as
+ svn_spillbuf__create(). This stream can be used for reading and writing,
+ but implements the same basic sematics of a spillbuf for the underlying
+ storage. */
+svn_stream_t *
+svn_stream__from_spillbuf(apr_size_t blocksize,
+ apr_size_t maxsize,
+ apr_pool_t *result_pool);
+
/** @} */
Modified: subversion/branches/svn-bisect/subversion/include/private/svn_wc_private.h
URL: http://svn.apache.org/viewvc/subversion/branches/svn-bisect/subversion/include/private/svn_wc_private.h?rev=1367002&r1=1367001&r2=1367002&view=diff
==============================================================================
--- subversion/branches/svn-bisect/subversion/include/private/svn_wc_private.h (original)
+++ subversion/branches/svn-bisect/subversion/include/private/svn_wc_private.h Mon Jul 30 06:39:28 2012
@@ -263,6 +263,15 @@ svn_wc__externals_gather_definitions(apr
apr_pool_t *result_pool,
apr_pool_t *scratch_pool);
+/* Close the DB for LOCAL_ABSPATH. Perform temporary allocations in
+ SCRATCH_POOL.
+
+ Wraps svn_wc__db_drop_root(). */
+svn_error_t *
+svn_wc__close_db(const char *external_abspath,
+ svn_wc_context_t *wc_ctx,
+ apr_pool_t *scratch_pool);
+
/** Set @a *tree_conflict to a newly allocated @c
* svn_wc_conflict_description_t structure describing the tree
* conflict state of @a victim_abspath, or to @c NULL if @a victim_abspath
@@ -479,6 +488,12 @@ svn_wc__node_get_url(const char **url,
* If not NULL, sets @a revision, @a repos_relpath, @a repos_root_url and
* @a repos_uuid to the original (if a copy) or their current values.
*
+ * If @a copy_root_abspath is not NULL, and @a *is_copy indicates that the
+ * node was copied, set @a *copy_root_abspath to the local absolute path of
+ * the root of the copied subtree containing the node. If the copied node is
+ * a root by itself, @a *copy_root_abspath will match @a local_abspath (but
+ * won't necessarily point to the same string in memory).
+ *
* If @a scan_deleted is TRUE, determine the origin of the deleted node. If
* @a scan_deleted is FALSE, return NULL, SVN_INVALID_REVNUM or FALSE for
* deleted nodes.
@@ -491,6 +506,7 @@ svn_wc__node_get_origin(svn_boolean_t *i
const char **repos_relpath,
const char **repos_root_url,
const char **repos_uuid,
+ const char **copy_root_abspath,
svn_wc_context_t *wc_ctx,
const char *local_abspath,
svn_boolean_t scan_deleted,
@@ -947,19 +963,6 @@ svn_wc__min_max_revisions(svn_revnum_t *
svn_boolean_t committed,
apr_pool_t *scratch_pool);
-/* Indicate in @a *is_sparse_checkout whether any of the nodes within
- * @a local_abspath is sparse, using context @a wc_ctx.
- * Use @a scratch_pool for temporary allocations.
- *
- * This function provides a subset of the functionality of
- * svn_wc_revision_status2() and is more efficient if the caller
- * doesn't need all information returned by svn_wc_revision_status2(). */
-svn_error_t *
-svn_wc__is_sparse_checkout(svn_boolean_t *is_sparse_checkout,
- svn_wc_context_t *wc_ctx,
- const char *local_abspath,
- apr_pool_t *scratch_pool);
-
/* Indicate in @a is_switched whether any node beneath @a local_abspath
* is switched, using context @a wc_ctx.
* Use @a scratch_pool for temporary allocations.
@@ -1309,6 +1312,316 @@ svn_wc__resolve_relative_external_url(co
apr_pool_t *result_pool,
apr_pool_t *scratch_pool);
+
+/**
+ * Set @a *editor and @a *edit_baton to an editor that generates
+ * #svn_wc_status3_t structures and sends them through @a status_func /
+ * @a status_baton. @a anchor_abspath is a working copy directory
+ * directory which will be used as the root of our editor. If @a
+ * target_basename is not "", it represents a node in the @a anchor_abspath
+ * which is the subject of the editor drive (otherwise, the @a
+ * anchor_abspath is the subject).
+ *
+ * If @a set_locks_baton is non-@c NULL, it will be set to a baton that can
+ * be used in a call to the svn_wc_status_set_repos_locks() function.
+ *
+ * Callers drive this editor to describe working copy out-of-dateness
+ * with respect to the repository. If this information is not
+ * available or not desired, callers should simply call the
+ * close_edit() function of the @a editor vtable.
+ *
+ * If the editor driver calls @a editor's set_target_revision() vtable
+ * function, then when the edit drive is completed, @a *edit_revision
+ * will contain the revision delivered via that interface.
+ *
+ * Assuming the target is a directory, then:
+ *
+ * - If @a get_all is FALSE, then only locally-modified entries will be
+ * returned. If TRUE, then all entries will be returned.
+ *
+ * - If @a depth is #svn_depth_empty, a status structure will
+ * be returned for the target only; if #svn_depth_files, for the
+ * target and its immediate file children; if
+ * #svn_depth_immediates, for the target and its immediate
+ * children; if #svn_depth_infinity, for the target and
+ * everything underneath it, fully recursively.
+ *
+ * If @a depth is #svn_depth_unknown, take depths from the
+ * working copy and behave as above in each directory's case.
+ *
+ * If the given @a depth is incompatible with the depth found in a
+ * working copy directory, the found depth always governs.
+ *
+ * If @a no_ignore is set, statuses that would typically be ignored
+ * will instead be reported.
+ *
+ * @a ignore_patterns is an array of file patterns matching
+ * unversioned files to ignore for the purposes of status reporting,
+ * or @c NULL if the default set of ignorable file patterns should be used.
+ *
+ * If @a cancel_func is non-NULL, call it with @a cancel_baton while building
+ * the @a statushash to determine if the client has canceled the operation.
+ *
+ * If @a depth_as_sticky is set handle @a depth like when depth_is_sticky is
+ * passed for updating. This will show excluded nodes show up as added in the
+ * repository.
+ *
+ * If @a server_performs_filtering is TRUE, assume that the server handles
+ * the ambient depth filtering, so this doesn't have to be handled in the
+ * editor.
+ *
+ * Allocate the editor itself in @a result_pool, and use @a scratch_pool
+ * for temporary allocations. The editor will do its temporary allocations
+ * in a subpool of @a result_pool.
+ *
+ * @since New in 1.8.
+ */
+svn_error_t *
+svn_wc__get_status_editor(const svn_delta_editor_t **editor,
+ void **edit_baton,
+ void **set_locks_baton,
+ svn_revnum_t *edit_revision,
+ svn_wc_context_t *wc_ctx,
+ const char *anchor_abspath,
+ const char *target_basename,
+ svn_depth_t depth,
+ svn_boolean_t get_all,
+ svn_boolean_t no_ignore,
+ svn_boolean_t depth_as_sticky,
+ svn_boolean_t server_performs_filtering,
+ const apr_array_header_t *ignore_patterns,
+ svn_wc_status_func4_t status_func,
+ void *status_baton,
+ svn_cancel_func_t cancel_func,
+ void *cancel_baton,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
+
+
+/**
+ * Set @a *editor and @a *edit_baton to an editor and baton for updating a
+ * working copy.
+ *
+ * @a anchor_abspath is a local working copy directory, with a fully recursive
+ * write lock in @a wc_ctx, which will be used as the root of our editor.
+ *
+ * @a target_basename is the entry in @a anchor_abspath that will actually be
+ * updated, or the empty string if all of @a anchor_abspath should be updated.
+ *
+ * The editor invokes @a notify_func with @a notify_baton as the update
+ * progresses, if @a notify_func is non-NULL.
+ *
+ * If @a cancel_func is non-NULL, the editor will invoke @a cancel_func with
+ * @a cancel_baton as the update progresses to see if it should continue.
+ *
+ * If @a conflict_func is non-NULL, then invoke it with @a
+ * conflict_baton whenever a conflict is encountered, giving the
+ * callback a chance to resolve the conflict before the editor takes
+ * more drastic measures (such as marking a file conflicted, or
+ * bailing out of the update).
+ *
+ * If @a external_func is non-NULL, then invoke it with @a external_baton
+ * whenever external changes are encountered, giving the callback a chance
+ * to store the external information for processing.
+ *
+ * If @a diff3_cmd is non-NULL, then use it as the diff3 command for
+ * any merging; otherwise, use the built-in merge code.
+ *
+ * @a preserved_exts is an array of filename patterns which, when
+ * matched against the extensions of versioned files, determine for
+ * which such files any related generated conflict files will preserve
+ * the original file's extension as their own. If a file's extension
+ * does not match any of the patterns in @a preserved_exts (which is
+ * certainly the case if @a preserved_exts is @c NULL or empty),
+ * generated conflict files will carry Subversion's custom extensions.
+ *
+ * @a target_revision is a pointer to a revision location which, after
+ * successful completion of the drive of this editor, will be
+ * populated with the revision to which the working copy was updated.
+ *
+ * If @a use_commit_times is TRUE, then all edited/added files will
+ * have their working timestamp set to the last-committed-time. If
+ * FALSE, the working files will be touched with the 'now' time.
+ *
+ * If @a allow_unver_obstructions is TRUE, then allow unversioned
+ * obstructions when adding a path.
+ *
+ * If @a adds_as_modification is TRUE, a local addition at the same path
+ * as an incoming addition of the same node kind results in a normal node
+ * with a possible local modification, instead of a tree conflict.
+ *
+ * If @a depth is #svn_depth_infinity, update fully recursively.
+ * Else if it is #svn_depth_immediates, update the uppermost
+ * directory, its file entries, and the presence or absence of
+ * subdirectories (but do not descend into the subdirectories).
+ * Else if it is #svn_depth_files, update the uppermost directory
+ * and its immediate file entries, but not subdirectories.
+ * Else if it is #svn_depth_empty, update exactly the uppermost
+ * target, and don't touch its entries.
+ *
+ * If @a depth_is_sticky is set and @a depth is not
+ * #svn_depth_unknown, then in addition to updating PATHS, also set
+ * their sticky ambient depth value to @a depth.
+ *
+ * If @a server_performs_filtering is TRUE, assume that the server handles
+ * the ambient depth filtering, so this doesn't have to be handled in the
+ * editor.
+ *
+ * If @a fetch_dirents_func is not NULL, the update editor may call this
+ * callback, when asked to perform a depth restricted update. It will do this
+ * before returning the editor to allow using the primary ra session for this.
+ *
+ * @since New in 1.8.
+ */
+svn_error_t *
+svn_wc__get_update_editor(const svn_delta_editor_t **editor,
+ void **edit_baton,
+ svn_revnum_t *target_revision,
+ svn_wc_context_t *wc_ctx,
+ const char *anchor_abspath,
+ const char *target_basename,
+ svn_boolean_t use_commit_times,
+ svn_depth_t depth,
+ svn_boolean_t depth_is_sticky,
+ svn_boolean_t allow_unver_obstructions,
+ svn_boolean_t adds_as_modification,
+ svn_boolean_t server_performs_filtering,
+ svn_boolean_t clean_checkout,
+ const char *diff3_cmd,
+ const apr_array_header_t *preserved_exts,
+ svn_wc_dirents_func_t fetch_dirents_func,
+ void *fetch_dirents_baton,
+ svn_wc_conflict_resolver_func2_t conflict_func,
+ void *conflict_baton,
+ svn_wc_external_update_t external_func,
+ void *external_baton,
+ svn_cancel_func_t cancel_func,
+ void *cancel_baton,
+ svn_wc_notify_func2_t notify_func,
+ void *notify_baton,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
+
+
+/**
+ * A variant of svn_wc__get_update_editor().
+ *
+ * Set @a *editor and @a *edit_baton to an editor and baton for "switching"
+ * a working copy to a new @a switch_url. (Right now, this URL must be
+ * within the same repository that the working copy already comes
+ * from.) @a switch_url must not be @c NULL.
+ *
+ * All other parameters behave as for svn_wc__get_update_editor().
+ *
+ * @since New in 1.8.
+ */
+svn_error_t *
+svn_wc__get_switch_editor(const svn_delta_editor_t **editor,
+ void **edit_baton,
+ svn_revnum_t *target_revision,
+ svn_wc_context_t *wc_ctx,
+ const char *anchor_abspath,
+ const char *target_basename,
+ const char *switch_url,
+ svn_boolean_t use_commit_times,
+ svn_depth_t depth,
+ svn_boolean_t depth_is_sticky,
+ svn_boolean_t allow_unver_obstructions,
+ svn_boolean_t server_performs_filtering,
+ const char *diff3_cmd,
+ const apr_array_header_t *preserved_exts,
+ svn_wc_dirents_func_t fetch_dirents_func,
+ void *fetch_dirents_baton,
+ svn_wc_conflict_resolver_func2_t conflict_func,
+ void *conflict_baton,
+ svn_wc_external_update_t external_func,
+ void *external_baton,
+ svn_cancel_func_t cancel_func,
+ void *cancel_baton,
+ svn_wc_notify_func2_t notify_func,
+ void *notify_baton,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
+
+
+
+/**
+ * Return an @a editor/@a edit_baton for diffing a working copy against the
+ * repository. The editor is allocated in @a result_pool; temporary
+ * calculations are performed in @a scratch_pool.
+ *
+ * This editor supports diffing either the actual files and properties in the
+ * working copy (when @a use_text_base is #FALSE), or the current pristine
+ * information (when @a use_text_base is #TRUE) against the editor driver.
+ *
+ * @a anchor_abspath/@a target represent the base of the hierarchy to be
+ * compared. The diff callback paths will be relative to this path.
+ *
+ * Diffs will be reported as valid relpaths, with @a anchor_abspath being
+ * the root ("").
+ *
+ * @a callbacks/@a callback_baton is the callback table to use.
+ *
+ * If @a depth is #svn_depth_empty, just diff exactly @a target or
+ * @a anchor_path if @a target is empty. If #svn_depth_files then do the same
+ * and for top-level file entries as well (if any). If
+ * #svn_depth_immediates, do the same as #svn_depth_files but also diff
+ * top-level subdirectories at #svn_depth_empty. If #svn_depth_infinity,
+ * then diff fully recursively.
+ *
+ * @a ignore_ancestry determines whether paths that have discontinuous node
+ * ancestry are treated as delete/add or as simple modifications. If
+ * @a ignore_ancestry is @c FALSE, then any discontinuous node ancestry will
+ * result in the diff given as a full delete followed by an add.
+ *
+ * @a show_copies_as_adds determines whether paths added with history will
+ * appear as a diff against their copy source, or whether such paths will
+ * appear as if they were newly added in their entirety.
+ *
+ * If @a use_git_diff_format is TRUE, copied paths will be treated as added
+ * if they weren't modified after being copied. This allows the callbacks
+ * to generate appropriate --git diff headers for such files.
+ *
+ * Normally, the difference from repository->working_copy is shown.
+ * If @a reverse_order is TRUE, then show working_copy->repository diffs.
+ *
+ * If @a cancel_func is non-NULL, it will be used along with @a cancel_baton
+ * to periodically check if the client has canceled the operation.
+ *
+ * @a changelist_filter is an array of <tt>const char *</tt> changelist
+ * names, used as a restrictive filter on items whose differences are
+ * reported; that is, don't generate diffs about any item unless
+ * it's a member of one of those changelists. If @a changelist_filter is
+ * empty (or altogether @c NULL), no changelist filtering occurs.
+ *
+ * If @a server_performs_filtering is TRUE, assume that the server handles
+ * the ambient depth filtering, so this doesn't have to be handled in the
+ * editor.
+ *
+ * @since New in 1.8.
+ */
+svn_error_t *
+svn_wc__get_diff_editor(const svn_delta_editor_t **editor,
+ void **edit_baton,
+ svn_wc_context_t *wc_ctx,
+ const char *anchor_abspath,
+ const char *target,
+ svn_depth_t depth,
+ svn_boolean_t ignore_ancestry,
+ svn_boolean_t show_copies_as_adds,
+ svn_boolean_t use_git_diff_format,
+ svn_boolean_t use_text_base,
+ svn_boolean_t reverse_order,
+ svn_boolean_t server_performs_filtering,
+ const apr_array_header_t *changelist_filter,
+ const svn_wc_diff_callbacks4_t *callbacks,
+ void *callback_baton,
+ svn_cancel_func_t cancel_func,
+ void *cancel_baton,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
+
+
#ifdef __cplusplus
}
#endif /* __cplusplus */
Modified: subversion/branches/svn-bisect/subversion/include/svn_checksum.h
URL: http://svn.apache.org/viewvc/subversion/branches/svn-bisect/subversion/include/svn_checksum.h?rev=1367002&r1=1367001&r2=1367002&view=diff
==============================================================================
--- subversion/branches/svn-bisect/subversion/include/svn_checksum.h (original)
+++ subversion/branches/svn-bisect/subversion/include/svn_checksum.h Mon Jul 30 06:39:28 2012
@@ -239,6 +239,14 @@ svn_checksum_final(svn_checksum_t **chec
apr_size_t
svn_checksum_size(const svn_checksum_t *checksum);
+/**
+ * Return @c TRUE iff CHECKSUM matches the checksum for the empty string.
+ *
+ * @since New in 1.8.
+ */
+svn_boolean_t
+svn_checksum_is_empty_checksum(svn_checksum_t *checksum);
+
/**
* Return an error of type #SVN_ERR_CHECKSUM_MISMATCH for @a actual and
Modified: subversion/branches/svn-bisect/subversion/include/svn_client.h
URL: http://svn.apache.org/viewvc/subversion/branches/svn-bisect/subversion/include/svn_client.h?rev=1367002&r1=1367001&r2=1367002&view=diff
==============================================================================
--- subversion/branches/svn-bisect/subversion/include/svn_client.h (original)
+++ subversion/branches/svn-bisect/subversion/include/svn_client.h Mon Jul 30 06:39:28 2012
@@ -2877,6 +2877,7 @@ svn_client_diff6(const apr_array_header_
svn_boolean_t no_diff_deleted,
svn_boolean_t show_copies_as_adds,
svn_boolean_t ignore_content_type,
+ svn_boolean_t ignore_prop_diff,
svn_boolean_t use_git_diff_format,
const char *header_encoding,
svn_stream_t *outstream,
@@ -2886,7 +2887,8 @@ svn_client_diff6(const apr_array_header_
apr_pool_t *pool);
/** Similar to svn_client_diff6(), but with @a outfile and @a errfile,
- * instead of @a outstream and @a errstream.
+ * instead of @a outstream and @a errstream, and always showing property
+ * changes.
*
* @deprecated Provided for backward compatibility with the 1.7 API.
* @since New in 1.7.
@@ -3035,6 +3037,7 @@ svn_client_diff_peg6(const apr_array_hea
svn_boolean_t no_diff_deleted,
svn_boolean_t show_copies_as_adds,
svn_boolean_t ignore_content_type,
+ svn_boolean_t ignore_prop_diff,
svn_boolean_t use_git_diff_format,
const char *header_encoding,
svn_stream_t *outstream,
@@ -3044,7 +3047,8 @@ svn_client_diff_peg6(const apr_array_hea
apr_pool_t *pool);
/** Similar to svn_client_diff_peg6(), but with @a outfile and @a errfile,
- * instead of @a outstream and @a errstream.
+ * instead of @a outstream and @a errstream, and always showing property
+ * changes.
*
* @deprecated Provided for backward compatibility with the 1.7 API.
* @since New in 1.7.
@@ -3435,14 +3439,46 @@ svn_client_merge(const char *source1,
apr_pool_t *pool);
+/**
+ * Determine the URLs and revisions needed to perform a reintegrate merge
+ * from @a source_path_or_url at @a source_peg_revision into the working
+ * copy at @a target_wcpath.
+ *
+ * Set @a *url1_p and @a *rev1_p to the left side, and @a *url2_p and
+ * @a *rev2_p to the right side, URLs and revisions of the source of the
+ * required two-URL merge.
+ *
+ * If no merge should be performed, set @a *url1_p to NULL and @a *rev1_p
+ * to #SVN_INVALID_REVNUM.
+ *
+ * The authentication baton cached in @a ctx is used to communicate with the
+ * repository.
+ *
+ * Allocate all the results in @a result_pool. Use @a scratch_pool for
+ * temporary allocations.
+ *
+ * @since New in 1.8.
+ */
+svn_error_t *
+svn_client_find_reintegrate_merge(const char **url1_p,
+ svn_revnum_t *rev1_p,
+ const char **url2_p,
+ svn_revnum_t *rev2_p,
+ /* inputs */
+ const char *source_path_or_url,
+ const svn_opt_revision_t *source_peg_revision,
+ const char *target_wcpath,
+ svn_client_ctx_t *ctx,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
/**
- * Perform a reintegration merge of @a source at @a peg_revision
+ * Perform a reintegration merge of @a source_path_or_url at @a source_peg_revision
* into @a target_wcpath.
* @a target_wcpath must be a single-revision, #svn_depth_infinity,
* pristine, unswitched working copy -- in other words, it must
* reflect a single revision tree, the "target". The mergeinfo on @a
- * source must reflect that all of the target has been merged into it.
+ * source_path_or_url must reflect that all of the target has been merged into it.
* Then this behaves like a merge with svn_client_merge4() from the
* target's URL to the source.
*
@@ -3452,8 +3488,8 @@ svn_client_merge(const char *source1,
* @since New in 1.5.
*/
svn_error_t *
-svn_client_merge_reintegrate(const char *source,
- const svn_opt_revision_t *peg_revision,
+svn_client_merge_reintegrate(const char *source_path_or_url,
+ const svn_opt_revision_t *source_peg_revision,
const char *target_wcpath,
svn_boolean_t dry_run,
const apr_array_header_t *merge_options,
@@ -3461,8 +3497,8 @@ svn_client_merge_reintegrate(const char
apr_pool_t *pool);
/**
- * Merge the changes between the filesystem object @a source in peg
- * revision @a peg_revision, as it changed between the ranges described
+ * Merge the changes between the filesystem object @a source_path_or_url in peg
+ * revision @a source_peg_revision, as it changed between the ranges described
* in @a ranges_to_merge.
*
* @a ranges_to_merge is an array of <tt>svn_opt_revision_range_t
@@ -3478,9 +3514,9 @@ svn_client_merge_reintegrate(const char
* @since New in 1.7.
*/
svn_error_t *
-svn_client_merge_peg4(const char *source,
+svn_client_merge_peg4(const char *source_path_or_url,
const apr_array_header_t *ranges_to_merge,
- const svn_opt_revision_t *peg_revision,
+ const svn_opt_revision_t *source_peg_revision,
const char *target_wcpath,
svn_depth_t depth,
svn_boolean_t ignore_ancestry,
Modified: subversion/branches/svn-bisect/subversion/include/svn_config.h
URL: http://svn.apache.org/viewvc/subversion/branches/svn-bisect/subversion/include/svn_config.h?rev=1367002&r1=1367001&r2=1367002&view=diff
==============================================================================
--- subversion/branches/svn-bisect/subversion/include/svn_config.h (original)
+++ subversion/branches/svn-bisect/subversion/include/svn_config.h Mon Jul 30 06:39:28 2012
@@ -135,6 +135,8 @@ typedef struct svn_config_t svn_config_t
#define SVN_CONFIG_OPTION_USE_SASL "use-sasl"
#define SVN_CONFIG_OPTION_MIN_SSF "min-encryption"
#define SVN_CONFIG_OPTION_MAX_SSF "max-encryption"
+/** @since New in 1.8. */
+#define SVN_CONFIG_SECTION_HOOKS_ENV "hooks-env"
/* For repository password database */
#define SVN_CONFIG_SECTION_USERS "users"
Modified: subversion/branches/svn-bisect/subversion/include/svn_delta.h
URL: http://svn.apache.org/viewvc/subversion/branches/svn-bisect/subversion/include/svn_delta.h?rev=1367002&r1=1367001&r2=1367002&view=diff
==============================================================================
--- subversion/branches/svn-bisect/subversion/include/svn_delta.h (original)
+++ subversion/branches/svn-bisect/subversion/include/svn_delta.h Mon Jul 30 06:39:28 2012
@@ -792,8 +792,9 @@ svn_txdelta_skip_svndiff_window(apr_file
* number of operations later. As a result, an editor driver must not
* assume that an error from an editing function resulted from the
* particular operation being detected. Moreover, once an editing
- * function returns an error, the edit is dead; the only further
- * operation which may be called on the editor is abort_edit.
+ * function (including @c close_edit) returns an error, the edit is
+ * dead; the only further operation which may be called on the editor
+ * is @c abort_edit.
*/
typedef struct svn_delta_editor_t
{
@@ -916,8 +917,9 @@ typedef struct svn_delta_editor_t
/** In the directory represented by @a parent_baton, indicate that
* @a path is present as a subdirectory in the edit source, but
- * cannot be conveyed to the edit consumer (perhaps because of
- * authorization restrictions).
+ * cannot be conveyed to the edit consumer. Currently, this would
+ * only occur because of authorization restrictions, but may change
+ * in the future.
*
* Any temporary allocations may be performed in @a scratch_pool.
*/
@@ -1040,8 +1042,9 @@ typedef struct svn_delta_editor_t
/** In the directory represented by @a parent_baton, indicate that
* @a path is present as a file in the edit source, but cannot be
- * conveyed to the edit consumer (perhaps because of authorization
- * restrictions).
+ * cannot be conveyed to the edit consumer. Currently, this would
+ * only occur because of authorization restrictions, but may change
+ * in the future.
*
* Any temporary allocations may be performed in @a scratch_pool.
*/
@@ -1095,6 +1098,7 @@ typedef svn_error_t *(*svn_delta_fetch_p
apr_hash_t **props,
void *baton,
const char *path,
+ svn_revnum_t base_revision,
apr_pool_t *result_pool,
apr_pool_t *scratch_pool
);
@@ -1108,6 +1112,22 @@ typedef svn_error_t *(*svn_delta_fetch_k
svn_kind_t *kind,
void *baton,
const char *path,
+ svn_revnum_t base_revision,
+ apr_pool_t *scratch_pool
+ );
+
+/** Callback to fetch the FILENAME of a file to use as the delta base for
+ * PATH. The file should last at least as long as RESULT_POOL. If the base
+ * stream is empty, return NULL through FILENAME.
+ *
+ * @since New in 1.8.
+ */
+typedef svn_error_t *(*svn_delta_fetch_base_func_t)(
+ const char **filename,
+ void *baton,
+ const char *path,
+ svn_revnum_t base_revision,
+ apr_pool_t *result_pool,
apr_pool_t *scratch_pool
);
@@ -1120,9 +1140,9 @@ typedef svn_error_t *(*svn_delta_fetch_k
typedef struct svn_delta_shim_callbacks_t
{
svn_delta_fetch_props_func_t fetch_props_func;
- void *fetch_props_baton;
svn_delta_fetch_kind_func_t fetch_kind_func;
- void *fetch_kind_baton;
+ svn_delta_fetch_base_func_t fetch_base_func;
+ void *fetch_baton;
} svn_delta_shim_callbacks_t;
/** Return a collection of default shim functions in @a result_pool.
Modified: subversion/branches/svn-bisect/subversion/include/svn_dirent_uri.h
URL: http://svn.apache.org/viewvc/subversion/branches/svn-bisect/subversion/include/svn_dirent_uri.h?rev=1367002&r1=1367001&r2=1367002&view=diff
==============================================================================
--- subversion/branches/svn-bisect/subversion/include/svn_dirent_uri.h (original)
+++ subversion/branches/svn-bisect/subversion/include/svn_dirent_uri.h Mon Jul 30 06:39:28 2012
@@ -28,7 +28,7 @@
* - a dirent is a path on (local) disc or a UNC path (Windows) in
* either relative or absolute format.
* Examples:
- * "/foo/bar", "X:/temp", "//server/share", "A:/" (Windows only)
+ * "/foo/bar", "X:/temp", "//server/share", "A:/" (Windows only), ""
* But not:
* "http://server"
*
@@ -39,13 +39,13 @@
* "http://server", "file:///path/to/repos",
* "svn+ssh://user@host:123/My%20Stuff/file.doc"
* But not:
- * "file", "dir/file", "A:/dir", "/My%20Stuff/file.doc"
+ * "file", "dir/file", "A:/dir", "/My%20Stuff/file.doc", ""
*
* - a relative path (relpath) is an unrooted path that can be joined
* to any other relative path, uri or dirent. A relative path is
* never rooted/prefixed by a '/'.
* Examples:
- * "file", "dir/file", "dir/subdir/../file"
+ * "file", "dir/file", "dir/subdir/../file", ""
* But not:
* "/file", "http://server/file"
*
@@ -54,6 +54,8 @@
* the path string if it's a dirent or a URI, it's up to the API user to
* make this choice. See also issue #2028.
*
+ * All incoming and outgoing paths are non-NULL unless otherwise documented.
+ *
* All of these functions expect paths passed into them to be in canonical
* form, except:
*
@@ -379,8 +381,8 @@ svn_uri_split(const char **dirpath,
/** Get the (URI-decoded) basename of the specified canonicalized @a
* uri. The basename is defined as the last component of the uri. If
- * the @a uri is root then that is returned. Otherwise, the returned
- * value will have no slashes in it.
+ * the @a uri is root, return "". The returned value will have no
+ * slashes in it.
*
* Example: svn_uri_basename("http://server/foo/bar") -> "bar"
*
@@ -760,7 +762,7 @@ svn_uri_condense_targets(const char **pc
*
* Allocate the result in @a result_pool.
*
- * Note: Use of this function is strongly encouraged. Do not roll your own.
+ * @note Use of this function is strongly encouraged. Do not roll your own.
* (http://cve.mitre.org/cgi-bin/cvename.cgi?name=2007-3846)
*
* @since New in 1.7.
Modified: subversion/branches/svn-bisect/subversion/include/svn_editor.h
URL: http://svn.apache.org/viewvc/subversion/branches/svn-bisect/subversion/include/svn_editor.h?rev=1367002&r1=1367001&r2=1367002&view=diff
==============================================================================
--- subversion/branches/svn-bisect/subversion/include/svn_editor.h (original)
+++ subversion/branches/svn-bisect/subversion/include/svn_editor.h Mon Jul 30 06:39:28 2012
@@ -87,7 +87,7 @@ extern "C" {
* receiver editing its tree to the target state defined by the driver.
*
*
- * HISTORY
+ * <h3>History</h3>
*
* Classically, Subversion had a notion of a "tree delta" which could be
* passed around as an independent entity. Theory implied this delta was an
@@ -117,6 +117,31 @@ extern "C" {
* the most common functionality (cancellation and debugging) have been
* integrated directly into this new editor system.
*
+ *
+ * <h3>Implementation Plan</h3>
+ * @note This section can be removed after Ev2 is fully implemented.
+ *
+ * The delta editor is pretty engrained throughout Subversion, so attempting
+ * to replace it in situ is somewhat akin to performing open heart surgery
+ * while the patient is running a marathon. However, a viable plan should
+ * make things a bit easier, and help parallelize the work.
+ *
+ * In short, the following items need to be done:
+ * -# Implement backward compatibility wrappers ("shims")
+ * -# Use shims to update editor consumers to Ev2
+ * -# Update editor producers to drive Ev2
+ * - This will largely involve rewriting the RA layers to accept and
+ * send Ev2 commands
+ * -# Optimize consumers and producers to leverage the features of Ev2
+ *
+ * The shims are largely self-contained, and as of this writing, are almost
+ * complete. They can be released without much ado. However, they do add
+ * <em>significant</em> performance regressions, which make releasing code
+ * which is half-delta-editor and half-Ev2 inadvisable. As such, the updating
+ * of producers and consumers to Ev2 will probably need to wait until 1.9,
+ * though it could be largely parallelized.
+ *
+ *
* @defgroup svn_editor The editor interface
* @{
*/
@@ -151,12 +176,13 @@ extern "C" {
* svn_editor_setcb_add_file() \n
* svn_editor_setcb_add_symlink() \n
* svn_editor_setcb_add_absent() \n
- * svn_editor_setcb_set_props() \n
- * svn_editor_setcb_set_text() \n
- * svn_editor_setcb_set_target() \n
+ * svn_editor_setcb_alter_directory() \n
+ * svn_editor_setcb_alter_file() \n
+ * svn_editor_setcb_alter_symlink() \n
* svn_editor_setcb_delete() \n
* svn_editor_setcb_copy() \n
* svn_editor_setcb_move() \n
+ * svn_editor_setcb_rotate() \n
* svn_editor_setcb_complete() \n
* svn_editor_setcb_abort()
*
@@ -173,12 +199,13 @@ extern "C" {
* svn_editor_add_file() \n
* svn_editor_add_symlink() \n
* svn_editor_add_absent() \n
- * svn_editor_set_props() \n
- * svn_editor_set_text() \n
- * svn_editor_set_target() \n
+ * svn_editor_alter_directory() \n
+ * svn_editor_alter_file() \n
+ * svn_editor_alter_symlink() \n
* svn_editor_delete() \n
* svn_editor_copy() \n
- * svn_editor_move()
+ * svn_editor_move() \n
+ * svn_editor_rotate()
* \n\n
* Just before each callback invocation is carried out, the @a cancel_func
* that was passed to svn_editor_create() is invoked to poll any
@@ -214,36 +241,29 @@ extern "C" {
* follow for each child mentioned in the @a children argument of any
* svn_editor_add_directory() call.
*
- * - svn_editor_set_props()
- * - The @a complete argument must be TRUE if no more calls will follow on
- * the same path. @a complete must always be TRUE for directories.
- * - If @a complete is FALSE, and:
- * - if @a relpath is a file, this must (at some point) be followed by
- * an svn_editor_set_text() call on the same path.
- * - if @a relpath is a symlink, this must (at some point) be followed by
- * an svn_editor_set_target() call on the same path.
+ * - For each node created with add_*, if its parent was created using
+ * svn_editor_add_directory(), then the new child node MUST have been
+ * mentioned in the @a children parameter of the parent's creation.
+ * This allows the parent directory to properly mark the child as
+ * "incomplete" until the child's add_* call arrives.
*
- * - svn_editor_set_text() and svn_editor_set_target() must always occur
- * @b after an svn_editor_set_props() call on the same path, if any.
- *
- * In other words, if there are two calls coming in on the same path, the
- * first of them has to be svn_editor_set_props().
- *
- * - Other than the above two pairs of linked operations, a path should
- * never be referenced more than once by the add_* and set_* and the
+ * - A path should
+ * never be referenced more than once by the add_*, alter_*, and
* delete operations (the "Once Rule"). The source path of a copy (and
* its children, if a directory) may be copied many times, and are
* otherwise subject to the Once Rule. The destination path of a copy
- * or move may have set_* operations applied, but not add_* or delete.
- * If the destination path of a copy or move is a directory, then its
- * children are subject to the Once Rule. The source path of a move
- * (and its child paths) may be referenced in add_*, or as the
- * destination of a copy (where these new, copied nodes are subject to
- * the Once Rule).
- *
- * - The ancestor of an added, copied-here, moved-here or modified node may
- * not be deleted. The ancestor may not be moved (instead: perform the
- * move, *then* the edits).
+ * or move may have alter_* operations applied, but not add_* or delete.
+ * If the destination path of a copy, move, or rotate is a directory,
+ * then its children are subject to the Once Rule. The source path of
+ * a move (and its child paths) may be referenced in add_*, or as the
+ * destination of a copy (where these new or copied nodes are subject
+ * to the Once Rule). Paths listed in a rotation are both sources and
+ * destinations, so they may not be referenced again in an add_* or a
+ * deletion; these paths may have alter_* operations applied.
+ *
+ * - The ancestor of an added, copied-here, moved-here, rotated, or
+ * modified node may not be deleted. The ancestor may not be moved
+ * (instead: perform the move, *then* the edits).
*
* - svn_editor_delete() must not be used to replace a path -- i.e.
* svn_editor_delete() must not be followed by an svn_editor_add_*() on
@@ -264,6 +284,10 @@ extern "C" {
* by a delete... that is fine. It is simply that svn_editor_move()
* should be used to describe a semantic move.
*
+ * - Paths mentioned in svn_editor_rotate() may have their properties
+ * and contents edited (via alter_* calls) by a previous or later call,
+ * but they may not be subject to a later move, rotate, or deletion.
+ *
* - One of svn_editor_complete() or svn_editor_abort() must be called
* exactly once, which must be the final call the driver invokes.
* Invoking svn_editor_complete() must imply that the set of changes has
@@ -271,18 +295,16 @@ extern "C" {
* svn_editor_abort() must imply that the transformation was not completed
* successfully.
*
- * - If any callback invocation returns with an error, the driver must
- * invoke svn_editor_abort() and stop transmitting operations.
+ * - If any callback invocation (besides svn_editor_complete()) returns
+ * with an error, the driver must invoke svn_editor_abort() and stop
+ * transmitting operations.
* \n\n
*
* <h3>Receiving Restrictions</h3>
- * All callbacks must complete their handling of a path before they
- * return, except for the following pairs, where a change must be completed
- * when receiving the second callback in each pair:
- * - svn_editor_set_props() (if @a complete is FALSE) and
- * svn_editor_set_text() (if the node is a file)
- * - svn_editor_set_props() (if @a complete is FALSE) and
- * svn_editor_set_target() (if the node is a symbolic link)
+ *
+ * All callbacks must complete their handling of a path before they return.
+ * Since future callbacks will never reference this path again (due to the
+ * Once Rule), the changes can and should be completed.
*
* This restriction is not recursive -- a directory's children may remain
* incomplete until later callback calls are received.
@@ -296,6 +318,19 @@ extern "C" {
* for these items are invoked.
* \n\n
*
+ * <h3>Timing and State</h3>
+ * The calls made by the driver to alter the state in the receiver are
+ * based on the receiver's *current* state, which includes all prior changes
+ * made during the edit.
+ *
+ * Example: copy A to B; set-props on A; copy A to C. The props on C
+ * should reflect the updated properties of A.
+ *
+ * Example: mv A@N to B; mv C@M to A. The second move cannot be marked as
+ * a "replacing" move since it is not replacing A. The node at A was moved
+ * away. The second operation is simply moving C to the now-empty path
+ * known as A.
+ *
* <h3>Paths</h3>
* Each driver/receiver implementation of this editor interface must
* establish the expected root path for the paths sent and received via the
@@ -417,35 +452,36 @@ typedef svn_error_t *(*svn_editor_cb_add
svn_revnum_t replaces_rev,
apr_pool_t *scratch_pool);
-/** @see svn_editor_set_props(), svn_editor_t.
+/** @see svn_editor_alter_directory(), svn_editor_t.
* @since New in 1.8.
*/
-typedef svn_error_t *(*svn_editor_cb_set_props_t)(
+typedef svn_error_t *(*svn_editor_cb_alter_directory_t)(
void *baton,
const char *relpath,
svn_revnum_t revision,
apr_hash_t *props,
- svn_boolean_t complete,
apr_pool_t *scratch_pool);
-/** @see svn_editor_set_text(), svn_editor_t.
+/** @see svn_editor_alter_file(), svn_editor_t.
* @since New in 1.8.
*/
-typedef svn_error_t *(*svn_editor_cb_set_text_t)(
+typedef svn_error_t *(*svn_editor_cb_alter_file_t)(
void *baton,
const char *relpath,
svn_revnum_t revision,
+ apr_hash_t *props,
const svn_checksum_t *checksum,
svn_stream_t *contents,
apr_pool_t *scratch_pool);
-/** @see svn_editor_set_target(), svn_editor_t.
+/** @see svn_editor_alter_symlink(), svn_editor_t.
* @since New in 1.8.
*/
-typedef svn_error_t *(*svn_editor_cb_set_target_t)(
+typedef svn_error_t *(*svn_editor_cb_alter_symlink_t)(
void *baton,
const char *relpath,
svn_revnum_t revision,
+ apr_hash_t *props,
const char *target,
apr_pool_t *scratch_pool);
@@ -480,6 +516,15 @@ typedef svn_error_t *(*svn_editor_cb_mov
svn_revnum_t replaces_rev,
apr_pool_t *scratch_pool);
+/** @see svn_editor_rotate(), svn_editor_t.
+ * @since New in 1.8.
+ */
+typedef svn_error_t *(*svn_editor_cb_rotate_t)(
+ void *baton,
+ const apr_array_header_t *relpaths,
+ const apr_array_header_t *revisions,
+ apr_pool_t *scratch_pool);
+
/** @see svn_editor_complete(), svn_editor_t.
* @since New in 1.8.
*/
@@ -564,38 +609,38 @@ svn_editor_setcb_add_absent(svn_editor_t
svn_editor_cb_add_absent_t callback,
apr_pool_t *scratch_pool);
-/** Sets the #svn_editor_cb_set_props_t callback in @a editor
+/** Sets the #svn_editor_cb_alter_directory_t callback in @a editor
* to @a callback.
* @a scratch_pool is used for temporary allocations (if any).
* @see also svn_editor_setcb_many().
* @since New in 1.8.
*/
svn_error_t *
-svn_editor_setcb_set_props(svn_editor_t *editor,
- svn_editor_cb_set_props_t callback,
- apr_pool_t *scratch_pool);
+svn_editor_setcb_alter_directory(svn_editor_t *editor,
+ svn_editor_cb_alter_directory_t callback,
+ apr_pool_t *scratch_pool);
-/** Sets the #svn_editor_cb_set_text_t callback in @a editor
+/** Sets the #svn_editor_cb_alter_file_t callback in @a editor
* to @a callback.
* @a scratch_pool is used for temporary allocations (if any).
* @see also svn_editor_setcb_many().
* @since New in 1.8.
*/
svn_error_t *
-svn_editor_setcb_set_text(svn_editor_t *editor,
- svn_editor_cb_set_text_t callback,
- apr_pool_t *scratch_pool);
+svn_editor_setcb_alter_file(svn_editor_t *editor,
+ svn_editor_cb_alter_file_t callback,
+ apr_pool_t *scratch_pool);
-/** Sets the #svn_editor_cb_set_target_t callback in @a editor
+/** Sets the #svn_editor_cb_alter_symlink_t callback in @a editor
* to @a callback.
* @a scratch_pool is used for temporary allocations (if any).
* @see also svn_editor_setcb_many().
* @since New in 1.8.
*/
svn_error_t *
-svn_editor_setcb_set_target(svn_editor_t *editor,
- svn_editor_cb_set_target_t callback,
- apr_pool_t *scratch_pool);
+svn_editor_setcb_alter_symlink(svn_editor_t *editor,
+ svn_editor_cb_alter_symlink_t callback,
+ apr_pool_t *scratch_pool);
/** Sets the #svn_editor_cb_delete_t callback in @a editor
* to @a callback.
@@ -630,6 +675,17 @@ svn_editor_setcb_move(svn_editor_t *edit
svn_editor_cb_move_t callback,
apr_pool_t *scratch_pool);
+/** Sets the #svn_editor_cb_rotate_t callback in @a editor
+ * to @a callback.
+ * @a scratch_pool is used for temporary allocations (if any).
+ * @see also svn_editor_setcb_many().
+ * @since New in 1.8.
+ */
+svn_error_t *
+svn_editor_setcb_rotate(svn_editor_t *editor,
+ svn_editor_cb_rotate_t callback,
+ apr_pool_t *scratch_pool);
+
/** Sets the #svn_editor_cb_complete_t callback in @a editor
* to @a callback.
* @a scratch_pool is used for temporary allocations (if any).
@@ -664,12 +720,13 @@ typedef struct svn_editor_cb_many_t
svn_editor_cb_add_file_t cb_add_file;
svn_editor_cb_add_symlink_t cb_add_symlink;
svn_editor_cb_add_absent_t cb_add_absent;
- svn_editor_cb_set_props_t cb_set_props;
- svn_editor_cb_set_text_t cb_set_text;
- svn_editor_cb_set_target_t cb_set_target;
+ svn_editor_cb_alter_directory_t cb_alter_directory;
+ svn_editor_cb_alter_file_t cb_alter_file;
+ svn_editor_cb_alter_symlink_t cb_alter_symlink;
svn_editor_cb_delete_t cb_delete;
svn_editor_cb_copy_t cb_copy;
svn_editor_cb_move_t cb_move;
+ svn_editor_cb_rotate_t cb_rotate;
svn_editor_cb_complete_t cb_complete;
svn_editor_cb_abort_t cb_abort;
@@ -706,7 +763,9 @@ svn_editor_setcb_many(svn_editor_t *edit
*
* A complete listing of the immediate children of @a relpath that will be
* added subsequently is given in @a children. @a children is an array of
- * const char*s, each giving the basename of an immediate child.
+ * const char*s, each giving the basename of an immediate child. It is an
+ * error to pass NULL for @a children; use an empty array to indicate
+ * the new directory will have no children.
*
* For all restrictions on driving the editor, see #svn_editor_t.
*/
@@ -723,17 +782,18 @@ svn_editor_add_directory(svn_editor_t *e
* is expected to exist.
*
* The file's contents are specified in @a contents which has a checksum
- * matching @a checksum.
+ * matching @a checksum. Both values must be non-NULL.
*
* Set the properties of the new file to @a props, which is an
* apr_hash_t holding key-value pairs. Each key is a const char* of a
* property name, each value is a const svn_string_t*. If no properties are
- * being set on the new file, @a props must be NULL.
+ * being set on the new file, @a props must be the empty hash. It is an
+ * error to pass NULL for @a props.
*
* If this add is expected to replace a previously existing file, symlink or
* directory at @a relpath, the revision number of the node to be replaced
* must be given in @a replaces_rev. Otherwise, @a replaces_rev must be
- * SVN_INVALID_REVNUM. Note: it is not allowed to call a "delete" followed
+ * #SVN_INVALID_REVNUM. Note: it is not allowed to call a "delete" followed
* by an "add" on the same path. Instead, an "add" with @a replaces_rev set
* accordingly MUST be used.
*
@@ -784,65 +844,82 @@ svn_editor_add_absent(svn_editor_t *edit
svn_kind_t kind,
svn_revnum_t replaces_rev);
-/** Drive @a editor's #svn_editor_cb_set_props_t callback.
+/** Drive @a editor's #svn_editor_cb_alter_directory_t callback.
*
- * Set or change properties on the existing node at @a relpath. This
- * function sends *all* properties, both existing and changes.
- * ### TODO @todo What is REVISION for?
- * ### HKW: This is puzzling to me as well...
- * ###
- * ### what about "entry props"? will these still be handled via
- * ### the general prop function?
+ * Alter the properties of the directory at @a relpath. @a revision
+ * specifies the expected revision of the directory. This is used to
+ * catched attempts at altering out-of-date directories. If the
+ * directory does not have a corresponding revision in the repository
+ * (e.g. it has not yet been committed), then @a revision should be
+ * #SVN_INVALID_REVNUM.
*
* For a description of @a props, see svn_editor_add_file().
*
- * @a complete must be FALSE if and only if
- * - @a relpath is a file and an svn_editor_set_text() call will follow on
- * the same path, or
- * - @a relpath is a symbolic link and an svn_editor_set_target() call will
- * follow on the same path.
- *
* For all restrictions on driving the editor, see #svn_editor_t.
* @since New in 1.8.
*/
svn_error_t *
-svn_editor_set_props(svn_editor_t *editor,
- const char *relpath,
- svn_revnum_t revision,
- apr_hash_t *props,
- svn_boolean_t complete);
+svn_editor_alter_directory(svn_editor_t *editor,
+ const char *relpath,
+ svn_revnum_t revision,
+ apr_hash_t *props);
-/** Drive @a editor's #svn_editor_cb_set_text_t callback.
+/** Drive @a editor's #svn_editor_cb_alter_file_t callback.
+ *
+ * Alter the properties and/or the contents of the file at @a relpath
+ * with @a revision as its expected revision. See svn_editor_alter_directory()
+ * for more information about @a revision.
+ *
+ * If @a props is non-NULL, then the properties will be applied.
+ *
+ * If @a contents is non-NULL, then the stream will be copied to
+ * the file, and its checksum must match @a checksum (which must also
+ * be non-NULL). If @a contents is NULL, then @a checksum must also
+ * be NULL, and no change will be applied to the file's contents.
*
- * Set/change the text content of a file at @a relpath to @a contents
- * with checksum @a checksum.
- * ### TODO @todo Does this send the *complete* content, always?
- * ### TODO @todo What is REVISION for?
+ * The properties and/or the contents must be changed. It is an error to
+ * pass NULL for @a props, @a checksum, and @a contents.
+ *
+ * For a description of @a checksum, and @a contents see
+ * svn_editor_add_file(). This functions allows @a props to be NULL, but
+ * the parameter is otherwise described by svn_editor_add_file().
*
* For all restrictions on driving the editor, see #svn_editor_t.
* @since New in 1.8.
*/
svn_error_t *
-svn_editor_set_text(svn_editor_t *editor,
- const char *relpath,
- svn_revnum_t revision,
- const svn_checksum_t *checksum,
- svn_stream_t *contents);
+svn_editor_alter_file(svn_editor_t *editor,
+ const char *relpath,
+ svn_revnum_t revision,
+ apr_hash_t *props,
+ const svn_checksum_t *checksum,
+ svn_stream_t *contents);
-/** Drive @a editor's #svn_editor_cb_set_target_t callback.
+/** Drive @a editor's #svn_editor_cb_alter_symlink_t callback.
+ *
+ * Alter the properties and/or the target of the symlink at @a relpath
+ * with @a revision as its expected revision. See svn_editor_alter_directory()
+ * for more information about @a revision.
+ *
+ * If @a props is non-NULL, then the properties will be applied.
*
- * Set/change the link target that a symbolic link at @a relpath points at
- * to @a target.
- * ### TODO @todo What is REVISION for?
+ * If @a target is non-NULL, then the symlink's target will be updated.
+ *
+ * The properties and/or the target must be changed. It is an error to
+ * pass NULL for @a props and @a target.
+ *
+ * This functions allows @a props to be NULL, but the parameter is
+ * otherwise described by svn_editor_add_file().
*
* For all restrictions on driving the editor, see #svn_editor_t.
* @since New in 1.8.
*/
svn_error_t *
-svn_editor_set_target(svn_editor_t *editor,
- const char *relpath,
- svn_revnum_t revision,
- const char *target);
+svn_editor_alter_symlink(svn_editor_t *editor,
+ const char *relpath,
+ svn_revnum_t revision,
+ apr_hash_t *props,
+ const char *target);
/** Drive @a editor's #svn_editor_cb_delete_t callback.
*
@@ -880,20 +957,6 @@ svn_editor_copy(svn_editor_t *editor,
*
* For a description of @a replaces_rev, see svn_editor_add_file().
*
- * ### stsp: How would I describe a merge of revision range rA-rB,
- * ### within which a file foo.c was delete in rN, re-created in rM,
- * ### and then renamed to bar.c in rX?
- * ### Would the following be valid?
- * ### svn_editor_add_file(ed, "foo.c", props, rN);
- * ### svn_editor_move(ed, "foo.c", rM, "bar.c", rN);
- * ###
- * ### gstein: An editor is used to make changes to a tree rather than
- * ### model *how* the tree changed. If the receiver's tree is at
- * ### revision N-1, then the operations would be:
- * ### svn_editor_delete(ed, "foo.c", N-1);
- * ### svn_editor_copy(ed, "foo.c", M, "bar.c", SVN_INVALID_REVNUM);
- * ### That edits the tree to the appropriate state.
- *
* For all restrictions on driving the editor, see #svn_editor_t.
* @since New in 1.8.
*/
@@ -904,6 +967,33 @@ svn_editor_move(svn_editor_t *editor,
const char *dst_relpath,
svn_revnum_t replaces_rev);
+/** Drive @a editor's #svn_editor_cb_rotate_t callback.
+ *
+ * Perform a rotation among multiple nodes in the target tree.
+ *
+ * The @a relpaths and @a revisions arrays (pair-wise) specify nodes in the
+ * tree which are located at a path and expected to be at a specific
+ * revision. These nodes are simultaneously moved in a rotation pattern.
+ * For example, the node at index 0 of @a relpaths and @a revisions will
+ * be moved to the relpath specified at index 1 of @a relpaths. The node
+ * at index 1 will be moved to the location at index 2. The node at index
+ * N-1 will be moved to the relpath specifed at index 0.
+ *
+ * The simplest form of this operation is to swap nodes A and B. One may
+ * think to move A to a temporary location T, then move B to A, then move
+ * T to B. However, this last move violations the Once Rule by moving T
+ * (which had already by edited by the move from A). In order to keep the
+ * restrictions against multiple moves of a single node, the rotation
+ * operation is needed for certain types of tree edits.
+ *
+ * For all restrictions on driving the editor, see #svn_editor_t.
+ * @since New in 1.8.
+ */
+svn_error_t *
+svn_editor_rotate(svn_editor_t *editor,
+ const apr_array_header_t *relpaths,
+ const apr_array_header_t *revisions);
+
/** Drive @a editor's #svn_editor_cb_complete_t callback.
*
* Send word that the edit has been completed successfully.
Modified: subversion/branches/svn-bisect/subversion/include/svn_fs.h
URL: http://svn.apache.org/viewvc/subversion/branches/svn-bisect/subversion/include/svn_fs.h?rev=1367002&r1=1367001&r2=1367002&view=diff
==============================================================================
--- subversion/branches/svn-bisect/subversion/include/svn_fs.h (original)
+++ subversion/branches/svn-bisect/subversion/include/svn_fs.h Mon Jul 30 06:39:28 2012
@@ -250,6 +250,10 @@ svn_fs_upgrade(const char *path,
* to the Subversion filesystem located in the directory @a path.
* Use @a pool for necessary allocations.
*
+ * @a start and @a end may be #SVN_INVALID_REVNUM, in which case
+ * svn_repos_verify_fs2()'s semantics apply. When @c r0 is being
+ * verified, global invariants may be verified as well.
+ *
* @note You probably don't want to use this directly. Take a look at
* svn_repos_verify_fs2() instead, which does non-backend-specific
* verifications as well.
@@ -260,7 +264,9 @@ svn_error_t *
svn_fs_verify(const char *path,
svn_cancel_func_t cancel_func,
void *cancel_baton,
- apr_pool_t *pool);
+ svn_revnum_t start,
+ svn_revnum_t end,
+ apr_pool_t *scratch_pool);
/**
* Return, in @a *fs_type, a string identifying the back-end type of
@@ -309,8 +315,31 @@ svn_fs_delete_fs(const char *path,
* means deleting copied, unused logfiles for a Berkeley DB source
* filesystem.
*
+ * If @a incremental is TRUE, make an effort to not re-copy information
+ * already present in the destination. If incremental hotcopy is not
+ * implemented, raise SVN_ERR_UNSUPPORTED_FEATURE.
+ *
+ * Use @a scratch_pool for temporary allocations.
+ *
+ * @since New in 1.8.
+ */
+svn_error_t *
+svn_fs_hotcopy2(const char *src_path,
+ const char *dest_path,
+ svn_boolean_t clean,
+ svn_boolean_t incremental,
+ svn_cancel_func_t cancel_func,
+ void *cancel_baton,
+ apr_pool_t *scratch_pool);
+
+/**
+ * Like svn_fs_hotcopy2(), but without the @a incremental parameter
+ * and without cancellation support.
+ *
+ * @deprecated Provided for backward compatibility with the 1.7 API.
* @since New in 1.1.
*/
+SVN_DEPRECATED
svn_error_t *
svn_fs_hotcopy(const char *src_path,
const char *dest_path,
Modified: subversion/branches/svn-bisect/subversion/include/svn_io.h
URL: http://svn.apache.org/viewvc/subversion/branches/svn-bisect/subversion/include/svn_io.h?rev=1367002&r1=1367001&r2=1367002&view=diff
==============================================================================
--- subversion/branches/svn-bisect/subversion/include/svn_io.h (original)
+++ subversion/branches/svn-bisect/subversion/include/svn_io.h Mon Jul 30 06:39:28 2012
@@ -989,6 +989,16 @@ svn_stream_t *
svn_stream_from_string(const svn_string_t *str,
apr_pool_t *pool);
+/** Return a generic stream which implements buffered reads and writes.
+ * The stream will preferentially store data in-memory, but may use
+ * disk storage as backup if the amount of data is large.
+ * Allocate the stream in @a result_pool
+ *
+ * @since New in 1.8.
+ */
+svn_stream_t *
+svn_stream_buffered(apr_pool_t *result_pool);
+
/** Return a stream that decompresses all data read and compresses all
* data written. The stream @a stream is used to read and write all
* compressed data. All compression data structures are allocated on
@@ -1521,10 +1531,35 @@ svn_io_dir_walk(const char *dirname,
* Otherwise, the invoked program runs with an empty environment and @a cmd
* must be an absolute path.
*
+ * If @a inherit is FALSE and @a env is not NULL, the invoked program
+ * inherits the environment defined by @a env, instead of an empty
+ * environment or the caller's environment.
+ *
* @note On some platforms, failure to execute @a cmd in the child process
* will result in error output being written to @a errfile, if non-NULL, and
* a non-zero exit status being returned to the parent process.
*
+ * @since New in 1.8.
+ */
+svn_error_t *svn_io_start_cmd3(apr_proc_t *cmd_proc,
+ const char *path,
+ const char *cmd,
+ const char *const *args,
+ const char *const *env,
+ svn_boolean_t inherit,
+ svn_boolean_t infile_pipe,
+ apr_file_t *infile,
+ svn_boolean_t outfile_pipe,
+ apr_file_t *outfile,
+ svn_boolean_t errfile_pipe,
+ apr_file_t *errfile,
+ apr_pool_t *pool);
+
+
+/**
+ * Similar to svn_io_start_cmd3() but with @a env always set to NULL.
+ *
+ * @deprecated Provided for backward compatibility with the 1.7 API
* @since New in 1.7.
*/
svn_error_t *svn_io_start_cmd2(apr_proc_t *cmd_proc,
Modified: subversion/branches/svn-bisect/subversion/include/svn_mergeinfo.h
URL: http://svn.apache.org/viewvc/subversion/branches/svn-bisect/subversion/include/svn_mergeinfo.h?rev=1367002&r1=1367001&r2=1367002&view=diff
==============================================================================
--- subversion/branches/svn-bisect/subversion/include/svn_mergeinfo.h (original)
+++ subversion/branches/svn-bisect/subversion/include/svn_mergeinfo.h Mon Jul 30 06:39:28 2012
@@ -166,9 +166,10 @@ svn_mergeinfo_parse(svn_mergeinfo_t *mer
apr_pool_t *pool);
/** Calculate the delta between two mergeinfos, @a mergefrom and @a mergeto
- * (which may be @c NULL), and place the result in @a *deleted and @a
- * *added (neither output argument may be @c NULL), both allocated in @a
- * result_pool.
+ * (either or both of which may be @c NULL meaning an empty mergeinfo).
+ * Place the result in @a *deleted and @a *added (neither output argument
+ * may be @c NULL), both allocated in @a result_pool. The resulting
+ * @a *deleted and @a *added will not be null.
*
* @a consider_inheritance determines how the rangelists in the two
* hashes are compared for equality. If @a consider_inheritance is FALSE,