On Mon, Jan 25, 2010 at 9:30 AM, Julian Foad <julian.f...@wandisco.com> wrote:
> The notification "Merging ... r891676 through ..." doesn't match the
> actual recorded svn:mergeinfo "r891677-...".
>
> Full Details
>
> I tried a merge in a clean WC of the branch 1....@902803, using an
> r902780M trunk build of svn. (I confirmed with an r902508 trunk build
> that excludes the recent patch to add notifications when mergeinfo is
> being recorded. The results are the same except lacking the extra
> notifications.)
>
> [[[
> $ svn merge --dry-run ^/subversion/branches/1.6.x-r891672/@902803
> --- Merging r891676 through r902803 into '.':
> U    subversion/tests/cmdline/externals_tests.py
> U    subversion/libsvn_client/commit_util.c
>
> $ svn merge ^/subversion/branches/1.6.x-r891672/@902803
> --- Merging r891676 through r902803 into '.':
> U    subversion/tests/cmdline/externals_tests.py
> U    subversion/libsvn_client/commit_util.c
> --- Recording mergeinfo for merge of r891676 through r902803 into '.':
>  U   .
>
> $ svn diff -N
>
> Property changes on: .
> ___________________________________________________________________
> Modified: svn:mergeinfo
>   Merged /subversion/branches/1.6.x-r891672:r891677-902803
> ]]]
>
> Is that difference in the start revision of the range expected? (The
> merge saying it's recording "r891676 through ..." versus diff showing
> that ":r891677-..." was recorded. And a propget confirms the diff.)
>
> - Julian

Hi Julian,

(First, a 1000 thanks for running merges with trunk code!  We need more of that)

So here is what we have:

---1....@891675---------------------------@902803---------------------->
        |                                    ^
    copied to                           merge back
        |                                    |
        V                                    |
   1.6.x-r891...@891677-------------------@902803---------------------->


When we attempt to merge 1.6.x-r891...@902803 to 1....@891675, we are
effectively merging the difference between

  ^/subversion/branches/1....@891675

and

  ^/subversion/branches/1.6.x-r891...@902803

into our 1....@902803 working copy.  Since the "M-N" and "M through N"
format for merge ranges is inclusive (unlike M:N) we see the
notifications "r891676 through r902803".

Anyway, we perform the merge and then proceed to record mergeinfo on
the working copy that describes what we just did, which based on the
merge would be the addition of this mergeinfo:

  /subversion/branches/1.6.x:891676-891677
  /subversion/branches/1.6.x-r891672:891677-902803

But /subversion/branches/1.6.x:891676 describes the working copies own
history, i.e. is is redundant/self-referential.  This self-referential
mergeinfo is not filtered out before we record the mergeinfo descrbing
the merge.  This is handled in
libsvn_client/merge.c:filter_natural_history_from_mergeinfo and is
part of the fix for
http://subversion.tigris.org/issues/show_bug.cgi?id=3157.

Optimally we should reflect this filtering in the notifications, but
things get a "bit" more complicated when we are dealing with subtrees
and I'm uncertain how easy this fix will prove.

Paul

Reply via email to