You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by pr...@apache.org on 2013/04/08 13:47:04 UTC

svn commit: r1465596 [1/5] - in /subversion/branches/verify-keep-going: ./ contrib/server-side/svncutter/ subversion/bindings/cxxhl/include/ subversion/bindings/cxxhl/include/svncxxhl/ subversion/bindings/cxxhl/src/ subversion/bindings/cxxhl/tests/ sub...

Author: prabhugs
Date: Mon Apr  8 11:47:02 2013
New Revision: 1465596

URL: http://svn.apache.org/r1465596
Log:
Merging r1457676 through r1465586 from trunk into verify-keep-going branch.

Added:
    subversion/branches/verify-keep-going/subversion/include/private/svn_ra_svn_private.h
      - copied unchanged from r1465586, subversion/trunk/subversion/include/private/svn_ra_svn_private.h
    subversion/branches/verify-keep-going/subversion/tests/cmdline/legacy/
      - copied from r1465586, subversion/trunk/subversion/tests/cmdline/legacy/
    subversion/branches/verify-keep-going/subversion/tests/cmdline/legacy/utf8_tests.py
      - copied unchanged from r1465586, subversion/trunk/subversion/tests/cmdline/legacy/utf8_tests.py
    subversion/branches/verify-keep-going/subversion/tests/libsvn_subr/error-code-test.c
      - copied unchanged from r1465586, subversion/trunk/subversion/tests/libsvn_subr/error-code-test.c
    subversion/branches/verify-keep-going/tools/hook-scripts/control-chars.py
      - copied unchanged from r1465586, subversion/trunk/tools/hook-scripts/control-chars.py
Modified:
    subversion/branches/verify-keep-going/   (props changed)
    subversion/branches/verify-keep-going/build.conf
    subversion/branches/verify-keep-going/contrib/server-side/svncutter/svncutter
    subversion/branches/verify-keep-going/subversion/bindings/cxxhl/include/svncxxhl.hpp   (props changed)
    subversion/branches/verify-keep-going/subversion/bindings/cxxhl/include/svncxxhl/_compat.hpp   (props changed)
    subversion/branches/verify-keep-going/subversion/bindings/cxxhl/include/svncxxhl/exception.hpp   (props changed)
    subversion/branches/verify-keep-going/subversion/bindings/cxxhl/include/svncxxhl/tristate.hpp   (props changed)
    subversion/branches/verify-keep-going/subversion/bindings/cxxhl/src/exception.cpp   (props changed)
    subversion/branches/verify-keep-going/subversion/bindings/cxxhl/src/tristate.cpp   (props changed)
    subversion/branches/verify-keep-going/subversion/bindings/cxxhl/tests/test_exception.cpp   (props changed)
    subversion/branches/verify-keep-going/subversion/bindings/javahl/native/DiffOptions.cpp   (props changed)
    subversion/branches/verify-keep-going/subversion/bindings/javahl/native/DiffOptions.h   (props changed)
    subversion/branches/verify-keep-going/subversion/bindings/javahl/native/ReposFreezeAction.cpp   (props changed)
    subversion/branches/verify-keep-going/subversion/bindings/javahl/native/ReposFreezeAction.h   (props changed)
    subversion/branches/verify-keep-going/subversion/bindings/javahl/native/VersionExtended.cpp   (props changed)
    subversion/branches/verify-keep-going/subversion/bindings/javahl/native/VersionExtended.h   (props changed)
    subversion/branches/verify-keep-going/subversion/bindings/javahl/native/org_apache_subversion_javahl_types_VersionExtended.cpp   (props changed)
    subversion/branches/verify-keep-going/subversion/bindings/swig/core.i
    subversion/branches/verify-keep-going/subversion/bindings/swig/include/svn_containers.swg
    subversion/branches/verify-keep-going/subversion/bindings/swig/include/svn_types.swg
    subversion/branches/verify-keep-going/subversion/bindings/swig/python/libsvn_swig_py/swigutil_py.c
    subversion/branches/verify-keep-going/subversion/bindings/swig/python/libsvn_swig_py/swigutil_py.h
    subversion/branches/verify-keep-going/subversion/bindings/swig/python/tests/checksum.py   (props changed)
    subversion/branches/verify-keep-going/subversion/bindings/swig/python/tests/client.py
    subversion/branches/verify-keep-going/subversion/bindings/swig/python/tests/repository.py
    subversion/branches/verify-keep-going/subversion/include/svn_auth.h
    subversion/branches/verify-keep-going/subversion/include/svn_error.h
    subversion/branches/verify-keep-going/subversion/include/svn_error_codes.h
    subversion/branches/verify-keep-going/subversion/include/svn_fs.h
    subversion/branches/verify-keep-going/subversion/include/svn_ra.h
    subversion/branches/verify-keep-going/subversion/include/svn_ra_svn.h
    subversion/branches/verify-keep-going/subversion/include/svn_repos.h
    subversion/branches/verify-keep-going/subversion/libsvn_client/copy_foreign.c
    subversion/branches/verify-keep-going/subversion/libsvn_client/delete.c
    subversion/branches/verify-keep-going/subversion/libsvn_client/export.c
    subversion/branches/verify-keep-going/subversion/libsvn_client/merge.c
    subversion/branches/verify-keep-going/subversion/libsvn_client/revert.c
    subversion/branches/verify-keep-going/subversion/libsvn_client/switch.c
    subversion/branches/verify-keep-going/subversion/libsvn_client/update.c
    subversion/branches/verify-keep-going/subversion/libsvn_delta/path_driver.c
    subversion/branches/verify-keep-going/subversion/libsvn_fs/fs-loader.c
    subversion/branches/verify-keep-going/subversion/libsvn_fs/fs-loader.h
    subversion/branches/verify-keep-going/subversion/libsvn_fs_base/fs.c
    subversion/branches/verify-keep-going/subversion/libsvn_fs_base/tree.c
    subversion/branches/verify-keep-going/subversion/libsvn_fs_fs/fs.c
    subversion/branches/verify-keep-going/subversion/libsvn_fs_fs/fs_fs.c
    subversion/branches/verify-keep-going/subversion/libsvn_fs_fs/tree.h
    subversion/branches/verify-keep-going/subversion/libsvn_ra/deprecated.c
    subversion/branches/verify-keep-going/subversion/libsvn_ra/deprecated.h   (props changed)
    subversion/branches/verify-keep-going/subversion/libsvn_ra/ra_loader.c
    subversion/branches/verify-keep-going/subversion/libsvn_ra/ra_loader.h
    subversion/branches/verify-keep-going/subversion/libsvn_ra/wrapper_template.h
    subversion/branches/verify-keep-going/subversion/libsvn_ra_local/ra_plugin.c
    subversion/branches/verify-keep-going/subversion/libsvn_ra_local/split_url.c
    subversion/branches/verify-keep-going/subversion/libsvn_ra_serf/ra_serf.h
    subversion/branches/verify-keep-going/subversion/libsvn_ra_serf/sb_bucket.c
    subversion/branches/verify-keep-going/subversion/libsvn_ra_serf/update.c
    subversion/branches/verify-keep-going/subversion/libsvn_ra_serf/util.c
    subversion/branches/verify-keep-going/subversion/libsvn_ra_svn/client.c
    subversion/branches/verify-keep-going/subversion/libsvn_ra_svn/editorp.c
    subversion/branches/verify-keep-going/subversion/libsvn_ra_svn/marshal.c
    subversion/branches/verify-keep-going/subversion/libsvn_ra_svn/protocol
    subversion/branches/verify-keep-going/subversion/libsvn_repos/commit.c
    subversion/branches/verify-keep-going/subversion/libsvn_repos/dump.c
    subversion/branches/verify-keep-going/subversion/libsvn_repos/fs-wrap.c
    subversion/branches/verify-keep-going/subversion/libsvn_repos/hooks.c
    subversion/branches/verify-keep-going/subversion/libsvn_repos/load-fs-vtable.c
    subversion/branches/verify-keep-going/subversion/libsvn_repos/repos.c
    subversion/branches/verify-keep-going/subversion/libsvn_repos/repos.h
    subversion/branches/verify-keep-going/subversion/libsvn_subr/auth.c
    subversion/branches/verify-keep-going/subversion/libsvn_subr/auth.h
    subversion/branches/verify-keep-going/subversion/libsvn_subr/config.c
    subversion/branches/verify-keep-going/subversion/libsvn_subr/config_win.c
    subversion/branches/verify-keep-going/subversion/libsvn_subr/error.c
    subversion/branches/verify-keep-going/subversion/libsvn_subr/simple_providers.c
    subversion/branches/verify-keep-going/subversion/libsvn_wc/diff.h   (contents, props changed)
    subversion/branches/verify-keep-going/subversion/mod_dav_svn/liveprops.c
    subversion/branches/verify-keep-going/subversion/mod_dav_svn/lock.c
    subversion/branches/verify-keep-going/subversion/mod_dav_svn/merge.c
    subversion/branches/verify-keep-going/subversion/mod_dav_svn/mod_dav_svn.c
    subversion/branches/verify-keep-going/subversion/mod_dav_svn/repos.c
    subversion/branches/verify-keep-going/subversion/mod_dav_svn/util.c
    subversion/branches/verify-keep-going/subversion/svn/cl-conflicts.c
    subversion/branches/verify-keep-going/subversion/svn/client_errors.h
    subversion/branches/verify-keep-going/subversion/svn/file-merge.c
    subversion/branches/verify-keep-going/subversion/svn/svn.c
    subversion/branches/verify-keep-going/subversion/svnadmin/svnadmin.c
    subversion/branches/verify-keep-going/subversion/svnrdump/svnrdump.c
    subversion/branches/verify-keep-going/subversion/svnserve/serve.c
    subversion/branches/verify-keep-going/subversion/tests/cmdline/authz_tests.py
    subversion/branches/verify-keep-going/subversion/tests/cmdline/merge_automatic_tests.py
    subversion/branches/verify-keep-going/subversion/tests/cmdline/merge_reintegrate_tests.py
    subversion/branches/verify-keep-going/subversion/tests/cmdline/svntest/main.py
    subversion/branches/verify-keep-going/subversion/tests/libsvn_fs/fs-test.c
    subversion/branches/verify-keep-going/subversion/tests/libsvn_repos/repos-test.c
    subversion/branches/verify-keep-going/subversion/tests/libsvn_subr/   (props changed)
    subversion/branches/verify-keep-going/subversion/tests/libsvn_subr/auth-test.c
    subversion/branches/verify-keep-going/subversion/tests/libsvn_subr/error-test.c
    subversion/branches/verify-keep-going/subversion/tests/svn_test_main.c
    subversion/branches/verify-keep-going/tools/client-side/svn-bench/client_errors.h
    subversion/branches/verify-keep-going/tools/client-side/svn-bench/null-export-cmd.c
    subversion/branches/verify-keep-going/tools/dist/make-deps-tarball.sh   (props changed)
    subversion/branches/verify-keep-going/tools/dist/release.py
    subversion/branches/verify-keep-going/win-tests.py

Propchange: subversion/branches/verify-keep-going/
------------------------------------------------------------------------------
  Merged /subversion/branches/verify-at-commit:r1462039-1462408
  Merged /subversion/trunk:r1457676-1465586

Modified: subversion/branches/verify-keep-going/build.conf
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/build.conf?rev=1465596&r1=1465595&r2=1465596&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/build.conf (original)
+++ subversion/branches/verify-keep-going/build.conf Mon Apr  8 11:47:02 2013
@@ -808,6 +808,14 @@ sources = error-test.c
 install = test
 libs = libsvn_test libsvn_subr apriconv apr
 
