You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by hw...@apache.org on 2011/10/18 23:56:34 UTC

svn commit: r1185896 - /subversion/trunk/subversion/libsvn_delta/compat.c

Author: hwright
Date: Tue Oct 18 21:56:34 2011
New Revision: 1185896

URL: http://svn.apache.org/viewvc?rev=1185896&view=rev
Log:
More work on the Ev2 shims: rename a few variables and types, and drive
the add_directory and add_file delta editor callbacks.

* subversion/libsvn_delta/compat.c
  (ev2_add_directory, ev2_add_file): Update to svn_kind_t values.
  (operation): Rename a couple of members.
  (get_operation, build, svn_editor_from_delta): Update struct member names.
  (add_file_cb): Implement.
  (drive): Handle the ADD operation.

Modified:
    subversion/trunk/subversion/libsvn_delta/compat.c

Modified: subversion/trunk/subversion/libsvn_delta/compat.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_delta/compat.c?rev=1185896&r1=1185895&r2=1185896&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_delta/compat.c (original)
+++ subversion/trunk/subversion/libsvn_delta/compat.c Tue Oct 18 21:56:34 2011
@@ -290,7 +290,7 @@ ev2_add_directory(const char *path,
   svn_kind_t *kind;
 
   kind = apr_palloc(pb->eb->edit_pool, sizeof(*kind));
-  *kind = svn_node_dir;
+  *kind = svn_kind_dir;
   SVN_ERR(add_action(pb->eb, path, ACTION_ADD, kind));
 
   cb->eb = pb->eb;
@@ -369,7 +369,7 @@ ev2_add_file(const char *path,
   *file_baton = fb;
 
   kind = apr_palloc(pb->eb->edit_pool, sizeof(*kind));
-  *kind = svn_node_file;
+  *kind = svn_kind_file;
   SVN_ERR(add_action(pb->eb, path, ACTION_ADD, kind));
 
   return SVN_NO_ERROR;
@@ -548,8 +548,8 @@ struct operation {
                             props */
   } operation;
   svn_kind_t kind;  /* to copy, mkdir, put or set revprops */
-  svn_revnum_t rev;      /* to copy, valid for add and replace */
-  const char *url;       /* to copy, valid for add and replace */
+  svn_revnum_t copyfrom_revision;      /* to copy, valid for add and replace */
+  const char *copyfrom_url;       /* to copy, valid for add and replace */
   const char *src_file;  /* for put, the source file for contents */
   apr_hash_t *children;  /* const char *path -> struct operation * */
   apr_hash_t *props;     /* const char *prop_name ->
@@ -587,8 +587,8 @@ get_operation(const char *path,
       child = apr_pcalloc(result_pool, sizeof(*child));
       child->children = apr_hash_make(result_pool);
       child->operation = OP_OPEN;
-      child->rev = SVN_INVALID_REVNUM;
-      child->kind = svn_node_dir;
+      child->copyfrom_revision = SVN_INVALID_REVNUM;
+      child->kind = svn_kind_dir;
       child->props = NULL;
       apr_hash_set(operation->children, apr_pstrdup(result_pool, path),
                    APR_HASH_KEY_STRING, child);
@@ -653,13 +653,13 @@ build(struct editor_baton *eb,
       if (! ((operation->operation == OP_ADD) ||
              (operation->operation == OP_REPLACE)))
         {
-          if ((operation->kind == svn_node_file)
+          if ((operation->kind == svn_kind_file)
                    && (operation->operation == OP_OPEN))
             operation->operation = OP_PROPSET;
         }
       operation->props = svn_prop_hash_dup(props, eb->edit_pool);
-      if (!operation->rev)
-        operation->rev = rev;
+      if (!operation->copyfrom_revision)
+        operation->copyfrom_revision = rev;
       return SVN_NO_ERROR;
     }
 
@@ -674,15 +674,15 @@ build(struct editor_baton *eb,
 
       SVN_ERR(eb->fetch_kind_func(&operation->kind, eb->fetch_kind_baton,
                                   relpath, scratch_pool));
-      operation->url = url;
-      operation->rev = rev;
+      operation->copyfrom_url = url;
+      operation->copyfrom_revision = rev;
     }
   /* Handle mkdir operations (which can be adds or replacements). */
   else if (action == ACTION_MKDIR)
     {
       operation->operation =
         operation->operation == OP_DELETE ? OP_REPLACE : OP_ADD;
-      operation->kind = svn_node_dir;
+      operation->kind = svn_kind_dir;
     }
   /* Handle put operations (which can be adds, replacements, or opens). */
   else if (action == ACTION_PUT)
@@ -695,15 +695,15 @@ build(struct editor_baton *eb,
         {
           SVN_ERR(eb->fetch_kind_func(&operation->kind, eb->fetch_kind_baton,
                                       relpath, scratch_pool));
-          if (operation->kind == svn_node_file)
+          if (operation->kind == svn_kind_file)
             operation->operation = OP_OPEN;
-          else if (operation->kind == svn_node_none)
+          else if (operation->kind == svn_kind_none)
             operation->operation = OP_ADD;
           else
             return svn_error_createf(SVN_ERR_BAD_URL, NULL,
                                      "'%s' is not a file", relpath);
         }
-      operation->kind = svn_node_file;
+      operation->kind = svn_kind_file;
       operation->src_file = src_file;
     }
   else
@@ -742,6 +742,11 @@ add_file_cb(void *baton,
             svn_revnum_t replaces_rev,
             apr_pool_t *scratch_pool)
 {
+  struct editor_baton *eb = baton;
+
+  SVN_ERR(build(eb, ACTION_PUT, relpath, NULL, SVN_INVALID_REVNUM,
+                NULL, NULL, SVN_INVALID_REVNUM, scratch_pool));
+
   return SVN_NO_ERROR;
 }
 
@@ -853,12 +858,30 @@ drive(const struct operation *operation,
   for (hi = apr_hash_first(scratch_pool, operation->children);
        hi; hi = apr_hash_next(hi))
     {
-      const struct operation *child;
+      struct operation *child;
+      const char *path;
+      void *file_baton = NULL;
 
       svn_pool_clear(iterpool);
       child = svn__apr_hash_index_val(hi);
+      path = svn__apr_hash_index_key(hi);
+
+      if (child->operation == OP_ADD)
+        {
+          if (child->kind == svn_kind_dir)
+            SVN_ERR(editor->add_directory(path, operation->baton,
+                                          child->copyfrom_url,
+                                          child->copyfrom_revision,
+                                          iterpool, &child->baton));
+          else
+            SVN_ERR(editor->add_file(path, operation->baton,
+                                     child->copyfrom_url,
+                                     child->copyfrom_revision, iterpool,
+                                     &file_baton));
+        }
 
-      if (operation->kind == svn_node_dir)
+      /*SVN_DBG(("child: '%s'; operation: %d\n", path, child->operation));*/
+      if (child->kind == svn_kind_dir)
         SVN_ERR(drive(child, editor, iterpool));
     }
 
@@ -926,10 +949,10 @@ svn_editor_from_delta(svn_editor_t **edi
   eb->fetch_kind_baton = fetch_kind_baton;
 
   eb->root.children = apr_hash_make(result_pool);
-  eb->root.kind = svn_node_dir;
+  eb->root.kind = svn_kind_dir;
   eb->root.operation = OP_OPEN;
   eb->root.props = NULL;
-  eb->root.rev = SVN_INVALID_REVNUM;
+  eb->root.copyfrom_revision = SVN_INVALID_REVNUM;
 
   SVN_ERR(svn_editor_create(&editor, eb, cancel_func, cancel_baton,
                             result_pool, scratch_pool));