You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by br...@apache.org on 2019/01/04 10:38:53 UTC

svn commit: r1850344 - in /subversion/trunk/subversion: bindings/cxx/include/svnxx/ bindings/cxx/src/ include/

Author: brane
Date: Fri Jan  4 10:38:53 2019
New Revision: 1850344

URL: http://svn.apache.org/viewvc?rev=1850344&view=rev
Log:
Move (some of the) standalone types into separate implementation headers
so that SVN++ can use them directly without exposing APR or other dependencies.

* subversion/include/svn_opt_impl.h: New file.
  (svn_opt_revision_kind): Moved here from svn_opt.h
* subversion/include/svn_opt.h: Include svn_opt_impl.h.
  (svn_opt_revision_kind): Moved away.

* subversion/include/svn_types_impl.h: New file.
  (svn_error_t): Forward declaration.
  (svn_node_kind_t, svn_tristate_t,
   svn_revnum_t, SVN_INVALID_REVNUM, svn_depth_t): Moved here from svn_types.h.
* subversion/include/svn_types.h: Include svn_types_impl.h.
  (svn_node_kind_t, svn_tristate_t,
   svn_revnum_t, SVN_INVALID_REVNUM, svn_depth_t): Moved away.

[in subversion/bindings/cxx]
* include/svnxx/depth.hpp: Include svn_types_impl.h.
  (depth): Define enum constant values from svn_depth_t.
* include/svnxx/exception.hpp: Include svn_types_impl.h.
  (detail::svn_error): Remove forward declaration.
  (detail::error_ptr): Use svn_error_t directly.
* include/svnxx/revision.hpp: Include svn_opt_impl.h and svn_types_impl.h.
  (revision::number): Use svn_revnum_t for the underlying type and
   SVN_INVALID_REVNUM for the 'invalid' enum constant value.
  (revision::kind): Define enum constant values from svn_opt_revision_kind.
* include/svnxx/tristate.hpp: Include svn_types_impl.h.
  (tristate::value): Define enum constant values from svn_tristate_t.

* src/exception.cpp
  (detail::svn_error): Removed.
  (impl::checked_call): Use svn_error_t instead of detail::svn_error.

Added:
    subversion/trunk/subversion/include/svn_opt_impl.h   (with props)
    subversion/trunk/subversion/include/svn_types_impl.h   (with props)
Modified:
    subversion/trunk/subversion/bindings/cxx/include/svnxx/depth.hpp
    subversion/trunk/subversion/bindings/cxx/include/svnxx/exception.hpp
    subversion/trunk/subversion/bindings/cxx/include/svnxx/revision.hpp
    subversion/trunk/subversion/bindings/cxx/include/svnxx/tristate.hpp
    subversion/trunk/subversion/bindings/cxx/src/exception.cpp
    subversion/trunk/subversion/include/svn_opt.h
    subversion/trunk/subversion/include/svn_types.h

Modified: subversion/trunk/subversion/bindings/cxx/include/svnxx/depth.hpp
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/cxx/include/svnxx/depth.hpp?rev=1850344&r1=1850343&r2=1850344&view=diff
==============================================================================
--- subversion/trunk/subversion/bindings/cxx/include/svnxx/depth.hpp (original)
+++ subversion/trunk/subversion/bindings/cxx/include/svnxx/depth.hpp Fri Jan  4 10:38:53 2019
@@ -25,6 +25,8 @@
 #ifndef SVNXX_DEPTH_HPP
 #define SVNXX_DEPTH_HPP
 
+#include "svn_types_impl.h"
+
 #include <cstdint>
 #include <string>
 
