Modified: subversion/branches/fsx-1.10/subversion/bindings/swig/perl/libsvn_swig_perl/swigutil_pl.h URL: http://svn.apache.org/viewvc/subversion/branches/fsx-1.10/subversion/bindings/swig/perl/libsvn_swig_perl/swigutil_pl.h?rev=1685464&r1=1685463&r2=1685464&view=diff ============================================================================== --- subversion/branches/fsx-1.10/subversion/bindings/swig/perl/libsvn_swig_perl/swigutil_pl.h (original) +++ subversion/branches/fsx-1.10/subversion/bindings/swig/perl/libsvn_swig_perl/swigutil_pl.h Sun Jun 14 20:58:10 2015 @@ -108,7 +108,7 @@ SV *svn_swig_pl_convert_array(const apr_ SV *svn_swig_pl_revnums_to_list(const apr_array_header_t *array); -svn_opt_revision_t *svn_swig_pl_set_revision(svn_opt_revision_t *rev, +svn_opt_revision_t *svn_swig_pl_set_revision(svn_opt_revision_t *rev, SV *source, svn_boolean_t croak_on_error, apr_pool_t *pool); @@ -135,9 +135,9 @@ svn_error_t * svn_swig_pl_thunk_client_d /* thunked commit editor callback. */ svn_error_t *svn_swig_pl_thunk_commit_callback(svn_revnum_t new_revision, - const char *date, - const char *author, - void *baton); + const char *date, + const char *author, + void *baton); /* thunked commit editor callback2. */ svn_error_t *svn_swig_pl_thunk_commit_callback2(const svn_commit_info_t *commit_info, @@ -209,22 +209,15 @@ svn_error_t *svn_swig_pl_thunk_ssl_clien svn_boolean_t may_save, apr_pool_t *pool); -/* thunked callback for svn_ra_get_wc_prop_func_t */ -svn_error_t *thunk_get_wc_prop(void *baton, - const char *relpath, - const char *name, - const svn_string_t **value, - apr_pool_t *pool); - /* Thunked version of svn_wc_notify_func_t callback type */ void svn_swig_pl_notify_func(void * baton, const char *path, - svn_wc_notify_action_t action, - svn_node_kind_t kind, - const char *mime_type, - svn_wc_notify_state_t content_state, - svn_wc_notify_state_t prop_state, - svn_revnum_t revision); + svn_wc_notify_action_t action, + svn_node_kind_t kind, + const char *mime_type, + svn_wc_notify_state_t content_state, + svn_wc_notify_state_t prop_state, + svn_revnum_t revision); /* Thunked version of svn_client_get_commit_log3_t callback type. */ @@ -278,11 +271,6 @@ void svn_swig_pl_make_editor(svn_delta_e SV *perl_editor, apr_pool_t *pool); -void svn_swig_pl_wrap_window_handler(svn_txdelta_window_handler_t *handler, - void **h_baton, - SV *callback, - apr_pool_t *pool); - /* svn_stream_t helpers */ svn_error_t *svn_swig_pl_make_stream(svn_stream_t **stream, SV *obj); SV *svn_swig_pl_from_stream(svn_stream_t *stream);
Modified: subversion/branches/fsx-1.10/subversion/bindings/swig/perl/native/Core.pm URL: http://svn.apache.org/viewvc/subversion/branches/fsx-1.10/subversion/bindings/swig/perl/native/Core.pm?rev=1685464&r1=1685463&r2=1685464&view=diff ============================================================================== --- subversion/branches/fsx-1.10/subversion/bindings/swig/perl/native/Core.pm (original) +++ subversion/branches/fsx-1.10/subversion/bindings/swig/perl/native/Core.pm Sun Jun 14 20:58:10 2015 @@ -959,6 +959,8 @@ use SVN::Base qw(Core svn_log_entry_t_); =head2 svn_log_entry_t +=over 4 + =item $entry-E<gt>revision() The revision of the commit. @@ -988,6 +990,8 @@ in the same sense of C<_p_svn_merge_rang Whether C<$entry-E<gt>revision()> is a merged revision resulting from a reverse merge. +=back + =cut package _p_svn_auth_cred_simple_t; Modified: subversion/branches/fsx-1.10/subversion/bindings/swig/perl/native/Delta.pm URL: http://svn.apache.org/viewvc/subversion/branches/fsx-1.10/subversion/bindings/swig/perl/native/Delta.pm?rev=1685464&r1=1685463&r2=1685464&view=diff ============================================================================== --- subversion/branches/fsx-1.10/subversion/bindings/swig/perl/native/Delta.pm (original) +++ subversion/branches/fsx-1.10/subversion/bindings/swig/perl/native/Delta.pm Sun Jun 14 20:58:10 2015 @@ -101,12 +101,11 @@ use SVN::Base qw(Delta svn_txdelta_ appl # special case for backward compatibility. When called with an additional # argument "md5", it's the old style and don't return the md5. -# Note that since the returned m5 is to be populated upon the last window -# sent to the handler, it's not currently working to magically change things -# in Perl land. sub apply { if (@_ == 5 || (@_ == 4 && ref($_[-1]) ne 'SVN::Pool' && ref($_[-1]) ne '_p_apr_pool_t')) { - splice(@_, 3, 1); + # we're called as + # apply($source, $target, $result_digest, $error_info [, $pool]) + splice(@_, 2, 1); my @ret = SVN::_Delta::svn_txdelta_apply(@_); return @ret[1,2]; } Modified: subversion/branches/fsx-1.10/subversion/bindings/swig/python/libsvn_swig_py/swigutil_py.c URL: http://svn.apache.org/viewvc/subversion/branches/fsx-1.10/subversion/bindings/swig/python/libsvn_swig_py/swigutil_py.c?rev=1685464&r1=1685463&r2=1685464&view=diff ============================================================================== --- subversion/branches/fsx-1.10/subversion/bindings/swig/python/libsvn_swig_py/swigutil_py.c (original) +++ subversion/branches/fsx-1.10/subversion/bindings/swig/python/libsvn_swig_py/swigutil_py.c Sun Jun 14 20:58:10 2015 @@ -459,6 +459,14 @@ static PyObject *make_ob_wc_adm_access(v NULL); } +static PyObject *make_ob_error(svn_error_t *err) +{ + if (err) + return svn_swig_NewPointerObjString(err, "svn_error_t *", NULL); + else + Py_RETURN_NONE; +} + /***/ @@ -1417,62 +1425,62 @@ commit_item_array_to_list(const apr_arra } - + /*** Errors ***/ /* Convert a given SubversionException to an svn_error_t. On failure returns NULL and sets a Python exception. */ static svn_error_t *exception_to_error(PyObject * exc) { - const char *message, *file = NULL; - apr_status_t apr_err; - long line = 0; - PyObject *apr_err_ob = NULL, *child_ob = NULL, *message_ob = NULL; - PyObject *file_ob = NULL, *line_ob = NULL; + const char *message, *file = NULL; + apr_status_t apr_err; + long line = 0; + PyObject *apr_err_ob = NULL, *child_ob = NULL, *message_ob = NULL; + PyObject *file_ob = NULL, *line_ob = NULL; svn_error_t *rv = NULL, *child = NULL; - if ((apr_err_ob = PyObject_GetAttrString(exc, "apr_err")) == NULL) - goto finished; - apr_err = (apr_status_t) PyInt_AsLong(apr_err_ob); - if (PyErr_Occurred()) goto finished; - - if ((message_ob = PyObject_GetAttrString(exc, "message")) == NULL) - goto finished; - message = PyString_AsString(message_ob); - if (PyErr_Occurred()) goto finished; - - if ((file_ob = PyObject_GetAttrString(exc, "file")) == NULL) - goto finished; - if (file_ob != Py_None) - file = PyString_AsString(file_ob); - if (PyErr_Occurred()) goto finished; - - if ((line_ob = PyObject_GetAttrString(exc, "line")) == NULL) - goto finished; - if (line_ob != Py_None) - line = PyInt_AsLong(line_ob); - if (PyErr_Occurred()) goto finished; - - if ((child_ob = PyObject_GetAttrString(exc, "child")) == NULL) - goto finished; - /* We could check if the child is a Subversion exception too, - but let's just apply duck typing. */ - if (child_ob != Py_None) - child = exception_to_error(child_ob); - if (PyErr_Occurred()) goto finished; - - rv = svn_error_create(apr_err, child, message); - /* Somewhat hacky, but we need to preserve original file/line info. */ - rv->file = file ? apr_pstrdup(rv->pool, file) : NULL; - rv->line = line; + if ((apr_err_ob = PyObject_GetAttrString(exc, "apr_err")) == NULL) + goto finished; + apr_err = (apr_status_t) PyInt_AsLong(apr_err_ob); + if (PyErr_Occurred()) goto finished; + + if ((message_ob = PyObject_GetAttrString(exc, "message")) == NULL) + goto finished; + message = PyString_AsString(message_ob); + if (PyErr_Occurred()) goto finished; + + if ((file_ob = PyObject_GetAttrString(exc, "file")) == NULL) + goto finished; + if (file_ob != Py_None) + file = PyString_AsString(file_ob); + if (PyErr_Occurred()) goto finished; + + if ((line_ob = PyObject_GetAttrString(exc, "line")) == NULL) + goto finished; + if (line_ob != Py_None) + line = PyInt_AsLong(line_ob); + if (PyErr_Occurred()) goto finished; + + if ((child_ob = PyObject_GetAttrString(exc, "child")) == NULL) + goto finished; + /* We could check if the child is a Subversion exception too, + but let's just apply duck typing. */ + if (child_ob != Py_None) + child = exception_to_error(child_ob); + if (PyErr_Occurred()) goto finished; + + rv = svn_error_create(apr_err, child, message); + /* Somewhat hacky, but we need to preserve original file/line info. */ + rv->file = file ? apr_pstrdup(rv->pool, file) : NULL; + rv->line = line; finished: - Py_XDECREF(child_ob); - Py_XDECREF(line_ob); - Py_XDECREF(file_ob); - Py_XDECREF(message_ob); - Py_XDECREF(apr_err_ob); - return rv; + Py_XDECREF(child_ob); + Py_XDECREF(line_ob); + Py_XDECREF(file_ob); + Py_XDECREF(message_ob); + Py_XDECREF(apr_err_ob); + return rv; } /* If the currently set Python exception is a valid SubversionException, @@ -1521,8 +1529,9 @@ finished: static svn_error_t *callback_bad_return_error(const char *message) { PyErr_SetString(PyExc_TypeError, message); - return svn_error_create(APR_EGENERAL, NULL, - "Python callback returned an invalid object"); + return svn_error_createf(APR_EGENERAL, NULL, + "Python callback returned an invalid object: %s", + message); } /* Return a generic error about not being able to map types. */ @@ -2376,7 +2385,7 @@ static svn_error_t *parse_fn3_close_revi } -static const svn_repos_parse_fns3_t thunk_parse_fns3_vtable = +static const svn_repos_parse_fns3_t thunk_parse_fns3_vtable = { parse_fn3_magic_header_record, parse_fn3_uuid_record, @@ -2853,6 +2862,42 @@ svn_error_t *svn_swig_py_fs_get_locks_fu return err; } +svn_error_t *svn_swig_py_fs_lock_callback( + void *baton, + const char *path, + const svn_lock_t *lock, + svn_error_t *fs_err, + apr_pool_t *pool) +{ + svn_error_t *err = SVN_NO_ERROR; + PyObject *py_callback = baton, *result; + + if (py_callback == NULL || py_callback == Py_None) + return SVN_NO_ERROR; + + svn_swig_py_acquire_py_lock(); + + if ((result = PyObject_CallFunction(py_callback, + (char *)"sO&O&O&", + path, + make_ob_lock, lock, + make_ob_error, fs_err, + make_ob_pool, pool)) == NULL) + { + err = callback_exception_error(); + } + else if (result != Py_None) + { + err = callback_bad_return_error("Not None"); + } + + Py_XDECREF(result); + + svn_swig_py_release_py_lock(); + return err; +} + + svn_error_t *svn_swig_py_get_commit_log_func(const char **log_msg, const char **tmp_file, const apr_array_header_t * @@ -3761,7 +3806,7 @@ ra_callbacks_open_tmp_file(apr_file_t ** *fp = svn_swig_py_make_file(result, pool); if (*fp == NULL) { - err = callback_exception_error(); + err = callback_exception_error(); } } @@ -3811,7 +3856,7 @@ ra_callbacks_get_wc_prop(void *baton, Py_ssize_t len; if (PyString_AsStringAndSize(result, &buf, &len) == -1) { - err = callback_exception_error(); + err = callback_exception_error(); } else { @@ -4053,7 +4098,7 @@ ra_callbacks_get_client_string(void *bat { if ((*name = PyString_AsString(result)) == NULL) { - err = callback_exception_error(); + err = callback_exception_error(); } } @@ -4252,9 +4297,10 @@ svn_error_t *svn_swig_py_ra_lock_callbac svn_swig_py_acquire_py_lock(); if ((result = PyObject_CallFunction(py_callback, - (char *)"sbO&O&", + (char *)"sbO&O&O&", path, do_lock, make_ob_lock, lock, + make_ob_error, ra_err, make_ob_pool, pool)) == NULL) { err = callback_exception_error(); Modified: subversion/branches/fsx-1.10/subversion/bindings/swig/python/libsvn_swig_py/swigutil_py.h URL: http://svn.apache.org/viewvc/subversion/branches/fsx-1.10/subversion/bindings/swig/python/libsvn_swig_py/swigutil_py.h?rev=1685464&r1=1685463&r2=1685464&view=diff ============================================================================== --- subversion/branches/fsx-1.10/subversion/bindings/swig/python/libsvn_swig_py/swigutil_py.h (original) +++ subversion/branches/fsx-1.10/subversion/bindings/swig/python/libsvn_swig_py/swigutil_py.h Sun Jun 14 20:58:10 2015 @@ -316,6 +316,13 @@ svn_error_t *svn_swig_py_fs_get_locks_fu svn_lock_t *lock, apr_pool_t *pool); +svn_error_t *svn_swig_py_fs_lock_callback( + void *baton, + const char *path, + const svn_lock_t *lock, + svn_error_t *ra_err, + apr_pool_t *pool); + /* thunked commit log fetcher */ svn_error_t *svn_swig_py_get_commit_log_func(const char **log_msg, const char **tmp_file, Modified: subversion/branches/fsx-1.10/subversion/bindings/swig/python/tests/ra.py URL: http://svn.apache.org/viewvc/subversion/branches/fsx-1.10/subversion/bindings/swig/python/tests/ra.py?rev=1685464&r1=1685463&r2=1685464&view=diff ============================================================================== --- subversion/branches/fsx-1.10/subversion/bindings/swig/python/tests/ra.py (original) +++ subversion/branches/fsx-1.10/subversion/bindings/swig/python/tests/ra.py Sun Jun 14 20:58:10 2015 @@ -298,13 +298,53 @@ class SubversionRepositoryAccessTestCase ra.get_file_revs(self.ra_ctx, "trunk/README.txt", 0, 10, rev_handler) def test_lock(self): - def callback(baton, path, do_lock, lock, ra_err, pool): - pass - # This test merely makes sure that the arguments can be wrapped - # properly. svn.ra.lock() currently fails because it is not possible - # to retrieve the username from the auth_baton yet. - self.assertRaises(core.SubversionException, - lambda: ra.lock(self.ra_ctx, {"": 0}, "sleutel", False, callback)) + + self.calls = 0 + self.locks = 0 + self.errors = 0 + def callback(path, do_lock, lock, ra_err, pool): + self.calls += 1 + self.assertEqual(path, "trunk/README2.txt") + if lock: + self.assertEqual(lock.owner, "jrandom") + self.locks += 1 + if ra_err: + self.assert_(ra_err.apr_err == core.SVN_ERR_FS_PATH_ALREADY_LOCKED + or ra_err.apr_err == core.SVN_ERR_FS_NO_SUCH_LOCK) + self.errors += 1 + + providers = [core.svn_auth_get_username_provider()] + self.callbacks.auth_baton = core.svn_auth_open(providers) + core.svn_auth_set_parameter(self.callbacks.auth_baton, + core.SVN_AUTH_PARAM_DEFAULT_USERNAME, + "jrandom") + self.ra_ctx = ra.open2(self.repos_uri, self.callbacks, {}) + rev = fs.youngest_rev(self.fs) + ra.lock(self.ra_ctx, {"trunk/README2.txt":rev}, "sleutel", False, callback) + self.assertEqual(self.calls, 1) + self.assertEqual(self.locks, 1) + self.assertEqual(self.errors, 0) + + self.calls = 0 + self.locks = 0 + ra.lock(self.ra_ctx, {"trunk/README2.txt":rev}, "sleutel", False, callback) + self.assertEqual(self.calls, 1) + self.assertEqual(self.locks, 0) + self.assertEqual(self.errors, 1) + + self.calls = 0 + self.errors = 0 + the_lock = fs.get_lock(self.fs, "/trunk/README2.txt") + ra.unlock(self.ra_ctx, {"trunk/README2.txt":the_lock.token}, False, callback) + self.assertEqual(self.calls, 1) + self.assertEqual(self.locks, 0) + self.assertEqual(self.errors, 0) + + self.calls = 0 + ra.unlock(self.ra_ctx, {"trunk/README2.txt":the_lock.token}, False, callback) + self.assertEqual(self.calls, 1) + self.assertEqual(self.locks, 0) + self.assertEqual(self.errors, 1) def test_get_log2(self): # Get an interesting commmit. Modified: subversion/branches/fsx-1.10/subversion/bindings/swig/python/tests/repository.py URL: http://svn.apache.org/viewvc/subversion/branches/fsx-1.10/subversion/bindings/swig/python/tests/repository.py?rev=1685464&r1=1685463&r2=1685464&view=diff ============================================================================== --- subversion/branches/fsx-1.10/subversion/bindings/swig/python/tests/repository.py (original) +++ subversion/branches/fsx-1.10/subversion/bindings/swig/python/tests/repository.py Sun Jun 14 20:58:10 2015 @@ -311,6 +311,98 @@ class SubversionRepositoryTestCase(unitt repos.freeze([self.repos_path], self.freeze_body) self.assertEqual(self.freeze_invoked, 1) + def test_lock_unlock(self): + """Basic lock/unlock""" + + access = fs.create_access('jrandom') + fs.set_access(self.fs, access) + fs.lock(self.fs, '/trunk/README.txt', None, None, 0, 0, self.rev, False) + try: + fs.lock(self.fs, '/trunk/README.txt', None, None, 0, 0, self.rev, False) + except core.SubversionException, exc: + self.assertEqual(exc.apr_err, core.SVN_ERR_FS_PATH_ALREADY_LOCKED) + fs.lock(self.fs, '/trunk/README.txt', None, None, 0, 0, self.rev, True) + + self.calls = 0 + self.errors = 0 + def unlock_callback(path, lock, err, pool): + self.assertEqual(path, '/trunk/README.txt') + self.assertEqual(lock, None) + self.calls += 1 + if err != None: + self.assertEqual(err.apr_err, core.SVN_ERR_FS_NO_SUCH_LOCK) + self.errors += 1 + + the_lock = fs.get_lock(self.fs, '/trunk/README.txt') + fs.unlock_many(self.fs, {'/trunk/README.txt':the_lock.token}, False, + unlock_callback) + self.assertEqual(self.calls, 1) + self.assertEqual(self.errors, 0) + + self.calls = 0 + fs.unlock_many(self.fs, {'/trunk/README.txt':the_lock.token}, False, + unlock_callback) + self.assertEqual(self.calls, 1) + self.assertEqual(self.errors, 1) + + self.locks = 0 + def lock_callback(path, lock, err, pool): + self.assertEqual(path, '/trunk/README.txt') + if lock != None: + self.assertEqual(lock.owner, 'jrandom') + self.locks += 1 + self.calls += 1 + if err != None: + self.assertEqual(err.apr_err, core.SVN_ERR_FS_PATH_ALREADY_LOCKED) + self.errors += 1 + + self.calls = 0 + self.errors = 0 + target = fs.lock_target_create(None, self.rev) + fs.lock_many(self.fs, {'trunk/README.txt':target}, + None, False, 0, False, lock_callback) + self.assertEqual(self.calls, 1) + self.assertEqual(self.locks, 1) + self.assertEqual(self.errors, 0) + + self.calls = 0 + self.locks = 0 + fs.lock_many(self.fs, {'trunk/README.txt':target}, + None, False, 0, False, lock_callback) + self.assertEqual(self.calls, 1) + self.assertEqual(self.locks, 0) + self.assertEqual(self.errors, 1) + + self.calls = 0 + self.errors = 0 + the_lock = fs.get_lock(self.fs, '/trunk/README.txt') + repos.fs_unlock_many(self.repos, {'trunk/README.txt':the_lock.token}, + False, unlock_callback) + self.assertEqual(self.calls, 1) + self.assertEqual(self.errors, 0) + + self.calls = 0 + repos.fs_unlock_many(self.repos, {'trunk/README.txt':the_lock.token}, + False, unlock_callback) + self.assertEqual(self.calls, 1) + self.assertEqual(self.errors, 1) + + self.calls = 0 + self.errors = 0 + repos.fs_lock_many(self.repos, {'trunk/README.txt':target}, + None, False, 0, False, lock_callback) + self.assertEqual(self.calls, 1) + self.assertEqual(self.locks, 1) + self.assertEqual(self.errors, 0) + + self.calls = 0 + self.locks = 0 + repos.fs_lock_many(self.repos, {'trunk/README.txt':target}, + None, False, 0, False, lock_callback) + self.assertEqual(self.calls, 1) + self.assertEqual(self.locks, 0) + self.assertEqual(self.errors, 1) + def suite(): return unittest.defaultTestLoader.loadTestsFromTestCase( SubversionRepositoryTestCase) Modified: subversion/branches/fsx-1.10/subversion/bindings/swig/ruby/libsvn_swig_ruby/swigutil_rb.c URL: http://svn.apache.org/viewvc/subversion/branches/fsx-1.10/subversion/bindings/swig/ruby/libsvn_swig_ruby/swigutil_rb.c?rev=1685464&r1=1685463&r2=1685464&view=diff ============================================================================== --- subversion/branches/fsx-1.10/subversion/bindings/swig/ruby/libsvn_swig_ruby/swigutil_rb.c (original) +++ subversion/branches/fsx-1.10/subversion/bindings/swig/ruby/libsvn_swig_ruby/swigutil_rb.c Sun Jun 14 20:58:10 2015 @@ -481,9 +481,9 @@ static void check_apr_status(apr_status_t status, VALUE exception_class, const char *format) { if (status != APR_SUCCESS) { - char buffer[1024]; - apr_strerror(status, buffer, sizeof(buffer) - 1); - rb_raise(exception_class, format, buffer); + char buffer[1024]; + apr_strerror(status, buffer, sizeof(buffer) - 1); + rb_raise(exception_class, format, buffer); } } @@ -526,8 +526,8 @@ svn_swig_rb_destroyer_destroy(VALUE self objects[0] = target; if (find_swig_type_object(1, objects) && DATA_PTR(target)) { - svn_swig_rb_destroy_internal_pool(target); - DATA_PTR(target) = NULL; + svn_swig_rb_destroy_internal_pool(target); + DATA_PTR(target) = NULL; } return Qnil; @@ -545,9 +545,9 @@ svn_swig_rb_initialize(void) } check_apr_status(apr_allocator_create(&swig_rb_allocator), - rb_eLoadError, "failed to create allocator: %s"); + rb_eLoadError, "failed to create allocator: %s"); apr_allocator_max_free_set(swig_rb_allocator, - SVN_ALLOCATOR_RECOMMENDED_MAX_FREE); + SVN_ALLOCATOR_RECOMMENDED_MAX_FREE); swig_rb_pool = svn_pool_create_ex(NULL, swig_rb_allocator); apr_pool_tag(swig_rb_pool, "svn-ruby-pool"); @@ -556,8 +556,8 @@ svn_swig_rb_initialize(void) apr_thread_mutex_t *mutex; check_apr_status(apr_thread_mutex_create(&mutex, APR_THREAD_MUTEX_DEFAULT, - swig_rb_pool), - rb_eLoadError, "failed to create allocator: %s"); + swig_rb_pool), + rb_eLoadError, "failed to create allocator: %s"); apr_allocator_mutex_set(swig_rb_allocator, mutex); } #endif @@ -590,7 +590,7 @@ svn_swig_rb_initialize(void) mSvnDestroyer = rb_define_module_under(rb_svn(), "Destroyer"); rb_define_module_function(mSvnDestroyer, "destroy", - svn_swig_rb_destroyer_destroy, 1); + svn_swig_rb_destroyer_destroy, 1); } apr_pool_t * @@ -743,7 +743,7 @@ static svn_boolean_t rb_set_pool_if_swig_type_object(VALUE target, VALUE pool) { VALUE targets[1]; - + targets[0] = target; if (!NIL_P(find_swig_type_object(1, targets))) { @@ -869,7 +869,7 @@ svn_swig_rb_raise_svn_repos_already_clos VALUE svn_swig_rb_svn_error_new(VALUE code, VALUE message, VALUE file, VALUE line, - VALUE child) + VALUE child) { return rb_funcall(rb_svn_error_svn_error(), id_new_corresponding_error, Modified: subversion/branches/fsx-1.10/subversion/bindings/swig/ruby/test/test_fs.rb URL: http://svn.apache.org/viewvc/subversion/branches/fsx-1.10/subversion/bindings/swig/ruby/test/test_fs.rb?rev=1685464&r1=1685463&r2=1685464&view=diff ============================================================================== --- subversion/branches/fsx-1.10/subversion/bindings/swig/ruby/test/test_fs.rb (original) +++ subversion/branches/fsx-1.10/subversion/bindings/swig/ruby/test/test_fs.rb Sun Jun 14 20:58:10 2015 @@ -110,7 +110,7 @@ class SvnFsTest < Test::Unit::TestCase FileUtils.mkdir_p(fs_path) make_context(log) do |ctx| - # ### Verify Svn::Error::RaLocalReposOpenFailed in chain + # ### Verify Svn::Error::RaLocalReposOpenFailed in chain assert_raises(Svn::Error::RaCannotCreateSession) do ctx.log_message(path, rev) end Modified: subversion/branches/fsx-1.10/subversion/bindings/swig/ruby/test/util.rb URL: http://svn.apache.org/viewvc/subversion/branches/fsx-1.10/subversion/bindings/swig/ruby/test/util.rb?rev=1685464&r1=1685463&r2=1685464&view=diff ============================================================================== --- subversion/branches/fsx-1.10/subversion/bindings/swig/ruby/test/util.rb (original) +++ subversion/branches/fsx-1.10/subversion/bindings/swig/ruby/test/util.rb Sun Jun 14 20:58:10 2015 @@ -1,4 +1,4 @@ -# ==================================================================== +# ==================================================================== # 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 @@ -91,7 +91,7 @@ module SvnTestUtil @need_svnserve = need_svnserve setup_default_variables setup_tmp - setup_tmp(@import_path) + setup_tmp(@import_path) setup_repository add_hooks setup_svnserve if @need_svnserve Modified: subversion/branches/fsx-1.10/subversion/bindings/swig/ruby/test/windows_util.rb URL: http://svn.apache.org/viewvc/subversion/branches/fsx-1.10/subversion/bindings/swig/ruby/test/windows_util.rb?rev=1685464&r1=1685463&r2=1685464&view=diff ============================================================================== --- subversion/branches/fsx-1.10/subversion/bindings/swig/ruby/test/windows_util.rb (original) +++ subversion/branches/fsx-1.10/subversion/bindings/swig/ruby/test/windows_util.rb Sun Jun 14 20:58:10 2015 @@ -51,7 +51,7 @@ module SvnTestUtil IO.popen("#{svnserve_path} -d -r #{Svnserve.escape_value(root)} --listen-host #{@svnserve_host} --listen-port #{@svnserve_port} --pid-file #{@svnserve_pid_file}") user = ENV["USERNAME"] || Etc.getlogin - + # Give svnserve a bit of time to start sleep 1 end Modified: subversion/branches/fsx-1.10/subversion/bindings/swig/svn_client.i URL: http://svn.apache.org/viewvc/subversion/branches/fsx-1.10/subversion/bindings/swig/svn_client.i?rev=1685464&r1=1685463&r2=1685464&view=diff ============================================================================== --- subversion/branches/fsx-1.10/subversion/bindings/swig/svn_client.i (original) +++ subversion/branches/fsx-1.10/subversion/bindings/swig/svn_client.i Sun Jun 14 20:58:10 2015 @@ -293,8 +293,9 @@ Callback: svn_client_diff_summarize_func */ #ifdef SWIGPERL %typemap(in) apr_hash_t *config { - $1 = svn_swig_pl_objs_to_hash_by_name ($input, "svn_config_t *", - svn_swig_pl_make_pool ((SV *)NULL)); + apr_pool_t *pool = svn_swig_pl_make_pool ((SV *)NULL); + SPAGAIN; + $1 = svn_swig_pl_objs_to_hash_by_name ($input, "svn_config_t *", pool); } %typemap(out) apr_hash_t *config { Modified: subversion/branches/fsx-1.10/subversion/bindings/swig/svn_fs.i URL: http://svn.apache.org/viewvc/subversion/branches/fsx-1.10/subversion/bindings/swig/svn_fs.i?rev=1685464&r1=1685463&r2=1685464&view=diff ============================================================================== --- subversion/branches/fsx-1.10/subversion/bindings/swig/svn_fs.i (original) +++ subversion/branches/fsx-1.10/subversion/bindings/swig/svn_fs.i Sun Jun 14 20:58:10 2015 @@ -71,6 +71,14 @@ , svn_swig_rb_fs_get_locks_callback) #endif + +#ifdef SWIGPYTHON +%callback_typemap(svn_fs_lock_callback_t lock_callback, void *lock_baton, + svn_swig_py_fs_lock_callback, + , + ) +#endif + /* ----------------------------------------------------------------------- svn_fs_get_merge_info */ Modified: subversion/branches/fsx-1.10/subversion/bindings/swig/svn_wc.i URL: http://svn.apache.org/viewvc/subversion/branches/fsx-1.10/subversion/bindings/swig/svn_wc.i?rev=1685464&r1=1685463&r2=1685464&view=diff ============================================================================== --- subversion/branches/fsx-1.10/subversion/bindings/swig/svn_wc.i (original) +++ subversion/branches/fsx-1.10/subversion/bindings/swig/svn_wc.i Sun Jun 14 20:58:10 2015 @@ -43,6 +43,7 @@ /* ### ignore these structures because the accessors will need a pool */ %ignore svn_wc_keywords_t; %ignore svn_wc_conflict_description2_t; +%ignore svn_wc_conflict_result_t; #ifdef SWIGRUBY %ignore svn_wc_external_item_create; Modified: subversion/branches/fsx-1.10/subversion/include/private/svn_atomic.h URL: http://svn.apache.org/viewvc/subversion/branches/fsx-1.10/subversion/include/private/svn_atomic.h?rev=1685464&r1=1685463&r2=1685464&view=diff ============================================================================== --- subversion/branches/fsx-1.10/subversion/include/private/svn_atomic.h (original) +++ subversion/branches/fsx-1.10/subversion/include/private/svn_atomic.h Sun Jun 14 20:58:10 2015 @@ -76,21 +76,66 @@ extern "C" { /** @} */ /** + * @name Single-threaded atomic initialization + * @{ + */ + +/** + * Callback for svn_atomic__init_once(). + * @return an #svn_error_t if the initialization fails. + * @since New in 1.10 + */ +typedef svn_error_t *(svn_atomic__err_init_func_t)(void *baton, + apr_pool_t *pool); + +/** + * Callback for svn_atomic__init_no_error(). + * @return a string containing an error message if the initialization fails. + * @since New in 1.10 + */ +typedef const char *(svn_atomic__str_init_func_t)(void *baton); + +/** * Call an initialization function in a thread-safe manner. * * @a global_status must be a pointer to a global, zero-initialized - * #svn_atomic_t. @a init_func is a pointer to the function that performs - * the actual initialization. @a baton and and @a pool are passed on to the - * init_func for its use. + * #svn_atomic_t. @a err_init_func is a pointer to the function that + * performs the actual initialization. @a baton and and @a pool are + * passed on to @a err_init_func for its use. + * + * @return the error returned by @a err_init_func. * * @since New in 1.5. */ svn_error_t * svn_atomic__init_once(volatile svn_atomic_t *global_status, - svn_error_t *(*init_func)(void*,apr_pool_t*), + svn_atomic__err_init_func_t err_init_func, void *baton, apr_pool_t* pool); +/** + * Call an initialization function in a thread-safe manner. + * + * Unlike svn_atomic__init_once(), this function does not need a pool + * and does not create an #svn_error_t, and neither should the + * @a str_init_func implementation. + * + * @a global_status must be a pointer to a global, zero-initialized + * #svn_atomic_t. @a str_init_func is a pointer to the function that + * performs the actual initialization. @a baton is passed on to + * @a str_init_func for its use. + * + * @return the error string returned by @a str_init_func. + * + * @since New in 1.10. + */ +const char * +svn_atomic__init_once_no_error(volatile svn_atomic_t *global_status, + svn_atomic__str_init_func_t str_init_func, + void *baton); + +/** @} */ + #ifdef __cplusplus } #endif /* __cplusplus */ Modified: subversion/branches/fsx-1.10/subversion/include/private/svn_auth_private.h URL: http://svn.apache.org/viewvc/subversion/branches/fsx-1.10/subversion/include/private/svn_auth_private.h?rev=1685464&r1=1685463&r2=1685464&view=diff ============================================================================== --- subversion/branches/fsx-1.10/subversion/include/private/svn_auth_private.h (original) +++ subversion/branches/fsx-1.10/subversion/include/private/svn_auth_private.h Sun Jun 14 20:58:10 2015 @@ -234,10 +234,12 @@ svn_auth__ssl_client_cert_pw_set(svn_boo /* Apply the specified configuration for connecting with SERVER_NAME to the auth baton */ svn_error_t * -svn_auth__apply_config_for_server(svn_auth_baton_t *ab, - apr_hash_t *config, - const char *server_name, - apr_pool_t *scratch_pool); +svn_auth__make_session_auth(svn_auth_baton_t **session_auth_baton, + const svn_auth_baton_t *auth_baton, + apr_hash_t *config, + const char *server_name, + apr_pool_t *result_pool, + apr_pool_t *scratch_pool); #if (defined(WIN32) && !defined(__MINGW32__)) || defined(DOXYGEN) /** Modified: subversion/branches/fsx-1.10/subversion/include/private/svn_cache.h URL: http://svn.apache.org/viewvc/subversion/branches/fsx-1.10/subversion/include/private/svn_cache.h?rev=1685464&r1=1685463&r2=1685464&view=diff ============================================================================== --- subversion/branches/fsx-1.10/subversion/include/private/svn_cache.h (original) +++ subversion/branches/fsx-1.10/subversion/include/private/svn_cache.h Sun Jun 14 20:58:10 2015 @@ -542,6 +542,15 @@ svn_cache__get_global_membuffer_cache(vo svn_cache__info_t * svn_cache__membuffer_get_global_info(apr_pool_t *pool); +/** + * Remove all current contents from CACHE. + * + * NOTE: In a multi-threaded environment, new contents may have been put + * into the cache by the time this function returns. + */ +svn_error_t * +svn_cache__membuffer_clear(svn_membuffer_t *cache); + /** @} */ Modified: subversion/branches/fsx-1.10/subversion/include/private/svn_client_private.h URL: http://svn.apache.org/viewvc/subversion/branches/fsx-1.10/subversion/include/private/svn_client_private.h?rev=1685464&r1=1685463&r2=1685464&view=diff ============================================================================== --- subversion/branches/fsx-1.10/subversion/include/private/svn_client_private.h (original) +++ subversion/branches/fsx-1.10/subversion/include/private/svn_client_private.h Sun Jun 14 20:58:10 2015 @@ -40,6 +40,51 @@ extern "C" { #endif /* __cplusplus */ +/* Set *REVNUM to the revision number identified by REVISION. + + If REVISION->kind is svn_opt_revision_number, just use + REVISION->value.number, ignoring LOCAL_ABSPATH and RA_SESSION. + + Else if REVISION->kind is svn_opt_revision_committed, + svn_opt_revision_previous, or svn_opt_revision_base, or + svn_opt_revision_working, then the revision can be identified + purely based on the working copy's administrative information for + LOCAL_ABSPATH, so RA_SESSION is ignored. If LOCAL_ABSPATH is not + under revision control, return SVN_ERR_UNVERSIONED_RESOURCE, or if + LOCAL_ABSPATH is null, return SVN_ERR_CLIENT_VERSIONED_PATH_REQUIRED. + + Else if REVISION->kind is svn_opt_revision_date or + svn_opt_revision_head, then RA_SESSION is used to retrieve the + revision from the repository (using REVISION->value.date in the + former case), and LOCAL_ABSPATH is ignored. If RA_SESSION is null, + return SVN_ERR_CLIENT_RA_ACCESS_REQUIRED. + + Else if REVISION->kind is svn_opt_revision_unspecified, set + *REVNUM to SVN_INVALID_REVNUM. + + If YOUNGEST_REV is non-NULL, it is an in/out parameter. If + *YOUNGEST_REV is valid, use it as the youngest revision in the + repository (regardless of reality) -- don't bother to lookup the + true value for HEAD, and don't return any value in *REVNUM greater + than *YOUNGEST_REV. If *YOUNGEST_REV is not valid, and a HEAD + lookup is required to populate *REVNUM, then also populate + *YOUNGEST_REV with the result. This is useful for making multiple + serialized calls to this function with a basically static view of + the repository, avoiding race conditions which could occur between + multiple invocations with HEAD lookup requests. + + Else return SVN_ERR_CLIENT_BAD_REVISION. + + Use SCRATCH_POOL for any temporary allocation. */ +svn_error_t * +svn_client__get_revision_number(svn_revnum_t *revnum, + svn_revnum_t *youngest_rev, + svn_wc_context_t *wc_ctx, + const char *local_abspath, + svn_ra_session_t *ra_session, + const svn_opt_revision_t *revision, + apr_pool_t *scratch_pool); + /* Return true if KIND is a revision kind that is dependent on the working * copy. Otherwise, return false. */ #define SVN_CLIENT__REVKIND_NEEDS_WC(kind) \ Modified: subversion/branches/fsx-1.10/subversion/include/private/svn_cmdline_private.h URL: http://svn.apache.org/viewvc/subversion/branches/fsx-1.10/subversion/include/private/svn_cmdline_private.h?rev=1685464&r1=1685463&r2=1685464&view=diff ============================================================================== --- subversion/branches/fsx-1.10/subversion/include/private/svn_cmdline_private.h (original) +++ subversion/branches/fsx-1.10/subversion/include/private/svn_cmdline_private.h Sun Jun 14 20:58:10 2015 @@ -88,11 +88,15 @@ typedef struct svn_cmdline__config_argum * containing svn_cmdline__config_argument_t* elements, allocating the option * data in @a pool * + * [Since 1.9:] If the file, section, or option value is not recognized, + * warn to @c stderr, using @a prefix as in svn_handle_warning2(). + * * @since New in 1.7. */ svn_error_t * svn_cmdline__parse_config_option(apr_array_header_t *config_options, const char *opt_arg, + const char *prefix, apr_pool_t *pool); /** Sets the config options in @a config_options, an apr array containing @@ -220,6 +224,20 @@ svn_boolean_t svn_cmdline__be_interactive(svn_boolean_t non_interactive, svn_boolean_t force_interactive); +/* Parses the argument value of '--trust-server-cert-failures' OPT_ARG into + * the expected booleans for passing to svn_cmdline_create_auth_baton2() + * + * @since New in 1.9. + */ +svn_error_t * +svn_cmdline__parse_trust_options( + svn_boolean_t *trust_server_cert_unknown_ca, + svn_boolean_t *trust_server_cert_cn_mismatch, + svn_boolean_t *trust_server_cert_expired, + svn_boolean_t *trust_server_cert_not_yet_valid, + svn_boolean_t *trust_server_cert_other_failure, + const char *opt_arg, + apr_pool_t *scratch_pool); #ifdef __cplusplus } Modified: subversion/branches/fsx-1.10/subversion/include/private/svn_dep_compat.h URL: http://svn.apache.org/viewvc/subversion/branches/fsx-1.10/subversion/include/private/svn_dep_compat.h?rev=1685464&r1=1685463&r2=1685464&view=diff ============================================================================== --- subversion/branches/fsx-1.10/subversion/include/private/svn_dep_compat.h (original) +++ subversion/branches/fsx-1.10/subversion/include/private/svn_dep_compat.h Sun Jun 14 20:58:10 2015 @@ -20,7 +20,7 @@ * ==================================================================== * @endcopyright * - * @file svn_compat.h + * @file svn_dep_compat.h * @brief Compatibility macros and functions. * @since New in 1.5.0. */ @@ -75,6 +75,31 @@ extern "C" { #endif /** + * Indicate whether we are running on a POSIX platform. This has + * implications on the way e.g. fsync() works. + * + * For details on this check, see + * http://nadeausoftware.com/articles/2012/01/c_c_tip_how_use_compiler_predefined_macros_detect_operating_system#POSIX + * + * @since New in 1.10. + */ +#ifndef SVN_ON_POSIX +#if !defined(_WIN32) \ + && ( defined(__unix__) \ + || defined(__unix) \ + || (defined(__APPLE__) && defined(__MACH__))) /* UNIX-style OS? */ +# include <unistd.h> +# if defined(_POSIX_VERSION) +# define SVN_ON_POSIX 1 +# else +# define SVN_ON_POSIX 0 +# endif +#else +# define SVN_ON_POSIX 0 +#endif +#endif + +/** * APR keeps a few interesting defines hidden away in its private * headers apr_arch_file_io.h, so we redefined them here. * Modified: subversion/branches/fsx-1.10/subversion/include/private/svn_fs_fs_private.h URL: http://svn.apache.org/viewvc/subversion/branches/fsx-1.10/subversion/include/private/svn_fs_fs_private.h?rev=1685464&r1=1685463&r2=1685464&view=diff ============================================================================== --- subversion/branches/fsx-1.10/subversion/include/private/svn_fs_fs_private.h (original) +++ subversion/branches/fsx-1.10/subversion/include/private/svn_fs_fs_private.h Sun Jun 14 20:58:10 2015 @@ -53,7 +53,8 @@ typedef struct svn_fs_fs__large_change_i /* size of the (deltified) representation */ apr_uint64_t size; - /* Revision of the representation. SVN_INVALID_REVNUM for unused entries. */ + /* Revision of the representation. SVN_INVALID_REVNUM for unused entries. + */ svn_revnum_t revision; /* node path. "" for unused instances */ @@ -267,19 +268,20 @@ svn_fs_fs__get_stats(svn_fs_fs__stats_t apr_pool_t *result_pool, apr_pool_t *scratch_pool); -/* Node-revision IDs in FSFS consist of 3 of sub-IDs ("parts") that consist +/* A node-revision ID in FSFS consists of 3 sub-IDs ("parts") that consist * of a creation REVISION number and some revision- / transaction-local * counter value (NUMBER). Old-style ID parts use global counter values. * * The parts are: node_id, copy_id and txn_id for in-txn IDs as well as - * node_id, copy_id and rev_offset for in-revision IDs. This struct the + * node_id, copy_id and rev_item for in-revision IDs. This struct is the * data structure used for each of those parts. */ typedef struct svn_fs_fs__id_part_t { - /* SVN_INVALID_REVNUM for txns -> not a txn, COUNTER must be 0. - SVN_INVALID_REVNUM for others -> not assigned to a revision, yet. - 0 for others -> old-style ID or the root in rev 0. */ + /* SVN_INVALID_REVNUM for txn_id part -> not a txn, NUMBER must be 0. + SVN_INVALID_REVNUM for other parts -> not assigned to a revision, yet. + 0 for other parts -> old-style ID or the root in rev 0. + */ svn_revnum_t revision; /* sub-id value relative to REVISION. Its interpretation depends on @@ -296,7 +298,7 @@ typedef struct svn_fs_fs__p2l_entry_t { /* offset of the first byte that belongs to the item */ apr_off_t offset; - + /* length of the item in bytes */ apr_off_t size; Modified: subversion/branches/fsx-1.10/subversion/include/private/svn_mutex.h URL: http://svn.apache.org/viewvc/subversion/branches/fsx-1.10/subversion/include/private/svn_mutex.h?rev=1685464&r1=1685463&r2=1685464&view=diff ============================================================================== --- subversion/branches/fsx-1.10/subversion/include/private/svn_mutex.h (original) +++ subversion/branches/fsx-1.10/subversion/include/private/svn_mutex.h Sun Jun 14 20:58:10 2015 @@ -27,8 +27,6 @@ #ifndef SVN_MUTEX_H #define SVN_MUTEX_H -#include <apr_thread_mutex.h> - #include "svn_error.h" #ifdef __cplusplus Modified: subversion/branches/fsx-1.10/subversion/include/private/svn_packed_data.h URL: http://svn.apache.org/viewvc/subversion/branches/fsx-1.10/subversion/include/private/svn_packed_data.h?rev=1685464&r1=1685463&r2=1685464&view=diff ============================================================================== --- subversion/branches/fsx-1.10/subversion/include/private/svn_packed_data.h (original) +++ subversion/branches/fsx-1.10/subversion/include/private/svn_packed_data.h Sun Jun 14 20:58:10 2015 @@ -221,7 +221,7 @@ svn_packed__byte_count(svn_packed__byte_ /* Return the next number from STREAM as unsigned integer. Returns 0 when * reading beyond the end of the stream. */ -apr_uint64_t +apr_uint64_t svn_packed__get_uint(svn_packed__int_stream_t *stream); /* Return the next number from STREAM as signed integer. Returns 0 when Modified: subversion/branches/fsx-1.10/subversion/include/private/svn_repos_private.h URL: http://svn.apache.org/viewvc/subversion/branches/fsx-1.10/subversion/include/private/svn_repos_private.h?rev=1685464&r1=1685463&r2=1685464&view=diff ============================================================================== --- subversion/branches/fsx-1.10/subversion/include/private/svn_repos_private.h (original) +++ subversion/branches/fsx-1.10/subversion/include/private/svn_repos_private.h Sun Jun 14 20:58:10 2015 @@ -164,7 +164,7 @@ typedef struct svn_repos__config_pool_t /* Create a new configuration pool object with a lifetime determined by * POOL and return it in *CONFIG_POOL. - * + * * The THREAD_SAFE flag indicates whether the pool actually needs to be * thread-safe and POOL must be also be thread-safe if this flag is set. */ Modified: subversion/branches/fsx-1.10/subversion/include/private/svn_sorts_private.h URL: http://svn.apache.org/viewvc/subversion/branches/fsx-1.10/subversion/include/private/svn_sorts_private.h?rev=1685464&r1=1685463&r2=1685464&view=diff ============================================================================== --- subversion/branches/fsx-1.10/subversion/include/private/svn_sorts_private.h (original) +++ subversion/branches/fsx-1.10/subversion/include/private/svn_sorts_private.h Sun Jun 14 20:58:10 2015 @@ -20,7 +20,7 @@ * ==================================================================== * @endcopyright * - * @file svn_sorts.h + * @file svn_sorts_private.h * @brief all sorts of sorts. */ @@ -28,7 +28,7 @@ #ifndef SVN_SORTS_PRIVATE_H #define SVN_SORTS_PRIVATE_H -#include "../svn_sorts.h" +#include "../svn_sorts.h" #ifdef __cplusplus extern "C" { Modified: subversion/branches/fsx-1.10/subversion/include/private/svn_sqlite.h URL: http://svn.apache.org/viewvc/subversion/branches/fsx-1.10/subversion/include/private/svn_sqlite.h?rev=1685464&r1=1685463&r2=1685464&view=diff ============================================================================== --- subversion/branches/fsx-1.10/subversion/include/private/svn_sqlite.h (original) +++ subversion/branches/fsx-1.10/subversion/include/private/svn_sqlite.h Sun Jun 14 20:58:10 2015 @@ -63,7 +63,7 @@ typedef enum svn_sqlite__mode_e { typedef svn_error_t *(*svn_sqlite__func_t)(svn_sqlite__context_t *sctx, int argc, svn_sqlite__value_t *values[], - apr_pool_t *scatch_pool); + void *baton); /* Step the given statement; if it returns SQLITE_DONE, reset the statement. Modified: subversion/branches/fsx-1.10/subversion/include/private/svn_string_private.h URL: http://svn.apache.org/viewvc/subversion/branches/fsx-1.10/subversion/include/private/svn_string_private.h?rev=1685464&r1=1685463&r2=1685464&view=diff ============================================================================== --- subversion/branches/fsx-1.10/subversion/include/private/svn_string_private.h (original) +++ subversion/branches/fsx-1.10/subversion/include/private/svn_string_private.h Sun Jun 14 20:58:10 2015 @@ -197,10 +197,17 @@ apr_uint64_t svn__base36toui64(const char **next, const char *source); /** + * The upper limit of the similarity range returned by + * svn_cstring__similarity() and svn_string__similarity(). + */ +#define SVN_STRING__SIM_RANGE_MAX 1000000 + +/** * Computes the similarity score of STRA and STRB. Returns the ratio * of the length of their longest common subsequence and the average - * length of the strings, normalized to the range [0..1000]. - * The result is equivalent to Python's + * length of the strings, normalized to the range + * [0..SVN_STRING__SIM_RANGE_MAX]. The result is equivalent to + * Python's * * difflib.SequenceMatcher.ratio * @@ -225,7 +232,7 @@ svn__base36toui64(const char **next, con * has O(strlen(STRA) * strlen(STRB)) worst-case performance, * so do keep a rein on your enthusiasm. */ -unsigned int +apr_size_t svn_cstring__similarity(const char *stra, const char *strb, svn_membuf_t *buffer, apr_size_t *rlcs); @@ -233,7 +240,7 @@ svn_cstring__similarity(const char *stra * Like svn_cstring__similarity, but accepts svn_string_t's instead * of NUL-terminated character strings. */ -unsigned int +apr_size_t svn_string__similarity(const svn_string_t *stringa, const svn_string_t *stringb, svn_membuf_t *buffer, apr_size_t *rlcs); Modified: subversion/branches/fsx-1.10/subversion/include/private/svn_subr_private.h URL: http://svn.apache.org/viewvc/subversion/branches/fsx-1.10/subversion/include/private/svn_subr_private.h?rev=1685464&r1=1685463&r2=1685464&view=diff ============================================================================== --- subversion/branches/fsx-1.10/subversion/include/private/svn_subr_private.h (original) +++ subversion/branches/fsx-1.10/subversion/include/private/svn_subr_private.h Sun Jun 14 20:58:10 2015 @@ -306,7 +306,7 @@ svn__fnv1a_32(const void *input, apr_siz /** * Return a 32 bit modified FNV-1a checksum for the first @a len bytes in * @a input. - * + * * @note This is a proprietary checksumming algorithm based FNV-1a with * approximately the same strength. It is up to 4 times faster * than plain FNV-1a for longer data blocks. @@ -416,7 +416,7 @@ typedef struct svn_hash__entry_t /** Reads a single key-value pair from @a stream and returns it in the * caller-provided @a *entry (members don't need to be pre-initialized). * @a pool is used to allocate members of @a *entry and for tempoaries. - * + * * @see #svn_hash_read2 for more details. * * @since New in 1.9. @@ -537,20 +537,21 @@ svn__decode_uint(apr_uint64_t *val, const unsigned char *p, const unsigned char *end); -/* Get the data from IN, compress it according to the specified - * COMPRESSION_METHOD and write the result to OUT. +/* Compress the data from DATA with length LEN, it according to the + * specified COMPRESSION_METHOD and write the result to OUT. * SVN__COMPRESSION_NONE is valid for COMPRESSION_METHOD. */ svn_error_t * -svn__compress(svn_stringbuf_t *in, +svn__compress(const void *data, apr_size_t len, svn_stringbuf_t *out, int compression_method); -/* Get the compressed data from IN, decompress it and write the result to - * OUT. Return an error if the decompressed size is larger than LIMIT. +/* Decompress the compressed data from DATA with length LEN and write the + * result to OUT. Return an error if the decompressed size is larger than + * LIMIT. */ svn_error_t * -svn__decompress(svn_stringbuf_t *in, +svn__decompress(const void *data, apr_size_t len, svn_stringbuf_t *out, apr_size_t limit); @@ -652,7 +653,7 @@ svn_config__get_default_config(apr_hash_ */ /* This opaque data struct is an alternative to an INT->VOID hash. - * + * * Technically, it is an automatically growing packed bit array. * All indexes not previously set are implicitly 0 and setting it will * grow the array as needed. @@ -681,6 +682,11 @@ svn_boolean_t svn_bit_array__get(svn_bit_array__t *array, apr_size_t idx); +/* Return the global pool used by the DSO loader, this may be NULL if + no DSOs have been loaded. */ +apr_pool_t * +svn_dso__pool(void); + /** @} */ #ifdef __cplusplus Modified: subversion/branches/fsx-1.10/subversion/include/private/svn_wc_private.h URL: http://svn.apache.org/viewvc/subversion/branches/fsx-1.10/subversion/include/private/svn_wc_private.h?rev=1685464&r1=1685463&r2=1685464&view=diff ============================================================================== --- subversion/branches/fsx-1.10/subversion/include/private/svn_wc_private.h (original) +++ subversion/branches/fsx-1.10/subversion/include/private/svn_wc_private.h Sun Jun 14 20:58:10 2015 @@ -82,6 +82,8 @@ svn_wc__get_file_external_editor(const s const char *recorded_url, const svn_opt_revision_t *recorded_peg_rev, const svn_opt_revision_t *recorded_rev, + svn_wc_conflict_resolver_func2_t conflict_func, + void *conflict_baton, svn_cancel_func_t cancel_func, void *cancel_baton, svn_wc_notify_func2_t notify_func, @@ -380,15 +382,13 @@ svn_wc__status2_from_3(svn_wc_status2_t apr_pool_t *result_pool, apr_pool_t *scratch_pool); - /** * Set @a *children to a new array of the immediate children of the working * node at @a dir_abspath. The elements of @a *children are (const char *) * absolute paths. * - * Include children that are scheduled for deletion. Iff @a show_hidden - * is true, also include children that are 'excluded' or 'server-excluded' or - * 'not-present'. + * Include children that are scheduled for deletion, but not those that + * are excluded, server-excluded or not-present. * * Return every path that refers to a child of the working node at * @a dir_abspath. Do not include a path just because it was a child of a @@ -402,24 +402,20 @@ svn_error_t * svn_wc__node_get_children_of_working_node(const apr_array_header_t **children, svn_wc_context_t *wc_ctx, const char *dir_abspath, - svn_boolean_t show_hidden, apr_pool_t *result_pool, apr_pool_t *scratch_pool); /** - * Like svn_wc__node_get_children_of_working_node(), except also include any - * path that was a child of a deleted directory that existed at - * @a dir_abspath, even if that directory is now scheduled to be replaced by - * the working node at @a dir_abspath. + * Gets the immediate 'not-present' children of a node. + * + * #### Needed during 'svn cp WC URL' to handle mixed revision cases */ svn_error_t * -svn_wc__node_get_children(const apr_array_header_t **children, - svn_wc_context_t *wc_ctx, - const char *dir_abspath, - svn_boolean_t show_hidden, - apr_pool_t *result_pool, - apr_pool_t *scratch_pool); - +svn_wc__node_get_not_present_children(const apr_array_header_t **children, + svn_wc_context_t *wc_ctx, + const char *dir_abspath, + apr_pool_t *result_pool, + apr_pool_t *scratch_pool); /** * Fetch the repository information for the working version @@ -519,26 +515,6 @@ svn_wc__node_get_origin(svn_boolean_t *i apr_pool_t *scratch_pool); /** - * Set @a *deleted_ancestor_abspath to the root of the delete operation - * that deleted @a local_abspath. If @a local_abspath itself was deleted - * and has no deleted ancestor, @a *deleted_ancestor_abspath will equal - * @a local_abspath. If @a local_abspath was not deleted, - * set @a *deleted_ancestor_abspath to @c NULL. - * - * A node is considered 'deleted' if it is deleted or moved-away, and is - * not replaced. - * - * @a *deleted_ancestor_abspath is allocated in @a result_pool. - * Use @a scratch_pool for all temporary allocations. - */ -svn_error_t * -svn_wc__node_get_deleted_ancestor(const char **deleted_ancestor_abspath, - svn_wc_context_t *wc_ctx, - const char *local_abspath, - apr_pool_t *result_pool, - apr_pool_t *scratch_pool); - -/** * Set @a *not_present to TRUE when @a local_abspath has status * svn_wc__db_status_not_present. Set @a *user_excluded to TRUE when * @a local_abspath has status svn_wc__db_status_excluded. Set @@ -943,15 +919,17 @@ svn_wc__get_excluded_subtrees(apr_hash_t /* Indicate in @a *is_modified whether the working copy has local * modifications, 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(). */ + * If IGNORE_UNVERSIONED, unversioned paths inside the tree rooted by + * LOCAL_ABSPATH are not seen as a change, otherwise they are. + * (svn:ignored paths are always ignored) + * + * Use @a scratch_pool for temporary allocations. */ svn_error_t * svn_wc__has_local_mods(svn_boolean_t *is_modified, svn_wc_context_t *wc_ctx, const char *local_abspath, + svn_boolean_t ignore_unversioned, svn_cancel_func_t cancel_func, void *cancel_baton, apr_pool_t *scratch_pool); @@ -1259,6 +1237,44 @@ svn_wc__resolve_relative_external_url(co apr_pool_t *result_pool, apr_pool_t *scratch_pool); +typedef enum svn_wc__external_description_format_t +{ + /* LOCALPATH [-r PEG] URL */ + svn_wc__external_description_format_1 = 0, + + /* [-r REV] URL[@PEG] LOCALPATH, introduced in Subversion 1.5 */ + svn_wc__external_description_format_2 +} svn_wc__external_description_format_t; + +/* Additional information about what the external's parser has parsed. */ +typedef struct svn_wc__externals_parser_info_t +{ + /* The syntax format used by the external description. */ + svn_wc__external_description_format_t format; + + /* The string used for defining the operative revision, i.e. + "-rN", "-rHEAD", or "-r{DATE}". + NULL if revision was not given. */ + const char *rev_str; + + /* The string used for defining the peg revision (equals rev_str in + format 1, is "@N", or "@HEAD" or "@{DATE}" in format 2). + NULL if peg revision was not given. */ + const char *peg_rev_str; + +} svn_wc__externals_parser_info_t; + +/* Like svn_wc_parse_externals_description3() but returns an additional array + * with elements of type svn_wc__externals_parser_info_t in @a *parser_infos_p. + * @a parser_infos_p may be NULL if not required by the caller. + */ +svn_error_t * +svn_wc__parse_externals_description(apr_array_header_t **externals_p, + apr_array_header_t **parser_infos_p, + const char *defining_directory, + const char *desc, + svn_boolean_t canonicalize_url, + apr_pool_t *pool); /** * Set @a *editor and @a *edit_baton to an editor that generates @@ -1816,7 +1832,7 @@ svn_wc__acquire_write_lock_for_resolve(c * If ROOT_RELPATH is not NULL, set *ROOT_RELPATH to the target of the diff * within the diff namespace. ("" or a single path component). * - * If ROOT_IS_FILE is NOT NULL set it + * If ROOT_IS_FILE is NOT NULL set it * the first processor call. (The anchor is LOCAL_ABSPATH or an ancestor of it) */ svn_error_t * Modified: subversion/branches/fsx-1.10/subversion/include/svn_auth.h URL: http://svn.apache.org/viewvc/subversion/branches/fsx-1.10/subversion/include/svn_auth.h?rev=1685464&r1=1685463&r2=1685464&view=diff ============================================================================== --- subversion/branches/fsx-1.10/subversion/include/svn_auth.h (original) +++ subversion/branches/fsx-1.10/subversion/include/svn_auth.h Sun Jun 14 20:58:10 2015 @@ -884,7 +884,7 @@ svn_auth_get_platform_specific_client_pr * @note An administrative password reset may invalidate the account's * secret key. This function will detect that situation and behave as * if the password were not cached at all. - * @deprecated Provided for backwards compatibility with the 1.8 API. Use + * @deprecated Provided for backwards compatibility with the 1.8 API. Use * svn_auth_get_platform_specific_provider with provider_name of "windows" * and provider_type of "simple". */ Modified: subversion/branches/fsx-1.10/subversion/include/svn_cache_config.h URL: http://svn.apache.org/viewvc/subversion/branches/fsx-1.10/subversion/include/svn_cache_config.h?rev=1685464&r1=1685463&r2=1685464&view=diff ============================================================================== --- subversion/branches/fsx-1.10/subversion/include/svn_cache_config.h (original) +++ subversion/branches/fsx-1.10/subversion/include/svn_cache_config.h Sun Jun 14 20:58:10 2015 @@ -43,7 +43,7 @@ extern "C" { @note Do not extend this data structure as this would break binary compatibility. - + @since New in 1.7. */ typedef struct svn_cache_config_t Modified: subversion/branches/fsx-1.10/subversion/include/svn_client.h URL: http://svn.apache.org/viewvc/subversion/branches/fsx-1.10/subversion/include/svn_client.h?rev=1685464&r1=1685463&r2=1685464&view=diff ============================================================================== --- subversion/branches/fsx-1.10/subversion/include/svn_client.h (original) +++ subversion/branches/fsx-1.10/subversion/include/svn_client.h Sun Jun 14 20:58:10 2015 @@ -2724,7 +2724,7 @@ svn_client_status(svn_revnum_t *result_r * * 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). @@ -4109,6 +4109,13 @@ svn_client_mergeinfo_log_eligible(const * If @a remove_ignored_items is @c TRUE, remove ignored unversioned items * in @a dir after successful working copy cleanup. * + * If @a fix_recorded_timestamps is @c TRUE, this function fixes recorded + * timestamps for unmodified files in the working copy, reducing comparision + * time on future checks. + * + * If @a vacuum_pristines is @c TRUE, and @a dir_abspath points to the working + * copy root unreferenced files in the pristine store are removed. + * * When asked to remove unversioned or ignored items, and the working copy * is already locked, return #SVN_ERR_WC_LOCKED. This prevents accidental * working copy corruption in case users run the cleanup operation to @@ -4349,6 +4356,112 @@ svn_client_revert(const apr_array_header /** @} */ /** + * @defgroup Conflicts Dealing with conflicted paths. + * + * @{ + */ + +/** + * Return the absolute path to the conflicted working copy node described + * by @a conflict. + * + * @since New in 1.10. + */ +const char * +svn_client_conflict_get_local_abspath( + const svn_wc_conflict_description2_t *conflict); + +/** + * Return the operation during which the conflict described by @a + * conflict was recorded. + * + * @since New in 1.10. + */ +svn_wc_operation_t +svn_client_conflict_get_operation( + const svn_wc_conflict_description2_t *conflict); + +/** + * Return the action an update, switch, or merge operation attempted to + * perform on the working copy node described by @a conflict. + * + * @since New in 1.10. + */ +svn_wc_conflict_action_t +svn_client_conflict_get_incoming_change( + const svn_wc_conflict_description2_t *conflict); + +/** + * Return the reason why the attempted action performed by an update, switch, + * or merge operation conflicted with the state of the node in the working copy. + * + * During update and switch operations this local change is part of uncommitted + * modifications in the working copy. During merge operations it may + * additionally be part of the history of the merge target branch, anywhere + * between the common ancestor revision and the working copy revision. + * + * @since New in 1.10. + */ +svn_wc_conflict_reason_t +svn_client_conflict_get_local_change( + const svn_wc_conflict_description2_t *conflict); + +/** + * Accessor functions for svn_wc_conflict_description2_t. This is a temporary + * API for eventually replacing svn_wc_conflict_description2_t with an opaque + * type and providing improved APIs for conflict resolution. + * + * @since New in 1.10. + */ + +#define svn_client_conflict_get_node_kind(conflict) \ + ((conflict)->node_kind) + +#define svn_client_conflict_get_kind(conflict) \ + ((conflict)->kind) + +#define svn_client_conflict_get_property_name(conflict) \ + ((conflict)->property_name) + +#define svn_client_conflict_get_is_binary(conflict) \ + ((conflict)->is_binary) + +#define svn_client_conflict_get_mime_type(conflict) \ + ((conflict)->mime_type) + +#define svn_client_conflict_get_base_abspath(conflict) \ + ((conflict)->base_abspath) + +#define svn_client_conflict_get_their_abspath(conflict) \ + ((conflict)->their_abspath) + +#define svn_client_conflict_get_my_abspath(conflict) \ + ((conflict)->my_abspath) + +#define svn_client_conflict_get_merged_file(conflict) \ + ((conflict)->merged_file) + +#define svn_client_conflict_get_src_left_version(conflict) \ + ((conflict)->src_left_version) + +#define svn_client_conflict_get_src_right_version(conflict) \ + ((conflict)->src_right_version) + +#define svn_client_conflict_get_prop_reject_abspath(conflict) \ + ((conflict)->prop_reject_abspath) + +#define svn_client_conflict_get_prop_value_working(conflict) \ + ((conflict)->prop_value_working) + +#define svn_client_conflict_get_prop_value_incoming_old(conflict) \ + ((conflict)->prop_value_incoming_old) + +#define svn_client_conflict_get_prop_value_incoming_new(conflict) \ + ((conflict)->prop_value_incoming_new) + +/** @} */ + +/** * @defgroup Resolved Mark conflicted paths as resolved. * * @{ @@ -4492,6 +4605,41 @@ typedef struct svn_client_copy_source_t * If @a ignore_externals is set, don't process externals definitions * as part of this operation. * + * If @a metadata_only is @c TRUE and copying a file in a working copy, + * everything in the metadata is updated as if the node is moved, but the + * actual disk copy operation is not performed. This feature is useful for + * clients that want to keep the working copy in sync while the actual working + * copy is updated by some other task. + * + * If @a pin_externals is set, pin URLs in copied externals definitions + * to their current revision unless they were already pinned to a + * particular revision. A pinned external uses a URL which points at a + * fixed revision, rather than the HEAD revision. Externals in the copy + * destination are pinned to either a working copy base revision or the + * HEAD revision of a repository (as of the time the copy operation is + * performed), depending on the type of the copy source: + <pre> + copy source: working copy (WC) REPOS + ------------+------------------------+---------------------------+ + copy WC | external's WC BASE rev | external's repos HEAD rev | + dest: |------------------------+---------------------------+ + REPOS | external's WC BASE rev | external's repos HEAD rev | + ------------+------------------------+---------------------------+ + </pre> + * If the copy source is a working copy, then all externals must be checked + * out, be at a single-revision, contain no local modifications, and contain + * no switched subtrees. Else, #SVN_ERR_WC_PATH_UNEXPECTED_STATUS is returned. + * + * If non-NULL, @a externals_to_pin restricts pinning to a subset of externals. + * It is a hash table keyed by either a local absolute path or a URL at which + * an svn:externals property is set. The hash table contains apr_array_header_t* + * elements as returned by svn_wc_parse_externals_description3(). These arrays + * contain elements of type svn_wc_external_item2_t*, each of which corresponds + * to a single line of an svn:externals definition. Externals corresponding to + * these items will be pinned, other externals will not be pinned. + * If @a externals_to_pin is @c NULL then all externals are pinned. + * If @a pin_externals is @c FALSE then @a externals_to_pin is ignored. + * * If non-NULL, @a revprop_table is a hash table holding additional, * custom revision properties (<tt>const char *</tt> names mapped to * <tt>svn_string_t *</tt> values) to be set on the new revision in @@ -4510,8 +4658,32 @@ typedef struct svn_client_copy_source_t * @a commit_callback with @a commit_baton and a #svn_commit_info_t for * the commit. * + * @since New in 1.9. + */ +svn_error_t * +svn_client_copy7(const apr_array_header_t *sources, + const char *dst_path, + svn_boolean_t copy_as_child, + svn_boolean_t make_parents, + svn_boolean_t ignore_externals, + svn_boolean_t metadata_only, + svn_boolean_t pin_externals, + const apr_hash_t *externals_to_pin, + const apr_hash_t *revprop_table, + svn_commit_callback2_t commit_callback, + void *commit_baton, + svn_client_ctx_t *ctx, + apr_pool_t *pool); + +/** + * Similar to svn_client_copy7(), but doesn't support meta_data_only + * and cannot pin externals. + * + * * @since New in 1.7. + * @deprecated Provided for backward compatibility with the 1.8 API. */ +SVN_DEPRECATED svn_error_t * svn_client_copy6(const apr_array_header_t *sources, const char *dst_path, Modified: subversion/branches/fsx-1.10/subversion/include/svn_cmdline.h URL: http://svn.apache.org/viewvc/subversion/branches/fsx-1.10/subversion/include/svn_cmdline.h?rev=1685464&r1=1685463&r2=1685464&view=diff ============================================================================== --- subversion/branches/fsx-1.10/subversion/include/svn_cmdline.h (original) +++ subversion/branches/fsx-1.10/subversion/include/svn_cmdline.h Sun Jun 14 20:58:10 2015 @@ -342,7 +342,7 @@ svn_cmdline_auth_plaintext_passphrase_pr * * @a trust_server_cert_other_failure: If @c TRUE, accept certificates * even if any other verification failure than the above occured. - * + * * @a cfg is the @c SVN_CONFIG_CATEGORY_CONFIG configuration, and * @a cancel_func and @a cancel_baton control the cancellation of the * prompting providers that are initialized. @@ -370,10 +370,11 @@ svn_cmdline_create_auth_baton2(svn_auth_ /* Like svn_cmdline_create_auth_baton2, but with only one trust_server_cert * option which corresponds to trust_server_cert_unknown_ca. - * + * * @deprecated Provided for backward compatibility with the 1.8 API. * @since New in 1.6. */ +SVN_DEPRECATED svn_error_t * svn_cmdline_create_auth_baton(svn_auth_baton_t **ab, svn_boolean_t non_interactive, Modified: subversion/branches/fsx-1.10/subversion/include/svn_config.h URL: http://svn.apache.org/viewvc/subversion/branches/fsx-1.10/subversion/include/svn_config.h?rev=1685464&r1=1685463&r2=1685464&view=diff ============================================================================== --- subversion/branches/fsx-1.10/subversion/include/svn_config.h (original) +++ subversion/branches/fsx-1.10/subversion/include/svn_config.h Sun Jun 14 20:58:10 2015 @@ -63,6 +63,12 @@ typedef struct svn_config_t svn_config_t * @{ */ +/* If you add a new SVN_CONFIG_* category/section/option macro to this group, + * you have to re-run gen-make.py manually. + * + * ### This should be fixed in the build system; see issue #4581. + */ + /* This list of #defines is intentionally presented as a nested list that matches the in-config hierarchy. */ @@ -782,7 +788,8 @@ svn_config_write_auth_data(apr_hash_t *h * fully purged) to allow perusal and selective removal of credentials. * * @a cred_kind and @a realmstring specify the key of the credential. - * @a hash contains the hash data associated with the record. + * @a hash contains the hash data associated with the record. @a walk_baton + * is the baton passed to svn_config_walk_auth_data(). * * Before returning set @a *delete_cred to TRUE to remove the credential from * the cache; leave @a *delete_cred unchanged or set it to FALSE to keep the Modified: subversion/branches/fsx-1.10/subversion/include/svn_diff.h URL: http://svn.apache.org/viewvc/subversion/branches/fsx-1.10/subversion/include/svn_diff.h?rev=1685464&r1=1685463&r2=1685464&view=diff ============================================================================== --- subversion/branches/fsx-1.10/subversion/include/svn_diff.h (original) +++ subversion/branches/fsx-1.10/subversion/include/svn_diff.h Sun Jun 14 20:58:10 2015 @@ -412,6 +412,9 @@ typedef enum svn_diff_conflict_display_s /** Given a vtable of @a output_fns/@a output_baton for consuming * differences, output the differences in @a diff. * + * If not @c NULL, call @a cancel_func with @a cancel_baton once or multiple + * times while processing larger diffs. + * * @since New in 1.9. */ svn_error_t * @@ -628,6 +631,9 @@ svn_diff_file_diff4(svn_diff_t **diff, * will be used in the generated diff output. Otherwise the legacy compile * time default will be used. * + * If not @c NULL, call @a cancel_func with @a cancel_baton once or multiple + * times while processing larger diffs. + * * @since New in 1.9. */ svn_error_t * @@ -645,7 +651,7 @@ svn_diff_file_output_unified4(svn_stream void *cancel_baton, apr_pool_t *scratch_pool); -/** Similar to svn_diff_file_output_unified3(), but without cancel +/** Similar to svn_diff_file_output_unified4(), but without cancel * support and with @a context_size set to -1. * * @since New in 1.5. @@ -705,7 +711,11 @@ svn_diff_file_output_unified(svn_stream_ * @a conflict_latest to be displayed as conflict markers in the output. * If @a conflict_original, @a conflict_modified, @a conflict_latest and/or * @a conflict_separator is @c NULL, a default marker will be displayed. - * @a conflict_style dictates how conflicts are displayed. + * @a conflict_style dictates how conflicts are displayed. + * Uses @a scratch_pool for temporary allocations. + * + * If not @c NULL, call @a cancel_func with @a cancel_baton once or multiple + * times while processing larger diffs. * * @since New in 1.9. */ @@ -722,7 +732,7 @@ svn_diff_file_output_merge3(svn_stream_t svn_diff_conflict_display_style_t conflict_style, svn_cancel_func_t cancel_func, void *cancel_baton, - apr_pool_t *pool); + apr_pool_t *scratch_pool); /** Similar to svn_diff_file_output_merge3, but without cancel support. * @@ -782,7 +792,10 @@ svn_diff_file_output_merge(svn_stream_t * Either @a original or @a latest may be NULL to describe that the version * didn't exist. * - * Writes the ouput to @a output_stream. + * Writes the output to @a output_stream. + * + * If not @c NULL, call @a cancel_func with @a cancel_baton once or multiple + * times while processing larger diffs. * * @since New in 1.9. */ @@ -858,6 +871,11 @@ svn_diff_mem_string_diff4(svn_diff_t **d * will be used in the generated diff output. Otherwise the legacy compile * time default will be used. * + * If not @c NULL, call @a cancel_func with @a cancel_baton once or multiple + * times while processing larger diffs. + * + * Uses @a scratch_pool for temporary allocations. + * * @since New in 1.9 */ svn_error_t * @@ -873,7 +891,7 @@ svn_diff_mem_string_output_unified3(svn_ int context_size, svn_cancel_func_t cancel_func, void *cancel_baton, - apr_pool_t *pool); + apr_pool_t *scratch_pool); /** Similar to svn_diff_mem_string_output_unified3() but without * cancel support and with @a context_size set to -1. @@ -924,6 +942,11 @@ svn_diff_mem_string_output_unified(svn_s * * @a conflict_style dictates how conflicts are displayed. * + * If not @c NULL, call @a cancel_func with @a cancel_baton once or multiple + * times while processing larger diffs. + * + * Uses @a scratch_pool for temporary allocations. + * * @since New in 1.9. */ svn_error_t * @@ -939,7 +962,7 @@ svn_diff_mem_string_output_merge3(svn_st svn_diff_conflict_display_style_t style, svn_cancel_func_t cancel_func, void *cancel_baton, - apr_pool_t *pool); + apr_pool_t *scratch_pool); /** Similar to svn_diff_mem_string_output_merge2(), but without cancel support. * @@ -1056,7 +1079,7 @@ typedef struct svn_diff_hunk_t svn_diff_ /** * Allocate @a *stringbuf in @a result_pool, and read into it one line * of the diff text of @a hunk. The hunk header is not returned only the - * unidiff data lines (starting with '+', '-', or ' ') are returned. + * unidiff data lines (starting with '+', '-', or ' ') are returned. * If the @a hunk is being interpreted in reverse (i.e. the reverse * parameter of svn_diff_parse_next_patch() was @c TRUE), the diff * text will be returned in reversed form. @@ -1067,7 +1090,7 @@ typedef struct svn_diff_hunk_t svn_diff_ * Temporary allocations will be performed in @a scratch_pool. * * @note The hunk header information can be retrieved with the following - * functions: + * functions: * @see svn_diff_hunk_get_original_start() * @see svn_diff_hunk_get_original_length() * @see svn_diff_hunk_get_modified_start() Modified: subversion/branches/fsx-1.10/subversion/include/svn_dirent_uri.h URL: http://svn.apache.org/viewvc/subversion/branches/fsx-1.10/subversion/include/svn_dirent_uri.h?rev=1685464&r1=1685463&r2=1685464&view=diff ============================================================================== --- subversion/branches/fsx-1.10/subversion/include/svn_dirent_uri.h (original) +++ subversion/branches/fsx-1.10/subversion/include/svn_dirent_uri.h Sun Jun 14 20:58:10 2015 @@ -363,9 +363,9 @@ svn_relpath_dirname(const char *relpath, * @since New in 1.9. */ const char * -svn_relpath_limit(const char *relpath, - int max_components, - apr_pool_t *result_pool); +svn_relpath_prefix(const char *relpath, + int max_components, + apr_pool_t *result_pool); /** Divide the canonicalized @a uri into a uri @a *dirpath and a Modified: subversion/branches/fsx-1.10/subversion/include/svn_error.h URL: http://svn.apache.org/viewvc/subversion/branches/fsx-1.10/subversion/include/svn_error.h?rev=1685464&r1=1685463&r2=1685464&view=diff ============================================================================== --- subversion/branches/fsx-1.10/subversion/include/svn_error.h (original) +++ subversion/branches/fsx-1.10/subversion/include/svn_error.h Sun Jun 14 20:58:10 2015 @@ -165,14 +165,25 @@ svn_error_wrap_apr(apr_status_t status, ...) __attribute__((format(printf, 2, 3))); -/** A quick n' easy way to create a wrapped exception with your own - * message, before throwing it up the stack. (It uses all of the - * @a child's fields.) +/** If @a child is SVN_NO_ERROR, return SVN_NO_ERROR. + * Else, prepend a new error to the error chain of @a child. The new error + * uses @a new_msg as error message but all other error attributes (such + * as the error code) are copied from @a child. */ svn_error_t * svn_error_quick_wrap(svn_error_t *child, const char *new_msg); +/** Like svn_error_quick_wrap(), but with format string support. + * + * @since New in 1.9. + */ +svn_error_t * +svn_error_quick_wrapf(svn_error_t *child, + const char *fmt, + ...) + __attribute__((format(printf, 2, 3))); + /** Compose two errors, returning the composition as a brand new error * and consuming the original errors. Either or both of @a err1 and * @a err2 may be @c SVN_NO_ERROR. If both are not @c SVN_NO_ERROR, @@ -256,6 +267,8 @@ svn_error__locate(const char *file, (svn_error__locate(__FILE__,__LINE__), (svn_error_wrap_apr)) #define svn_error_quick_wrap \ (svn_error__locate(__FILE__,__LINE__), (svn_error_quick_wrap)) +#define svn_error_quick_wrapf \ + (svn_error__locate(__FILE__,__LINE__), (svn_error_quick_wrapf)) #endif @@ -440,7 +453,10 @@ svn_error_t *svn_error_purge_tracing(svn err->apr_err == SVN_ERR_FS_NOT_FOUND || \ err->apr_err == SVN_ERR_FS_OUT_OF_DATE || \ err->apr_err == SVN_ERR_FS_BAD_LOCK_TOKEN || \ - err->apr_err == SVN_ERR_REPOS_HOOK_FAILURE) + err->apr_err == SVN_ERR_REPOS_HOOK_FAILURE || \ + err->apr_err == SVN_ERR_FS_NO_SUCH_REVISION || \ + err->apr_err == SVN_ERR_FS_OUT_OF_DATE || \ + err->apr_err == SVN_ERR_FS_NOT_FILE) /** * Return TRUE if @a err is an error specifically related to unlocking Modified: subversion/branches/fsx-1.10/subversion/include/svn_error_codes.h URL: http://svn.apache.org/viewvc/subversion/branches/fsx-1.10/subversion/include/svn_error_codes.h?rev=1685464&r1=1685463&r2=1685464&view=diff ============================================================================== --- subversion/branches/fsx-1.10/subversion/include/svn_error_codes.h (original) +++ subversion/branches/fsx-1.10/subversion/include/svn_error_codes.h Sun Jun 14 20:58:10 2015 @@ -923,9 +923,9 @@ SVN_ERROR_START "Repository upgrade is not supported") /** @since New in 1.9. */ - SVN_ERRDEF(SVN_ERR_REPOS_CORRUPTED, + SVN_ERRDEF(SVN_ERR_REPOS_VERIFY_FAILED, SVN_ERR_REPOS_CATEGORY_START + 11, - "Repository is corrupt") + "Repository verification failed") /* generic RA errors */ @@ -1066,6 +1066,11 @@ SVN_ERROR_START SVN_ERR_RA_DAV_CATEGORY_START + 14, "The server state conflicts with the requested preconditions") + /** @since New in 1.9 */ + SVN_ERRDEF(SVN_ERR_RA_DAV_METHOD_NOT_ALLOWED, + SVN_ERR_RA_DAV_CATEGORY_START + 15, + "The URL doesn't allow the requested method") + /* ra_local errors */ SVN_ERRDEF(SVN_ERR_RA_LOCAL_REPOS_NOT_FOUND, @@ -1590,11 +1595,14 @@ SVN_ERROR_START "Diff data source modified unexpectedly") /* libsvn_ra_serf errors */ - /** @since New in 1.5. */ + /** @since New in 1.5. + @deprecated SSPI now handled by serf rather than libsvn_ra_serf. */ SVN_ERRDEF(SVN_ERR_RA_SERF_SSPI_INITIALISATION_FAILED, SVN_ERR_RA_SERF_CATEGORY_START + 0, "Initialization of SSPI library failed") - /** @since New in 1.5. */ + /** @since New in 1.5. + @deprecated Certificate verification now handled by serf rather + than libsvn_ra_serf. */ SVN_ERRDEF(SVN_ERR_RA_SERF_SSL_CERT_UNTRUSTED, SVN_ERR_RA_SERF_CATEGORY_START + 1, "Server SSL certificate untrusted")