+[error-code-test]
+description = Test error library
+type = exe
+path = subversion/tests/libsvn_subr
+sources = error-code-test.c
+install = test
+libs = libsvn_test libsvn_subr apriconv apr
+
 [hashdump-test]
 description = Test hashfile format for props
 type = exe
@@ -1213,7 +1221,7 @@ libs = __ALL__
        strings-reps-test changes-test locks-test repos-test
        checksum-test compat-test config-test hashdump-test mergeinfo-test
        opt-test path-test stream-test string-test time-test utf-test
-       error-test cache-test spillbuf-test crypto-test
+       error-test error-code-test cache-test spillbuf-test crypto-test
        named_atomic-test named_atomic-proc-test revision-test
        subst_translate-test io-test
        translate-test

Modified: subversion/branches/verify-keep-going/contrib/server-side/svncutter/svncutter
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/contrib/server-side/svncutter/svncutter?rev=1465596&r1=1465595&r2=1465596&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/contrib/server-side/svncutter/svncutter (original)
+++ subversion/branches/verify-keep-going/contrib/server-side/svncutter/svncutter Mon Apr  8 11:47:02 2013
@@ -706,7 +706,7 @@ def log(source, selection):
                 date = props["svn:date"].split(".")[0]
                 date = time.strptime(date, "%Y-%m-%dT%H:%M:%S")
                 date = time.strftime("%Y-%m-%d %H:%M:%S +0000 (%a, %d %b %Y)", date)
-                print "r%s | %s | %s | %d lines" % (self.revision,
+                print "r%s | %s | %s | %d lines" % (source.revision,
                                                     author,
                                                     date,
                                                     logentry.count(os.linesep))

Propchange: subversion/branches/verify-keep-going/subversion/bindings/cxxhl/include/svncxxhl.hpp
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: subversion/branches/verify-keep-going/subversion/bindings/cxxhl/include/svncxxhl/_compat.hpp
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: subversion/branches/verify-keep-going/subversion/bindings/cxxhl/include/svncxxhl/exception.hpp
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: subversion/branches/verify-keep-going/subversion/bindings/cxxhl/include/svncxxhl/tristate.hpp
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: subversion/branches/verify-keep-going/subversion/bindings/cxxhl/src/exception.cpp
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: subversion/branches/verify-keep-going/subversion/bindings/cxxhl/src/tristate.cpp
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: subversion/branches/verify-keep-going/subversion/bindings/cxxhl/tests/test_exception.cpp
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: subversion/branches/verify-keep-going/subversion/bindings/javahl/native/DiffOptions.cpp
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: subversion/branches/verify-keep-going/subversion/bindings/javahl/native/DiffOptions.h
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: subversion/branches/verify-keep-going/subversion/bindings/javahl/native/ReposFreezeAction.cpp
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: subversion/branches/verify-keep-going/subversion/bindings/javahl/native/ReposFreezeAction.h
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: subversion/branches/verify-keep-going/subversion/bindings/javahl/native/VersionExtended.cpp
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: subversion/branches/verify-keep-going/subversion/bindings/javahl/native/VersionExtended.h
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: subversion/branches/verify-keep-going/subversion/bindings/javahl/native/org_apache_subversion_javahl_types_VersionExtended.cpp
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: subversion/branches/verify-keep-going/subversion/bindings/swig/core.i
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/bindings/swig/core.i?rev=1465596&r1=1465595&r2=1465596&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/bindings/swig/core.i (original)
+++ subversion/branches/verify-keep-going/subversion/bindings/swig/core.i Mon Apr  8 11:47:02 2013
@@ -705,6 +705,15 @@ svn_swig_pl_set_current_pool (apr_pool_t
 %authprompt_callback_typemap(ssl_client_cert_pw)
 %authprompt_callback_typemap(gnome_keyring_unlock)
 
+#ifdef SWIGPYTHON
+/* pl and rb aren't yet implemented */
+%callback_typemap_maybenull(svn_auth_cleanup_func_t cleanup_func,
+                            void *cleanup_baton,
+                            svn_swig_py_auth_cleanup_func,
+                            svn_swig_pl_auth_cleanup_func,
+                            svn_swig_rb_auth_cleanup_func)
+#endif
+
 /* -----------------------------------------------------------------------
  * For all the various functions that set a callback baton create a reference
  * for the baton (which in this case is an SV pointing to the callback)

Modified: subversion/branches/verify-keep-going/subversion/bindings/swig/include/svn_containers.swg
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/bindings/swig/include/svn_containers.swg?rev=1465596&r1=1465595&r2=1465596&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/bindings/swig/include/svn_containers.swg (original)
+++ subversion/branches/verify-keep-going/subversion/bindings/swig/include/svn_containers.swg Mon Apr  8 11:47:02 2013
@@ -421,6 +421,19 @@
 */
 
 /* -----------------------------------------------------------------------
+   Output of apr_array_header_t * <svn_prop_inherited_item_t *>
+*/
+#ifdef SWIGPYTHON
+%typemap(argout) apr_array_header_t **OUTPUT_OF_PROP_INHERITED_ITEM {
+  %append_output(svn_swig_py_propinheriteditemarray_to_dict(*$1));
+}
+
+%apply apr_array_header_t **OUTPUT_OF_PROP_INHERITED_ITEM {
+  apr_array_header_t **inherited_props
+};
+#endif
+
+/* -----------------------------------------------------------------------
    Output of apr_array_header_t * <svn_prop_t *>
 */
 #ifdef SWIGRUBY

Modified: subversion/branches/verify-keep-going/subversion/bindings/swig/include/svn_types.swg
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/bindings/swig/include/svn_types.swg?rev=1465596&r1=1465595&r2=1465596&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/bindings/swig/include/svn_types.swg (original)
+++ subversion/branches/verify-keep-going/subversion/bindings/swig/include/svn_types.swg Mon Apr  8 11:47:02 2013
@@ -906,6 +906,28 @@ svn_ ## TYPE ## _swig_rb_closed(VALUE se
 #endif
 
 /* -----------------------------------------------------------------------
+   Callback: svn_repos_freeze_func_t
+*/
+#ifdef SWIGPYTHON
+%typemap(in) (svn_repos_freeze_func_t freeze_body, void *baton)
+{
+  $1 = svn_swig_py_repos_freeze_func;
+  $2 = (void *)$input;
+}
+#endif
+
+/* -----------------------------------------------------------------------
+   Callback: svn_proplist_receiver2_t
+*/
+#ifdef SWIGPYTHON
+%typemap(in) (svn_proplist_receiver2_t receiver, void *receiver_baton)
+{
+  $1 = svn_swig_py_proplist_receiver2;
+  $2 = (void *)$input;
+}
+#endif
+
+/* -----------------------------------------------------------------------
    Callback: svn_fs_warning_callback_t
 */
 

Modified: subversion/branches/verify-keep-going/subversion/bindings/swig/python/libsvn_swig_py/swigutil_py.c
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/bindings/swig/python/libsvn_swig_py/swigutil_py.c?rev=1465596&r1=1465595&r2=1465596&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/bindings/swig/python/libsvn_swig_py/swigutil_py.c (original)
+++ subversion/branches/verify-keep-going/subversion/bindings/swig/python/libsvn_swig_py/swigutil_py.c Mon Apr  8 11:47:02 2013
@@ -548,6 +548,19 @@ static PyObject *convert_svn_string_t(vo
   return PyString_FromStringAndSize((void *)s->data, s->len);
 }
 
+/* Convert a C string into a Python String object (or a reference to
+   Py_None if CSTRING is NULL). */
+static PyObject *cstring_to_pystring(const char *cstring)
+{
+  if (! cstring)
+    {
+      PyObject *retval = Py_None;
+      Py_INCREF(Py_None);
+      return retval;
+    }
+  return PyString_FromString(cstring);
+}
+
 static PyObject *convert_svn_client_commit_item3_t(void *value, void *ctx)
 {
   PyObject *list;
@@ -559,30 +572,9 @@ static PyObject *convert_svn_client_comm
 
   list = PyList_New(9);
 
-  if (item->path)
-    path = PyString_FromString(item->path);
-  else
-    {
-      path = Py_None;
-      Py_INCREF(Py_None);
-    }
-
-  if (item->url)
-    url = PyString_FromString(item->url);
-  else
-    {
-      url = Py_None;
-      Py_INCREF(Py_None);
-    }
-
-  if (item->copyfrom_url)
-    cf_url = PyString_FromString(item->copyfrom_url);
-  else
-    {
-      cf_url = Py_None;
-      Py_INCREF(Py_None);
-    }
-
+  path = cstring_to_pystring(item->path);
+  url = cstring_to_pystring(item->url);
+  cf_url = cstring_to_pystring(item->copyfrom_url);
   kind = PyInt_FromLong(item->kind);
   rev = PyInt_FromLong(item->revision);
   cf_rev = PyInt_FromLong(item->copyfrom_rev);
@@ -709,6 +701,51 @@ PyObject *svn_swig_py_mergeinfo_catalog_
   return convert_hash(hash, convert_mergeinfo_hash, type, py_pool);
 }
 
+PyObject *
+svn_swig_py_propinheriteditemarray_to_dict(const apr_array_header_t *array)
+{
+    PyObject *dict = PyDict_New();
+    int i;
+
+    if (dict == NULL)
+      return NULL;
+
+    for (i = 0; i < array->nelts; ++i)
+      {
+        svn_prop_inherited_item_t *prop_inherited_item
+          = APR_ARRAY_IDX(array, i, svn_prop_inherited_item_t *);
+        apr_hash_t *prop_hash = prop_inherited_item->prop_hash;
+        PyObject *py_key, *py_value;
+
+        py_key = PyString_FromString(prop_inherited_item->path_or_url);
+        if (py_key == NULL)
+          goto error;
+
+        py_value = svn_swig_py_prophash_to_dict(prop_hash);
+        if (py_value == NULL)
+          {
+            Py_DECREF(py_key);
+            goto error;
+          }
+
+        if (PyDict_SetItem(dict, py_key, py_value) == -1)
+          {
+            Py_DECREF(py_value);
+            Py_DECREF(py_key);
+            goto error;
+          }
+
+        Py_DECREF(py_value);
+        Py_DECREF(py_key);
+      }
+
+    return dict;
+
+  error:
+    Py_DECREF(dict);
+    return NULL;
+}
+
 PyObject *svn_swig_py_proparray_to_dict(const apr_array_header_t *array)
 {
     PyObject *dict = PyDict_New();
@@ -744,7 +781,15 @@ PyObject *svn_swig_py_proparray_to_dict(
                }
           }
 
-        PyDict_SetItem(dict, py_key, py_value);
+        if (PyDict_SetItem(dict, py_key, py_value) == -1)
+          {
+            Py_DECREF(py_key);
+            Py_DECREF(py_value);
+            goto error;
+          }
+
+        Py_DECREF(py_key);
+        Py_DECREF(py_value);
     }
 
     return dict;
@@ -787,6 +832,7 @@ PyObject *svn_swig_py_locationhash_to_di
           }
         if (PyDict_SetItem(dict, key, value) == -1)
           {
+            Py_DECREF(key);
             Py_DECREF(value);
             Py_DECREF(dict);
             return NULL;
@@ -846,7 +892,11 @@ PyObject *svn_swig_py_c_strings_to_list(
         if (ob == NULL)
             goto error;
         if (PyList_Append(list, ob) == -1)
+          {
+            Py_DECREF(ob);
             goto error;
+          }
+        Py_DECREF(ob);
       }
 
     return list;
@@ -2587,6 +2637,126 @@ svn_error_t *svn_swig_py_repos_history_f
   return err;
 }
 