@@ -38,12 +40,12 @@ namespace svnxx {
 // NOTE: Keep these values identical to those in svn_depth_t!
 enum class depth : std::int8_t
   {
-    unknown = -2,
-    exclude = -1,
-    empty = 0,
-    files = 1,
-    immediates = 2,
-    infinity = 3,
+    unknown    = svn_depth_unknown,
+    exclude    = svn_depth_exclude,
+    empty      = svn_depth_empty,
+    files      = svn_depth_files,
+    immediates = svn_depth_immediates,
+    infinity   = svn_depth_infinity,
   };
 
 /**

Modified: subversion/trunk/subversion/bindings/cxx/include/svnxx/exception.hpp
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/cxx/include/svnxx/exception.hpp?rev=1850344&r1=1850343&r2=1850344&view=diff
==============================================================================
--- subversion/trunk/subversion/bindings/cxx/include/svnxx/exception.hpp (original)
+++ subversion/trunk/subversion/bindings/cxx/include/svnxx/exception.hpp Fri Jan  4 10:38:53 2019
@@ -25,6 +25,8 @@
 #ifndef SVNXX_EXCEPTION_HPP
 #define SVNXX_EXCEPTION_HPP
 
+#include "svn_types_impl.h"
+
 #include <exception>
 #include <memory>
 #include <new>
@@ -106,8 +108,7 @@ private:
 };
 
 namespace detail {
-struct svn_error;
-using error_ptr = std::shared_ptr<svn_error>;
+using error_ptr = std::shared_ptr<svn_error_t>;
 } // namespace detail
 
 /**

Modified: subversion/trunk/subversion/bindings/cxx/include/svnxx/revision.hpp
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/cxx/include/svnxx/revision.hpp?rev=1850344&r1=1850343&r2=1850344&view=diff
==============================================================================
--- subversion/trunk/subversion/bindings/cxx/include/svnxx/revision.hpp (original)
+++ subversion/trunk/subversion/bindings/cxx/include/svnxx/revision.hpp Fri Jan  4 10:38:53 2019
@@ -25,6 +25,9 @@
 #ifndef SVNXX_REVISION_HPP
 #define SVNXX_REVISION_HPP
 
+#include "svn_opt_impl.h"
+#include "svn_types_impl.h"
+
 #include <chrono>
 #include <cstdint>
 
@@ -47,9 +50,9 @@ public:
   /**
    * @brief Revision number type.
    */
-  enum class number : long
+  enum class number : svn_revnum_t
     {
-      invalid = -1,             ///< Invalid revision number.
+      invalid = SVN_INVALID_REVNUM, ///< Invalid revision number.
     };
 
   /**
@@ -69,14 +72,14 @@ public:
   // NOTE: Keep these values identical to those in svn_opt_revision_kind!
   enum class kind : std::int8_t
     {
-      unspecified,
-      number,
-      date,
-      committed,
-      previous,
-      base,
-      working,
-      head,
+      unspecified = svn_opt_revision_unspecified,
+      number      = svn_opt_revision_number,
+      date        = svn_opt_revision_date,
+      committed   = svn_opt_revision_committed,
+      previous    = svn_opt_revision_previous,
+      base        = svn_opt_revision_base,
+      working     = svn_opt_revision_working,
+      head        = svn_opt_revision_head,
     };
 
   /**

Modified: subversion/trunk/subversion/bindings/cxx/include/svnxx/tristate.hpp
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/cxx/include/svnxx/tristate.hpp?rev=1850344&r1=1850343&r2=1850344&view=diff
==============================================================================
--- subversion/trunk/subversion/bindings/cxx/include/svnxx/tristate.hpp (original)
+++ subversion/trunk/subversion/bindings/cxx/include/svnxx/tristate.hpp Fri Jan  4 10:38:53 2019
@@ -25,6 +25,10 @@
 #ifndef SVNXX_TRISTATE_HPP
 #define SVNXX_TRISTATE_HPP
 
+#include "svn_types_impl.h"
+
+#include <cstdint>
+
 #if defined(SVNXX_USE_BOOST) || defined(DOXYGEN)
 #include <boost/logic/tribool.hpp>
 #endif
@@ -132,11 +136,11 @@ public:
     }
 
 private:
-  // See svn_tristate_t in svn_types.h.
-  enum: unsigned char {
-    false_value = 2,
-    true_value,
-    unknown_value
+  // NOTE: Keep these values identical to those in svn_tristate_t!
+  enum : std::uint8_t {
+    false_value   = svn_tristate_false,
+    true_value    = svn_tristate_true,
+    unknown_value = svn_tristate_unknown
   } value;
 
 #if defined(SVNXX_USE_BOOST) || defined(DOXYGEN)

Modified: subversion/trunk/subversion/bindings/cxx/src/exception.cpp
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/cxx/src/exception.cpp?rev=1850344&r1=1850343&r2=1850344&view=diff
==============================================================================
--- subversion/trunk/subversion/bindings/cxx/src/exception.cpp (original)
+++ subversion/trunk/subversion/bindings/cxx/src/exception.cpp Fri Jan  4 10:38:53 2019
@@ -37,11 +37,6 @@ namespace apache {
 namespace subversion {
 namespace svnxx {
 
-namespace detail {
-struct svn_error final : svn_error_t {};
-} // namespace detail
-
-
 //
 // checked_call
 //
@@ -50,7 +45,6 @@ namespace impl {
 
 void checked_call(svn_error_t* const err)
 {
-  using svn_error = detail::svn_error;
   using error_ptr = detail::error_ptr;
 
   if (!err)
@@ -58,32 +52,31 @@ void checked_call(svn_error_t* const err
 
   struct error_builder final : public error
   {
-    explicit error_builder(error_ptr err_)
-      : error(err_)
+    explicit error_builder(error_ptr ptr)
+      : error(ptr)
       {}
   };
 
   struct cancelled_builder final : public cancelled
   {
-    explicit cancelled_builder(error_ptr err_)
-      : cancelled(err_)
+    explicit cancelled_builder(error_ptr ptr)
+      : cancelled(ptr)
       {}
   };
 
   static const auto error_deleter =
-    [](svn_error* ptr) noexcept
+    [](svn_error_t* err) noexcept
       {
-        svn_error_clear(ptr);
+        svn_error_clear(err);
       };
 
-  auto err_ptr = error_ptr(static_cast<svn_error*>(err), error_deleter);
   for (auto next = err; next; next = next->child)
     {
       if (next->apr_err == SVN_ERR_CANCELLED
           || next->apr_err == SVN_ERR_ITER_BREAK)
-        throw cancelled_builder(err_ptr);
+        throw cancelled_builder(error_ptr(err, error_deleter));
     }
-  throw error_builder(err_ptr);
+  throw error_builder(error_ptr(err, error_deleter));
 }
 
 } // namespace impl

Modified: subversion/trunk/subversion/include/svn_opt.h
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/include/svn_opt.h?rev=1850344&r1=1850343&r2=1850344&view=diff
==============================================================================
--- subversion/trunk/subversion/include/svn_opt.h (original)
+++ subversion/trunk/subversion/include/svn_opt.h Fri Jan  4 10:38:53 2019
@@ -27,6 +27,8 @@
 #ifndef SVN_OPT_H
 #define SVN_OPT_H
 
+#include "svn_opt_impl.h"
+
 #include <apr.h>
 #include <apr_pools.h>
 #include <apr_getopt.h>
@@ -443,43 +445,7 @@ svn_opt_subcommand_help(const char *subc
 
 
 /* Parsing revision and date options. */
-
-/**
- * Various ways of specifying revisions.
- *
- * @note
- * In contexts where local mods are relevant, the `working' kind
- * refers to the uncommitted "working" revision, which may be modified
- * with respect to its base revision.  In other contexts, `working'
- * should behave the same as `committed' or `current'.
- */
-enum svn_opt_revision_kind {
-  /** No revision information given. */
-  svn_opt_revision_unspecified,
-
-  /** revision given as number */
-  svn_opt_revision_number,
-
-  /** revision given as date */
-  svn_opt_revision_date,
-
-  /** rev of most recent change */
-  svn_opt_revision_committed,
-
-  /** (rev of most recent change) - 1 */
-  svn_opt_revision_previous,
-
-  /** .svn/entries current revision */
-  svn_opt_revision_base,
-
-  /** current, plus local mods */
-  svn_opt_revision_working,
-
-  /** repository youngest */
-  svn_opt_revision_head
-
-  /* please update svn_opt__revision_to_string() when extending this enum */
-};
+/* NOTE: svn_opt_revision_kind is defined in svn_opt_impl.h */
 
 /**
  * A revision value, which can be specified as a number or a date.

Added: subversion/trunk/subversion/include/svn_opt_impl.h
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/include/svn_opt_impl.h?rev=1850344&view=auto
==============================================================================
--- subversion/trunk/subversion/include/svn_opt_impl.h (added)
+++ subversion/trunk/subversion/include/svn_opt_impl.h Fri Jan  4 10:38:53 2019
@@ -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_opt.h
+ * @brief Option and argument parsing for Subversion command lines
+ *        (common implementation)
+ */
+
+/* NOTE:
+ * This file *must not* include or depend on any other header except
+ * the C standard library headers.
+ */
+
+#ifndef SVN_OPT_IMPL_H
+#define SVN_OPT_IMPL_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+
+/**
+ * Various ways of specifying revisions.
+ *
+ * @note
+ * In contexts where local mods are relevant, the `working' kind
+ * refers to the uncommitted "working" revision, which may be modified
+ * with respect to its base revision.  In other contexts, `working'
+ * should behave the same as `committed' or `current'.
+ */
+/* NOTE: Update svnxx/revision.hpp when changing this enum. */
+enum svn_opt_revision_kind {
+  /** No revision information given. */
+  svn_opt_revision_unspecified,
+
+  /** revision given as number */
+  svn_opt_revision_number,
+
+  /** revision given as date */
+  svn_opt_revision_date,
+
+  /** rev of most recent change */
+  svn_opt_revision_committed,
+
+  /** (rev of most recent change) - 1 */
+  svn_opt_revision_previous,
+
+  /** .svn/entries current revision */
+  svn_opt_revision_base,
+
+  /** current, plus local mods */
+  svn_opt_revision_working,
+
+  /** repository youngest */
+  svn_opt_revision_head
+
+  /* please update svn_opt__revision_to_string() when extending this enum */
+};
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* SVN_OPT_IMPL_H */

Propchange: subversion/trunk/subversion/include/svn_opt_impl.h
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: subversion/trunk/subversion/include/svn_types.h
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/include/svn_types.h?rev=1850344&r1=1850343&r2=1850344&view=diff
==============================================================================
--- subversion/trunk/subversion/include/svn_types.h (original)
+++ subversion/trunk/subversion/include/svn_types.h Fri Jan  4 10:38:53 2019
@@ -27,6 +27,8 @@
 #ifndef SVN_TYPES_H
 #define SVN_TYPES_H
 
+#include "svn_types_impl.h"
+
 /* ### this should go away, but it causes too much breakage right now */
 #include <stdlib.h>
 #include <limits.h> /* for ULONG_MAX */
@@ -303,28 +305,7 @@ apr_hash_this_val(apr_hash_index_t *hi);
 
 
 
-/** The various types of nodes in the Subversion filesystem. */
-typedef enum svn_node_kind_t
-{
-  /** absent */
-  svn_node_none,
-
-  /** regular file */
-  svn_node_file,
-
-  /** directory */
-  svn_node_dir,
-
-  /** something's here, but we don't know what */
-  svn_node_unknown,
-
-  /**
-   * symbolic link
-   * @note This value is not currently used by the public API.
-   * @since New in 1.8.
-   */
-  svn_node_symlink
-} svn_node_kind_t;
+/* NOTE: svn_node_kind_t is defined in svn_types_impl.h */
 
 /** Return a constant string expressing @a kind as an English word, e.g.,
  * "file", "dir", etc.  The string is not localized, as it may be used for
@@ -346,23 +327,7 @@ svn_node_kind_t
 svn_node_kind_from_word(const char *word);
 
 
-/** Generic three-state property to represent an unknown value for values
- * that are just like booleans.  The values have been set deliberately to
- * make tristates disjoint from #svn_boolean_t.
- *
- * @note It is unsafe to use apr_pcalloc() to allocate these, since '0' is
- * not a valid value.
- *
- * @since New in 1.7. */
-typedef enum svn_tristate_t
-{
-  /** state known to be false (the constant does not evaulate to false) */
-  svn_tristate_false = 2,
-  /** state known to be true */
-  svn_tristate_true,
-  /** state could be true or false */
-  svn_tristate_unknown
-} svn_tristate_t;
+/* NOTE: svn_tristate_t is defined in svn_types_impl.h */
 
 /** Return a constant string "true", "false" or NULL representing the value of
  * @a tristate.
@@ -422,15 +387,11 @@ svn_tristate__from_word(const char * wor
 
 
 
-/** A revision number. */
-typedef long int svn_revnum_t;
+/* NOTE: svn_revnum_t and SVN_INVALID_REVNUM are defined in svn_types_impl.h */
 
 /** Valid revision numbers begin at 0 */
 #define SVN_IS_VALID_REVNUM(n) ((n) >= 0)
 
-/** The 'official' invalid revision num */
-#define SVN_INVALID_REVNUM ((svn_revnum_t) -1)
-
 /** Not really invalid...just unimportant -- one day, this can be its
  * own unique value, for now, just make it the same as
  * #SVN_INVALID_REVNUM.
@@ -494,55 +455,7 @@ enum svn_recurse_kind
   svn_recursive
 };
 
-/** The concept of depth for directories.
- *
- * @note This is similar to, but not exactly the same as, the WebDAV
- * and LDAP concepts of depth.
- *
- * @since New in 1.5.
- */
-typedef enum svn_depth_t
-{
-  /* The order of these depths is important: the higher the number,
-     the deeper it descends.  This allows us to compare two depths
-     numerically to decide which should govern. */
-
-  /** Depth undetermined or ignored.  In some contexts, this means the
-      client should choose an appropriate default depth.  The server
-      will generally treat it as #svn_depth_infinity. */
-  svn_depth_unknown    = -2,
-
-  /** Exclude (i.e., don't descend into) directory D.
-      @note In Subversion 1.5, svn_depth_exclude is *not* supported
-      anywhere in the client-side (libsvn_wc/libsvn_client/etc) code;
-      it is only supported as an argument to set_path functions in the
-      ra and repos reporters.  (This will enable future versions of
-      Subversion to run updates, etc, against 1.5 servers with proper
-      svn_depth_exclude behavior, once we get a chance to implement
-      client-side support for svn_depth_exclude.)
-  */
-  svn_depth_exclude    = -1,
-
-  /** Just the named directory D, no entries.  Updates will not pull in
-      any files or subdirectories not already present. */
-  svn_depth_empty      =  0,
-
-  /** D + its file children, but not subdirs.  Updates will pull in any
-      files not already present, but not subdirectories. */
-  svn_depth_files      =  1,
-
-  /** D + immediate children (D and its entries).  Updates will pull in
-      any files or subdirectories not already present; those
-      subdirectories' this_dir entries will have depth-empty. */
-  svn_depth_immediates =  2,
-
-  /** D + all descendants (full recursion from D).  Updates will pull
-      in any files or subdirectories not already present; those
-      subdirectories' this_dir entries will have depth-infinity.
-      Equivalent to the pre-1.5 default update behavior. */
-  svn_depth_infinity   =  3
-
-} svn_depth_t;
+/* NOTE: svn_depth_t is defined in svn_types_impl.h */
 
 /** Return a constant string expressing @a depth as an English word,
  * e.g., "infinity", "immediates", etc.  The string is not localized,

Added: subversion/trunk/subversion/include/svn_types_impl.h
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/include/svn_types_impl.h?rev=1850344&view=auto
==============================================================================
--- subversion/trunk/subversion/include/svn_types_impl.h (added)
+++ subversion/trunk/subversion/include/svn_types_impl.h Fri Jan  4 10:38:53 2019
@@ -0,0 +1,156 @@
+/**
+ * @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_types.h
+ * @brief Subversion's data types (common implementation)
+ * This is a @b private implementation-specific header file.
+ * User code should not include it directly.
+ */
+
+/* NOTE:
+ * This file *must not* include or depend on any other header except
+ * the C standard library headers.
+ */
+
+#ifndef SVN_TYPES_IMPL_H
+#define SVN_TYPES_IMPL_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+
+#ifndef DOXYGEN
+/* Forward declaration of the error object. */
+struct svn_error_t;
+#endif
+
+
+/** The various types of nodes in the Subversion filesystem. */
+typedef enum svn_node_kind_t
+{
+  /** absent */
+  svn_node_none,
+
+  /** regular file */
+  svn_node_file,
+
+  /** directory */
+  svn_node_dir,
+
+  /** something's here, but we don't know what */
+  svn_node_unknown,
+
+  /**
+   * symbolic link
+   * @note This value is not currently used by the public API.
+   * @since New in 1.8.
+   */
+  svn_node_symlink
+} svn_node_kind_t;
+
+
+/** Generic three-state property to represent an unknown value for values
+ * that are just like booleans.  The values have been set deliberately to
+ * make tristates disjoint from #svn_boolean_t.
+ *
+ * @note It is unsafe to use apr_pcalloc() to allocate these, since '0' is
+ * not a valid value.
+ *
+ * @since New in 1.7. */
+/* NOTE: Update svnxx/tristate.hpp when changing this enum. */
+typedef enum svn_tristate_t
+{
+  /** state known to be false (the constant does not evaulate to false) */
+  svn_tristate_false = 2,
+  /** state known to be true */
+  svn_tristate_true,
+  /** state could be true or false */
+  svn_tristate_unknown
+} svn_tristate_t;
+
+
+/** A revision number. */
+/* NOTE: Update svnxx/revision.hpp when changing this typedef. */
+typedef long int svn_revnum_t;
+
+/** The 'official' invalid revision number. */
+/* NOTE: Update svnxx/revision.hpp when changing this definition. */
+#define SVN_INVALID_REVNUM ((svn_revnum_t) -1)
+
+
+/** The concept of depth for directories.
+ *
+ * @note This is similar to, but not exactly the same as, the WebDAV
+ * and LDAP concepts of depth.
+ *
+ * @since New in 1.5.
+ */
+/* NOTE: Update svnxx/depth.hpp when changing this enum. */
+typedef enum svn_depth_t
+{
+  /* The order of these depths is important: the higher the number,
+     the deeper it descends.  This allows us to compare two depths
+     numerically to decide which should govern. */
+
+  /** Depth undetermined or ignored.  In some contexts, this means the
+      client should choose an appropriate default depth.  The server
+      will generally treat it as #svn_depth_infinity. */
+  svn_depth_unknown    = -2,
+
+  /** Exclude (i.e., don't descend into) directory D.
+      @note In Subversion 1.5, svn_depth_exclude is *not* supported
+      anywhere in the client-side (libsvn_wc/libsvn_client/etc) code;
+      it is only supported as an argument to set_path functions in the
+      ra and repos reporters.  (This will enable future versions of
+      Subversion to run updates, etc, against 1.5 servers with proper
+      svn_depth_exclude behavior, once we get a chance to implement
+      client-side support for svn_depth_exclude.)
+  */
+  svn_depth_exclude    = -1,
+
+  /** Just the named directory D, no entries.  Updates will not pull in
+      any files or subdirectories not already present. */
+  svn_depth_empty      =  0,
+
+  /** D + its file children, but not subdirs.  Updates will pull in any
+      files not already present, but not subdirectories. */
+  svn_depth_files      =  1,
+
+  /** D + immediate children (D and its entries).  Updates will pull in
+      any files or subdirectories not already present; those
+      subdirectories' this_dir entries will have depth-empty. */
+  svn_depth_immediates =  2,
+
+  /** D + all descendants (full recursion from D).  Updates will pull
+      in any files or subdirectories not already present; those
+      subdirectories' this_dir entries will have depth-infinity.
+      Equivalent to the pre-1.5 default update behavior. */
+  svn_depth_infinity   =  3
+
+} svn_depth_t;
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* SVN_TYPES_IMPL_H */

Propchange: subversion/trunk/subversion/include/svn_types_impl.h
------------------------------------------------------------------------------
    svn:eol-style = native



Re: svn commit: r1850344 - in /subversion/trunk/subversion: bindings/cxx/include/svnxx/ bindings/cxx/src/ include/

Posted by Branko Čibej <br...@apache.org>.
On 04.01.2019 15:48, Daniel Shahaf wrote:
> Branko Čibej wrote on Fri, 04 Jan 2019 15:42 +0100:
>> On 04.01.2019 15:35, Daniel Shahaf wrote:
>>> Branko Čibej wrote on Fri, 04 Jan 2019 15:31 +0100:
>>>> On 04.01.2019 15:20, Daniel Shahaf wrote:
>>>>> brane@apache.org wrote on Fri, 04 Jan 2019 10:38 +0000:
>>>>>> Move (some of the) standalone types into separate implementation headers
>>>>>> so that SVN++ can use them directly without exposing APR or other dependencies.
>>>>>> +++ subversion/trunk/subversion/include/svn_opt_impl.h Fri Jan  4 
>>>>>> 10:38:53 2019
>>>>>> @@ -0,0 +1,83 @@
>>>>>> + * @file svn_opt.h
>>>>>> + * @brief Option and argument parsing for Subversion command lines
>>>>>> + *        (common implementation)
>>>>>> + */
>>>>>> +
>>>>>> +/* NOTE:
>>>>>> + * This file *must not* include or depend on any other header except
>>>>>> + * the C standard library headers.
>>>>>> + */
>>>>> Could the comment also explain the rationale for the restriction it imposes?
>>>> No, not in every "impl" header we happen to create. But it is documented
>>>> in subversion/bindings/cxx/README, as one of the SVN++ design goals.
>>> Shouldn't this be documented in the C API's documentation too, at least
>>> by reference?  Someone working on the C headers in a year or three might
>>> not think to look in the C++ bindings for design choices of the C API.
>> If you have an idea how to do that without boring repetition, please go
>> ahead.
> We could add a paragraph to HACKING, or possibly to a single global
> doxygen file, explaining the _impl.h convention, rather than repeating
> the explanation in each individual file.

A Doxygen file wouldn't work since we don't use generated docs for
developer guidelines, but a paragraph in HACKING about C++ bindings and
similar policy would work.

-- Brane



Re: svn commit: r1850344 - in /subversion/trunk/subversion: bindings/cxx/include/svnxx/ bindings/cxx/src/ include/

Posted by Daniel Shahaf <d....@daniel.shahaf.name>.
Branko Čibej wrote on Fri, 04 Jan 2019 15:42 +0100:
> On 04.01.2019 15:35, Daniel Shahaf wrote:
> > Branko Čibej wrote on Fri, 04 Jan 2019 15:31 +0100:
> >> On 04.01.2019 15:20, Daniel Shahaf wrote:
> >>> brane@apache.org wrote on Fri, 04 Jan 2019 10:38 +0000:
> >>>> Move (some of the) standalone types into separate implementation headers
> >>>> so that SVN++ can use them directly without exposing APR or other dependencies.
> >>>> +++ subversion/trunk/subversion/include/svn_opt_impl.h Fri Jan  4 
> >>>> 10:38:53 2019
> >>>> @@ -0,0 +1,83 @@
> >>>> + * @file svn_opt.h
> >>>> + * @brief Option and argument parsing for Subversion command lines
> >>>> + *        (common implementation)
> >>>> + */
> >>>> +
> >>>> +/* NOTE:
> >>>> + * This file *must not* include or depend on any other header except
> >>>> + * the C standard library headers.
> >>>> + */
> >>> Could the comment also explain the rationale for the restriction it imposes?
> >> No, not in every "impl" header we happen to create. But it is documented
> >> in subversion/bindings/cxx/README, as one of the SVN++ design goals.
> > Shouldn't this be documented in the C API's documentation too, at least
> > by reference?  Someone working on the C headers in a year or three might
> > not think to look in the C++ bindings for design choices of the C API.
> 
> If you have an idea how to do that without boring repetition, please go
> ahead.

We could add a paragraph to HACKING, or possibly to a single global
doxygen file, explaining the _impl.h convention, rather than repeating
the explanation in each individual file.

Re: svn commit: r1850344 - in /subversion/trunk/subversion: bindings/cxx/include/svnxx/ bindings/cxx/src/ include/

Posted by Branko Čibej <br...@apache.org>.
On 04.01.2019 15:35, Daniel Shahaf wrote:
> Branko Čibej wrote on Fri, 04 Jan 2019 15:31 +0100:
>> On 04.01.2019 15:20, Daniel Shahaf wrote:
>>> brane@apache.org wrote on Fri, 04 Jan 2019 10:38 +0000:
>>>> Move (some of the) standalone types into separate implementation headers
>>>> so that SVN++ can use them directly without exposing APR or other dependencies.
>>>> +++ subversion/trunk/subversion/include/svn_opt_impl.h Fri Jan  4 
>>>> 10:38:53 2019
>>>> @@ -0,0 +1,83 @@
>>>> + * @file svn_opt.h
>>>> + * @brief Option and argument parsing for Subversion command lines
>>>> + *        (common implementation)
>>>> + */
>>>> +
>>>> +/* NOTE:
>>>> + * This file *must not* include or depend on any other header except
>>>> + * the C standard library headers.
>>>> + */
>>> Could the comment also explain the rationale for the restriction it imposes?
>> No, not in every "impl" header we happen to create. But it is documented
>> in subversion/bindings/cxx/README, as one of the SVN++ design goals.
> Shouldn't this be documented in the C API's documentation too, at least
> by reference?  Someone working on the C headers in a year or three might
> not think to look in the C++ bindings for design choices of the C API.

If you have an idea how to do that without boring repetition, please go
ahead.

I just don't see it as all that relevant apart from the "don't do that"
header in the files. Every existing type that was moved to the new
headers already has a reference to its C++ counterpart[1]. When we
invent new types, trivial cases will be caught when (if?) their C++
wrappers are written.

-- Brane

[1] ... except svn_node_kind_t, which doesn't have a C++ counterpart yet.


Re: svn commit: r1850344 - in /subversion/trunk/subversion: bindings/cxx/include/svnxx/ bindings/cxx/src/ include/

Posted by Daniel Shahaf <d....@daniel.shahaf.name>.
Branko Čibej wrote on Fri, 04 Jan 2019 15:31 +0100:
> On 04.01.2019 15:20, Daniel Shahaf wrote:
> > brane@apache.org wrote on Fri, 04 Jan 2019 10:38 +0000:
> >> Move (some of the) standalone types into separate implementation headers
> >> so that SVN++ can use them directly without exposing APR or other dependencies.
> >> +++ subversion/trunk/subversion/include/svn_opt_impl.h Fri Jan  4 
> >> 10:38:53 2019
> >> @@ -0,0 +1,83 @@
> >> + * @file svn_opt.h
> >> + * @brief Option and argument parsing for Subversion command lines
> >> + *        (common implementation)
> >> + */
> >> +
> >> +/* NOTE:
> >> + * This file *must not* include or depend on any other header except
> >> + * the C standard library headers.
> >> + */
> > Could the comment also explain the rationale for the restriction it imposes?
> 
> No, not in every "impl" header we happen to create. But it is documented
> in subversion/bindings/cxx/README, as one of the SVN++ design goals.

Shouldn't this be documented in the C API's documentation too, at least
by reference?  Someone working on the C headers in a year or three might
not think to look in the C++ bindings for design choices of the C API.

Re: svn commit: r1850344 - in /subversion/trunk/subversion: bindings/cxx/include/svnxx/ bindings/cxx/src/ include/

Posted by Branko Čibej <br...@apache.org>.
On 04.01.2019 15:20, Daniel Shahaf wrote:
> brane@apache.org wrote on Fri, 04 Jan 2019 10:38 +0000:
>> Move (some of the) standalone types into separate implementation headers
>> so that SVN++ can use them directly without exposing APR or other dependencies.
>> +++ subversion/trunk/subversion/include/svn_opt_impl.h Fri Jan  4 
>> 10:38:53 2019
>> @@ -0,0 +1,83 @@
>> + * @file svn_opt.h
>> + * @brief Option and argument parsing for Subversion command lines
>> + *        (common implementation)
>> + */
>> +
>> +/* NOTE:
>> + * This file *must not* include or depend on any other header except
>> + * the C standard library headers.
>> + */
> Could the comment also explain the rationale for the restriction it imposes?

No, not in every "impl" header we happen to create. But it is documented
in subversion/bindings/cxx/README, as one of the SVN++ design goals.

-- Brane


Re: svn commit: r1850344 - in /subversion/trunk/subversion: bindings/cxx/include/svnxx/ bindings/cxx/src/ include/

Posted by Daniel Shahaf <d....@daniel.shahaf.name>.
brane@apache.org wrote on Fri, 04 Jan 2019 10:38 +0000:
> Move (some of the) standalone types into separate implementation headers
> so that SVN++ can use them directly without exposing APR or other dependencies.

> +++ subversion/trunk/subversion/include/svn_opt_impl.h Fri Jan  4 
> 10:38:53 2019
> @@ -0,0 +1,83 @@
> + * @file svn_opt.h
> + * @brief Option and argument parsing for Subversion command lines
> + *        (common implementation)
> + */
> +
> +/* NOTE:
> + * This file *must not* include or depend on any other header except
> + * the C standard library headers.
> + */

Could the comment also explain the rationale for the restriction it imposes?

> +
> +#ifndef SVN_OPT_IMPL_H
> +#define SVN_OPT_IMPL_H
> +
> +#ifdef __cplusplus
> +extern "C" {
> +#endif /* __cplusplus */

Cheers,

Daniel

Re: svn commit: r1850344 - in /subversion/trunk/subversion: bindings/cxx/include/svnxx/ bindings/cxx/src/ include/

Posted by Daniel Shahaf <d....@daniel.shahaf.name>.
brane@apache.org wrote on Fri, 04 Jan 2019 10:38 +0000:
> Move (some of the) standalone types into separate implementation headers
> so that SVN++ can use them directly without exposing APR or other dependencies.

> +++ subversion/trunk/subversion/include/svn_opt_impl.h Fri Jan  4 
> 10:38:53 2019
> @@ -0,0 +1,83 @@
> + * @file svn_opt.h
> + * @brief Option and argument parsing for Subversion command lines
> + *        (common implementation)
> + */
> +
> +/* NOTE:
> + * This file *must not* include or depend on any other header except
> + * the C standard library headers.
> + */

Could the comment also explain the rationale for the restriction it imposes?

> +
> +#ifndef SVN_OPT_IMPL_H
> +#define SVN_OPT_IMPL_H
> +
> +#ifdef __cplusplus
> +extern "C" {
> +#endif /* __cplusplus */

Cheers,

Daniel