You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by ju...@apache.org on 2011/10/11 17:02:17 UTC

svn commit: r1181823 - in /subversion/branches/tree-read-api/subversion/libsvn_client: tree.c tree.h

Author: julianfoad
Date: Tue Oct 11 15:02:17 2011
New Revision: 1181823

URL: http://svn.apache.org/viewvc?rev=1181823&view=rev
Log:
On the 'tree-read-api' branch: Add an svn_client__open_tree() function and
implement some more cases of reading the WC base version.

* subversion/libsvn_client/tree.c
  (wc_tree_get_kind, wc_tree_get_dir): Implement the cases that read the
    base version, using the new WC functions added in r1181819.
  (svn_client__open_tree): New function.

* subversion/libsvn_client/tree.h
  (svn_client__open_tree): New function.

Modified:
    subversion/branches/tree-read-api/subversion/libsvn_client/tree.c
    subversion/branches/tree-read-api/subversion/libsvn_client/tree.h

Modified: subversion/branches/tree-read-api/subversion/libsvn_client/tree.c
URL: http://svn.apache.org/viewvc/subversion/branches/tree-read-api/subversion/libsvn_client/tree.c?rev=1181823&r1=1181822&r2=1181823&view=diff
==============================================================================
--- subversion/branches/tree-read-api/subversion/libsvn_client/tree.c (original)
+++ subversion/branches/tree-read-api/subversion/libsvn_client/tree.c Tue Oct 11 15:02:17 2011
@@ -22,6 +22,7 @@
  */
 
 #include "svn_dirent_uri.h"
+#include "svn_path.h"
 #include "client.h"
 #include "tree.h"
 #include "private/svn_wc_private.h"
@@ -256,9 +257,8 @@ wc_tree_get_kind(svn_client_tree_t *tree
 
   if (baton->is_base)
     {
-      /* ### svn_wc_read_base_kind()? */
-      SVN_ERR(svn_wc_read_kind2(kind, baton->wc_ctx, abspath,
-                                FALSE /* show_hidden */, scratch_pool));
+      SVN_ERR(svn_wc_read_base_kind(kind, baton->wc_ctx, abspath,
+                                    FALSE /* show_hidden */, scratch_pool));
     }
   else
     SVN_ERR(svn_wc_read_kind2(kind, baton->wc_ctx, abspath,
@@ -316,15 +316,19 @@ wc_tree_get_dir(svn_client_tree_t *tree,
 
   if (dirents)
     {
-      /* if (baton->is_base) { ### ... } else */
-
       const apr_array_header_t *children;
       int i;
 
       *dirents = apr_hash_make(result_pool);
-      SVN_ERR(svn_wc__node_get_children_of_working_node(
-                &children, baton->wc_ctx, abspath, FALSE /* show_hidden */,
-                result_pool, scratch_pool));
+
+      if (baton->is_base)
+        SVN_ERR(svn_wc__base_get_children(
+                  &children, baton->wc_ctx, abspath, FALSE /* show_hidden */,
+                  result_pool, scratch_pool));
+      else
+        SVN_ERR(svn_wc__node_get_children_of_working_node(
+                  &children, baton->wc_ctx, abspath, FALSE /* show_hidden */,
+                  result_pool, scratch_pool));
       for (i = 0; i < children->nelts; i++)
         {
           const char *child_abspath = APR_ARRAY_IDX(children, i, const char *);
@@ -590,3 +594,43 @@ svn_client__repository_tree(svn_client_t
 }
 
 /*-----------------------------------------------------------------*/
+
+svn_error_t *
+svn_client__open_tree(svn_client_tree_t **tree,
+                      const char *path,
+                      const svn_opt_revision_t *revision,
+                      const svn_opt_revision_t *peg_revision,
+                      svn_client_ctx_t *ctx,
+                      apr_pool_t *result_pool,
+                      apr_pool_t *scratch_pool)
+{
+  SVN_ERR_ASSERT(revision->kind != svn_opt_revision_unspecified);
+
+  if (svn_path_is_url(path)
+      || ! SVN_CLIENT__REVKIND_IS_LOCAL_TO_WC(revision->kind))
+    {
+      SVN_ERR(svn_client__repository_tree(tree, path, peg_revision, revision,
+                                          ctx, result_pool));
+    }
+  else
+    {
+      const char *abspath;
+      int wc_format;
+
+      SVN_ERR(svn_dirent_get_absolute(&abspath, path, scratch_pool));
+      SVN_ERR(svn_wc_check_wc2(&wc_format, ctx->wc_ctx, abspath, scratch_pool));
+      if (wc_format > 0)
+        {
+          if (revision->kind == svn_opt_revision_working)
+            SVN_ERR(svn_client__wc_working_tree(tree, abspath, ctx,
+                                                result_pool));
+          else
+            SVN_ERR(svn_client__wc_base_tree(tree, abspath, ctx, result_pool));
+        }
+      else
+        SVN_ERR(svn_client__disk_tree(tree, abspath, result_pool));
+    }
+
+  return SVN_NO_ERROR;
+}
+

Modified: subversion/branches/tree-read-api/subversion/libsvn_client/tree.h
URL: http://svn.apache.org/viewvc/subversion/branches/tree-read-api/subversion/libsvn_client/tree.h?rev=1181823&r1=1181822&r2=1181823&view=diff
==============================================================================
--- subversion/branches/tree-read-api/subversion/libsvn_client/tree.h (original)
+++ subversion/branches/tree-read-api/subversion/libsvn_client/tree.h Tue Oct 11 15:02:17 2011
@@ -173,6 +173,16 @@ svn_client__repository_tree(svn_client_t
                             svn_client_ctx_t *ctx,
                             apr_pool_t *result_pool);
 
+/* Open a tree, whether in the repository or a WC or unversioned on disk. */
+svn_error_t *
+svn_client__open_tree(svn_client_tree_t **tree,
+                      const char *path,
+                      const svn_opt_revision_t *revision,
+                      const svn_opt_revision_t *peg_revision,
+                      svn_client_ctx_t *ctx,
+                      apr_pool_t *result_pool,
+                      apr_pool_t *scratch_pool);
+
 
 #ifdef	__cplusplus
 }