+svn_error_t *svn_swig_py_repos_freeze_func(void *baton,
+                                           apr_pool_t *pool)
+{
+  PyObject *receiver = baton;
+  PyObject *py_pool;
+  PyObject *result;
+  svn_error_t *err = SVN_NO_ERROR;
+
+  if ((receiver == NULL) || (receiver == Py_None))
+    return SVN_NO_ERROR;
+
+  svn_swig_py_acquire_py_lock();
+
+  py_pool = make_ob_pool(pool);
+  if (py_pool == NULL)
+    {
+      err = callback_exception_error();
+      goto finished;
+    }
+
+  result = PyObject_CallFunction(receiver, (char *)"O", py_pool);
+  if (result == NULL)
+    {
+      err = callback_exception_error();
+    }
+  else
+    {
+      if (result != Py_None)
+        err = callback_bad_return_error("Not None");
+      Py_DECREF(result);
+    }
+
+  Py_DECREF(py_pool);
+                                 
+finished:
+  svn_swig_py_release_py_lock();
+  return err;
+}
+
+svn_error_t *svn_swig_py_proplist_receiver2(void *baton,
+                                            const char *path,
+                                            apr_hash_t *prop_hash,
+                                            apr_array_header_t *inherited_props,
+                                            apr_pool_t *pool)
+{
+  PyObject *receiver = baton;
+  PyObject *py_pool;
+  PyObject *py_props;
+  PyObject *py_iprops;
+  PyObject *result;
+  svn_error_t *err = SVN_NO_ERROR;
+
+  if ((receiver == NULL) || (receiver == Py_None))
+    return SVN_NO_ERROR;
+
+  svn_swig_py_acquire_py_lock();
+
+  py_pool = make_ob_pool(pool);
+  if (py_pool == NULL)
+    {
+      err = callback_exception_error();
+      goto finished;
+    }
+
+  if (prop_hash)
+    {
+      py_props = svn_swig_py_prophash_to_dict(prop_hash);
+      if (py_props == NULL)
+        {
+          err = type_conversion_error("apr_hash_t *");
+          Py_DECREF(py_pool);
+          goto finished;
+        }
+    }
+  else
+    {
+      py_props = Py_None;
+      Py_INCREF(Py_None);
+    }
+  
+  if (inherited_props)
+    {
+      py_iprops = svn_swig_py_propinheriteditemarray_to_dict(inherited_props);
+      if (py_iprops == NULL)
+        {
+          err = type_conversion_error("apr_array_header_t *");
+          Py_DECREF(py_props);
+          Py_DECREF(py_pool);
+          goto finished;
+        }
+    }
+  else
+    {
+      py_iprops = Py_None;
+      Py_INCREF(Py_None);
+    }
+
+  result = PyObject_CallFunction(receiver,
+                                 (char *)"sOOO",
+                                 path, py_props, py_iprops, py_pool);
+  if (result == NULL)
+    {
+      err = callback_exception_error();
+    }
+  else
+    {
+      if (result != Py_None)
+        err = callback_bad_return_error("Not None");
+      Py_DECREF(result);
+    }
+
+  Py_DECREF(py_props);
+  Py_DECREF(py_iprops);
+  Py_DECREF(py_pool);
+                                 
+finished:
+  svn_swig_py_release_py_lock();
+  return err;
+}
+                                            
 
 svn_error_t *svn_swig_py_log_receiver(void *baton,
                                       apr_hash_t *changed_paths,
@@ -3114,6 +3284,57 @@ svn_swig_py_auth_ssl_client_cert_pw_prom
   return err;
 }
 
+svn_error_t *
+svn_swig_py_auth_cleanup_func(svn_boolean_t *delete_cred,
+                              void *cleanup_baton,
+                              const char *cred_kind,
+                              const char *realmstring,
+                              const char *provider,
+                              apr_pool_t *scratch_pool)
+{
+  PyObject *function = cleanup_baton;
+  PyObject *result;
+  PyObject *py_scratch_pool;
+  svn_error_t *err = SVN_NO_ERROR;
+
+  *delete_cred = FALSE;
+
+  if (function == NULL || function == Py_None)
+    return SVN_NO_ERROR;
+
+  svn_swig_py_acquire_py_lock();
+
+  py_scratch_pool = make_ob_pool(scratch_pool);
+  if (py_scratch_pool == NULL)
+    {
+      err = callback_exception_error();
+      goto finished;
+    }
+
+  if ((result = PyObject_CallFunction(function,
+                                      (char *)"sssO",
+                                      cred_kind, realmstring,
+                                      provider, py_scratch_pool)) == NULL)
+    {
+      err = callback_exception_error();
+    }
+  else
+    {
+      if (PyInt_Check(result))
+        *delete_cred = PyInt_AsLong(result) ? TRUE : FALSE;
+      else if (PyLong_Check(result))
+        *delete_cred = PyLong_AsLong(result) ? TRUE : FALSE;
+      else
+        err = callback_bad_return_error("Not an integer");
+      Py_DECREF(result);
+    }
+  Py_DECREF(py_scratch_pool);
+  
+finished:
+  svn_swig_py_release_py_lock();
+  return err;
+}
+
 /* svn_ra_callbacks_t */
 static svn_error_t *
 ra_callbacks_open_tmp_file(apr_file_t **fp,

Modified: subversion/branches/verify-keep-going/subversion/bindings/swig/python/libsvn_swig_py/swigutil_py.h
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/bindings/swig/python/libsvn_swig_py/swigutil_py.h?rev=1465596&r1=1465595&r2=1465596&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/bindings/swig/python/libsvn_swig_py/swigutil_py.h (original)
+++ subversion/branches/verify-keep-going/subversion/bindings/swig/python/libsvn_swig_py/swigutil_py.h Mon Apr  8 11:47:02 2013
@@ -215,6 +215,13 @@ apr_array_header_t *svn_swig_py_proparra
 SVN_SWIG_SWIGUTIL_EXPORT
 PyObject *svn_swig_py_proparray_to_dict(const apr_array_header_t *array);
 
+/* helper function to convert a 'apr_array_header_t *' of
+   'svn_prop_inherited_item_t' to a Python dictionary mapping strings
+   to dictionary. */
+SVN_SWIG_SWIGUTIL_EXPORT
+PyObject *
+svn_swig_py_propinheriteditemarray_to_dict(const apr_array_header_t *array);
+
 /* helper function to convert a Python dictionary mapping strings to
    strings into an apr_hash_t mapping const char *'s to svn_string_t's,
    allocated in POOL. */
@@ -399,6 +406,19 @@ svn_error_t *svn_swig_py_log_entry_recei
                                             svn_log_entry_t *log_entry,
                                             apr_pool_t *pool);
 
+/* thunked freeze function */
+SVN_SWIG_SWIGUTIL_EXPORT
+svn_error_t *svn_swig_py_repos_freeze_func(void *baton,
+                                           apr_pool_t *pool);
+
+/* thunked proplist receiver2 function */
+SVN_SWIG_SWIGUTIL_EXPORT
+svn_error_t *svn_swig_py_proplist_receiver2(void *baton,
+                                            const char *path,
+                                            apr_hash_t *prop_hash,
+                                            apr_array_header_t *inherited_props,
+                                            apr_pool_t *pool);
+
 /* thunked info receiver function */
 SVN_SWIG_SWIGUTIL_EXPORT
 svn_error_t *svn_swig_py_info_receiver_func(void *py_receiver,
@@ -481,6 +501,15 @@ svn_error_t *svn_swig_py_auth_ssl_client
     svn_boolean_t may_save,
     apr_pool_t *pool);
 
