On Wed, Sep 7, 2011 at 10:52 PM, Daniel Shahaf <d.s_at_daniel.shahaf.name> wrote:
> hwright_at_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/
Received on 2011-09-13 22:20:52 CEST