[svn.haxx.se] · SVN Dev · SVN Users · SVN Org · TSVN Dev · TSVN Users · Subclipse Dev · Subclipse Users · this month's index

Re: svn commit: r1161219 - Auto-resolve 'local move vs. incoming edit'

From: Stefan Sperling <stsp_at_elego.de>
Date: Mon, 29 Aug 2011 13:27:30 +0200

On Fri, Aug 26, 2011 at 05:27:16PM +0100, Julian Foad wrote:
> I (Julian Foad) wrote:
> > I was just cleaning up this editor, stripping out this "target" path
> > completely, so that it would simply pass relative paths out to the diff
> > callbacks and to the notification functions. The merge code knows what
> > WC path this diff relates to, and so can add the prefix itself inside
> > its callbacks. That will keep the knowledge about the WC completely
> > separate from the repos-diff editor, which is a good thing.
> [...]
>
> Attached is my patch in progress to strip WC path info from the
> repos-repos diff editor.

I agree with your layering concerns.
There is one point I am not sure about. You haven't explained
how you want to address the following:

> @@ -1110,30 +1095,9 @@ close_file(void *file_baton,
> else if (b->added)
> action = svn_wc_notify_update_add;
> else
> - {
> - svn_error_t *err;
> -
> - action = svn_wc_notify_update_update;
> -
> - /* If the file was moved-away, use its new path in the
> - * notification.
> - * ### This is redundant. The file_changed() callback should
> - * ### pass the moved-to path back up here. */
> - err = svn_wc__node_was_moved_away(&moved_to_abspath, NULL,
> - eb->wc_ctx, b->wcpath,
> - scratch_pool, scratch_pool);
> - if (err)
> - {
> - if (err->apr_err == SVN_ERR_WC_PATH_NOT_FOUND)
> - svn_error_clear(err);
> - else
> - return svn_error_trace(err);
> - }
> - }
> + action = svn_wc_notify_update_update;
>
> - notify = svn_wc_create_notify(moved_to_abspath ? moved_to_abspath
> - : b->wcpath,
> - action, scratch_pool);
> + notify = svn_wc_create_notify(b->path, action, scratch_pool);

You cannot just use b->path here. There is a chicken-and-egg problem.

If the node was moved locally, this layer doesn't know about the new
location of the node, unless it runs svn_wc__node_was_moved_away()

I agree that calling it here is bad layering.
But I think notifications should show the new paths.

b->path is the old location of the node.
The layer which modifies the WC already knows about the new path
but it does not perform notification.

As I wrote in the comment your patch removes, it would be good to pass
the proper path up to layer which performs the notifications.
This would imply a change in the editor interface.
(It is becoming very apparent now that editor v1 was not designed
with moves in mind...)
Received on 2011-08-29 13:28:14 CEST

This is an archived mail posted to the Subversion Dev mailing list.