You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by as...@apache.org on 2012/11/24 21:29:48 UTC
svn commit: r1413258 [4/33] - in /subversion/branches/compressed-pristines:
./ build/ build/ac-macros/ build/generator/ build/generator/templates/
contrib/client-side/emacs/ contrib/server-side/fsfsfixer/ notes/
notes/directory-index/ subversion/ subve...
Modified: subversion/branches/compressed-pristines/subversion/bindings/swig/python/libsvn_swig_py/swigutil_py.c
URL: http://svn.apache.org/viewvc/subversion/branches/compressed-pristines/subversion/bindings/swig/python/libsvn_swig_py/swigutil_py.c?rev=1413258&r1=1413257&r2=1413258&view=diff
==============================================================================
--- subversion/branches/compressed-pristines/subversion/bindings/swig/python/libsvn_swig_py/swigutil_py.c (original)
+++ subversion/branches/compressed-pristines/subversion/bindings/swig/python/libsvn_swig_py/swigutil_py.c Sat Nov 24 20:29:11 2012
@@ -2159,6 +2159,24 @@ svn_swig_py_make_stream(PyObject *py_io,
return stream;
}
+PyObject *
+svn_swig_py_convert_txdelta_op_c_array(int num_ops,
+ svn_txdelta_op_t *ops,
+ swig_type_info *op_type_info,
+ PyObject *parent_pool)
+{
+ PyObject *result = PyList_New(num_ops);
+ int i;
+
+ if (!result) return NULL;
+
+ for (i = 0; i < num_ops; ++i)
+ PyList_SET_ITEM(result, i,
+ svn_swig_NewPointerObj(ops + i, op_type_info,
+ parent_pool, NULL));
+
+ return result;
+}
void svn_swig_py_notify_func(void *baton,
const char *path,
@@ -4174,18 +4192,98 @@ svn_swig_py_setup_wc_diff_callbacks2(voi
return callbacks;
}
-PyObject *
-svn_swig_py_txdelta_window_t_ops_get(svn_txdelta_window_t *window,
- swig_type_info * op_type_info,
- PyObject *window_pool)
+svn_boolean_t
+svn_swig_py_config_enumerator2(const char *name,
+ const char *value,
+ void *baton,
+ apr_pool_t *pool)
{
- PyObject *result = PyList_New(window->num_ops);
- int i;
+ PyObject *function = baton;
+ PyObject *result;
+ svn_error_t *err = SVN_NO_ERROR;
+ svn_boolean_t c_result;
- for (i = 0; i < window->num_ops; ++i)
- PyList_SET_ITEM(result, i,
- svn_swig_NewPointerObj(window->ops + i, op_type_info,
- window_pool, NULL));
+ svn_swig_py_acquire_py_lock();
- return result;
+ if ((result = PyObject_CallFunction(function,
+ (char *)"ssO&",
+ name,
+ value,
+ make_ob_pool, pool)) == NULL)
+ {
+ err = callback_exception_error();
+ }
+ else if (!PyBool_Check(result))
+ {
+ err = callback_bad_return_error("Not bool");
+ Py_DECREF(result);
+ }
+
+ /* Any Python exception we might have pending must be cleared,
+ because the SWIG wrapper will not check for it, and return a value with
+ the exception still set. */
+ PyErr_Clear();
+
+ if (err)
+ {
+ /* We can't return the error, but let's at least stop enumeration. */
+ svn_error_clear(err);
+ c_result = FALSE;
+ }
+ else
+ {
+ c_result = result == Py_True;
+ Py_DECREF(result);
+ }
+
+ svn_swig_py_release_py_lock();
+
+ return c_result;
+}
+
+svn_boolean_t
+svn_swig_py_config_section_enumerator2(const char *name,
+ void *baton,
+ apr_pool_t *pool)
+{
+ PyObject *function = baton;
+ PyObject *result;
+ svn_error_t *err = SVN_NO_ERROR;
+ svn_boolean_t c_result;
+
+ svn_swig_py_acquire_py_lock();
+
+ if ((result = PyObject_CallFunction(function,
+ (char *)"sO&",
+ name,
+ make_ob_pool, pool)) == NULL)
+ {
+ err = callback_exception_error();
+ }
+ else if (!PyBool_Check(result))
+ {
+ err = callback_bad_return_error("Not bool");
+ Py_DECREF(result);
+ }
+
+ /* Any Python exception we might have pending must be cleared,
+ because the SWIG wrapper will not check for it, and return a value with
+ the exception still set. */
+ PyErr_Clear();
+
+ if (err)
+ {
+ /* We can't return the error, but let's at least stop enumeration. */
+ svn_error_clear(err);
+ c_result = FALSE;
+ }
+ else
+ {
+ c_result = result == Py_True;
+ Py_DECREF(result);
+ }
+
+ svn_swig_py_release_py_lock();
+
+ return c_result;
}
Modified: subversion/branches/compressed-pristines/subversion/bindings/swig/python/libsvn_swig_py/swigutil_py.h
URL: http://svn.apache.org/viewvc/subversion/branches/compressed-pristines/subversion/bindings/swig/python/libsvn_swig_py/swigutil_py.h?rev=1413258&r1=1413257&r2=1413258&view=diff
==============================================================================
--- subversion/branches/compressed-pristines/subversion/bindings/swig/python/libsvn_swig_py/swigutil_py.h (original)
+++ subversion/branches/compressed-pristines/subversion/bindings/swig/python/libsvn_swig_py/swigutil_py.h Sat Nov 24 20:29:11 2012
@@ -299,6 +299,15 @@ SVN_SWIG_SWIGUTIL_EXPORT
svn_stream_t *svn_swig_py_make_stream(PyObject *py_io,
apr_pool_t *pool);
+/* Convert ops, a C array of num_ops elements, to a Python list of SWIG
+ objects with descriptor op_type_info and pool set to parent_pool. */
+SVN_SWIG_SWIGUTIL_EXPORT
+PyObject *
+svn_swig_py_convert_txdelta_op_c_array(int num_ops,
+ svn_txdelta_op_t *ops,
+ swig_type_info * op_type_info,
+ PyObject *parent_pool);
+
/* a notify function that executes a Python function that is passed in
via the baton argument */
SVN_SWIG_SWIGUTIL_EXPORT
@@ -520,16 +529,18 @@ svn_error_t *svn_swig_py_ra_lock_callbac
SVN_SWIG_SWIGUTIL_EXPORT
extern const svn_ra_reporter2_t swig_py_ra_reporter2;
-/* Get a list of ops from a window. Used to replace the naive
- svn_txdelta_window_t.ops accessor. op_type_info is supposed to be
- the SWIG descriptor of "svn_txdelta_op_t *". window_pool is supposed
- to be the pool associated with the window proxy and used for wrapping
- the op objects. */
SVN_SWIG_SWIGUTIL_EXPORT
-PyObject *
-svn_swig_py_txdelta_window_t_ops_get(svn_txdelta_window_t *window,
- swig_type_info * op_type_info,
- PyObject *window_pool);
+svn_boolean_t
+svn_swig_py_config_enumerator2(const char *name,
+ const char *value,
+ void *baton,
+ apr_pool_t *pool);
+
+SVN_SWIG_SWIGUTIL_EXPORT
+svn_boolean_t
+svn_swig_py_config_section_enumerator2(const char *name,
+ void *baton,
+ apr_pool_t *pool);
#ifdef __cplusplus
}
Modified: subversion/branches/compressed-pristines/subversion/bindings/swig/python/svn/delta.py
URL: http://svn.apache.org/viewvc/subversion/branches/compressed-pristines/subversion/bindings/swig/python/svn/delta.py?rev=1413258&r1=1413257&r2=1413258&view=diff
==============================================================================
--- subversion/branches/compressed-pristines/subversion/bindings/swig/python/svn/delta.py (original)
+++ subversion/branches/compressed-pristines/subversion/bindings/swig/python/svn/delta.py Sat Nov 24 20:29:11 2012
@@ -30,10 +30,6 @@ _unprefix_names(locals(), 'svn_txdelta_'
__all__ = filter(lambda x: x.lower().startswith('svn_'), locals().keys())
del _unprefix_names
-# Force our accessor since it appears that there isn't a more civilized way
-# to make SWIG use it.
-svn_txdelta_window_t.ops = property(svn_txdelta_window_t_ops_get)
-
class Editor:
def set_target_revision(self, target_revision, pool=None):
Modified: subversion/branches/compressed-pristines/subversion/bindings/swig/python/tests/core.py
URL: http://svn.apache.org/viewvc/subversion/branches/compressed-pristines/subversion/bindings/swig/python/tests/core.py?rev=1413258&r1=1413257&r2=1413258&view=diff
==============================================================================
--- subversion/branches/compressed-pristines/subversion/bindings/swig/python/tests/core.py (original)
+++ subversion/branches/compressed-pristines/subversion/bindings/swig/python/tests/core.py Sat Nov 24 20:29:11 2012
@@ -97,7 +97,7 @@ class SubversionCoreTestCase(unittest.Te
# will be passed through.
rec.e = svn.core.SubversionException("No fields except message.")
# e.apr_err is None but should be an int
- self.assertRaises(TypeError, svn.client.info2, args)
+ self.assertRaises(TypeError, svn.client.info2, *args)
finally:
# This would happen without the finally block as well, but we expliticly
# order the operations so that the cleanup is not hindered by any open
@@ -105,6 +105,71 @@ class SubversionCoreTestCase(unittest.Te
del ctx
t.cleanup()
+ def test_config_enumerate2(self):
+ cfg = svn.core.svn_config_create(False)
+ entries = {
+ 'one': 'one-value',
+ 'two': 'two-value',
+ 'three': 'three-value'
+ }
+
+ for (name, value) in entries.iteritems():
+ svn.core.svn_config_set(cfg, "section", name, value)
+
+ received_entries = {}
+ def enumerator(name, value, pool):
+ received_entries[name] = value
+ return len(received_entries) < 2
+
+ svn.core.svn_config_enumerate2(cfg, "section", enumerator)
+
+ self.assertEqual(len(received_entries), 2)
+ for (name, value) in received_entries.iteritems():
+ self.assert_(name in entries)
+ self.assertEqual(value, entries[name])
+
+ def test_config_enumerate2_exception(self):
+ cfg = svn.core.svn_config_create(False)
+ svn.core.svn_config_set(cfg, "section", "one", "one-value")
+ svn.core.svn_config_set(cfg, "section", "two", "two-value")
+
+ def enumerator(name, value, pool):
+ raise Exception
+
+ # the exception will be swallowed, but enumeration must be stopped
+ self.assertEqual(
+ svn.core.svn_config_enumerate2(cfg, "section", enumerator), 1)
+
+ def test_config_enumerate_sections2(self):
+ cfg = svn.core.svn_config_create(False)
+ sections = ['section-one', 'section-two', 'section-three']
+
+ for section in sections:
+ svn.core.svn_config_set(cfg, section, "name", "value")
+
+ received_sections = []
+ def enumerator(section, pool):
+ received_sections.append(section)
+ return len(received_sections) < 2
+
+ svn.core.svn_config_enumerate_sections2(cfg, enumerator)
+
+ self.assertEqual(len(received_sections), 2)
+ for section in received_sections:
+ self.assert_(section in sections)
+
+ def test_config_enumerate_sections2_exception(self):
+ cfg = svn.core.svn_config_create(False)
+ svn.core.svn_config_set(cfg, "section-one", "name", "value")
+ svn.core.svn_config_set(cfg, "section-two", "name", "value")
+
+ def enumerator(section, pool):
+ raise Exception
+
+ # the exception will be swallowed, but enumeration must be stopped
+ self.assertEqual(
+ svn.core.svn_config_enumerate_sections2(cfg, enumerator), 1)
+
def suite():
return unittest.defaultTestLoader.loadTestsFromTestCase(
SubversionCoreTestCase)
Modified: subversion/branches/compressed-pristines/subversion/bindings/swig/python/tests/pool.py
URL: http://svn.apache.org/viewvc/subversion/branches/compressed-pristines/subversion/bindings/swig/python/tests/pool.py?rev=1413258&r1=1413257&r2=1413258&view=diff
==============================================================================
--- subversion/branches/compressed-pristines/subversion/bindings/swig/python/tests/pool.py (original)
+++ subversion/branches/compressed-pristines/subversion/bindings/swig/python/tests/pool.py Sat Nov 24 20:29:11 2012
@@ -56,17 +56,7 @@ class PoolTestCase(unittest.TestCase):
def test_object_hash_struct_members(self):
"""Check that struct members which are hashes of objects work correctly"""
- # Get an empty config
- (cfg_fd, cfg_name) = tempfile.mkstemp(prefix="conf-")
- os.close(cfg_fd)
-
- try:
- cfg = svn.core.svn_config_read(
- svn.core.svn_dirent_internal_style(cfg_name),
- False)
- finally:
- os.remove(cfg_name)
-
+ cfg = svn.core.svn_config_create(False)
client_ctx = svn.client.svn_client_create_context()
category = svn.core.SVN_CONFIG_CATEGORY_SERVERS
client_ctx.config = { category: cfg }
Modified: subversion/branches/compressed-pristines/subversion/bindings/swig/svn_delta.i
URL: http://svn.apache.org/viewvc/subversion/branches/compressed-pristines/subversion/bindings/swig/svn_delta.i?rev=1413258&r1=1413257&r2=1413258&view=diff
==============================================================================
--- subversion/branches/compressed-pristines/subversion/bindings/swig/svn_delta.i (original)
+++ subversion/branches/compressed-pristines/subversion/bindings/swig/svn_delta.i Sat Nov 24 20:29:11 2012
@@ -174,61 +174,47 @@ svn_txdelta_window_t_ops_get(svn_txdelta
#ifdef SWIGPYTHON
%ignore svn_txdelta_window_t::ops;
-%inline %{
-static PyObject *
-svn_txdelta_window_t_ops_get(PyObject *window_ob)
+%extend svn_txdelta_window_t {
+
+void _ops_get(int *num_ops, svn_txdelta_op_t **ops)
{
- void *window;
- PyObject *ops_list, *window_pool;
- int status;
-
- /* Kludge alert!
- Normally, these kinds of conversions would belong in a typemap.
- However, typemaps won't allow us to change the result type to an array,
- so we have to make this custom accessor function.
- A cleaner approach would be to use something like:
-
- %extend svn_txdelta_window_t { void get_ops(apr_array_header_t ** ops); }
-
- But that means unnecessary copying, plus more hacks to get the pool for the
- array and for wrapping the individual op objects. So we just don't bother.
- */
+ *num_ops = self->num_ops;
+ *ops = self->ops;
+}
+
+%pythoncode {
+ ops = property(_ops_get)
+}
+}
+
+%typemap(argout) (int *num_ops, svn_txdelta_op_t **ops) {
+ apr_pool_t *parent_pool;
+ PyObject *parent_py_pool;
+ PyObject *ops_list;
- /* Note: the standard svn-python typemap releases the GIL while calling the
- wrapped function, but this function does Python stuff, so we have to
- reacquire it again. */
- svn_swig_py_acquire_py_lock();
- status = svn_swig_ConvertPtr(window_ob, &window,
- SWIG_TypeQuery("svn_txdelta_window_t *"));
-
- if (status != 0)
- {
- PyErr_SetString(PyExc_TypeError,
- "expected an svn_txdelta_window_t* proxy");
- svn_swig_py_release_py_lock();
- return NULL;
- }
-
- window_pool = PyObject_GetAttrString(window_ob, "_parent_pool");
-
- if (window_pool == NULL)
- {
- svn_swig_py_release_py_lock();
- return NULL;
- }
-
- ops_list = svn_swig_py_txdelta_window_t_ops_get(window,
- SWIG_TypeQuery("svn_txdelta_op_t *"), window_pool);
-
- svn_swig_py_release_py_lock();
+ if (svn_swig_py_get_parent_pool(args, $descriptor(apr_pool_t *),
+ &parent_py_pool, &parent_pool))
+ SWIG_fail;
- return ops_list;
+ ops_list = svn_swig_py_convert_txdelta_op_c_array(*$1, *$2,
+ $descriptor(svn_txdelta_op_t *), parent_py_pool);
+
+ if (!ops_list) SWIG_fail;
+
+ %append_output(ops_list);
}
-%}
#endif
%include svn_delta_h.swg
+#ifdef SWIGPYTHON
+%pythoncode {
+# This function is for backwards compatibility only.
+# Use svn_txdelta_window_t.ops instead.
+svn_txdelta_window_t_ops_get = svn_txdelta_window_t._ops_get
+}
+#endif
+
#ifdef SWIGRUBY
%inline %{
static VALUE
Modified: subversion/branches/compressed-pristines/subversion/bindings/swig/svn_wc.i
URL: http://svn.apache.org/viewvc/subversion/branches/compressed-pristines/subversion/bindings/swig/svn_wc.i?rev=1413258&r1=1413257&r2=1413258&view=diff
==============================================================================
--- subversion/branches/compressed-pristines/subversion/bindings/swig/svn_wc.i (original)
+++ subversion/branches/compressed-pristines/subversion/bindings/swig/svn_wc.i Sat Nov 24 20:29:11 2012
@@ -155,11 +155,16 @@
)
#endif
-#ifndef SWIGPERL
%callback_typemap(svn_wc_status_func2_t status_func, void *status_baton,
svn_swig_py_status_func2,
- ,
+ svn_swig_pl_status_func2,
svn_swig_rb_wc_status_func)
+
+#ifdef SWIGPERL
+%callback_typemap(svn_wc_status_func3_t status_func, void *status_baton,
+ ,
+ svn_swig_pl_status_func3,
+ )
#endif
#ifndef SWIGPERL
Modified: subversion/branches/compressed-pristines/subversion/include/private/svn_cache.h
URL: http://svn.apache.org/viewvc/subversion/branches/compressed-pristines/subversion/include/private/svn_cache.h?rev=1413258&r1=1413257&r2=1413258&view=diff
==============================================================================
--- subversion/branches/compressed-pristines/subversion/include/private/svn_cache.h (original)
+++ subversion/branches/compressed-pristines/subversion/include/private/svn_cache.h Sat Nov 24 20:29:11 2012
@@ -269,16 +269,33 @@ svn_cache__make_memcache_from_config(svn
* will generally result in higher hit rates and reduced conflict
* resolution overhead.
*
- * If access to the resulting cache object is guranteed to be serialized,
+ * The cache will be split into @a segment_count segments of equal size.
+ * A higher number reduces lock contention but also limits the maximum
+ * cachable item size. If it is not a power of two, it will be rounded
+ * down to next lower power of two. Also, there is an implementation
+ * specific upper limit and the setting will be capped there automatically.
+ * If the number is 0, a default will be derived from @a total_size.
+ *
+ * If access to the resulting cache object is guaranteed to be serialized,
* @a thread_safe may be set to @c FALSE for maximum performance.
*
+ * There is no limit on the number of threads reading a given cache segment
+ * concurrently. Writes, however, need an exclusive lock on the respective
+ * segment. @a allow_blocking_writes controls contention is handled here.
+ * If set to TRUE, writes will wait until the lock becomes available, i.e.
+ * reads should be short. If set to FALSE, write attempts will be ignored
+ * (no data being written to the cache) if some reader or another writer
+ * currently holds the segment lock.
+ *
* Allocations will be made in @a result_pool, in particular the data buffers.
*/
svn_error_t *
svn_cache__membuffer_cache_create(svn_membuffer_t **cache,
apr_size_t total_size,
apr_size_t directory_size,
+ apr_size_t segment_count,
svn_boolean_t thread_safe,
+ svn_boolean_t allow_blocking_writes,
apr_pool_t *result_pool);
/**
Modified: subversion/branches/compressed-pristines/subversion/include/private/svn_client_private.h
URL: http://svn.apache.org/viewvc/subversion/branches/compressed-pristines/subversion/include/private/svn_client_private.h?rev=1413258&r1=1413257&r2=1413258&view=diff
==============================================================================
--- subversion/branches/compressed-pristines/subversion/include/private/svn_client_private.h (original)
+++ subversion/branches/compressed-pristines/subversion/include/private/svn_client_private.h Sat Nov 24 20:29:11 2012
@@ -38,6 +38,21 @@ extern "C" {
#endif /* __cplusplus */
+/* 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) \
+ ((kind) == svn_opt_revision_base || \
+ (kind) == svn_opt_revision_previous || \
+ (kind) == svn_opt_revision_working || \
+ (kind) == svn_opt_revision_committed) \
+
+/* Return true if KIND is a revision kind that the WC can supply without
+ * contacting the repository. Otherwise, return false. */
+#define SVN_CLIENT__REVKIND_IS_LOCAL_TO_WC(kind) \
+ ((kind) == svn_opt_revision_base || \
+ (kind) == svn_opt_revision_working || \
+ (kind) == svn_opt_revision_committed)
+
/* A location in a repository. */
typedef struct svn_client__pathrev_t
{
@@ -98,6 +113,39 @@ const char *
svn_client__pathrev_fspath(const svn_client__pathrev_t *pathrev,
apr_pool_t *result_pool);
+/* Given PATH_OR_URL, which contains either a working copy path or an
+ absolute URL, a peg revision PEG_REVISION, and a desired revision
+ REVISION, create an RA connection to that object as it exists in
+ that revision, following copy history if necessary. If REVISION is
+ younger than PEG_REVISION, then PATH_OR_URL will be checked to see
+ that it is the same node in both PEG_REVISION and REVISION. If it
+ is not, then @c SVN_ERR_CLIENT_UNRELATED_RESOURCES is returned.
+
+ BASE_DIR_ABSPATH is the working copy path the ra_session corresponds to,
+ and should only be used if PATH_OR_URL is a url
+ ### else NULL? what's it for?
+
+ If PEG_REVISION->kind is 'unspecified', the peg revision is 'head'
+ for a URL or 'working' for a WC path. If REVISION->kind is
+ 'unspecified', the operative revision is the peg revision.
+
+ Store the resulting ra_session in *RA_SESSION_P. Store the final
+ resolved location of the object in *RESOLVED_LOC_P. RESOLVED_LOC_P
+ may be NULL if not wanted.
+
+ Use authentication baton cached in CTX to authenticate against the
+ repository.
+
+ Use POOL for all allocations. */
+svn_error_t *
+svn_client__ra_session_from_path2(svn_ra_session_t **ra_session_p,
+ svn_client__pathrev_t **resolved_loc_p,
+ const char *path_or_url,
+ const char *base_dir_abspath,
+ const svn_opt_revision_t *peg_revision,
+ const svn_opt_revision_t *revision,
+ svn_client_ctx_t *ctx,
+ apr_pool_t *pool);
/** Return @c SVN_ERR_ILLEGAL_TARGET if TARGETS contains a mixture of
* URLs and paths; otherwise return SVN_NO_ERROR.
@@ -178,58 +226,20 @@ svn_client__wc_node_get_origin(svn_clien
apr_pool_t *result_pool,
apr_pool_t *scratch_pool);
-
-/* Details of a symmetric merge. */
-typedef struct svn_client__symmetric_merge_t
-{
- svn_client__pathrev_t *yca, *base, *mid, *right;
- svn_boolean_t allow_mixed_rev, allow_local_mods, allow_switched_subtrees;
-} svn_client__symmetric_merge_t;
-
-/* Find the information needed to merge all unmerged changes from a source
- * branch into a target branch. The information is the locations of the
- * youngest common ancestor, merge base, and such like.
- *
- * Set *MERGE to the information needed to merge all unmerged changes
- * (up to SOURCE_REVISION) from the source branch SOURCE_PATH_OR_URL @
- * SOURCE_REVISION into the target WC at TARGET_WCPATH.
- */
-svn_error_t *
-svn_client__find_symmetric_merge(svn_client__symmetric_merge_t **merge,
- const char *source_path_or_url,
- const svn_opt_revision_t *source_revision,
- const char *target_wcpath,
- svn_boolean_t allow_mixed_rev,
- svn_boolean_t allow_local_mods,
- svn_boolean_t allow_switched_subtrees,
- svn_client_ctx_t *ctx,
- apr_pool_t *result_pool,
- apr_pool_t *scratch_pool);
-
-/* Perform a symmetric merge.
- *
- * Merge according to MERGE into the WC at TARGET_WCPATH.
- *
- * The other parameters are as in svn_client_merge4().
- *
- * ### TODO: There's little point in this function being the only way the
- * caller can use the result of svn_client__find_symmetric_merge(). The
- * contents of MERGE should be more public, or there should be other ways
- * the caller can use it, or these two functions should be combined into
- * one. I want to make it more public, and also possibly have more ways
- * to use it in future (for example, do_symmetric_merge_with_step_by_-
- * step_confirmation).
- */
-svn_error_t *
-svn_client__do_symmetric_merge(const svn_client__symmetric_merge_t *merge,
- const char *target_wcpath,
- svn_depth_t depth,
- svn_boolean_t force,
- svn_boolean_t record_only,
- svn_boolean_t dry_run,
- const apr_array_header_t *merge_options,
- svn_client_ctx_t *ctx,
- apr_pool_t *scratch_pool);
+/* Set *YCA, *BASE, *RIGHT, *TARGET to the repository locations of the
+ * youngest common ancestor of the branches, the base chosen for 3-way
+ * merge, the right-hand side of the source diff, and the target WC.
+ *
+ * Any of the output pointers may be NULL if not wanted.
+ */
+svn_error_t *
+svn_client__automatic_merge_get_locations(
+ svn_client__pathrev_t **yca,
+ svn_client__pathrev_t **base,
+ svn_client__pathrev_t **right,
+ svn_client__pathrev_t **target,
+ const svn_client_automatic_merge_t *merge,
+ apr_pool_t *result_pool);
#ifdef __cplusplus
Modified: subversion/branches/compressed-pristines/subversion/include/private/svn_cmdline_private.h
URL: http://svn.apache.org/viewvc/subversion/branches/compressed-pristines/subversion/include/private/svn_cmdline_private.h?rev=1413258&r1=1413257&r2=1413258&view=diff
==============================================================================
--- subversion/branches/compressed-pristines/subversion/include/private/svn_cmdline_private.h (original)
+++ subversion/branches/compressed-pristines/subversion/include/private/svn_cmdline_private.h Sat Nov 24 20:29:11 2012
@@ -44,12 +44,14 @@ extern "C" {
* @a propname is the property name. @a propval is the property value, which
* will be encoded if it contains unsafe bytes.
*
- * @since New in 1.6.
+ * If @a inherited_prop is TRUE then @a propname is an inherited property,
+ * otherwise @a propname is an explicit property.
*/
void
svn_cmdline__print_xml_prop(svn_stringbuf_t **outstr,
const char *propname,
svn_string_t *propval,
+ svn_boolean_t inherited_prop,
apr_pool_t *pool);
Modified: subversion/branches/compressed-pristines/subversion/include/private/svn_dav_protocol.h
URL: http://svn.apache.org/viewvc/subversion/branches/compressed-pristines/subversion/include/private/svn_dav_protocol.h?rev=1413258&r1=1413257&r2=1413258&view=diff
==============================================================================
--- subversion/branches/compressed-pristines/subversion/include/private/svn_dav_protocol.h (original)
+++ subversion/branches/compressed-pristines/subversion/include/private/svn_dav_protocol.h Sat Nov 24 20:29:11 2012
@@ -32,6 +32,7 @@ extern "C" {
/** Names for the custom HTTP REPORTs understood by mod_dav_svn, sans
namespace. */
#define SVN_DAV__MERGEINFO_REPORT "mergeinfo-report"
+#define SVN_DAV__INHERITED_PROPS_REPORT "inherited-props-report"
/** Names for XML child elements of the custom HTTP REPORTs understood
by mod_dav_svn, sans namespace. */
@@ -44,6 +45,10 @@ extern "C" {
#define SVN_DAV__REVISION "revision"
#define SVN_DAV__INCLUDE_DESCENDANTS "include-descendants"
#define SVN_DAV__VERSION_NAME "version-name"
+#define SVN_DAV__IPROP_ITEM "iprop-item"
+#define SVN_DAV__IPROP_PATH "iprop-path"
+#define SVN_DAV__IPROP_PROPNAME "iprop-propname"
+#define SVN_DAV__IPROP_PROPVAL "iprop-propval"
/** Names of XML elements attributes and tags for svn_ra_change_rev_prop2()'s
extension of PROPPATCH. */
Modified: subversion/branches/compressed-pristines/subversion/include/private/svn_debug.h
URL: http://svn.apache.org/viewvc/subversion/branches/compressed-pristines/subversion/include/private/svn_debug.h?rev=1413258&r1=1413257&r2=1413258&view=diff
==============================================================================
--- subversion/branches/compressed-pristines/subversion/include/private/svn_debug.h (original)
+++ subversion/branches/compressed-pristines/subversion/include/private/svn_debug.h Sat Nov 24 20:29:11 2012
@@ -31,7 +31,9 @@
### remain in the code. at that point, we can rejigger this header. */
#ifdef SVN_DEBUG
-#include <stdio.h>
+#define APR_WANT_STDIO
+#include <apr_want.h>
+#include <apr_hash.h>
#ifdef __cplusplus
extern "C" {
Modified: subversion/branches/compressed-pristines/subversion/include/private/svn_dep_compat.h
URL: http://svn.apache.org/viewvc/subversion/branches/compressed-pristines/subversion/include/private/svn_dep_compat.h?rev=1413258&r1=1413257&r2=1413258&view=diff
==============================================================================
--- subversion/branches/compressed-pristines/subversion/include/private/svn_dep_compat.h (original)
+++ subversion/branches/compressed-pristines/subversion/include/private/svn_dep_compat.h Sat Nov 24 20:29:11 2012
@@ -87,6 +87,21 @@ typedef apr_uint32_t apr_uintptr_t;
#endif /* !APR_VERSION_AT_LEAST(1,3,0) */
/**
+ * Work around a platform dependency issue. apr_thread_rwlock_trywrlock()
+ * will make APR_STATUS_IS_EBUSY() return TRUE if the lock could not be
+ * acquired under Unix. Under Windows, this will not work. So, provide
+ * a more portable substitute.
+ *
+ * @since New in 1.8.
+ */
+#ifdef WIN32
+#define SVN_LOCK_IS_BUSY(x) \
+ (APR_STATUS_IS_EBUSY(x) || (x) == APR_FROM_OS_ERROR(WAIT_TIMEOUT))
+#else
+#define SVN_LOCK_IS_BUSY(x) APR_STATUS_IS_EBUSY(x)
+#endif
+
+/**
* Check at compile time if the Serf version is at least a certain
* level.
* @param major The major version component of the version checked
Modified: subversion/branches/compressed-pristines/subversion/include/private/svn_eol_private.h
URL: http://svn.apache.org/viewvc/subversion/branches/compressed-pristines/subversion/include/private/svn_eol_private.h?rev=1413258&r1=1413257&r2=1413258&view=diff
==============================================================================
--- subversion/branches/compressed-pristines/subversion/include/private/svn_eol_private.h (original)
+++ subversion/branches/compressed-pristines/subversion/include/private/svn_eol_private.h Sat Nov 24 20:29:11 2012
@@ -37,6 +37,20 @@
extern "C" {
#endif /* __cplusplus */
+/* Constants used by various chunky string processing functions.
+ */
+#if APR_SIZEOF_VOIDP == 8
+# define SVN__LOWER_7BITS_SET 0x7f7f7f7f7f7f7f7f
+# define SVN__BIT_7_SET 0x8080808080808080
+# define SVN__R_MASK 0x0a0a0a0a0a0a0a0a
+# define SVN__N_MASK 0x0d0d0d0d0d0d0d0d
+#else
+# define SVN__LOWER_7BITS_SET 0x7f7f7f7f
+# define SVN__BIT_7_SET 0x80808080
+# define SVN__R_MASK 0x0a0a0a0a
+# define SVN__N_MASK 0x0d0d0d0d
+#endif
+
/* Generic EOL character helper routines */
/* Look for the start of an end-of-line sequence (i.e. CR or LF)
Modified: subversion/branches/compressed-pristines/subversion/include/private/svn_fs_util.h
URL: http://svn.apache.org/viewvc/subversion/branches/compressed-pristines/subversion/include/private/svn_fs_util.h?rev=1413258&r1=1413257&r2=1413258&view=diff
==============================================================================
--- subversion/branches/compressed-pristines/subversion/include/private/svn_fs_util.h (original)
+++ subversion/branches/compressed-pristines/subversion/include/private/svn_fs_util.h Sat Nov 24 20:29:11 2012
@@ -52,6 +52,12 @@ extern "C" {
const char *
svn_fs__canonicalize_abspath(const char *path, apr_pool_t *pool);
+/* Return FALSE, if a svn_fs__canonicalize_abspath will return a
+ different value than PATH (despite creating a copy).
+*/
+svn_boolean_t
+svn_fs__is_canonical_abspath(const char *path);
+
/* If EXPECT_OPEN, verify that FS refers to an open database;
otherwise, verify that FS refers to an unopened database. Return
an appropriate error if the expectation fails to match the
Modified: subversion/branches/compressed-pristines/subversion/include/private/svn_log.h
URL: http://svn.apache.org/viewvc/subversion/branches/compressed-pristines/subversion/include/private/svn_log.h?rev=1413258&r1=1413257&r2=1413258&view=diff
==============================================================================
--- subversion/branches/compressed-pristines/subversion/include/private/svn_log.h (original)
+++ subversion/branches/compressed-pristines/subversion/include/private/svn_log.h Sat Nov 24 20:29:11 2012
@@ -244,6 +244,15 @@ svn_log__unlock_one_path(const char *pat
const char *
svn_log__replay(const char *path, svn_revnum_t rev, apr_pool_t *pool);
+/**
+ * Return a log string for a get-inherited-props action.
+ *
+ * @since New in 1.8.
+ */
+const char *
+svn_log__get_inherited_props(const char *path,
+ svn_revnum_t rev,
+ apr_pool_t *pool);
#ifdef __cplusplus
}
#endif /* __cplusplus */
Modified: subversion/branches/compressed-pristines/subversion/include/private/svn_mergeinfo_private.h
URL: http://svn.apache.org/viewvc/subversion/branches/compressed-pristines/subversion/include/private/svn_mergeinfo_private.h?rev=1413258&r1=1413257&r2=1413258&view=diff
==============================================================================
--- subversion/branches/compressed-pristines/subversion/include/private/svn_mergeinfo_private.h (original)
+++ subversion/branches/compressed-pristines/subversion/include/private/svn_mergeinfo_private.h Sat Nov 24 20:29:11 2012
@@ -125,20 +125,6 @@ svn_mergeinfo__add_prefix_to_catalog(svn
apr_pool_t *result_pool,
apr_pool_t *scratch_pool);
-/* Set *OUT_MERGEINFO to a shallow copy of MERGEINFO with each source path
- converted to a (URI-encoded) URL based on REPOS_ROOT_URL. *OUT_MERGEINFO
- is declared as 'apr_hash_t *' because its key do not obey the rules of
- 'svn_mergeinfo_t'.
-
- Allocate *OUT_MERGEINFO and the new keys in RESULT_POOL. Use
- SCRATCH_POOL for any temporary allocations. */
-svn_error_t *
-svn_mergeinfo__relpaths_to_urls(apr_hash_t **out_mergeinfo,
- svn_mergeinfo_t mergeinfo,
- const char *repos_root_url,
- apr_pool_t *result_pool,
- apr_pool_t *scratch_pool);
-
/* Set *OUT_MERGEINFO to a shallow copy of MERGEINFO with the relpath
SUFFIX_RELPATH added to the end of each key path.
@@ -170,20 +156,6 @@ svn_mergeinfo__catalog_to_formatted_stri
const char *val_prefix,
apr_pool_t *pool);
-/* Create a string representation of MERGEINFO in *OUTPUT, allocated in POOL.
- Unlike svn_mergeinfo_to_string(), NULL MERGEINFO is tolerated and results
- in *OUTPUT set to "\n". If SVN_DEBUG is true, then NULL or empty MERGEINFO
- causes *OUTPUT to be set to an appropriate newline terminated string. If
- PREFIX is not NULL then prepend PREFIX to each line in *OUTPUT.
-
- Any relative merge source paths in MERGEINFO are converted to absolute
- paths in *OUTPUT.*/
-svn_error_t *
-svn_mergeinfo__to_formatted_string(svn_string_t **output,
- svn_mergeinfo_t mergeinfo,
- const char *prefix,
- apr_pool_t *pool);
-
/* Set *YOUNGEST_REV and *OLDEST_REV to the youngest and oldest revisions
found in the rangelists within MERGEINFO. Note that *OLDEST_REV is
exclusive and *YOUNGEST_REV is inclusive. If MERGEINFO is NULL or empty
Modified: subversion/branches/compressed-pristines/subversion/include/private/svn_named_atomic.h
URL: http://svn.apache.org/viewvc/subversion/branches/compressed-pristines/subversion/include/private/svn_named_atomic.h?rev=1413258&r1=1413257&r2=1413258&view=diff
==============================================================================
--- subversion/branches/compressed-pristines/subversion/include/private/svn_named_atomic.h (original)
+++ subversion/branches/compressed-pristines/subversion/include/private/svn_named_atomic.h Sat Nov 24 20:29:11 2012
@@ -83,6 +83,17 @@ svn_atomic_namespace__create(svn_atomic_
const char *name,
apr_pool_t *result_pool);
+/** Removes persistent data structures (files in particular) that got
+ * created for the namespace given by @a name. Use @a pool for temporary
+ * allocations.
+ *
+ * @note You must not call this while the respective namespace is still
+ * in use. Calling this multiple times for the same namespace is safe.
+ */
+svn_error_t *
+svn_atomic_namespace__cleanup(const char *name,
+ apr_pool_t *pool);
+
/** Find the atomic with the specified @a name in namespace @a ns and
* return it in @a *atomic. If no object with that name can be found, the
* behavior depends on @a auto_create. If it is @c FALSE, @a *atomic will
Added: subversion/branches/compressed-pristines/subversion/include/private/svn_pseudo_md5.h
URL: http://svn.apache.org/viewvc/subversion/branches/compressed-pristines/subversion/include/private/svn_pseudo_md5.h?rev=1413258&view=auto
==============================================================================
--- subversion/branches/compressed-pristines/subversion/include/private/svn_pseudo_md5.h (added)
+++ subversion/branches/compressed-pristines/subversion/include/private/svn_pseudo_md5.h Sat Nov 24 20:29:11 2012
@@ -0,0 +1,83 @@
+/**
+ * @copyright
+ * ====================================================================
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ * ====================================================================
+ * @endcopyright
+ *
+ * @file svn_pseudo_md5.h
+ * @brief Subversion hash sum calculation for runtime data (only)
+ */
+
+#ifndef SVN_PSEUDO_MD5_H
+#define SVN_PSEUDO_MD5_H
+
+#include <apr.h> /* for apr_uint32_t */
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+
+/**
+ * Calculates a hash sum for 15 bytes in @a x and returns it in @a digest.
+ * The most significant byte in @a x must be 0 (independent of being on a
+ * little or big endian machine).
+ *
+ * @note Use for runtime data hashing only.
+ *
+ * @note The output is NOT an MD5 digest shares has the same basic
+ * cryptographic properties. Collisions with proper MD5 on the same
+ * or other input data is equally unlikely as any MD5 collision.
+ */
+void svn__pseudo_md5_15(apr_uint32_t digest[4],
+ const apr_uint32_t x[4]);
+
+/**
+ * Calculates a hash sum for 31 bytes in @a x and returns it in @a digest.
+ * The most significant byte in @a x must be 0 (independent of being on a
+ * little or big endian machine).
+ *
+ * @note Use for runtime data hashing only.
+ *
+ * @note The output is NOT an MD5 digest shares has the same basic
+ * cryptographic properties. Collisions with proper MD5 on the same
+ * or other input data is equally unlikely as any MD5 collision.
+ */
+void svn__pseudo_md5_31(apr_uint32_t digest[4],
+ const apr_uint32_t x[8]);
+
+/**
+ * Calculates a hash sum for 63 bytes in @a x and returns it in @a digest.
+ * The most significant byte in @a x must be 0 (independent of being on a
+ * little or big endian machine).
+ *
+ * @note Use for runtime data hashing only.
+ *
+ * @note The output is NOT an MD5 digest shares has the same basic
+ * cryptographic properties. Collisions with proper MD5 on the same
+ * or other input data is equally unlikely as any MD5 collision.
+ */
+void svn__pseudo_md5_63(apr_uint32_t digest[4],
+ const apr_uint32_t x[16]);
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* SVN_PSEUDO_MD5_H */
Modified: subversion/branches/compressed-pristines/subversion/include/private/svn_ra_private.h
URL: http://svn.apache.org/viewvc/subversion/branches/compressed-pristines/subversion/include/private/svn_ra_private.h?rev=1413258&r1=1413257&r2=1413258&view=diff
==============================================================================
--- subversion/branches/compressed-pristines/subversion/include/private/svn_ra_private.h (original)
+++ subversion/branches/compressed-pristines/subversion/include/private/svn_ra_private.h Sat Nov 24 20:29:11 2012
@@ -119,16 +119,6 @@ svn_ra__release_operational_lock(svn_ra_
const svn_string_t *mylocktoken,
apr_pool_t *scratch_pool);
-
-/** Like svn_ra_get_path_relative_to_root(), except returning a fspath
- * (starting with '/') instead of a relpath.
- */
-svn_error_t *
-svn_ra__get_fspath_relative_to_root(svn_ra_session_t *ra_session,
- const char **fspath,
- 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,
@@ -218,8 +208,8 @@ typedef svn_error_t *(*svn_ra__get_copys
CB_BATON is the baton used/shared by the above three callbacks.
- CANCEL_FUNC/BATON is a standard cancellation function, and is used for
- the returned Ev2 editor, and possibly other RA-specific operations.
+ Cancellation is handled through the callbacks provided when SESSION
+ is initially opened.
*EDITOR will be allocated in RESULT_POOL, and all temporary allocations
will be performed in SCRATCH_POOL.
@@ -236,8 +226,6 @@ svn_ra__get_commit_ev2(svn_editor_t **ed
svn_ra__provide_props_cb_t provide_props_cb,
svn_ra__get_copysrc_kind_cb_t get_copysrc_kind_cb,
void *cb_baton,
- svn_cancel_func_t cancel_func,
- void *cancel_baton,
apr_pool_t *result_pool,
apr_pool_t *scratch_pool);
@@ -269,6 +257,10 @@ svn_ra__replay_range_ev2(svn_ra_session_
svn_ra__replay_revstart_ev2_callback_t revstart_func,
svn_ra__replay_revfinish_ev2_callback_t revfinish_func,
void *replay_baton,
+ svn_ra__provide_base_cb_t provide_base_cb,
+ svn_ra__provide_props_cb_t provide_props_cb,
+ svn_ra__get_copysrc_kind_cb_t get_copysrc_kind_cb,
+ void *cb_baton,
apr_pool_t *scratch_pool);
/* Similar to svn_ra_replay(), but with an Ev2 editor. */
Modified: subversion/branches/compressed-pristines/subversion/include/private/svn_skel.h
URL: http://svn.apache.org/viewvc/subversion/branches/compressed-pristines/subversion/include/private/svn_skel.h?rev=1413258&r1=1413257&r2=1413258&view=diff
==============================================================================
--- subversion/branches/compressed-pristines/subversion/include/private/svn_skel.h (original)
+++ subversion/branches/compressed-pristines/subversion/include/private/svn_skel.h Sat Nov 24 20:29:11 2012
@@ -196,6 +196,14 @@ svn_skel__parse_proplist(apr_hash_t **pr
const svn_skel_t *skel,
apr_pool_t *result_pool);
+/* Parse a `IPROPS' SKEL into a depth-first ordered array of
+ svn_prop_inherited_item_t * structures *IPROPS. Use RESULT_POOL
+ for all allocations. */
+svn_error_t *
+svn_skel__parse_iprops(apr_array_header_t **iprops,
+ const svn_skel_t *skel,
+ apr_pool_t *result_pool);
+
/* Parse a `PROPLIST' SKEL looking for PROPNAME. If PROPNAME is found
then return its value in *PROVAL, allocated in RESULT_POOL. */
svn_error_t *
@@ -212,6 +220,14 @@ svn_skel__unparse_proplist(svn_skel_t **
apr_hash_t *proplist,
apr_pool_t *pool);
+/* Unparse INHERITED_PROPS, a depth-first ordered array of
+ svn_prop_inherited_item_t * structures, into a `IPROPS' skel *SKEL_P.
+ Use RESULT_POOL for all allocations. */
+svn_error_t *
+svn_skel__unparse_iproplist(svn_skel_t **skel_p,
+ const apr_array_header_t *inherited_props,
+ apr_pool_t *result_pool);
+
#ifdef __cplusplus
}
#endif /* __cplusplus */
Modified: subversion/branches/compressed-pristines/subversion/include/private/svn_sqlite.h
URL: http://svn.apache.org/viewvc/subversion/branches/compressed-pristines/subversion/include/private/svn_sqlite.h?rev=1413258&r1=1413257&r2=1413258&view=diff
==============================================================================
--- subversion/branches/compressed-pristines/subversion/include/private/svn_sqlite.h (original)
+++ subversion/branches/compressed-pristines/subversion/include/private/svn_sqlite.h Sat Nov 24 20:29:11 2012
@@ -37,6 +37,17 @@ extern "C" {
#endif /* __cplusplus */
+/* Because the SQLite code can be inlined into libsvn_subre/sqlite.c,
+ we define accessors to its compile-time and run-time version
+ numbers here. */
+
+/* Return the value that SQLITE_VERSION had at compile time. */
+const char *svn_sqlite__compiled_version(void);
+
+/* Return the value of sqlite3_libversion() at run time. */
+const char *svn_sqlite__runtime_version(void);
+
+
typedef struct svn_sqlite__db_t svn_sqlite__db_t;
typedef struct svn_sqlite__stmt_t svn_sqlite__stmt_t;
typedef struct svn_sqlite__context_t svn_sqlite__context_t;
@@ -210,6 +221,15 @@ svn_sqlite__bind_properties(svn_sqlite__
const apr_hash_t *props,
apr_pool_t *scratch_pool);
+/* Bind a set of inherited properties to the given slot. If INHERITED_PROPS
+ is NULL, then no binding will occur. INHERITED_PROPS will be stored as a
+ serialized skel. */
+svn_error_t *
+svn_sqlite__bind_iprops(svn_sqlite__stmt_t *stmt,
+ int slot,
+ const apr_array_header_t *inherited_props,
+ apr_pool_t *scratch_pool);
+
/* Bind a checksum's value to the given slot. If CHECKSUM is NULL, then no
binding will occur. */
svn_error_t *
@@ -279,6 +299,17 @@ svn_sqlite__column_properties(apr_hash_t
apr_pool_t *result_pool,
apr_pool_t *scratch_pool);
+/* Return the column as an array of depth-first ordered array of
+ svn_prop_inherited_item_t * structures. If the column is null, then
+ *props is set to NULL. The results will be allocated in RESULT_POOL,
+ and any temporary allocations will be made in SCRATCH_POOL. */
+svn_error_t *
+svn_sqlite__column_iprops(apr_array_header_t **iprops,
+ svn_sqlite__stmt_t *stmt,
+ int column,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
+
/* Return the column as a checksum. If the column is null, then NULL will
be stored into *CHECKSUM. The result will be allocated in RESULT_POOL. */
svn_error_t *
Modified: subversion/branches/compressed-pristines/subversion/include/private/svn_string_private.h
URL: http://svn.apache.org/viewvc/subversion/branches/compressed-pristines/subversion/include/private/svn_string_private.h?rev=1413258&r1=1413257&r2=1413258&view=diff
==============================================================================
--- subversion/branches/compressed-pristines/subversion/include/private/svn_string_private.h (original)
+++ subversion/branches/compressed-pristines/subversion/include/private/svn_string_private.h Sat Nov 24 20:29:11 2012
@@ -78,6 +78,18 @@ svn__ui64toa(char * dest, apr_uint64_t n
apr_size_t
svn__i64toa(char * dest, apr_int64_t number);
+/** Returns a decimal string for @a number allocated in @a pool. Put in
+ * the @a seperator at each third place.
+ */
+char *
+svn__ui64toa_sep(apr_uint64_t number, char seperator, apr_pool_t *pool);
+
+/** Returns a decimal string for @a number allocated in @a pool. Put in
+ * the @a seperator at each third place.
+ */
+char *
+svn__i64toa_sep(apr_int64_t number, char seperator, apr_pool_t *pool);
+
/** @} */
/** @} */
Modified: subversion/branches/compressed-pristines/subversion/include/private/svn_subr_private.h
URL: http://svn.apache.org/viewvc/subversion/branches/compressed-pristines/subversion/include/private/svn_subr_private.h?rev=1413258&r1=1413257&r2=1413258&view=diff
==============================================================================
--- subversion/branches/compressed-pristines/subversion/include/private/svn_subr_private.h (original)
+++ subversion/branches/compressed-pristines/subversion/include/private/svn_subr_private.h Sat Nov 24 20:29:11 2012
@@ -295,6 +295,36 @@ svn_hash__make(apr_pool_t *pool);
/** @} */
+/**
+ * @defgroup svn_version Version number dotted triplet parsing
+ * @{
+ */
+
+/* Set @a *version to a version structure parsed from the version
+ * string representation in @a version_string. Return
+ * @c SVN_ERR_MALFORMED_VERSION_STRING if the string fails to parse
+ * cleanly.
+ *
+ * @since New in 1.8.
+ */
+svn_error_t *
+svn_version__parse_version_string(svn_version_t **version,
+ const char *version_string,
+ apr_pool_t *result_pool);
+
+/* Return true iff @a version represents a version number of at least
+ * the level represented by @a major, @a minor, and @a patch.
+ *
+ * @since New in 1.8.
+ */
+svn_boolean_t
+svn_version__at_least(svn_version_t *version,
+ int major,
+ int minor,
+ int patch);
+
+/** @} */
+
#ifdef __cplusplus
}
#endif /* __cplusplus */
Modified: subversion/branches/compressed-pristines/subversion/include/private/svn_wc_private.h
URL: http://svn.apache.org/viewvc/subversion/branches/compressed-pristines/subversion/include/private/svn_wc_private.h?rev=1413258&r1=1413257&r2=1413258&view=diff
==============================================================================
--- subversion/branches/compressed-pristines/subversion/include/private/svn_wc_private.h (original)
+++ subversion/branches/compressed-pristines/subversion/include/private/svn_wc_private.h Sat Nov 24 20:29:11 2012
@@ -55,7 +55,14 @@ svn_wc__changelist_match(svn_wc_context_
apr_pool_t *scratch_pool);
/* Like svn_wc_get_update_editorX and svn_wc_get_status_editorX, but only
- allows updating a file external LOCAL_ABSPATH */
+ allows updating a file external LOCAL_ABSPATH.
+
+ Since this only deals with files, the WCROOT_IPROPS argument in
+ svn_wc_get_update_editorX and svn_wc_get_status_editorX (hashes mapping
+ const char * absolute working copy paths, which are working copy roots, to
+ depth-first ordered arrays of svn_prop_inherited_item_t * structures) is
+ simply IPROPS here, a depth-first ordered arrays of
+ svn_prop_inherited_item_t * structs. */
svn_error_t *
svn_wc__get_file_external_editor(const svn_delta_editor_t **editor,
void **edit_baton,
@@ -66,6 +73,7 @@ svn_wc__get_file_external_editor(const s
const char *url,
const char *repos_root_url,
const char *repos_uuid,
+ apr_array_header_t *iprops,
svn_boolean_t use_commit_times,
const char *diff3_cmd,
const apr_array_header_t *preserved_exts,
@@ -549,42 +557,25 @@ svn_wc__node_get_deleted_ancestor(const
apr_pool_t *scratch_pool);
/**
- * Set @a *is_server_excluded to whether @a local_abspath has been
- * excluded by the server, using @a wc_ctx. If @a local_abspath is not
- * in the working copy, return @c SVN_ERR_WC_PATH_NOT_FOUND.
- * Use @a scratch_pool for all temporary allocations.
- */
-svn_error_t *
-svn_wc__node_is_status_server_excluded(svn_boolean_t *is_server_excluded,
- svn_wc_context_t *wc_ctx,
- const char *local_abspath,
- apr_pool_t *scratch_pool);
-
-/**
- * Set @a *is_not_present to whether the status of @a local_abspath is
- * #svn_wc__db_status_not_present, using @a wc_ctx.
- * If @a local_abspath is not in the working copy, return
- * @c SVN_ERR_WC_PATH_NOT_FOUND. Use @a scratch_pool for all temporary
- * allocations.
- */
-svn_error_t *
-svn_wc__node_is_status_not_present(svn_boolean_t *is_not_present,
- svn_wc_context_t *wc_ctx,
- const char *local_abspath,
- apr_pool_t *scratch_pool);
-
-/**
- * Set @a *is_excluded to whether the status of @a local_abspath is
- * #svn_wc__db_status_excluded, using @a wc_ctx.
+ * 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
+ * @a *server_excluded to TRUE when @a local_abspath has status
+ * svn_wc__db_status_server_excluded. Otherwise set these values to FALSE.
+ *
+ * If a value is not interesting you can pass #NULL.
+ *
* If @a local_abspath is not in the working copy, return
* @c SVN_ERR_WC_PATH_NOT_FOUND. Use @a scratch_pool for all temporary
* allocations.
*/
svn_error_t *
-svn_wc__node_is_status_excluded(svn_boolean_t *is_excluded,
- svn_wc_context_t *wc_ctx,
- const char *local_abspath,
- apr_pool_t *scratch_pool);
+svn_wc__node_is_not_present(svn_boolean_t *not_present,
+ svn_boolean_t *user_excluded,
+ svn_boolean_t *server_excluded,
+ svn_wc_context_t *wc_ctx,
+ const char *local_abspath,
+ apr_pool_t *scratch_pool);
/**
* Set @a *is_added to whether @a local_abspath is added, using
@@ -885,6 +876,25 @@ svn_wc__prop_list_recursive(svn_wc_conte
void *cancel_baton,
apr_pool_t *scratch_pool);
+/**
+ * Set @a *inherited_props to a depth-first ordered array of
+ * #svn_prop_inherited_item_t * structures representing the properties
+ * inherited by @a local_abspath from the ACTUAL tree above
+ * @a local_abspath (looking through to the WORKING or BASE tree as
+ * required), up to and including the root of the working copy and
+ * any cached inherited properties inherited by the root.
+ *
+ * Allocate @a *inherited_props in @a result_pool. Use @a scratch_pool
+ * for temporary allocations.
+ */
+svn_error_t *
+svn_wc__get_iprops(apr_array_header_t **inherited_props,
+ svn_wc_context_t *wc_ctx,
+ const char *local_abspath,
+ const char *propname,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
+
/** Obtain a mapping of const char * local_abspaths to const svn_string_t*
* property values in *VALUES, of all PROPNAME properties on LOCAL_ABSPATH
* and its descendants.
@@ -901,6 +911,22 @@ svn_wc__prop_retrieve_recursive(apr_hash
apr_pool_t *scratch_pool);
/**
+ * Set @a *iprops_paths to a hash mapping const char * absolute working
+ * copy paths to the same for each path in the working copy at or below
+ * @a local_abspath, limited by @a depth, that has cached inherited
+ * properties for the base node of the path. Allocate @a *iprop_paths
+ * in @a result_pool. Use @a scratch_pool for temporary allocations.
+ */
+svn_error_t *
+svn_wc__get_cached_iprop_children(apr_hash_t **iprop_paths,
+ svn_depth_t depth,
+ svn_wc_context_t *wc_ctx,
+ const char *local_abspath,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
+
+
+/**
* For use by entries.c and entries-dump.c to read old-format working copies.
*/
svn_error_t *
@@ -1438,6 +1464,15 @@ svn_wc__get_status_editor(const svn_delt
* successful completion of the drive of this editor, will be
* populated with the revision to which the working copy was updated.
*
+ * @a wcroot_iprops is a hash mapping const char * absolute working copy
+ * paths which are working copy roots (at or under the target within the
+ * constraints dictated by @a depth) to depth-first ordered arrays of
+ * svn_prop_inherited_item_t * structures which represent the inherited
+ * properties for the base of those paths at @a target_revision. After a
+ * successful drive of this editor, the base nodes for these paths will
+ * have their inherited properties cache updated with the values from
+ * @a wcroot_iprops.
+ *
* 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.
@@ -1479,6 +1514,7 @@ svn_wc__get_update_editor(const svn_delt
svn_wc_context_t *wc_ctx,
const char *anchor_abspath,
const char *target_basename,
+ apr_hash_t *wcroot_iprops,
svn_boolean_t use_commit_times,
svn_depth_t depth,
svn_boolean_t depth_is_sticky,
@@ -1522,6 +1558,7 @@ svn_wc__get_switch_editor(const svn_delt
const char *anchor_abspath,
const char *target_basename,
const char *switch_url,
+ apr_hash_t *wcroot_iprops,
svn_boolean_t use_commit_times,
svn_depth_t depth,
svn_boolean_t depth_is_sticky,
@@ -1691,6 +1728,52 @@ svn_wc__resolve_conflicts(svn_wc_context
void *notify_baton,
apr_pool_t *scratch_pool);
+/**
+ * Move @a src_abspath to @a dst_abspath, by scheduling @a dst_abspath
+ * for addition to the repository, remembering the history. Mark @a src_abspath
+ * as deleted after moving.@a wc_ctx is used for accessing the working copy and
+ * must contain a write lock for the parent directory of @a src_abspath and
+ * @a dst_abspath.
+ *
+ * If @a metadata_only is TRUE then this is a database-only operation and
+ * the working directories and files are not changed.
+ *
+ * @a src_abspath must be a file or directory under version control;
+ * the parent of @a dst_abspath must be a directory under version control
+ * in the same working copy; @a dst_abspath will be the name of the copied
+ * item, and it must not exist already if @a metadata_only is FALSE. Note that
+ * when @a src points to a versioned file, the working file doesn't
+ * necessarily exist in which case its text-base is used instead.
+ *
+ * If @a allow_mixed_revisions is @c FALSE, #SVN_ERR_WC_MIXED_REVISIONS
+ * will be raised if the move source is a mixed-revision subtree.
+ * If @a allow_mixed_revisions is TRUE, a mixed-revision move source is
+ * allowed. This parameter should be set to FALSE except where backwards
+ * compatibility to svn_wc_move() is required.
+ *
+ * If @a cancel_func is non-NULL, call it with @a cancel_baton at
+ * various points during the operation. If it returns an error
+ * (typically #SVN_ERR_CANCELLED), return that error immediately.
+ *
+ * If @a notify_func is non-NULL, call it with @a notify_baton and the path
+ * of the root node (only) of the destination.
+ *
+ * Use @a scratch_pool for temporary allocations.
+ *
+ * @since New in 1.8.
+ */
+svn_error_t *
+svn_wc__move2(svn_wc_context_t *wc_ctx,
+ const char *src_abspath,
+ const char *dst_abspath,
+ svn_boolean_t metadata_only,
+ svn_boolean_t allow_mixed_revisions,
+ svn_cancel_func_t cancel_func,
+ void *cancel_baton,
+ svn_wc_notify_func2_t notify_func,
+ void *notify_baton,
+ apr_pool_t *scratch_pool);
+
#ifdef __cplusplus
}
#endif /* __cplusplus */
Modified: subversion/branches/compressed-pristines/subversion/include/svn_client.h
URL: http://svn.apache.org/viewvc/subversion/branches/compressed-pristines/subversion/include/svn_client.h?rev=1413258&r1=1413257&r2=1413258&view=diff
==============================================================================
--- subversion/branches/compressed-pristines/subversion/include/svn_client.h (original)
+++ subversion/branches/compressed-pristines/subversion/include/svn_client.h Sat Nov 24 20:29:11 2012
@@ -355,10 +355,30 @@ typedef struct svn_client_proplist_item_
} svn_client_proplist_item_t;
/**
- * The callback invoked by svn_client_proplist3(). Each invocation
- * provides the regular properties of @a path which is either a WC path or
- * a URL. @a prop_hash maps property names (char *) to property
- values (svn_string_t *). Use @a pool for all temporary allocation.
+ * The callback invoked by svn_client_proplist4(). Each invocation
+ * provides the regular and/or inherited properties of @a path, which is
+ * either a working copy path or a URL. If @a prop_hash is not @c NULL, then
+ * it maps explicit <tt>const char *</tt> property names to
+ * <tt>svn_string_t *</tt> explicit property values. If @a inherited_props
+ * is not @c NULL, then it is a depth-first ordered array of
+ * #svn_prop_inherited_item_t * structures representing the
+ * properties inherited by @a path. Use @a scratch_pool for all temporary
+ * allocations.
+ *
+ * @since New in 1.8.
+ */
+typedef svn_error_t *(*svn_proplist_receiver2_t)(
+ void *baton,
+ const char *path,
+ apr_hash_t *prop_hash,
+ apr_array_header_t *inherited_props,
+ apr_pool_t *scratch_pool);
+
+/**
+ * Similar to #svn_proplist_receiver2_t, but doesn't return inherited
+ * properties.
+ *
+ * @deprecated Provided for backward compatibility with the 1.7 API.
*
* @since New in 1.5.
*/
@@ -970,7 +990,10 @@ typedef struct svn_client_ctx_t
/** Initialize a client context.
* Set @a *ctx to a client context object, allocated in @a pool, that
- * represents a particular instance of an svn client.
+ * represents a particular instance of an svn client. @a cfg_hash is used
+ * to initialise the config member of the returned context object and should
+ * remain valid for the lifetime of the object. @a cfg_hash may be @c NULL,
+ * in which case it is ignored.
*
* In order to avoid backwards compatibility problems, clients must
* use this function to initialize and allocate the
@@ -979,7 +1002,20 @@ typedef struct svn_client_ctx_t
*
* The current implementation never returns error, but callers should
* still check for error, for compatibility with future versions.
+ *
+ * @since New in 1.8.
+ */
+svn_error_t *
+svn_client_create_context2(svn_client_ctx_t **ctx,
+ apr_hash_t *cfg_hash,
+ apr_pool_t *pool);
+
+
+/** Similar to svn_client_create_context but passes a NULL @a cfg_hash.
+ *
+ * @deprecated Provided for backward compatibility with the 1.7 API.
*/
+SVN_DEPRECATED
svn_error_t *
svn_client_create_context(svn_client_ctx_t **ctx,
apr_pool_t *pool);
@@ -1046,7 +1082,7 @@ svn_client_args_to_target_array2(apr_arr
svn_boolean_t keep_last_origpath_on_truepath_collision,
apr_pool_t *pool);
-/*
+/**
* Similar to svn_client_args_to_target_array2() but with
* @a keep_last_origpath_on_truepath_collision always set to FALSE.
*
@@ -1465,16 +1501,15 @@ svn_client_switch(svn_revnum_t *result_r
* @a path and everything under it fully recursively.
*
* @a path's parent must be under revision control already (unless
- * @a add_parents is TRUE), but @a path is not. If @a recursive is
- * set, then assuming @a path is a directory, all of its contents will
- * be scheduled for addition as well.
+ * @a add_parents is TRUE), but @a path is not.
*
* If @a force is not set and @a path is already under version
* control, return the error #SVN_ERR_ENTRY_EXISTS. If @a force is
* set, do not error on already-versioned items. When used on a
- * directory in conjunction with the @a recursive flag, this has the
- * effect of scheduling for addition unversioned files and directories
- * scattered deep within a versioned tree.
+ * directory in conjunction with a @a depth value greater than
+ * #svn_depth_empty, this has the effect of scheduling for addition
+ * any unversioned files and directories scattered within even a
+ * versioned tree (up to @a depth).
*
* If @a ctx->notify_func2 is non-NULL, then for each added item, call
* @a ctx->notify_func2 with @a ctx->notify_baton2 and the path of the
@@ -2353,11 +2388,6 @@ svn_client_status_dup(const svn_client_s
*
* @a scratch_pool will be cleared between invocations to the callback.
*
- * ### we might be revamping the status infrastructure, and this callback
- * ### could totally disappear by the end of 1.7 development. however, we
- * ### need to mark the STATUS parameter as "const" so that it is easier
- * ### to reason about who/what can modify those structures.
- *
* @since New in 1.7.
*/
typedef svn_error_t *(*svn_client_status_func_t)(
@@ -3346,6 +3376,90 @@ svn_client_diff_summarize_peg(const char
* @{
*/
+/* Details of an automatic merge. */
+typedef struct svn_client_automatic_merge_t svn_client_automatic_merge_t;
+
+/* Find the information needed to merge all unmerged changes from a source
+ * branch into a target branch. The information is the locations of the
+ * youngest common ancestor, merge base, and such like.
+ *
+ * Set *MERGE to the information needed to merge all unmerged changes
+ * (up to SOURCE_REVISION) from the source branch SOURCE_PATH_OR_URL @
+ * SOURCE_REVISION into the target WC at TARGET_WCPATH.
+ */
+svn_error_t *
+svn_client_find_automatic_merge(svn_client_automatic_merge_t **merge,
+ const char *source_path_or_url,
+ const svn_opt_revision_t *source_revision,
+ const char *target_wcpath,
+ svn_boolean_t allow_mixed_rev,
+ svn_boolean_t allow_local_mods,
+ svn_boolean_t allow_switched_subtrees,
+ svn_client_ctx_t *ctx,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
+
+/* Find out what kind of automatic merge would be needed, when the target
+ * is only known as a repository location rather than a WC.
+ *
+ * Like svn_client_find_automatic_merge() except that SOURCE_PATH_OR_URL @
+ * SOURCE_REVISION should refer to a repository location and not a WC.
+ *
+ * ### The result, *MERGE_P, may not be suitable for passing to
+ * svn_client_do_automatic_merge(). The target WC state would not be
+ * checked (as in the ALLOW_* flags). We should resolve this problem:
+ * perhaps add the allow_* params here, or provide another way of setting
+ * them; and perhaps ensure __do_...() will accept the result iff given a
+ * WC that matches the stored target location.
+ */
+svn_error_t *
+svn_client_find_automatic_merge_no_wc(
+ svn_client_automatic_merge_t **merge_p,
+ const char *source_path_or_url,
+ const svn_opt_revision_t *source_revision,
+ const char *target_path_or_url,
+ const svn_opt_revision_t *target_revision,
+ svn_client_ctx_t *ctx,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
+
+/* Perform an automatic merge.
+ *
+ * Merge according to MERGE into the WC at TARGET_WCPATH.
+ *
+ * The other parameters are as in svn_client_merge4().
+ *
+ * ### TODO: There's little point in this function being the only way the
+ * caller can use the result of svn_client_find_automatic_merge(). The
+ * contents of MERGE should be more public, or there should be other ways
+ * the caller can use it, or these two functions should be combined into
+ * one. I want to make it more public, and also possibly have more ways
+ * to use it in future (for example, do_automatic_merge_with_step_by_-
+ * step_confirmation).
+ */
+svn_error_t *
+svn_client_do_automatic_merge(const svn_client_automatic_merge_t *merge,
+ const char *target_wcpath,
+ svn_depth_t depth,
+ svn_boolean_t force,
+ svn_boolean_t record_only,
+ svn_boolean_t dry_run,
+ const apr_array_header_t *merge_options,
+ svn_client_ctx_t *ctx,
+ apr_pool_t *scratch_pool);
+
+/* Return TRUE iff the automatic merge represented by MERGE is going to be
+ * a reintegrate-like merge: that is, merging in the opposite direction
+ * from the last full merge.
+ *
+ * This function exists because the merge is NOT really automatic and the
+ * client can be more friendly if it knows something about the differences.
+ */
+svn_boolean_t
+svn_client_automatic_merge_is_reintegrate_like(
+ const svn_client_automatic_merge_t *merge);
+
+
/** Merge changes from @a source1/@a revision1 to @a source2/@a revision2 into
* the working-copy path @a target_wcpath.
*
@@ -3713,6 +3827,15 @@ svn_client_mergeinfo_get_merged(apr_hash
* @a target_path_or_url (as of @a target_peg_revision). If @a
* finding_merged is FALSE then find the revisions eligible for merging.
*
+ * @a source_start_revision and @a source_end_revision bound the
+ * operative range of revisions of the merge source which are
+ * described to the caller. If @a source_end_revision is of kind
+ * @c svn_opt_revision_unspecified, it is interpreted as the same
+ * revision as @a source_start_revision. If both are of kind
+ * @c svn_opt_revision_unspecified, no bounding occurs and the entire
+ * history of the merge source (up to @a source_peg_revision, per the
+ * typical default peg/operative revision behaviors) is considered.
+ *
* If @a depth is #svn_depth_empty consider only the explicit or
* inherited mergeinfo on @a target_path_or_url when calculating merged
* revisions from @a source_path_or_url. If @a depth is #svn_depth_infinity
@@ -4278,6 +4401,12 @@ svn_client_copy(svn_client_commit_info_t
* If @a make_parents is TRUE, create any non-existent parent directories
* also. Otherwise, the parent of @a dst_path must already exist.
*
+ * If @a allow_mixed_revisions is @c FALSE, #SVN_ERR_WC_MIXED_REVISIONS
+ * will be raised if the move source is a mixed-revision subtree.
+ * If @a allow_mixed_revisions is TRUE, a mixed-revision move source is
+ * allowed. This parameter should be set to FALSE except where backwards
+ * compatibility to svn_client_move6() is required.
+ *
* 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
@@ -4298,7 +4427,26 @@ svn_client_copy(svn_client_commit_info_t
* @a commit_callback with @a commit_baton and a #svn_commit_info_t for
* the commit.
*
+ * @since New in 1.8.
+ */
+svn_error_t *
+svn_client_move7(const apr_array_header_t *src_paths,
+ const char *dst_path,
+ svn_boolean_t move_as_child,
+ svn_boolean_t make_parents,
+ svn_boolean_t allow_mixed_revisions,
+ 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_move7(), but with allow_mixed_revisions always
+ * set to @c TRUE.
+ *
* @since New in 1.7.
+ * @deprecated Provided for backward compatibility with the 1.7 API.
*/
svn_error_t *
svn_client_move6(const apr_array_header_t *src_paths,
@@ -4649,9 +4797,20 @@ svn_client_revprop_set(const char *propn
/**
* Set @a *props to a hash table whose keys are absolute paths or URLs
- * of items on which property @a propname is set, and whose values are
- * `#svn_string_t *' representing the property value for @a propname
- * at that path.
+ * of items on which property @a propname is explicitly set, and whose
+ * values are <tt>svn_string_t *</tt> representing the property value for
+ * @a propname at that path.
+ *
+ * If @a inherited_props is not @c NULL, then set @a *inherited_props to a
+ * depth-first ordered array of #svn_prop_inherited_item_t * structures
+ * representing the properties inherited by @a target. If @a target is a
+ * working copy path, then properties inherited by @a target as far as the
+ * root of the working copy are obtained from the working copy's actual
+ * property values. Properties inherited from above the working copy root
+ * come from the inherited properties cache. If @a target is a URL, then
+ * the inherited properties come from the repository. If @a inherited_props
+ * is not @c NULL and no inheritable properties are found, then set
+ * @a *inherited_props to an empty array.
*
* Allocate @a *props, its keys, and its values in @a pool, use
* @a scratch_pool for temporary allocations.
@@ -4691,8 +4850,30 @@ svn_client_revprop_set(const char *propn
* This function returns SVN_ERR_UNVERSIONED_RESOURCE when it is called on
* unversioned nodes.
*
+ * @since New in 1.8.
+ */
+svn_error_t *
+svn_client_propget5(apr_hash_t **props,
+ apr_array_header_t **inherited_props,
+ const char *propname,
+ const char *target, /* abspath or URL */
+ const svn_opt_revision_t *peg_revision,
+ const svn_opt_revision_t *revision,
+ svn_revnum_t *actual_revnum,
+ svn_depth_t depth,
+ const apr_array_header_t *changelists,
+ svn_client_ctx_t *ctx,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
+
+/**
+ * Similar to svn_client_propget5 but doesn't support the retrieval of the
+ * properties inherited by @a target.
+ *
* @since New in 1.7.
+ * @deprecated Provided for backward compatibility with the 1.8 API.
*/
+SVN_DEPRECATED
svn_error_t *
svn_client_propget4(apr_hash_t **props,
const char *propname,
@@ -4786,22 +4967,22 @@ svn_client_revprop_get(const char *propn
apr_pool_t *pool);
/**
- * Invoke @a receiver with @a receiver_baton to return the regular properties
- * of @a target, a URL or working copy path. @a receiver will be called
- * for each path encountered.
+ * Invoke @a receiver with @a receiver_baton to return the regular explicit, and
+ * possibly the inherited, properties of @a target, a URL or working copy path.
+ * @a receiver will be called for each path encountered.
*
* @a target is a WC path or a URL.
*
- * If @a revision->kind is #svn_opt_revision_unspecified, then get
- * properties from the working copy, if @a target is a working copy
- * path, or from the repository head if @a target is a URL. Else get
- * the properties as of @a revision. The actual node revision
- * selected is determined by the path as it exists in @a peg_revision.
- * If @a peg_revision->kind is #svn_opt_revision_unspecified, then it
- * defaults to #svn_opt_revision_head for URLs or
- * #svn_opt_revision_working for WC targets. Use the authentication
- * baton cached in @a ctx for authentication if contacting the
- * repository.
+ * If @a revision->kind is #svn_opt_revision_unspecified, then get the
+ * explicit (and possibly the inherited) properties from the working copy,
+ * if @a target is a working copy path, or from the repository head if
+ * @a target is a URL. Else get the properties as of @a revision.
+ * The actual node revision selected is determined by the path as it exists
+ * in @a peg_revision. If @a peg_revision->kind is
+ * #svn_opt_revision_unspecified, then it defaults to #svn_opt_revision_head
+ * for URLs or #svn_opt_revision_working for WC targets. Use the
+ * authentication baton cached in @a ctx for authentication if contacting
+ * the repository.
*
* If @a depth is #svn_depth_empty, list only the properties of
* @a target itself. If @a depth is #svn_depth_files, and
@@ -4819,10 +5000,43 @@ svn_client_revprop_get(const char *propn
* of one of those changelists. If @a changelists is empty (or
* altogether @c NULL), no changelist filtering occurs.
*
+ * If @a get_target_inherited_props is true, then also return any inherited
+ * properties when @a receiver is called for @a target. If @a target is a
+ * working copy path, then properties inherited by @a target as far as the
+ * root of the working copy are obtained from the working copy's actual
+ * property values. Properties inherited from above the working copy
+ * root come from the inherited properties cache. If @a target is a URL,
+ * then the inherited properties come from the repository.
+ * If @a get_target_inherited_props is false, then no inherited properties
+ * are returned to @a receiver.
+ *
* If @a target is not found, return the error #SVN_ERR_ENTRY_NOT_FOUND.
*
+ * @since New in 1.8.
+ */
+svn_error_t *
+svn_client_proplist4(const char *target,
+ const svn_opt_revision_t *peg_revision,
+ const svn_opt_revision_t *revision,
+ svn_depth_t depth,
+ const apr_array_header_t *changelists,
+ svn_boolean_t get_target_inherited_props,
+ svn_proplist_receiver2_t receiver,
+ void *receiver_baton,
+ svn_client_ctx_t *ctx,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
+
+/**
+ * Similar to svn_client_proplist4(), except that the @a receiver type is
+ * a #svn_proplist_receiver_t and there is no support for finding the
+ * inherited properties for @a target and there is no separate scratch pool.
+ *
* @since New in 1.5.
+ *
+ * @deprecated Provided for backward compatibility with the 1.8 API.
*/
+SVN_DEPRECATED
svn_error_t *
svn_client_proplist3(const char *target,
const svn_opt_revision_t *peg_revision,
Modified: subversion/branches/compressed-pristines/subversion/include/svn_config.h
URL: http://svn.apache.org/viewvc/subversion/branches/compressed-pristines/subversion/include/svn_config.h?rev=1413258&r1=1413257&r2=1413258&view=diff
==============================================================================
--- subversion/branches/compressed-pristines/subversion/include/svn_config.h (original)
+++ subversion/branches/compressed-pristines/subversion/include/svn_config.h Sat Nov 24 20:29:11 2012
@@ -92,6 +92,8 @@ typedef struct svn_config_t svn_config_t
#define SVN_CONFIG_OPTION_PASSWORD_STORES "password-stores"
#define SVN_CONFIG_OPTION_KWALLET_WALLET "kwallet-wallet"
#define SVN_CONFIG_OPTION_KWALLET_SVN_APPLICATION_NAME_WITH_PID "kwallet-svn-application-name-with-pid"
+/** @since New in 1.8. */
+#define SVN_CONFIG_OPTION_SSL_CLIENT_CERT_FILE_PROMPT "ssl-client-cert-file-prompt"
/* The majority of options of the "auth" section
* has been moved to SVN_CONFIG_CATEGORY_SERVERS. */
#define SVN_CONFIG_SECTION_HELPERS "helpers"
@@ -106,6 +108,7 @@ typedef struct svn_config_t svn_config_t
#define SVN_CONFIG_OPTION_GLOBAL_IGNORES "global-ignores"
#define SVN_CONFIG_OPTION_LOG_ENCODING "log-encoding"
#define SVN_CONFIG_OPTION_USE_COMMIT_TIMES "use-commit-times"
+/** @deprecated Not used by Subversion since 2003/r847039 (well before 1.0) */
#define SVN_CONFIG_OPTION_TEMPLATE_ROOT "template-root"
#define SVN_CONFIG_OPTION_ENABLE_AUTO_PROPS "enable-auto-props"
#define SVN_CONFIG_OPTION_NO_UNLOCK "no-unlock"
@@ -115,6 +118,10 @@ typedef struct svn_config_t svn_config_t
#define SVN_CONFIG_OPTION_MEMORY_CACHE_SIZE "memory-cache-size"
#define SVN_CONFIG_SECTION_TUNNELS "tunnels"
#define SVN_CONFIG_SECTION_AUTO_PROPS "auto-props"
+/** @since New in 1.8. */
+#define SVN_CONFIG_SECTION_WORKING_COPY "working-copy"
+/** @since New in 1.8. */
+#define SVN_CONFIG_OPTION_SQLITE_EXCLUSIVE "exclusive-locking"
/** @} */
/** @name Repository conf directory configuration files strings
@@ -131,12 +138,12 @@ typedef struct svn_config_t svn_config_t
#define SVN_CONFIG_OPTION_AUTHZ_DB "authz-db"
/** @since New in 1.7. */
#define SVN_CONFIG_OPTION_FORCE_USERNAME_CASE "force-username-case"
+/** @since New in 1.8. */
+#define SVN_CONFIG_OPTION_HOOKS_ENV "hooks-env"
#define SVN_CONFIG_SECTION_SASL "sasl"
#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"
@@ -626,6 +633,26 @@ svn_config_get_user_config_path(const ch
const char *fname,
apr_pool_t *pool);
+/** Create a deep copy of the config object @a src and return
+ * it in @a cfgp, allocating the memory in @a pool.
+ *
+ * @since New in 1.8.
+ */
+svn_error_t *
+svn_config_dup(svn_config_t **cfgp,
+ svn_config_t *src,
+ apr_pool_t *pool);
+
+/** Create a deep copy of the config hash @a src_hash and return
+ * it in @a cfg_hash, allocating the memory in @a pool.
+ *
+ * @since New in 1.8.
+ */
+svn_error_t *
+svn_config_copy_config(apr_hash_t **cfg_hash,
+ apr_hash_t *src_hash,
+ apr_pool_t *pool);
+
/** @} */
#ifdef __cplusplus
Modified: subversion/branches/compressed-pristines/subversion/include/svn_dav.h
URL: http://svn.apache.org/viewvc/subversion/branches/compressed-pristines/subversion/include/svn_dav.h?rev=1413258&r1=1413257&r2=1413258&view=diff
==============================================================================
--- subversion/branches/compressed-pristines/subversion/include/svn_dav.h (original)
+++ subversion/branches/compressed-pristines/subversion/include/svn_dav.h Sat Nov 24 20:29:11 2012
@@ -53,6 +53,15 @@ extern "C" {
/** This header is *TEMPORARILY* used to transmit the delta base to the
* server. It contains a version resource URL for what is on the client.
+ *
+ * @note The HTTP delta draft recommends an If-None-Match header
+ * holding an entity tag corresponding to the base copy that the
+ * client has. In Subversion, it is much more natural to use a version
+ * URL to specify that base. We'd like, then, to use the If: header
+ * to specify the URL. Unfortunately, mod_dav sees all "State-token"
+ * items as lock tokens. So we'll use this custom header until mod_dav
+ * and other backend APIs are taught to be less rigid, at which time
+ * we can switch to using an If: header to report our base version.
*/
#define SVN_DAV_DELTA_BASE_HEADER "X-SVN-VR-Base"
@@ -177,6 +186,13 @@ extern "C" {
* @since New in 1.7. */
#define SVN_DAV_VTXN_NAME_HEADER "SVN-VTxn-Name"
+/** This header is used in the OPTIONS response to identify named
+ * skel-based POST request types which the server is prepared to
+ * handle. (HTTP protocol v2 only)
+ * @since New in 1.8. */
+#define SVN_DAV_SUPPORTED_POSTS_HEADER "SVN-Supported-Posts"
+
+
/**
* @name Fulltext MD5 headers
*
@@ -283,6 +299,19 @@ extern "C" {
#define SVN_DAV_NS_DAV_SVN_PARTIAL_REPLAY\
SVN_DAV_PROP_NS_DAV "svn/partial-replay"
+/** Presence of this in a DAV header in an OPTIONS response indicates
+ * that the transmitter (in this case, the server) knows how to get
+ * inherited properties. */
+#define SVN_DAV_NS_DAV_SVN_INHERITED_PROPS \
+ SVN_DAV_PROP_NS_DAV "svn/inherited-props"
+
+/** Presence of this in a DAV header in an OPTIONS response indicates
+ * that the transmitter (in this case, the server) knows how to
+ * properly handle ephemeral (that is, deleted-just-before-commit) FS
+ * transaction properties. */
+#define SVN_DAV_NS_DAV_SVN_EPHEMERAL_TXNPROPS\
+ SVN_DAV_PROP_NS_DAV "svn/ephemeral-txnprops"
+
/** @} */
/** @} */