Paul Burba <ptburba_at_gmail.com> writes:
> Those 'if (merge_b->record_only)' early exits were added in r880264
> which implemented the change that allows --record-only merges to apply
> only svn:mergeinfo diffs, see
> http://svn.haxx.se/dev/archive-2009-09/0520.shtml.
Yes, I'd already found that from the log message on the revision that
introduced the change. In that email the double carets, ^^, are
single carets for Subversion escaped for the windows shell, is that
correct?
> You are correct about the the comment 'We are only applying mergeinfo
> changes to existing paths', as regards merge_dir_added (and
> merge_file_added); since we are applying only mergeinfo diffs we do
> not want to actually add any files/dirs. Unfortunately I used the
> same comment for merge_file_changed, merge_file_deleted, and
> merge_dir_deleted, which is quite wrong. The comment should
> universally be changed to:
>
> /* Easy out: We are only applying mergeinfo differences. */
>
> Is that any clearer?
I've been thinking about it a bit more, let's see if I've got this
right. Merge is an URL-to-URL diff that gets applied to the working
copy, followed by some property modifications to record the merge. (I
say "followed by" although there is no requirement for them to be
sequential, they are done in parallel.) The URL-to-URL diff consists
of adds, updates and deletes and these form a conceptually different
set of modifications to the subsequent modifications that record the
merge. The URL-to-URL diff might even transfer some svn:mergeinfo
properties from the merge source to working copy but that is still
separate from the subsequent modifications to record the merge.
When it comes to recording the merge, there will never be any need to
set or modify the svn:mergeinfo property on any path that is added or
deleted by the merge. Merge information only ever needs to be
recorded in paths exist both before and after the URL-to-URL diff. So
in the editor callbacks for added or deleted items we know that no
merge recording needs to be done below the item.
Is that correct?
Another thing I've noticed is that merge doesn't produce notifications
when it is modifying svn:mergeinfo. I suppose that was a deliberate
decision to make merge tracking less obtrusive, but it does mean that
--record-only merges are alarmingly silent:
rm -rf repo wc
svnadmin create repo
svn mkdir -mm file://`pwd`/repo/T
svn mkdir -mm file://`pwd`/repo/T/foo
svn cp -r1 -mm file://`pwd`/repo/T file://`pwd`/repo/B
svn co file://`pwd`/repo/B wc
svn merge ^/T wc
svn pd svn:mergeinfo wc
svn merge --record-only ^/T wc
The --record-only merge produces no notifications at all. I need to
check status before and after to determine whether it did anything at
all. Perhaps --record-only merges should produce notification for
each directory where the svn:mergeinfo gets modified?
--
Philip
------------------------------------------------------
http://subversion.tigris.org/ds/viewMessage.do?dsForumId=462&dsMessageId=2425826
Please start new threads on the <dev_at_subversion.apache.org> mailing list.
To subscribe to the new list, send an empty e-mail to <dev-subscribe_at_subversion.apache.org>.
Received on 2009-12-01 11:17:19 CET