On Wed, Sep 7, 2011 at 10:52 PM, Daniel Shahaf <d...@daniel.shahaf.name> wrote: > hwri...@apache.org wrote on Wed, Sep 07, 2011 at 19:36:01 -0000: >> @@ -276,6 +345,60 @@ ev2_close_edit(void *edit_baton, >> apr_pool_t *scratch_pool) >> { >> struct ev2_edit_baton *eb = edit_baton; >> + apr_array_header_t *sorted_hash; >> + apr_pool_t *iterpool; >> + int i; >> + >> + /* Sort the paths touched by this edit. >> + * Ev2 doesn't really have any particular need for depth-first-ness, but >> + * we want to ensure all parent directories are handled before children in >> + * the case of adds (which does introduce an element of >> depth-first-ness). */ >> + sorted_hash = svn_sort__hash(eb->paths, svn_sort_compare_items_as_paths, >> + scratch_pool); >> + >> + iterpool = svn_pool_create(scratch_pool); >> + for (i = 0; i < sorted_hash->nelts; i++) >> + { >> + svn_sort__item_t *item = &APR_ARRAY_IDX(sorted_hash, i, >> svn_sort__item_t); >> + apr_array_header_t *actions = item->value; >> + const char *path = item->key; >> + apr_hash_t *props; >> + int j; >> + >> + svn_pool_clear(iterpool); >> + >> + props = apr_hash_make(iterpool); >> + >> + /* Go through all of our actions, populating various datastructures >> + * dependent on them. */ >> + for (j = 0; j < actions->nelts; j++) >> + { >> + struct path_action *action = APR_ARRAY_IDX(actions, j, >> + struct path_action *); >> + >> + switch (action->action) >> + { >> + case set_prop: >> + { >> + struct prop_args *p_args = action->args; >> + >> + apr_hash_set(props, p_args->name, APR_HASH_KEY_STRING, >> + p_args->value); >> + break; >> + } >> + >> + default: >> + break; >> + } >> + } >> + >> + /* We've now got a wholistic view of what has happened to this node, >> + * so we can call our own editor APIs on it. */ >> + if (apr_hash_count(props) > 0) > > What if ACTIONS contains only property deletions?
I *think* I addressed this in subsequent commits, but it did raise a question which I added to svn_editor.h. -Hyrum >> + SVN_ERR(svn_editor_set_props(eb->editor, path, SVN_INVALID_REVNUM, >> + props, TRUE)); >> + } >> + svn_pool_destroy(iterpool); >> >> return svn_error_trace(svn_editor_complete(eb->editor)); >> } > -- uberSVN: Apache Subversion Made Easy http://www.uberSVN.com/