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

RE: RE: Possible Merge Tracking TODO: No notification of merges on children with mergeinfo unaffected by the merge

From: Paul Burba <pburba_at_collab.net>
Date: 2007-03-29 14:32:21 CEST

> -----Original Message-----
> From: Paul Burba [mailto:pburba@collab.net]
> Sent: Wednesday, March 28, 2007 12:45 PM
> To: Daniel Rall
> Cc: Subversion Development; Kamesh Jayachandran; Peter N. Lundblad
> Subject: RE: Possible Merge Tracking TODO: No notification of
> merges on children with mergeinfo unaffected by the merge
>
> > -----Original Message-----
> > From: Daniel Rall [mailto:dlr@collab.net]
> > Sent: Tuesday, March 27, 2007 2:55 PM
> > To: Paul Burba
> > Cc: Subversion Development; Kamesh Jayachandran; Peter N. Lundblad
> > Subject: Re: Possible Merge Tracking TODO: No notification
> of merges
> > on children with mergeinfo unaffected by the merge
> >
> > On Tue, 27 Mar 2007, Daniel Rall wrote:
> >
> > > On Tue, 27 Mar 2007, Paul Burba wrote:
>
> <snip>
>
> > > > 7) Now repeat the first merge we performed,
> > > > the mergeinfo is set correctly, but we get
> > > > a notification that rho is mer'G'ed which
> > > > isn't true since r3 doesn't affect rho.
> > > > ------------------------------------------
> > > > >svn merge %URL%/A/D/G merge_tests-1\A\D_COPY\G -c3
> > > > G merge_tests-1\A\D_COPY\G\rho
> > > >
> > > > >svn pl -vR merge_tests-1
> > > > Properties on 'merge_tests-1\A\D_COPY':
> > > > svn:mergeinfo : /A/D:1
> > > > Properties on 'merge_tests-1\A\D_COPY\G':
> > > > svn:mergeinfo : /A/D/G:1,3
> > > > Properties on 'merge_tests-1\A\D_COPY\G\rho':
> > > > svn:mergeinfo : /A/D/G/rho:1,3-4
> > > >
> > > > Note: If the target child is a directory the 'G' notification
> > > > doesn't occur.
> > > >
> > > > So, should the notification in 7) not occur? If so I'll
> > add this to
> > > > the "Handle notifications resulting from a merge." section in
> > > > http://svn.collab.net/repos/svn/trunk/notes/merge-tracking.txt
> > > > and/or look into a fix.
> > >
> > > Paul, the notification from step #7 shouldn't occur. I'd
> hazard a
> > > guess that the notification is related to the way handling for
> > > sub-tree merge info performs a separate editor drive for
> > children of
> > > the target of a merge which have their own merge info, likely in
> > > conjunction with the fact that this is a single file.
> >
> > From reading the code, this seems to be it.
> >
> > > Usage of the "text_state" local variable in
> > > libsvn_client/merge.c:do_single_file_merge(), where we explicitly
> > > invoke notification_receiver(), seems interesting.
> > ...
> >
> > do_single_file_merge() calls merge_file_changed(), which sets
> > text_state. merge_file_changed() in turn calls
> > svn_wc_text_modified_p() to detect whether the target WC
> path has any
> > local mods. The local mods from the merge in step #6 are detected,
> > and the notification is set accordingly:
> >
> > else if (has_local_mods)
> > *content_state = svn_wc_notify_state_merged;
>
> Looking at merge_file_changed() I wonder about Philip's old (from
> r12025) comment at the end of the callback:
>
> /* Philip asks "Why?" Why does the notification depend
> on whether the
> file had modifications before the merge? If the
> merge didn't change
> the file because the local mods already included the
> change why does
> that result it "merged" notification? That's
> information available
> through the status command, while the fact that the
> merge didn't
> change the file is lost :-( */
>
> if (content_state)
> {
> if (merge_outcome == svn_wc_merge_conflict)
> *content_state = svn_wc_notify_state_conflicted;
> else if (has_local_mods)
> *content_state = svn_wc_notify_state_merged;
> else if (merge_outcome == svn_wc_merge_merged)
> *content_state = svn_wc_notify_state_changed;
> else if (merge_outcome == svn_wc_merge_no_merge)
> *content_state = svn_wc_notify_state_missing;
> else /* merge_outcome == svn_wc_merge_unchanged */
> *content_state = svn_wc_notify_state_unchanged;
> }
>
> Any ideas on why we do this? I couldn't see why except the obvious:
> that we want to report paths as merged even if the local
> changes and the merge diff are identical. With
> merge-tracking there seems even less reason to do this since
> the svn:mergeinfo on 'rho' shows that r3 was merged into it.
>
> Simply changing...
>
> - else if (has_local_mods)
> + else if (has_local_mods
> + && merge_outcome != svn_wc_merge_unchanged)
>
> ...would solve the problem (though it results in a spurious failure in
> merge_test-1 and maybe elsewhere, I haven't checked the other
> tests yet).

A quick update:

Merge_test-42 obey_reporter_api_semantics_while_doing_subtree_merges
also fails, somehow I missed this the first time around. This is as
expected because the above "patch" doesn't report the numerous
'svn_wc_merge_unchanged' merges performed in the final merge of that
test.

All other tests pass over ra_local.

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@subversion.tigris.org
For additional commands, e-mail: dev-help@subversion.tigris.org
Received on Thu Mar 29 14:32:47 2007

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