+/* auth cleanup callback */
+SVN_SWIG_SWIGUTIL_EXPORT
+svn_error_t *svn_swig_py_auth_cleanup_func(svn_boolean_t *delete_cred,
+                                           void *cleanup_baton,
+                                           const char *cred_kind,
+                                           const char *realmstring,
+                                           const char *provider,
+                                           apr_pool_t *scratch_pool);
+
 SVN_SWIG_SWIGUTIL_EXPORT
 void
 svn_swig_py_setup_ra_callbacks(svn_ra_callbacks2_t **callbacks,

Propchange: subversion/branches/verify-keep-going/subversion/bindings/swig/python/tests/checksum.py
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: subversion/branches/verify-keep-going/subversion/bindings/swig/python/tests/client.py
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/bindings/swig/python/tests/client.py?rev=1465596&r1=1465595&r2=1465596&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/bindings/swig/python/tests/client.py (original)
+++ subversion/branches/verify-keep-going/subversion/bindings/swig/python/tests/client.py Mon Apr  8 11:47:02 2013
@@ -397,6 +397,47 @@ class SubversionClientTestCase(unittest.
 
     core.svn_auth_set_gnome_keyring_unlock_prompt_func(self.client_ctx.auth_baton, prompt_func)
 
+  def proplist_receiver_trunk(self, path, props, iprops, pool):
+    self.assertEquals(props['svn:global-ignores'], '*.q\n')
+    self.proplist_receiver_trunk_calls += 1
+
+  def proplist_receiver_dir1(self, path, props, iprops, pool):
+    self.assertEquals(iprops[self.proplist_receiver_dir1_key],
+                      {'svn:global-ignores':'*.q\n'})
+    self.proplist_receiver_dir1_calls += 1
+
+  def test_inherited_props(self):
+    """Test inherited props"""
+
+    trunk_url = self.repos_uri + '/trunk'
+    client.propset_remote('svn:global-ignores', '*.q', trunk_url,
+                          False, 12, {}, None, self.client_ctx)
+
+    head = core.svn_opt_revision_t()
+    head.kind = core.svn_opt_revision_head
+    props, iprops, rev = client.propget5('svn:global-ignores', trunk_url,
+                                         head, head, core.svn_depth_infinity,
+                                         None, self.client_ctx)
+    self.assertEquals(props[trunk_url], '*.q\n')
+
+    dir1_url = trunk_url + '/dir1'
+    props, iprops, rev = client.propget5('svn:global-ignores', dir1_url,
+                                         head, head, core.svn_depth_infinity,
+                                         None, self.client_ctx)
+    self.assertEquals(iprops[trunk_url], {'svn:global-ignores':'*.q\n'})
+
+    self.proplist_receiver_trunk_calls = 0
+    client.proplist4(trunk_url, head, head, core.svn_depth_empty, None, True,
+                     self.proplist_receiver_trunk, self.client_ctx)
+    self.assertEquals(self.proplist_receiver_trunk_calls, 1)
+
+    self.proplist_receiver_dir1_calls = 0
+    self.proplist_receiver_dir1_key = trunk_url
+    client.proplist4(dir1_url, head, head, core.svn_depth_empty, None, True,
+                     self.proplist_receiver_dir1, self.client_ctx)
+    self.assertEquals(self.proplist_receiver_dir1_calls, 1)
+
+
 def suite():
     return unittest.defaultTestLoader.loadTestsFromTestCase(
       SubversionClientTestCase)

Modified: subversion/branches/verify-keep-going/subversion/bindings/swig/python/tests/repository.py
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/bindings/swig/python/tests/repository.py?rev=1465596&r1=1465595&r2=1465596&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/bindings/swig/python/tests/repository.py (original)
+++ subversion/branches/verify-keep-going/subversion/bindings/swig/python/tests/repository.py Mon Apr  8 11:47:02 2013
@@ -54,7 +54,7 @@ class SubversionRepositoryTestCase(unitt
   def setUp(self):
     """Load a Subversion repository"""
     self.temper = utils.Temper()
-    (self.repos, _, _) = self.temper.alloc_known_repo(
+    (self.repos, self.repos_path, _) = self.temper.alloc_known_repo(
       'trac/versioncontrol/tests/svnrepos.dump', suffix='-repository')
     self.fs = repos.fs(self.repos)
     self.rev = fs.youngest_rev(self.fs)
@@ -198,6 +198,16 @@ class SubversionRepositoryTestCase(unitt
                                             _authz_callback),
                      "Youngest revision")
 
+  def freeze_body(self, pool):
+    self.freeze_invoked += 1
+
+  def test_freeze(self):
+    """Test repository freeze"""
+
+    self.freeze_invoked = 0
+    repos.freeze([self.repos_path], self.freeze_body)
+    self.assertEqual(self.freeze_invoked, 1)
+
 def suite():
     return unittest.defaultTestLoader.loadTestsFromTestCase(
       SubversionRepositoryTestCase)

Modified: subversion/branches/verify-keep-going/subversion/include/svn_auth.h
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/include/svn_auth.h?rev=1465596&r1=1465595&r2=1465596&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/include/svn_auth.h (original)
+++ subversion/branches/verify-keep-going/subversion/include/svn_auth.h Mon Apr  8 11:47:02 2013
@@ -790,22 +790,42 @@ svn_auth_get_simple_provider2(
  *
  * @since New in 1.8.
  */
-typedef svn_error_t * (*svn_auth_cleanup_callback)(svn_boolean_t *delete_cred,
-                                                   void *cleanup_baton,
-                                                   const char *cred_kind,
-                                                   const char *realmstring,
-                                                   const char *provider,
-                                                   apr_pool_t *scratch_pool);
-
-/** Call @a cleanup with information describing each currently cached
- * credential (in providers that support iterating). If the callback
- * confirms that the credential should be deleted, delete it.
+
+/* ### FIXME: The PROVIDER string here is both ill-defined and
+   ### misleading.  First, Subversion's proprietary plaintext password
+   ### cache isn't a "provider" -- it's a data store for several
+   ### different providers.  As such, it doesn't even have a provider
+   ### name.  In fact, the only other public API that uses string
+   ### provider names is svn_auth_get_platform_specific_provider(),
+   ### and the strings it uses aren't even the same ones that we use
+   ### internally to identify third-party password stores.
+*/
+typedef svn_error_t *(*svn_auth_cleanup_func_t)(svn_boolean_t *delete_cred,
+                                                void *cleanup_baton,
+                                                const char *cred_kind,
+                                                const char *realmstring,
+                                                const char *provider,
+                                                apr_pool_t *scratch_pool);
+
+/** Call @a cleanup_func with information describing each currently
+ * cached credential (in providers registered with @a auth_baton that
+ * support iterating). If the callback confirms that the credential
+ * should be deleted, delete it.
+ *
+ * ### FIXME: As it turns out, the above is just false.
+ * ### svn_auth_cleanup_walk() could be just as happy using an
+ * ### auth_baton that has no providers at all, as the plumbing it
+ * ### uses has no provider-centricity to it whatsoever.  It currently
+ * ### does check to ensure that there is at least one provider of
+ * ### kind SVN_AUTH_CRED_SIMPLE registered with the baton, but it's
+ * ### not clear why, since this interface ultimately crawls and
+ * ### deletes credentials of all available kinds.
  *
  * @since New in 1.8.
  */
 svn_error_t *
 svn_auth_cleanup_walk(svn_auth_baton_t *auth_baton,
-                      svn_auth_cleanup_callback cleanup,
+                      svn_auth_cleanup_func_t cleanup_func,
                       void *cleanup_baton,
                       apr_pool_t *scratch_pool);
 

Modified: subversion/branches/verify-keep-going/subversion/include/svn_error.h
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/include/svn_error.h?rev=1465596&r1=1465595&r2=1465596&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/include/svn_error.h (original)
+++ subversion/branches/verify-keep-going/subversion/include/svn_error.h Mon Apr  8 11:47:02 2013
@@ -66,6 +66,20 @@ svn_strerror(apr_status_t statcode,
              apr_size_t bufsize);
 
 
+/**
+ * Return the symbolic name of an error code.  If the error code
+ * is not a Subversion error code (from svn_error_codes.h), return @c NULL.
+ *
+ * @note In rare cases, a single numeric code has more than one symbolic name.
+ * (For example, #SVN_ERR_WC_NOT_DIRECTORY and #SVN_ERR_WC_NOT_WORKING_COPY).
+ * In those cases, it is not guaranteed which symbolic name is returned.
+ *
+ * @since New in 1.8.
+ */
+const char *
+svn_error_symbolic_name(apr_status_t statcode);
+
+
 /** If @a err has a custom error message, return that, otherwise
  * store the generic error string associated with @a err->apr_err into
  * @a buf (terminating with NULL) and return @a buf.

Modified: subversion/branches/verify-keep-going/subversion/include/svn_error_codes.h
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/include/svn_error_codes.h?rev=1465596&r1=1465595&r2=1465596&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/include/svn_error_codes.h (original)
+++ subversion/branches/verify-keep-going/subversion/include/svn_error_codes.h Mon Apr  8 11:47:02 2013
@@ -46,6 +46,10 @@
    not defined the enumerated constants yet.  */
 #if defined(SVN_ERROR_BUILD_ARRAY) || !defined(SVN_ERROR_ENUM_DEFINED)
 
+/* Note: despite lacking double underscores in its name, the macro
+   SVN_ERROR_BUILD_ARRAY is an implementation detail of Subversion and not
+   a public API. */
+
 
 #include <apr_errno.h>     /* APR's error system */
 
@@ -59,9 +63,9 @@ extern "C" {
 
 #define SVN_ERROR_START \
         static const err_defn error_table[] = { \
-          { SVN_WARNING, "Warning" },
-#define SVN_ERRDEF(num, offset, str) { num, str },
-#define SVN_ERROR_END { 0, NULL } };
+          { SVN_WARNING, "SVN_WARNING", "Warning" },
+#define SVN_ERRDEF(num, offset, str) { num, #num, str },
+#define SVN_ERROR_END { 0, NULL, NULL } };
 
 #elif !defined(SVN_ERROR_ENUM_DEFINED)
 
@@ -905,6 +909,11 @@ SVN_ERROR_START
              SVN_ERR_RA_CATEGORY_START + 11,
              "Session URL does not match expected session URL")
 
+  /** @since New in 1.8. */
+  SVN_ERRDEF(SVN_ERR_RA_CANNOT_CREATE_TUNNEL,
+             SVN_ERR_RA_CATEGORY_START + 12,
+             "Can't create tunnel")
+
   /* ra_dav errors */
 
   SVN_ERRDEF(SVN_ERR_RA_DAV_SOCK_INIT,
@@ -983,115 +992,6 @@ SVN_ERROR_START
   SVN_ERRDEF(SVN_ERR_RA_LOCAL_REPOS_OPEN_FAILED,
              SVN_ERR_RA_LOCAL_CATEGORY_START + 1,
              "Couldn't open a repository")
-  /* ra_svn errors */
-
-  SVN_ERRDEF(SVN_ERR_RA_SVN_CMD_ERR,
-             SVN_ERR_RA_SVN_CATEGORY_START + 0,
-             "Special code for wrapping server errors to report to client")
-
-  SVN_ERRDEF(SVN_ERR_RA_SVN_UNKNOWN_CMD,
-             SVN_ERR_RA_SVN_CATEGORY_START + 1,
-             "Unknown svn protocol command")
-
-  SVN_ERRDEF(SVN_ERR_RA_SVN_CONNECTION_CLOSED,
-             SVN_ERR_RA_SVN_CATEGORY_START + 2,
-             "Network connection closed unexpectedly")
-
-  SVN_ERRDEF(SVN_ERR_RA_SVN_IO_ERROR,
-             SVN_ERR_RA_SVN_CATEGORY_START + 3,
-             "Network read/write error")
-
-  SVN_ERRDEF(SVN_ERR_RA_SVN_MALFORMED_DATA,
-             SVN_ERR_RA_SVN_CATEGORY_START + 4,
-             "Malformed network data")
-
-  SVN_ERRDEF(SVN_ERR_RA_SVN_REPOS_NOT_FOUND,
-             SVN_ERR_RA_SVN_CATEGORY_START + 5,
-             "Couldn't find a repository")
-
-  SVN_ERRDEF(SVN_ERR_RA_SVN_BAD_VERSION,
-             SVN_ERR_RA_SVN_CATEGORY_START + 6,
-             "Client/server version mismatch")
-
-  /** @since New in 1.5. */
-  SVN_ERRDEF(SVN_ERR_RA_SVN_NO_MECHANISMS,
-             SVN_ERR_RA_SVN_CATEGORY_START + 7,
-             "Cannot negotiate authentication mechanism")
-
-  /** @since New in 1.7  */
-  SVN_ERRDEF(SVN_ERR_RA_SVN_EDIT_ABORTED,
-             SVN_ERR_RA_SVN_CATEGORY_START + 8,
-             "Editor drive was aborted")
-
-  /* libsvn_ra_serf errors */
-  /** @since New in 1.5. */
-  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. */
-  SVN_ERRDEF(SVN_ERR_RA_SERF_SSL_CERT_UNTRUSTED,
-             SVN_ERR_RA_SERF_CATEGORY_START + 1,
-             "Server SSL certificate untrusted")
-  /** @since New in 1.7.
-      @deprecated GSSAPI now handled by serf rather than libsvn_ra_serf. */
-  SVN_ERRDEF(SVN_ERR_RA_SERF_GSSAPI_INITIALISATION_FAILED,
-             SVN_ERR_RA_SERF_CATEGORY_START + 2,
-             "Initialization of the GSSAPI context failed")
-
-  /** @since New in 1.7. */
-  SVN_ERRDEF(SVN_ERR_RA_SERF_WRAPPED_ERROR,
-             SVN_ERR_RA_SERF_CATEGORY_START + 3,
-             "While handling serf response:")
-
-  /* libsvn_auth errors */
-
-       /* this error can be used when an auth provider doesn't have
-          the creds, but no other "real" error occurred. */
-  SVN_ERRDEF(SVN_ERR_AUTHN_CREDS_UNAVAILABLE,
-             SVN_ERR_AUTHN_CATEGORY_START + 0,
-             "Credential data unavailable")
-
-  SVN_ERRDEF(SVN_ERR_AUTHN_NO_PROVIDER,
-             SVN_ERR_AUTHN_CATEGORY_START + 1,
-             "No authentication provider available")
-
-  SVN_ERRDEF(SVN_ERR_AUTHN_PROVIDERS_EXHAUSTED,
-             SVN_ERR_AUTHN_CATEGORY_START + 2,
-             "All authentication providers exhausted")
-
-  SVN_ERRDEF(SVN_ERR_AUTHN_CREDS_NOT_SAVED,
-             SVN_ERR_AUTHN_CATEGORY_START + 3,
-             "Credentials not saved")
-
-  /** @since New in 1.5. */
-  SVN_ERRDEF(SVN_ERR_AUTHN_FAILED,
-             SVN_ERR_AUTHN_CATEGORY_START + 4,
-             "Authentication failed")
-
-  /* authorization errors */
-
-  SVN_ERRDEF(SVN_ERR_AUTHZ_ROOT_UNREADABLE,
-             SVN_ERR_AUTHZ_CATEGORY_START + 0,
-             "Read access denied for root of edit")
-
-  /** @since New in 1.1. */
-  SVN_ERRDEF(SVN_ERR_AUTHZ_UNREADABLE,
-             SVN_ERR_AUTHZ_CATEGORY_START + 1,
-             "Item is not readable")
-
-  /** @since New in 1.1. */
-  SVN_ERRDEF(SVN_ERR_AUTHZ_PARTIALLY_READABLE,
-             SVN_ERR_AUTHZ_CATEGORY_START + 2,
-             "Item is partially readable")
-
-  SVN_ERRDEF(SVN_ERR_AUTHZ_INVALID_CONFIG,
-             SVN_ERR_AUTHZ_CATEGORY_START + 3,
-             "Invalid authz configuration")
-
-  /** @since New in 1.3 */
-  SVN_ERRDEF(SVN_ERR_AUTHZ_UNWRITABLE,
-             SVN_ERR_AUTHZ_CATEGORY_START + 4,
-             "Item is not writable")
 
   /* svndiff errors */
 
@@ -1119,12 +1019,6 @@ SVN_ERROR_START
              SVN_ERR_SVNDIFF_CATEGORY_START + 5,
              "Svndiff compressed data is invalid")
 
-  /* libsvn_diff errors */
-
-  SVN_ERRDEF(SVN_ERR_DIFF_DATASOURCE_MODIFIED,
-             SVN_ERR_DIFF_CATEGORY_START + 0,
-             "Diff data source modified unexpectedly")
-
   /* mod_dav_svn errors */
 
   SVN_ERRDEF(SVN_ERR_APMOD_MISSING_PATH_TO_FS,
@@ -1490,6 +1384,123 @@ SVN_ERROR_START
              SVN_ERR_CL_CATEGORY_START + 11,
              "Failed processing one or more externals definitions")
 
+  /* ra_svn errors */
+
+  SVN_ERRDEF(SVN_ERR_RA_SVN_CMD_ERR,
+             SVN_ERR_RA_SVN_CATEGORY_START + 0,
+             "Special code for wrapping server errors to report to client")
+
+  SVN_ERRDEF(SVN_ERR_RA_SVN_UNKNOWN_CMD,
+             SVN_ERR_RA_SVN_CATEGORY_START + 1,
+             "Unknown svn protocol command")
+
+  SVN_ERRDEF(SVN_ERR_RA_SVN_CONNECTION_CLOSED,
+             SVN_ERR_RA_SVN_CATEGORY_START + 2,
+             "Network connection closed unexpectedly")
+
+  SVN_ERRDEF(SVN_ERR_RA_SVN_IO_ERROR,
+             SVN_ERR_RA_SVN_CATEGORY_START + 3,
+             "Network read/write error")
+
+  SVN_ERRDEF(SVN_ERR_RA_SVN_MALFORMED_DATA,
+             SVN_ERR_RA_SVN_CATEGORY_START + 4,
+             "Malformed network data")
+
+  SVN_ERRDEF(SVN_ERR_RA_SVN_REPOS_NOT_FOUND,
+             SVN_ERR_RA_SVN_CATEGORY_START + 5,
+             "Couldn't find a repository")
+
+  SVN_ERRDEF(SVN_ERR_RA_SVN_BAD_VERSION,
+             SVN_ERR_RA_SVN_CATEGORY_START + 6,
+             "Client/server version mismatch")
+
+  /** @since New in 1.5. */
+  SVN_ERRDEF(SVN_ERR_RA_SVN_NO_MECHANISMS,
+             SVN_ERR_RA_SVN_CATEGORY_START + 7,
+             "Cannot negotiate authentication mechanism")
+
+  /** @since New in 1.7  */
+  SVN_ERRDEF(SVN_ERR_RA_SVN_EDIT_ABORTED,
+             SVN_ERR_RA_SVN_CATEGORY_START + 8,
+             "Editor drive was aborted")
+
+  /* libsvn_auth errors */
+
+       /* this error can be used when an auth provider doesn't have
+          the creds, but no other "real" error occurred. */
+  SVN_ERRDEF(SVN_ERR_AUTHN_CREDS_UNAVAILABLE,
+             SVN_ERR_AUTHN_CATEGORY_START + 0,
+             "Credential data unavailable")
+
+  SVN_ERRDEF(SVN_ERR_AUTHN_NO_PROVIDER,
+             SVN_ERR_AUTHN_CATEGORY_START + 1,
+             "No authentication provider available")
+
+  SVN_ERRDEF(SVN_ERR_AUTHN_PROVIDERS_EXHAUSTED,
+             SVN_ERR_AUTHN_CATEGORY_START + 2,
+             "All authentication providers exhausted")
+
+  SVN_ERRDEF(SVN_ERR_AUTHN_CREDS_NOT_SAVED,
+             SVN_ERR_AUTHN_CATEGORY_START + 3,
+             "Credentials not saved")
+
+  /** @since New in 1.5. */
+  SVN_ERRDEF(SVN_ERR_AUTHN_FAILED,
+             SVN_ERR_AUTHN_CATEGORY_START + 4,
+             "Authentication failed")
+
+  /* authorization errors */
+
+  SVN_ERRDEF(SVN_ERR_AUTHZ_ROOT_UNREADABLE,
+             SVN_ERR_AUTHZ_CATEGORY_START + 0,
+             "Read access denied for root of edit")
+
+  /** @since New in 1.1. */
+  SVN_ERRDEF(SVN_ERR_AUTHZ_UNREADABLE,
+             SVN_ERR_AUTHZ_CATEGORY_START + 1,
+             "Item is not readable")
+
+  /** @since New in 1.1. */
+  SVN_ERRDEF(SVN_ERR_AUTHZ_PARTIALLY_READABLE,
+             SVN_ERR_AUTHZ_CATEGORY_START + 2,
+             "Item is partially readable")
+
+  SVN_ERRDEF(SVN_ERR_AUTHZ_INVALID_CONFIG,
+             SVN_ERR_AUTHZ_CATEGORY_START + 3,
+             "Invalid authz configuration")
+
+  /** @since New in 1.3 */
+  SVN_ERRDEF(SVN_ERR_AUTHZ_UNWRITABLE,
+             SVN_ERR_AUTHZ_CATEGORY_START + 4,
+             "Item is not writable")
+
+
+  /* libsvn_diff errors */
+
+  SVN_ERRDEF(SVN_ERR_DIFF_DATASOURCE_MODIFIED,
+             SVN_ERR_DIFF_CATEGORY_START + 0,
+             "Diff data source modified unexpectedly")
+
+  /* libsvn_ra_serf errors */
+  /** @since New in 1.5. */
+  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. */
+  SVN_ERRDEF(SVN_ERR_RA_SERF_SSL_CERT_UNTRUSTED,
+             SVN_ERR_RA_SERF_CATEGORY_START + 1,
+             "Server SSL certificate untrusted")
+  /** @since New in 1.7.
+      @deprecated GSSAPI now handled by serf rather than libsvn_ra_serf. */
+  SVN_ERRDEF(SVN_ERR_RA_SERF_GSSAPI_INITIALISATION_FAILED,
+             SVN_ERR_RA_SERF_CATEGORY_START + 2,
+             "Initialization of the GSSAPI context failed")
+
+  /** @since New in 1.7. */
+  SVN_ERRDEF(SVN_ERR_RA_SERF_WRAPPED_ERROR,
+             SVN_ERR_RA_SERF_CATEGORY_START + 3,
+             "While handling serf response:")
+
   /* malfunctions such as assertion failures */
 
   SVN_ERRDEF(SVN_ERR_ASSERTION_FAIL,

Modified: subversion/branches/verify-keep-going/subversion/include/svn_fs.h
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/include/svn_fs.h?rev=1465596&r1=1465595&r2=1465596&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/include/svn_fs.h (original)
+++ subversion/branches/verify-keep-going/subversion/include/svn_fs.h Mon Apr  8 11:47:02 2013
@@ -2040,6 +2040,41 @@ svn_fs_youngest_rev(svn_revnum_t *younge
                     apr_pool_t *pool);
 
 
+/**
+ * Return filesystem format information for @a fs.
+ *
+ * Set @a *fs_format to the filesystem format number of @a fs, which is
+ * an integer that increases when incompatible changes are made (such as
+ * by #svn_fs_upgrade).
+ *
+ * Set @a *supports_version to the version number of the minimum Subversion GA
+ * release that can read and write @a fs.
+ *
+ * @see svn_repos_info_format()
+ *
+ * @since New in 1.8.
+ */
+svn_error_t *
+svn_fs_info_format(int *fs_format,
+                   svn_version_t **supports_version,
+                   svn_fs_t *fs,
+                   apr_pool_t *result_pool,
+                   apr_pool_t *scratch_pool);
+
+/**
+ * Return a list of admin-serviceable config files for @a fs.  @a *files
+ * will be set to an array containing paths as C strings.
+ *
+ * @since New in 1.8.
+ */
+svn_error_t *
+svn_fs_info_config_files(apr_array_header_t **files,
+                         svn_fs_t *fs,
+                         apr_pool_t *result_pool,
+                         apr_pool_t *scratch_pool);
+
+
+
 /** Provide filesystem @a fs the opportunity to compress storage relating to
  * associated with  @a revision in filesystem @a fs.  Use @a pool for all
  * allocations.
@@ -2500,6 +2535,77 @@ svn_fs_verify_root(svn_fs_root_t *root,
 
 /** @} */
 
+/**
+ * @defgroup fs_info Filesystem information subsystem
+ * @{
+ */
+
+/**
+ * A structure that provides some information about a filesystem.
+ * Returned by svn_fs_info().
+ *
+ * @note Fields may be added to the end of this structure in future
+ * versions.  Therefore, users shouldn't allocate structures of this
+ * type, to preserve binary compatibility.
+ *
+ * @since New in 1.8.
+ */
+typedef struct svn_fs_info_t {
+
+#if 0
+  /* Potential future feature. */
+  svn_boolean_t is_write_locked;
+#endif
+
+  /** Filesystem backend (#fs_type) -specific information.
+   * @see SVN_FS_FSFS_INFO_* */
+  apr_hash_t *fsap_info;
+
+} svn_fs_info_t;
+
+/**
+ * Set @a *info to an info struct describing @a fs.
+ *
+ * @see #svn_fs_info_t
+ *
+ * @since New in 1.8.
+ */
+svn_error_t *
+svn_fs_info(const svn_fs_info_t **info,
+            svn_fs_t *fs,
+            apr_pool_t *result_pool,
+            apr_pool_t *scratch_pool);
+
+/**
+ * Return a duplicate of @a info, allocated in @a pool. No part of the new
+ * structure will be shared with @a info.
+ *
+ * @since New in 1.8.
+ */
+svn_fs_info_t *
+svn_fs_info_dup(const svn_fs_info_t *info,
+                apr_pool_t *result_pool);
+
+/** @name FSFS-specific #svn_fs_info_t information.
+ * @since New in 1.8.
+ * @{
+ */
+
+/** Value: shard size (as int), or 0 if the filesystem is
+ * not currently sharded. */
+#define SVN_FS_FSFS_INFO_SHARDED "sharded"
+
+/** Value: abspath to rep-cache.db, or absent if that doesn't exist.
+ @note Do not modify the db schema or tables!
+ */
+#define SVN_FS_FSFS_INFO_REP_CACHE_PATH "rep-cache-path"
+
+/** The smallest revision (as #svn_revnum_t) which is not in a pack file.
+ * @note Zero (0) if (but not iff) the format does not support packing. */
+#define SVN_FS_FSFS_INFO_MIN_UNPACKED_REV "min-unpacked-rev"
+/** @} */
+
+/** @} */
 
 #ifdef __cplusplus
 }

Modified: subversion/branches/verify-keep-going/subversion/include/svn_ra.h
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/include/svn_ra.h?rev=1465596&r1=1465595&r2=1465596&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/include/svn_ra.h (original)
+++ subversion/branches/verify-keep-going/subversion/include/svn_ra.h Mon Apr  8 11:47:02 2013
@@ -1104,6 +1104,12 @@ svn_ra_get_mergeinfo(svn_ra_session_t *s
  * (Note: this means that any subsequent txdeltas coming from the
  * server are presumed to apply against the copied file!)
  *
+ * Use @a ignore_ancestry to control whether or not items being
+ * updated will be checked for relatedness first.  Unrelated items
+ * are typically transmitted to the editor as a deletion of one thing
+ * and the addition of another, but if this flag is @c TRUE,
+ * unrelated items will be diffed as if they were related.
+ *
  * The working copy will be updated to @a revision_to_update_to, or the
  * "latest" revision if this arg is invalid.
  *
@@ -1111,7 +1117,8 @@ svn_ra_get_mergeinfo(svn_ra_session_t *s
  * finishing the report, and may not perform any RA operations using
  * @a session from within the editing operations of @a update_editor.
  *
- * Use @a pool for memory allocation.
+ * Allocate @a *reporter and @a *report_baton in @a result_pool.  Use
+ * @a scratch_pool for temporary allocations.
  *
  * @note The reporter provided by this function does NOT supply copy-
  * from information to the diff editor callbacks.
@@ -1120,13 +1127,36 @@ svn_ra_get_mergeinfo(svn_ra_session_t *s
  * needed, and sending too much data back, a pre-1.5 'recurse'
  * directive may be sent to the server, based on @a depth.
  *
+ * @note Pre Subversion 1.8 svnserve based servers never ignore ancestry.
+ *
  * @note This differs from calling svn_ra_do_switch3() with the current
  * URL of the target node.  Update changes only the revision numbers,
  * leaving any switched subtrees still switched, whereas switch changes
  * every node in the tree to a child of the same URL.
  *
+ * @since New in 1.8.
+ */
+svn_error_t *
+svn_ra_do_update3(svn_ra_session_t *session,
+                  const svn_ra_reporter3_t **reporter,
+                  void **report_baton,
+                  svn_revnum_t revision_to_update_to,
+                  const char *update_target,
+                  svn_depth_t depth,
+                  svn_boolean_t send_copyfrom_args,
+                  svn_boolean_t ignore_ancestry,
+                  const svn_delta_editor_t *update_editor,
+                  void *update_baton,
+                  apr_pool_t *result_pool,
+                  apr_pool_t *scratch_pool);
+
+/**
+ * Similar to svn_ra_do_update3(), but always ignoring ancestry.
+ *
  * @since New in 1.5.
+ * @deprecated Provided for compatibility with the 1.4 API.
  */
+SVN_DEPRECATED
 svn_error_t *
 svn_ra_do_update2(svn_ra_session_t *session,
                   const svn_ra_reporter3_t **reporter,
@@ -1163,22 +1193,11 @@ svn_ra_do_update(svn_ra_session_t *sessi
 /**
  * Ask the RA layer to switch a working copy to a new revision and URL.
  *
- * This is similar to svn_ra_do_update2(), but also changes the URL of
+ * This is similar to svn_ra_do_update3(), but also changes the URL of
  * every node in the target tree to a child of the @a switch_url.  In
  * contrast, update changes only the revision numbers, leaving any
  * switched subtrees still switched.
  *
- * The other differences from svn_ra_do_update2() are:
- *
- * Use @a ignore_ancestry to control whether or not items being
- * switched will be checked for relatedness first.  Unrelated items
- * are typically transmitted to the editor as a deletion of one thing
- * and the addition of another, but if this flag is @c TRUE,
- * unrelated items will be diffed as if they were related.
- *
- * Use @a result_pool for memory allocation and @a scratch_pool for
- * temporary work.
- *
  * @note Pre Subversion 1.8 svnserve based servers always ignore ancestry
  * and never send copyfrom data.
  *
@@ -1320,7 +1339,7 @@ svn_ra_do_status(svn_ra_session_t *sessi
  * it's another form of svn_ra_do_update2().
  *
  * @note This function cannot be used to diff a single file, only a
- * working copy directory.  See the svn_ra_do_switch2() function
+ * working copy directory.  See the svn_ra_do_switch3() function
  * for more details.
  *
  * The client initially provides a @a diff_editor/@a diff_baton to the RA
@@ -1949,7 +1968,7 @@ svn_ra_get_deleted_rev(svn_ra_session_t 
  * paths relative to the repository root URL (of the repository which
  * @a ra_session is associated).
  *
- * Allocated @a *inherited_props in @a result_pool, use @a scratch_pool
+ * Allocate @a *inherited_props in @a result_pool.  Use @a scratch_pool
  * for temporary allocations.
  *
  * @since New in 1.8.

Modified: subversion/branches/verify-keep-going/subversion/include/svn_ra_svn.h
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/include/svn_ra_svn.h?rev=1465596&r1=1465595&r2=1465596&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/include/svn_ra_svn.h (original)
+++ subversion/branches/verify-keep-going/subversion/include/svn_ra_svn.h Mon Apr  8 11:47:02 2013
@@ -164,66 +164,6 @@ typedef struct svn_ra_svn_item_t
 
 typedef svn_error_t *(*svn_ra_svn_edit_callback)(void *baton);
 
-/**
- * List of all commands supported by the SVN:// protocol.
- *
- * @since New in 1.8
- */
-typedef enum svn_ra_svn_cmd_t
-{
-  svn_ra_svn_cmd_target_rev,
-  svn_ra_svn_cmd_open_root,
-  svn_ra_svn_cmd_delete_entry,
-  svn_ra_svn_cmd_add_dir,
-  svn_ra_svn_cmd_open_dir,
-  svn_ra_svn_cmd_change_dir_prop,
-  svn_ra_svn_cmd_close_dir,
-  svn_ra_svn_cmd_absent_dir,
-  svn_ra_svn_cmd_add_file,
-  svn_ra_svn_cmd_open_file,
-  svn_ra_svn_cmd_change_file_prop,
-  svn_ra_svn_cmd_close_file,
-  svn_ra_svn_cmd_absent_file,
-  svn_ra_svn_cmd_textdelta_chunk,
-  svn_ra_svn_cmd_textdelta_end,
-  svn_ra_svn_cmd_apply_textdelta,
-  svn_ra_svn_cmd_close_edit,
-  svn_ra_svn_cmd_abort_edit,
-  
-  svn_ra_svn_cmd_set_path,
-  svn_ra_svn_cmd_delete_path,
-  svn_ra_svn_cmd_link_path,
-  svn_ra_svn_cmd_finish_report,
-  svn_ra_svn_cmd_abort_report,
-
-  svn_ra_svn_cmd_reparent,
-  svn_ra_svn_cmd_get_latest_rev,
-  svn_ra_svn_cmd_get_dated_rev,
-  svn_ra_svn_cmd_change_rev_prop2,
-  svn_ra_svn_cmd_change_rev_prop,
-  svn_ra_svn_cmd_rev_proplist,
-  svn_ra_svn_cmd_rev_prop,
-  svn_ra_svn_cmd_get_file,
-  svn_ra_svn_cmd_update,
-  svn_ra_svn_cmd_switch,
-  svn_ra_svn_cmd_status,
-  svn_ra_svn_cmd_diff,
-  svn_ra_svn_cmd_check_path,
-  svn_ra_svn_cmd_stat,
-  svn_ra_svn_cmd_get_file_revs,
-  svn_ra_svn_cmd_lock,
-  svn_ra_svn_cmd_unlock,
-  svn_ra_svn_cmd_get_lock,
-  svn_ra_svn_cmd_get_locks,
-  svn_ra_svn_cmd_replay,
-  svn_ra_svn_cmd_replay_range,
-  svn_ra_svn_cmd_get_deleted_rev,
-  svn_ra_svn_cmd_get_iprops,
-  svn_ra_svn_cmd_finish_replay,
-
-  svn_ra_svn_cmd__last
-} svn_ra_svn_cmd_t;
-
 /** Initialize a connection structure for the given socket or
  * input/output files.
  *
@@ -548,7 +488,7 @@ svn_ra_svn_handle_commands(svn_ra_svn_co
  * as svn_ra_svn_write_tuple().
  *
  * @deprecated Provided for backward compatibility with the 1.7 API.
- * Use svn_ra_svn_write_templated_cmd instead.
+ * Use the svn_ra_svn_write_cmd_* functions instead.
  */
 SVN_DEPRECATED
 svn_error_t *
@@ -557,17 +497,6 @@ svn_ra_svn_write_cmd(svn_ra_svn_conn_t *
                      const char *cmdname,
                      const char *fmt, ...);
 
-/** Write a command of type @a cmd over the network connection @a conn.
- * The parameters to be provided are command-specific.  @a pool will be
- * used for allocations.
- * 
- * @since New in 1.8.
- */
-svn_error_t *
-svn_ra_svn_write_templated_cmd(svn_ra_svn_conn_t *conn,
-                               apr_pool_t *pool,
-                               svn_ra_svn_cmd_t cmd, ...);
-
 /** Write a successful command response over the network, using the
  * same format string notation as svn_ra_svn_write_tuple().  Do not use
  * partial tuples with this function; if you need to use partial
@@ -642,6 +571,548 @@ svn_ra_svn_cram_server(svn_ra_svn_conn_t
 const svn_version_t *
 svn_ra_svn_version(void);
 
+/**
+ * @defgroup svn_commands sending ra_svn commands
+ * @{
+ */
+
+/** Sets the target revision of connection @a conn to @a rev.  Use @a pool
+ * for allocations.
+ */
+svn_error_t *
+svn_ra_svn_write_cmd_target_rev(svn_ra_svn_conn_t *conn,
+                                apr_pool_t *pool,
+                                svn_revnum_t rev);
+
+/** Send a "open-root" command over connection @a conn.  Open the
+ * repository root at revision @a rev and associate it with @a token.
+ * Use @a pool for allocations.
+ */
+svn_error_t *
+svn_ra_svn_write_cmd_open_root(svn_ra_svn_conn_t *conn,
+                               apr_pool_t *pool,
+                               svn_revnum_t rev,
+                               const char *token);
+
+/** Send a "delete-entry" command over connection @a conn.  Delete the
+ * @a path at optional revision @a rev below @a parent_token.
+ * Use @a pool for allocations.
+ */
+svn_error_t *
+svn_ra_svn_write_cmd_delete_entry(svn_ra_svn_conn_t *conn,
+                                  apr_pool_t *pool,
+                                  const char *path,
+                                  svn_revnum_t rev,
+                                  const char *parent_token);
+
+/** Send a "add-dir" command over connection @a conn.  Add a new directory
+ * node named @a path under the directory identified by @a parent_token.
+ * Associate the new directory with the given @a token.  * @a copy_path
+ * and @a copy_rev are optional and describe the copy source.
+ * Use @a pool for allocations.
+ */
+svn_error_t *
+svn_ra_svn_write_cmd_add_dir(svn_ra_svn_conn_t *conn,
+                             apr_pool_t *pool,
+                             const char *path,
+                             const char *parent_token,
+                             const char *token,
+                             const char *copy_path,
+                             svn_revnum_t copy_rev);
+
+/** Send a "open-dir" command over connection @a conn.  Associate to
+ * @a token the directory node named @a path under the directory
+ * identified by @a parent_token in revision @a rev.
+ * Use @a pool for allocations.
+ */
+svn_error_t *
+svn_ra_svn_write_cmd_open_dir(svn_ra_svn_conn_t *conn,
+                              apr_pool_t *pool,
+                              const char *path,
+                              const char *parent_token,
+                              const char *token,
+                              svn_revnum_t rev);
+
+/** Send a "change-dir-prop" command over connection @a conn.  Set the
+ * property @a name to the optional @a value on the directory identified
+ * to @a token.  Use @a pool for allocations.
+ */
+svn_error_t *
+svn_ra_svn_write_cmd_change_dir_prop(svn_ra_svn_conn_t *conn,
+                                     apr_pool_t *pool,
+                                     const char *token,
+                                     const char *name,
+                                     const svn_string_t *value);
+
+/** Send a "close-dir" command over connection @a conn.  Identify the node
+ * to close with @a token.  The latter will then no longer be associated
+ * with that node.  Use @a pool for allocations.
+ */
+svn_error_t *
+svn_ra_svn_write_cmd_close_dir(svn_ra_svn_conn_t *conn,
+                               apr_pool_t *pool,
+                               const char *token);
+
+/** Send a "absent-dir" command over connection @a conn.  Directory node
+ * named @a path under the directory identified by @a parent_token is
+ * absent.  Use @a pool for allocations.
+ */
+svn_error_t *
+svn_ra_svn_write_cmd_absent_dir(svn_ra_svn_conn_t *conn,
+                                apr_pool_t *pool,
+                                const char *path,
+                                const char *parent_token);
+
+/** Send a "add-file" command over connection @a conn.  Add a new file
+ * node named @a path under the directory identified by @a parent_token.
+ * Associate the new file with the given @a token.  * @a copy_path and
+ * @a copy_rev are optional and describe the copy source.
+ * Use @a pool for allocations.
+ */
+svn_error_t *
+svn_ra_svn_write_cmd_add_file(svn_ra_svn_conn_t *conn,
+                              apr_pool_t *pool,
+                              const char *path,
+                              const char *parent_token,
+                              const char *token,
+                              const char *copy_path,
+                              svn_revnum_t copy_rev);
+
+/** Send a "open-file" command over connection @a conn.  Associate to
+ * @a token the file node named @a path under the directory identified by
+ * @a parent_token in revision @a rev.
+ * Use @a pool for allocations.
+ */
+svn_error_t *
+svn_ra_svn_write_cmd_open_file(svn_ra_svn_conn_t *conn,
+                               apr_pool_t *pool,
+                               const char *path,
+                               const char *parent_token,
+                               const char *token,
+                               svn_revnum_t rev);
+
+/** Send a "change-file-prop" command over connection @a conn.  Set the
+ * property @a name to the optional @a value on the file identified to
+ * @a token.  Use @a pool for allocations.
+ */
+svn_error_t *
+svn_ra_svn_write_cmd_change_file_prop(svn_ra_svn_conn_t *conn,
+                                      apr_pool_t *pool,
+                                      const char *token,
+                                      const char *name,
+                                      const svn_string_t *value);
+
+/** Send a "close-dir" command over connection @a conn.  Identify the node
+ * to close with @a token and provide an optional @a check_sum.  The token
+ * will then no longer be associated with that node.
+ * Use @a pool for allocations.
+ */
+svn_error_t *
+svn_ra_svn_write_cmd_close_file(svn_ra_svn_conn_t *conn,
+                                apr_pool_t *pool,
+                                const char *token,
+                                const char *text_checksum);
+
+/** Send a "absent-file" command over connection @a conn.  File node
+ * named @a path in the directory identified by @a parent_token is
+ * absent.  Use @a pool for allocations.
+ */
+svn_error_t *
+svn_ra_svn_write_cmd_absent_file(svn_ra_svn_conn_t *conn,
+                                 apr_pool_t *pool,
+                                 const char *path,
+                                 const char *parent_token);
+
+/** Send a "apply-textdelta" command over connection @a conn.  Starts a
+ * series of text deltas to be applied to the file identified by @a token.
+ * Optionally, specify the file's current checksum in @a base_checksum.
+ * Use @a pool for allocations.
+ */
+svn_error_t *
+svn_ra_svn_write_cmd_apply_textdelta(svn_ra_svn_conn_t *conn,
+                                     apr_pool_t *pool,
+                                     const char *token,
+                                     const char *base_checksum);
+
+/** Send a "textdelta-chunk" command over connection @a conn.  Apply
+ * textdelta @a chunk to the file identified by @a token.
+ * Use @a pool for allocations.
+ */
+svn_error_t *
+svn_ra_svn_write_cmd_textdelta_chunk(svn_ra_svn_conn_t *conn,
+                                     apr_pool_t *pool,
+                                     const char *token,
+                                     const svn_string_t *chunk);
+
+/** Send a "textdelta-end" command over connection @a conn.  Ends the
+ * series of text deltas to be applied to the file identified by @a token.
+ * Use @a pool for allocations.
+ */
+svn_error_t *
+svn_ra_svn_write_cmd_textdelta_end(svn_ra_svn_conn_t *conn,
+                                   apr_pool_t *pool,
+                                   const char *token);
+
+/** Send a "close-edit" command over connection @a conn.  Ends the editor
+ * drive (successfully).  Use @a pool for allocations.
+ */
+svn_error_t *
+svn_ra_svn_write_cmd_close_edit(svn_ra_svn_conn_t *conn,
+                                apr_pool_t *pool);
+
+/** Send a "abort-edit" command over connection @a conn.  Prematurely ends
+ * the editor drive, e.g. due to some problem on the other side.
+ * Use @a pool for allocations.
+ */
+svn_error_t *
+svn_ra_svn_write_cmd_abort_edit(svn_ra_svn_conn_t *conn,
+                                apr_pool_t *pool);
+
+/** Send a "set-path" command over connection @a conn.
+ * Use @a pool for allocations.
+ * 
+ * @see set_path() in #svn_ra_reporter3_t for a description.
+ */
+svn_error_t *
+svn_ra_svn_write_cmd_set_path(svn_ra_svn_conn_t *conn,
+                              apr_pool_t *pool,
+                              const char *path,
+                              svn_revnum_t rev,
+                              svn_boolean_t start_empty,
+                              const char *lock_token,
+                              svn_depth_t depth);
+
+/** Send a "delete-path" command over connection @a conn.
+ * Use @a pool for allocations.
+ *
+ * @see delete_path() in #svn_ra_reporter3_t for a description.
+ */
+svn_error_t *
+svn_ra_svn_write_cmd_delete_path(svn_ra_svn_conn_t *conn,
+                                 apr_pool_t *pool,
+                                 const char *path);
+
+/** Send a "link-path" command over connection @a conn.
+ * Use @a pool for allocations.
+ *
+ * @see link_path() in #svn_ra_reporter3_t for a description.
+ */
+svn_error_t *
+svn_ra_svn_write_cmd_link_path(svn_ra_svn_conn_t *conn,
+                               apr_pool_t *pool,
+                               const char *path,
+                               const char *url,
+                               svn_revnum_t rev,
+                               svn_boolean_t start_empty,
+                               const char *lock_token,
+                               svn_depth_t depth);
+
+/** Send a "finish-report" command over connection @a conn.
+ * Use @a pool for allocations.
+ *
+ * @see finish_report() in #svn_ra_reporter3_t for a description.
+ */
+svn_error_t *
+svn_ra_svn_write_cmd_finish_report(svn_ra_svn_conn_t *conn,
+                                   apr_pool_t *pool);
+
+/** Send a "abort-report" command over connection @a conn.
+ * Use @a pool for allocations.
+ *
+ * @see abort_report() in #svn_ra_reporter3_t for a description.
+ */
+svn_error_t *
+svn_ra_svn_write_cmd_abort_report(svn_ra_svn_conn_t *conn,
+                                  apr_pool_t *pool);
+
+/** Send a "reparent" command over connection @a conn.
+ * Use @a pool for allocations.
+ *
+ * @see #svn_ra_reparent for a description.
+ */
+svn_error_t *
+svn_ra_svn_write_cmd_reparent(svn_ra_svn_conn_t *conn,
+                              apr_pool_t *pool,
+                              const char *url);
+
+/** Send a "get-latest-rev" command over connection @a conn.
+ * Use @a pool for allocations.
+ *
+ * @see #svn_ra_get_latest_revnum for a description.
+ */
+svn_error_t *
+svn_ra_svn_write_cmd_get_latest_rev(svn_ra_svn_conn_t *conn,
+                                  apr_pool_t *pool);
+
+/** Send a "get-dated-rev" command over connection @a conn.
+ * Use @a pool for allocations.
+ *
+ * @see #svn_ra_get_dated_revision for a description.
+ */
+svn_error_t *
+svn_ra_svn_write_cmd_get_dated_rev(svn_ra_svn_conn_t *conn,
+                                   apr_pool_t *pool,
+                                   apr_time_t tm);
+
+/** Send a "change-rev-prop2" command over connection @a conn.
+ * Use @a pool for allocations.
+ *
+ * @see #svn_ra_change_rev_prop2 for a description.
+ */
+svn_error_t *
+svn_ra_svn_write_cmd_change_rev_prop2(svn_ra_svn_conn_t *conn,
+                                      apr_pool_t *pool,
+                                      svn_revnum_t rev,
+                                      const char *name,
+                                      const svn_string_t *value,
+                                      svn_boolean_t dont_care,
+                                      const svn_string_t *old_value);
+
+/** Send a "change-rev-prop" command over connection @a conn.
+ * Use @a pool for allocations.
+ *
+ * @see #svn_ra_change_rev_prop for a description.
+ */
+svn_error_t *
+svn_ra_svn_write_cmd_change_rev_prop(svn_ra_svn_conn_t *conn,
+                                     apr_pool_t *pool,
+                                     svn_revnum_t rev,
+                                     const char *name,
+                                     const svn_string_t *value);
+
+/** Send a "rev-proplist" command over connection @a conn.
+ * Use @a pool for allocations.
+ *
+ * @see #svn_ra_rev_proplist for a description.
+ */
+svn_error_t *
+svn_ra_svn_write_cmd_rev_proplist(svn_ra_svn_conn_t *conn,
+                                  apr_pool_t *pool,
+                                  svn_revnum_t rev);
+
+/** Send a "rev-prop" command over connection @a conn.
+ * Use @a pool for allocations.
+ *
+ * @see #svn_ra_rev_prop for a description.
+ */
+svn_error_t *
+svn_ra_svn_write_cmd_rev_prop(svn_ra_svn_conn_t *conn,
+                              apr_pool_t *pool,
+                              svn_revnum_t rev,
+                              const char *name);
+
+/** Send a "get-file" command over connection @a conn.
+ * Use @a pool for allocations.
+ *
+ * @see #svn_ra_get_file for a description.
+ */
+svn_error_t *
+svn_ra_svn_write_cmd_get_file(svn_ra_svn_conn_t *conn,
+                              apr_pool_t *pool,
+                              const char *path,
+                              svn_revnum_t rev,
+                              svn_boolean_t props,
+                              svn_boolean_t stream);
+
+/** Send a "update" command over connection @a conn.
+ * Use @a pool for allocations.
+ *
+ * @see #svn_ra_do_update3 for a description.
+ */
+svn_error_t *
+svn_ra_svn_write_cmd_update(svn_ra_svn_conn_t *conn,
+                            apr_pool_t *pool,
+                            svn_revnum_t rev,
+                            const char *target,
+                            svn_boolean_t recurse,
+                            svn_depth_t depth,
+                            svn_boolean_t send_copyfrom_args,
+                            svn_boolean_t ignore_ancestry);
+
+/** Send a "switch" command over connection @a conn.
+ * Use @a pool for allocations.
+ *
+ * @see #svn_ra_do_switch3 for a description.
+ */
+svn_error_t *
+svn_ra_svn_write_cmd_switch(svn_ra_svn_conn_t *conn,
+                            apr_pool_t *pool,
+                            svn_revnum_t rev,
+                            const char *target,
+                            svn_boolean_t recurse,
+                            const char *switch_url,
+                            svn_depth_t depth,
+                            svn_boolean_t send_copyfrom_args,
+                            svn_boolean_t ignore_ancestry);
+
+/** Send a "status" command over connection @a conn.
+ * Use @a pool for allocations.
+ *
+ * @see #svn_ra_do_status2 for a description.
+ */
+svn_error_t *
+svn_ra_svn_write_cmd_status(svn_ra_svn_conn_t *conn,
+                            apr_pool_t *pool,
+                            const char *target,
+                            svn_boolean_t recurse,
+                            svn_revnum_t rev,
+                            svn_depth_t depth);
+
+/** Send a "diff" command over connection @a conn.
+ * Use @a pool for allocations.
+ *
+ * @see #svn_ra_do_diff3 for a description.
+ */
+svn_error_t *
+svn_ra_svn_write_cmd_diff(svn_ra_svn_conn_t *conn,
+                          apr_pool_t *pool,
+                          svn_revnum_t rev,
+                          const char *target,
+                          svn_boolean_t recurse,
+                          svn_boolean_t ignore_ancestry,
+                          const char *versus_url,
+                          svn_boolean_t text_deltas,
+                          svn_depth_t depth);
+
+/** Send a "check-path" command over connection @a conn.
+ * Use @a pool for allocations.
+ *
+ * @see #svn_ra_check_path for a description.
+ */
+svn_error_t *
+svn_ra_svn_write_cmd_check_path(svn_ra_svn_conn_t *conn,
+                                apr_pool_t *pool,
+                                const char *path,
+                                svn_revnum_t rev);
+
+/** Send a "stat" command over connection @a conn.
+ * Use @a pool for allocations.
+ *
+ * @see #svn_ra_stat for a description.
+ */
+svn_error_t *
+svn_ra_svn_write_cmd_stat(svn_ra_svn_conn_t *conn,
+                          apr_pool_t *pool,
+                          const char *path,
+                          svn_revnum_t rev);
+
+/** Send a "get-file-revs" command over connection @a conn.
+ * Use @a pool for allocations.
+ *
+ * @see #svn_ra_get_file_revs2 for a description.
+ */
+svn_error_t *
+svn_ra_svn_write_cmd_get_file_revs(svn_ra_svn_conn_t *conn,
+                                   apr_pool_t *pool,
+                                   const char *path,
+                                   svn_revnum_t start,
+                                   svn_revnum_t end,
+                                   svn_boolean_t include_merged_revisions);
+
+/** Send a "lock" command over connection @a conn.
+ * Use @a pool for allocations.
+ *
+ * @see #svn_ra_lock for a description.
+ */
+svn_error_t *
+svn_ra_svn_write_cmd_lock(svn_ra_svn_conn_t *conn,
+                          apr_pool_t *pool,
+                          const char *path,
+                          const char *comment,
+                          svn_boolean_t steal_lock,
+                          svn_revnum_t revnum);
+
+/** Send a "unlock" command over connection @a conn.
+ * Use @a pool for allocations.
+ *
+ * @see #svn_ra_unlock for a description.
+ */
+svn_error_t *
+svn_ra_svn_write_cmd_unlock(svn_ra_svn_conn_t *conn,
+                            apr_pool_t *pool,
+                            const char *path,
+                            const char *token,
+                            svn_boolean_t break_lock);
+
+/** Send a "get-lock" command over connection @a conn.
+ * Use @a pool for allocations.
+ *
+ * @see #svn_ra_get_lock for a description.
+ */
+svn_error_t *
+svn_ra_svn_write_cmd_get_lock(svn_ra_svn_conn_t *conn,
+                              apr_pool_t *pool,
+                              const char *path);
+
+/** Send a "get-locks" command over connection @a conn.
+ * Use @a pool for allocations.
+ *
+ * @see #svn_ra_get_locks2 for a description.
+ */
+svn_error_t *
+svn_ra_svn_write_cmd_get_locks(svn_ra_svn_conn_t *conn,
+                               apr_pool_t *pool,
+                               const char *path,
+                               svn_depth_t depth);
+
+/** Send a "replay" command over connection @a conn.
+ * Use @a pool for allocations.
+ *
+ * @see #svn_ra_replay for a description.
+ */
+svn_error_t *
+svn_ra_svn_write_cmd_replay(svn_ra_svn_conn_t *conn,
+                            apr_pool_t *pool,
+                            svn_revnum_t rev,
+                            svn_revnum_t low_water_mark,
+                            svn_boolean_t send_deltas);
+
+/** Send a "replay-range" command over connection @a conn.
+ * Use @a pool for allocations.
+ *
+ * @see #svn_ra_replay_range for a description.
+ */
+svn_error_t *
+svn_ra_svn_write_cmd_replay_range(svn_ra_svn_conn_t *conn,
+                                  apr_pool_t *pool,
+                                  svn_revnum_t start_revision,
+                                  svn_revnum_t end_revision,
+                                  svn_revnum_t low_water_mark,
+                                  svn_boolean_t send_deltas);
+
+/** Send a "get-deleted-rev" command over connection @a conn.
+ * Use @a pool for allocations.
+ *
+ * @see #svn_ra_get_deleted_rev for a description.
+ */
+svn_error_t *
+svn_ra_svn_write_cmd_get_deleted_rev(svn_ra_svn_conn_t *conn,
+                                     apr_pool_t *pool,
+                                     const char *path,
+                                     svn_revnum_t peg_revision,
+                                     svn_revnum_t end_revision);
+
+/** Send a "get-iprops" command over connection @a conn.
+ * Use @a pool for allocations.
+ *
+ * @see #svn_ra_get_inherited_props for a description.
+ */
+svn_error_t *
+svn_ra_svn_write_cmd_get_iprops(svn_ra_svn_conn_t *conn,
+                                apr_pool_t *pool,
+                                const char *path,
+                                svn_revnum_t revision);
+
+/** Send a "finish-replay" command over connection @a conn.
+ * Use @a pool for allocations.
+ */
+svn_error_t *
+svn_ra_svn_write_cmd_finish_replay(svn_ra_svn_conn_t *conn,
+                                   apr_pool_t *pool);
+
+/**
+ * @}
+ */
 #ifdef __cplusplus
 }
 #endif /* __cplusplus */

Modified: subversion/branches/verify-keep-going/subversion/include/svn_repos.h
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/include/svn_repos.h?rev=1465596&r1=1465595&r2=1465596&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/include/svn_repos.h (original)
+++ subversion/branches/verify-keep-going/subversion/include/svn_repos.h Mon Apr  8 11:47:02 2013
@@ -448,6 +448,11 @@ svn_repos_create(svn_repos_t **repos_p,
  * It does *not* guarantee the most optimized repository state as a
  * dump and subsequent load would.
  *
+ * @note On some platforms the exclusive lock does not exclude other
+ * threads in the same process so this function should only be called
+ * by a single threaded process, or by a multi-threaded process when
+ * no other threads are accessing the repository.
+ *
  * @since New in 1.7.
  */
 svn_error_t *
@@ -498,6 +503,26 @@ svn_repos_has_capability(svn_repos_t *re
                          apr_pool_t *pool);
 
 /**
+ * Return a set capabilities supported by the running Subversion library and by
+ * @a repos.  (Capabilities supported by this version of Subversion but not by
+ * @a repos are not listed.  This may happen when svn_repos_upgrade2() has not
+ * been called after a software upgrade.)
+ *
+ * The set is represented as a hash whose keys are the set members.  The values
+ * are not defined.
+ *
+ * @see svn_repos_info()
+ *
+ * @since New in 1.8.
+ */
+svn_error_t *
+svn_repos_capabilities(apr_hash_t **capabilities,
+                       svn_repos_t *repos,
+                       apr_pool_t *result_pool,
+                       apr_pool_t *scratch_pool);
+/** @} */
+
+/**
  * The capability of doing the right thing with merge-tracking
  * information, both storing it and responding to queries about it.
  *
@@ -511,6 +536,8 @@ svn_repos_has_capability(svn_repos_t *re
  * colons for their own reasons.  While this RA limitation has no
  * direct impact on repository capabilities, there's no reason to be
  * gratuitously different either.
+ *
+ * If you add a capability, update svn_repos_capabilities().
  */
 
 
@@ -665,6 +692,13 @@ svn_repos_recover(const char *path,
                   apr_pool_t *pool);
 
 /**
+ * Callback for svn_repos_freeze.
+ *
+ * @since New in 1.8.
+ */
+typedef svn_error_t *(*svn_repos_freeze_func_t)(void *baton, apr_pool_t *pool);
+
+/**
  * Take an exclusive lock on each of the repositories in @a paths to
  * prevent commits and then while holding all the locks invoke @a
  * freeze_body passing @a baton.  Each repository may be readable by
@@ -672,11 +706,16 @@ svn_repos_recover(const char *path,
  * FS backend the repository uses.  Repositories are locked in the
  * order in which they are specified in the array.
  *
+ * @note On some platforms the exclusive lock does not exclude other
+ * threads in the same process so this function should only be called
+ * by a single threaded process, or by a multi-threaded process when
+ * no other threads are accessing the repositories.
+ *
  * @since New in 1.8.
  */
 svn_error_t *
 svn_repos_freeze(apr_array_header_t *paths,
-                 svn_error_t *(*freeze_body)(void *baton, apr_pool_t *pool),
+                 svn_repos_freeze_func_t freeze_body,
                  void *baton,
                  apr_pool_t *pool);
 
@@ -798,8 +837,7 @@ svn_repos_post_unlock_hook(svn_repos_t *
  * file in its default location within the repository disk structure.
  * If @a hooks_env_path is not absolute, it specifies a path relative
  * to the parent of the file's default location.
- *
- * @a result_pool should be the same pool that @a repos was allocated in.
+ * 
  * Use @a scratch_pool for temporary allocations.
  *
  * If this function is not called, or if the specified configuration
@@ -811,7 +849,6 @@ svn_repos_post_unlock_hook(svn_repos_t *
 svn_error_t *
 svn_repos_hooks_setenv(svn_repos_t *repos,
                        const char *hooks_env_path,
-                       apr_pool_t *result_pool,
                        apr_pool_t *scratch_pool);
 
 /** @} */
@@ -2367,7 +2404,6 @@ svn_repos_fs_change_txn_props(svn_fs_txn
                               const apr_array_header_t *props,
                               apr_pool_t *pool);
 
-/** @} */
 
 /* ---------------------------------------------------------------*/
 
@@ -2458,6 +2494,27 @@ svn_repos_node_editor(const svn_delta_ed
 svn_repos_node_t *
 svn_repos_node_from_baton(void *edit_baton);
 
+/**
+ * Return repository format information for @a repos.
+ *
+ * Set @a *repos_format to the repository format number of @a repos, which is
+ * an integer that increases when incompatible changes are made (such as
+ * by #svn_repos_upgrade).
+ *
+ * Set @a *supports_version to the version number of the minimum Subversion GA
+ * release that can read and write @a repos.
+ *
+ * @see svn_fs_info_format()
+ *
+ * @since New in 1.8.
+ */
+svn_error_t *
+svn_repos_info_format(int *repos_format,
+                      svn_version_t **supports_version,
+                      svn_repos_t *repos,
+                      apr_pool_t *result_pool,
+                      apr_pool_t *scratch_pool);
+
 /** @} */
 
 /* ---------------------------------------------------------------*/
@@ -2566,9 +2623,12 @@ svn_repos_verify_fs3(svn_repos_t *repos,
                      svn_cancel_func_t cancel,
                      void *cancel_baton,
                      apr_pool_t *scratch_pool);
+
 /**
  * Like svn_repos_verify_fs3(), but with @a keep_going set to @c FALSE.
+ *
  * @since New in 1.7.
+ * @deprecated Provided for backward compatibility with the 1.7 API.
  */
 SVN_DEPRECATED
 svn_error_t *
@@ -3404,7 +3464,6 @@ svn_repos_remember_client_capabilities(s
                                        const apr_array_header_t *capabilities);
 
 
-
 #ifdef __cplusplus
 }
 #endif /* __cplusplus */