Uploaded image for project: 'Subversion'
  1. Subversion
  2. SVN-3199

Subtree merges broken when required ranges don't intersect with merge target

    XMLWordPrintableJSON

Details

    Description

      While working on issue #3067 I noticed that our merge algorithm breaks if a
      merge target and its subtree require non-intersecting ranges to be merged.  This
      occurs for both forward and reverse merges.
      
      For example, say we have this working copy (I'll attach the dump file for this
      sampe repos in a moment)
      
      >svn st -v wc
                     11       11 pburba       wc
                     11        7 pburba       wc\A
                     11        5 jrandom      wc\A\B
                     11        1 jrandom      wc\A\B\lambda
                     11        5 jrandom      wc\A\B\E
                     11        1 jrandom      wc\A\B\E\alpha
                     11        5 jrandom      wc\A\B\E\beta
                     11        1 jrandom      wc\A\B\F
                     11        1 jrandom      wc\A\mu
                     11        1 jrandom      wc\A\C
                     11        7 pburba       wc\A\D
                     11        7 pburba       wc\A\D\gamma
                     11        4 jrandom      wc\A\D\G
                     11        1 jrandom      wc\A\D\G\pi
                     11        4 jrandom      wc\A\D\G\rho
                     11        1 jrandom      wc\A\D\G\tau
                     11        7 pburba       wc\A\D\H
                     11        1 jrandom      wc\A\D\H\chi
                     11        6 jrandom      wc\A\D\H\omega
                     11        7 pburba       wc\A\D\H\psi
                     11        8 pburba       wc\A_COPY
                     11        1 jrandom      wc\A_COPY\B
                     11        1 jrandom      wc\A_COPY\B\lambda
                     11        1 jrandom      wc\A_COPY\B\E
                     11        1 jrandom      wc\A_COPY\B\E\alpha
                     11        1 jrandom      wc\A_COPY\B\E\beta
                     11        1 jrandom      wc\A_COPY\B\F
                     11        1 jrandom      wc\A_COPY\mu
                     11        1 jrandom      wc\A_COPY\C
                     11        8 pburba       wc\A_COPY\D
                     11        8 pburba       wc\A_COPY\D\gamma
                     11        1 jrandom      wc\A_COPY\D\G
                     11        1 jrandom      wc\A_COPY\D\G\pi
                     11        1 jrandom      wc\A_COPY\D\G\rho
                     11        1 jrandom      wc\A_COPY\D\G\tau
                     11        8 pburba       wc\A_COPY\D\H
                     11        1 jrandom      wc\A_COPY\D\H\chi
                     11        1 jrandom      wc\A_COPY\D\H\omega
                     11        8 pburba       wc\A_COPY\D\H\psi
                     11       11 pburba       wc\A_COPY_2
                     11       11 pburba       wc\A_COPY_2\B
                     11        1 jrandom      wc\A_COPY_2\B\lambda
                     11       11 pburba       wc\A_COPY_2\B\E
                     11        1 jrandom      wc\A_COPY_2\B\E\alpha
                     11       11 pburba       wc\A_COPY_2\B\E\beta
                     11        1 jrandom      wc\A_COPY_2\B\F
                     11        1 jrandom      wc\A_COPY_2\mu
                     11        1 jrandom      wc\A_COPY_2\C
                     11       11 pburba       wc\A_COPY_2\D
                     11       10 pburba       wc\A_COPY_2\D\gamma
                     11       10 pburba       wc\A_COPY_2\D\G
                     11        1 jrandom      wc\A_COPY_2\D\G\pi
                     11       10 pburba       wc\A_COPY_2\D\G\rho
                     11        1 jrandom      wc\A_COPY_2\D\G\tau
                     11       11 pburba       wc\A_COPY_2\D\H
                     11        1 jrandom      wc\A_COPY_2\D\H\chi
                     11       10 pburba       wc\A_COPY_2\D\H\omega
                     11       11 pburba       wc\A_COPY_2\D\H\psi
                     11        1 jrandom      wc\iota
      
      >svn log -g -v -r1:HEAD wc
      ------------------------------------------------------------------------
      r1 | jrandom | 2008-05-16 12:58:52 -0400 (Fri, 16 May 2008) | 1 line
      Changed paths:
         A /A
         A /A/B
         A /A/B/E
         A /A/B/E/alpha
         A /A/B/E/beta
         A /A/B/F
         A /A/B/lambda
         A /A/C
         A /A/D
         A /A/D/G
         A /A/D/G/pi
         A /A/D/G/rho
         A /A/D/G/tau
         A /A/D/H
         A /A/D/H/chi
         A /A/D/H/omega
         A /A/D/H/psi
         A /A/D/gamma
         A /A/mu
         A /iota
      
      Log message for revision 1.
      ------------------------------------------------------------------------
      r2 | jrandom | 2008-05-16 12:59:07 -0400 (Fri, 16 May 2008) | 1 line
      Changed paths:
         A /A_COPY (from /A:1)
      
      log msg
      ------------------------------------------------------------------------
      r3 | jrandom | 2008-05-16 12:59:10 -0400 (Fri, 16 May 2008) | 1 line
      Changed paths:
         M /A/D/H/psi
      
      log msg
      ------------------------------------------------------------------------
      r4 | jrandom | 2008-05-16 12:59:12 -0400 (Fri, 16 May 2008) | 1 line
      Changed paths:
         M /A/D/G/rho
      
      log msg
      ------------------------------------------------------------------------
      r5 | jrandom | 2008-05-16 12:59:14 -0400 (Fri, 16 May 2008) | 1 line
      Changed paths:
         M /A/B/E/beta
      
      log msg
      ------------------------------------------------------------------------
      r6 | jrandom | 2008-05-16 12:59:16 -0400 (Fri, 16 May 2008) | 1 line
      Changed paths:
         M /A/D/H/omega
      
      log msg
      ------------------------------------------------------------------------
      r7 | pburba | 2008-05-16 13:01:06 -0400 (Fri, 16 May 2008) | 1 line
      Changed paths:
         M /A/D/H/psi
         M /A/D/gamma
      
      
      ------------------------------------------------------------------------
      r8 | pburba | 2008-05-16 13:08:10 -0400 (Fri, 16 May 2008) | 1 line
      Changed paths:
         M /A_COPY
         M /A_COPY/D/H/psi
         M /A_COPY/D/gamma
      
      
      ------------------------------------------------------------------------
      r7 | pburba | 2008-05-16 13:01:06 -0400 (Fri, 16 May 2008) | 1 line
      Changed paths:
         M /A/D/H/psi
         M /A/D/gamma
      Merged via: r8
      
      
      ------------------------------------------------------------------------
      r3 | jrandom | 2008-05-16 12:59:10 -0400 (Fri, 16 May 2008) | 1 line
      Changed paths:
         M /A/D/H/psi
      Merged via: r8
      
      log msg
      ------------------------------------------------------------------------
      r9 | pburba | 2008-05-16 13:13:56 -0400 (Fri, 16 May 2008) | 1 line
      Changed paths:
         A /A_COPY_2 (from /A:2)
      
      
      ------------------------------------------------------------------------
      r10 | pburba | 2008-05-16 13:14:36 -0400 (Fri, 16 May 2008) | 1 line
      Changed paths:
         M /A_COPY_2
         M /A_COPY_2/B/E/beta
         M /A_COPY_2/D/G/rho
         M /A_COPY_2/D/H/omega
         M /A_COPY_2/D/H/psi
         M /A_COPY_2/D/gamma
      
      
      ------------------------------------------------------------------------
      r6 | jrandom | 2008-05-16 12:59:16 -0400 (Fri, 16 May 2008) | 1 line
      Changed paths:
         M /A/D/H/omega
      Merged via: r10
      
      log msg
      ------------------------------------------------------------------------
      r5 | jrandom | 2008-05-16 12:59:14 -0400 (Fri, 16 May 2008) | 1 line
      Changed paths:
         M /A/B/E/beta
      Merged via: r10
      
      log msg
      ------------------------------------------------------------------------
      r4 | jrandom | 2008-05-16 12:59:12 -0400 (Fri, 16 May 2008) | 1 line
      Changed paths:
         M /A/D/G/rho
      Merged via: r10
      
      log msg
      ------------------------------------------------------------------------
      r3 | jrandom | 2008-05-16 12:59:10 -0400 (Fri, 16 May 2008) | 1 line
      Changed paths:
         M /A/D/H/psi
      Merged via: r10
      
      log msg
      ------------------------------------------------------------------------
      r11 | pburba | 2008-05-16 13:15:52 -0400 (Fri, 16 May 2008) | 1 line
      Changed paths:
         M /A_COPY_2
         M /A_COPY_2/B/E/beta
         M /A_COPY_2/D/H/psi
      
      
      ------------------------------------------------------------------------
      r5 | jrandom | 2008-05-16 12:59:14 -0400 (Fri, 16 May 2008) | 1 line
      Changed paths:
         M /A/B/E/beta
      Merged via: r11
      
      log msg
      ------------------------------------------------------------------------
      
      >svn pl -vR wc
      Properties on 'wc\A_COPY':
        svn:mergeinfo : /A:7
      Properties on 'wc\A_COPY\D\H\psi':
        svn:mergeinfo : /A/D/H/psi:3
      Properties on 'wc\A_COPY_2':
        svn:mergeinfo : /A:3-4,6-9
      Properties on 'wc\A_COPY_2\D\H\psi':
        svn:mergeinfo : /A/D/H/psi:3-6,8-9
      
      If we merge all eligible revisions to 'A_COPY_2' then r5 should be merged into
      'A_COPY_2' (updating 'A_COPY_2/B/E/beta') and r7 should be merged into
      'A_COPY_2/D/H/psi', but only r5 is merged:
      
      >svn merge %url%/A wc\A_COPY_2
      --- Merging r5 into 'wc\A_COPY_2':
      U    wc\A_COPY_2\B\E\beta
      
      >svn st wc
       M     wc\A_COPY_2
      M      wc\A_COPY_2\B\E\beta
       M     wc\A_COPY_2\D\H\psi
      
      >svn pl -vR wc
      Properties on 'wc\A_COPY':
        svn:mergeinfo : /A:7
      Properties on 'wc\A_COPY\D\H\psi':
        svn:mergeinfo : /A/D/H/psi:3
      Properties on 'wc\A_COPY_2':
        svn:mergeinfo : /A:3-11
      
      Likewise, if we reverse merge -r11:2 into 'A_COPY' r7 should be reverse merged
      out of 'A_COPY" (updating 'A_COPY/D/gamma') and r3 should be reverse merged out
      of 'A_COPY/D/H/psi', but only r7 is reverse merged:
      
      >svn merge %url%/A wc\A_COPY -r11:2
      --- Reverse-merging r7 into 'wc\A_COPY':
      U    wc\A_COPY\D\gamma
      
      >svn st wc\A_COPY_2
       M     wc\A_COPY_2
      M      wc\A_COPY_2\B\E\beta
       M     wc\A_COPY_2\D\H\psi
      
      >svn pl -vR wc
      Properties on 'wc\A_COPY_2':
        svn:mergeinfo : /A:3-11
      

      Attachments

        Issue Links

          Activity

            People

              Unassigned Unassigned
              pburba Paul Burba
              Votes:
              0 Vote for this issue
              Watchers:
              0 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: