title: SVN 1.8 merge (branch reuse) seems broken when having local mergeinfo
body: <p>We have a problem with the new 1.8 subversion clients (we use TortoiseSVN 1.8.5 &amp; SlikSVN 1.8.5). It seems that the new SVN 1.8 feature of being able to keep using your feature branch after reintegration is not working in some cases.</p>
  
  <p>It is not working when the trunk contains local mergeinfo (Mergeinfo on files or sub-trees). This may cause a problem for branch reuse after the reintegrate. This wasn't a problem with 1.7 clients if branch reuse was done using the 'keep alive dance' (using the record only option).</p>
  
  <p>I have made a script that illustrates this problem from scratch. It can be run against an empty repository using a 1.8 client.</p>
  
  <p>The script below has 10 steps. Step 1-5 are used to create the starting situation of having local mergeinfo in the trunk. Steps 6-9 simulate changes being made to the trunk during the life of a feature branch2. Step 10 is the failing step which simulates the first step of reuse of the feature branch after reintegrate.</p>
  
  <p>This is the error in step 10:</p>
  
  <pre><code>svn: E195016: Reintegrate can only be used if revisions 8 through 11 were pre
  viously merged from svn://svn2010/practice/branches/featurebranch2 to the reinte
  grate source, but this is not the case:
    trunk/file1.txt
      Missing ranges: /trunk/file1.txt:9
  </code></pre>
  
  <p>This is the (Windows) script. </p>
  
  <pre><code>@ECHO OFF
  ECHO ------------------------------------------------------------------
  ECHO STEP 0: Create a repository
  ECHO ------------------------------------------------------------------
  if exist repo rmdir repo /S/Q
  if exist trunk rmdir trunk /S/Q
  if exist featurebranch1 rmdir featurebranch1 /S/Q
  if exist featurebranch2 rmdir featurebranch2 /S/Q
  svnadmin create repo --compatible-version 1.8
  REM Make url based on current directory and replace backslashes by forward slashes
  set url="file:///%cd:\=/%/repo"
  ECHO url=%url%
  
  ECHO ------------------------------------------------------------------
  ECHO STEP 1: Create a trunk with 2 files
  ECHO ------------------------------------------------------------------
  svn mkdir -m "Create trunk" %url%/trunk
  svn checkout %url%/trunk
  echo Original file contents created in the trunk. &gt; trunk\file1.txt
  echo Original file contents created in the trunk. &gt; trunk\file2.txt
  svn add trunk\file1.txt
  svn add trunk\file2.txt
  svn -m "Added 2 files" commit trunk
  
  ECHO ------------------------------------------------------------------
  ECHO STEP 2: Create a copy (feature branch) from the trunk
  ECHO ------------------------------------------------------------------
  svn mkdir -m "Create branches dir" %url%/branches
  svn copy -m "Create featurebranch1" %url%/trunk %url%/branches/featurebranch1
  
  ECHO ------------------------------------------------------------------
  ECHO STEP 3: Modify both files in the feature branch
  ECHO ------------------------------------------------------------------
  svn checkout %url%/branches/featurebranch1
  echo Additional file contents created in featurebranch1. &gt;&gt; featurebranch1\file1.txt
  echo Additional file contents created in featurebranch1. &gt;&gt; featurebranch1\file2.txt
  svn -m "Modified 2 files in featurebranch1" commit featurebranch1
  
  ECHO ------------------------------------------------------------------
  ECHO STEP 4: Merge both files from featurebranch1 to the trunk to 
  ECHO         create local mergeinfo on both files
  ECHO ------------------------------------------------------------------
  svn update trunk
  svn merge %url%/branches/featurebranch1/file1.txt trunk/file1.txt
  svn merge %url%/branches/featurebranch1/file2.txt trunk/file2.txt
  svn -m "Merged 2 files from featurebranch1 to trunk" commit trunk
  
  ECHO ------------------------------------------------------------------
  ECHO STEP 5: Delete featurebranch2, we only needed it for the
  ECHO         initial setup
  ECHO ------------------------------------------------------------------
  svn delete -m "Delete featurebranch1" %url%/branches/featurebranch1
  
  ECHO ------------------------------------------------------------------
  ECHO STEP 6: This is the start of the problematic scenario
  ECHO         Create a new featurebranch2 from the trunk and a wc for it
  ECHO ------------------------------------------------------------------
  svn copy -m "Create featurebranch2" %url%/trunk %url%/branches/featurebranch2
  svn checkout %url%/branches/featurebranch2
  
  ECHO ------------------------------------------------------------------
  ECHO STEP 7: Modify the contents of file1.txt in the trunk and leave
  ECHO         the contents of file2.txt unchanged (this is important)
  ECHO ------------------------------------------------------------------
  echo Additional file contents created in the trunk. &gt;&gt; trunk\file1.txt
  svn -m "Modified file1.txt in the trunk" commit trunk
  
  ECHO ------------------------------------------------------------------
  ECHO STEP 8: Sync merge the trunk to featurebranch2
  ECHO ------------------------------------------------------------------
  svn update featurebranch2
  svn merge %url%/trunk featurebranch2
  svn -m "Sync merged the trunk into featurebranch2" commit featurebranch2
  
  ECHO ------------------------------------------------------------------
  ECHO STEP 9: Reintegrate featurebranch2 back into the trunk
  ECHO ------------------------------------------------------------------
  svn update trunk
  svn merge %url%/branches/featurebranch2 trunk
  svn -m "Reintegrated featurebranch2 back into the trunk" commit trunk
  
  ECHO ------------------------------------------------------------------
  ECHO STEP 10: Try to reuse featurebranch2 after it was reintegrated
  ECHO          Sync merge it from the trunk. THIS FAILS with SVN 1.8 
  ECHO ------------------------------------------------------------------
  svn update featurebranch2
  REM on SVN 1.7 we would use --record-only
  svn merge %url%/trunk featurebranch2
  
  :EOF
  </code></pre>
  
  <p>I do not understand why this happens. Also the error reports missing ranges of file1.txt while it seems to be file2.txt that is missing mergeinfo. While not a solution, deleting the local mergeinfo on file2.txt in the trunk also seems to fix the problem. This also hints that the error message is reporting something on the wrong file.</p>
  
  <p><strong>Edit</strong>: response to @gbjbaanb
  This problem is more subtle than the one you are pointing to  even though the error message is the same. In my case it is not the reintegrate to the trunk that is failing but the reuse of the branch afterwards. </p>
  
  <p>Also if I look at the mergeinfo of both file1.txt and file2.txt it seems file2.txt is missing the mergeinfo record of featurebranch2 so the problem is with file2.txt not file1.txt as the error suggests. Because file1.txt was changed in the trunk during the life of featurebranch2 and file2.txt wasn't the mergeinfo about the trunk wasn't set on file2.txt during the merge in step 8. I believe this is the spot where it starts to derail. This will not impact the reintegrate to the trunk but it does prevent feature branch reuse afterwards.</p>
  
  <p><strong>Edit</strong>: response to @David W
  I've tried the <em>--record-only -c 11</em> and this also works on the Windows side. I had already tried it without <em>-c</em> (normaly you shouldn't, I know, but in this case there are no other changes) and then it reports:</p>
  
  <pre><code>svn: E200004: The required merge is reintegrate-like, and the record-only option
   cannot be used with this kind of merge
  </code></pre>
  
  <p>For good measure I also tried <em>--record-only -c 1-11</em> which what I expected would be the same as not using <em>-c</em> (as 11 is HEAD). My initial expectation was that it would fail the same way as not using <em>-c</em>, but it didn't. It succeeded the same way as <em>-c 11</em>.</p>
  
  <p>But the whole point of my post is that with SVN 1.8 we don't need to do keep alive trickery. The (DRAFT) documentation says:</p>
  
  <blockquote>
    <p>If you choose not to delete your branch after reintegrating it to the
    trunk you may continue to perform sync merges from the trunk and then
    reintegrate the branch again[37]. If you do this, only the changes
    made on your branch after the first reintegrate are merged to the
    trunk. (<a href="http://svnbook.red-bean.com" rel="nofollow">http://svnbook.red-bean.com</a>).</p>
  </blockquote>
  
  <p>And from the Subversion 1.8 release notes:</p>
  
  <blockquote>
    <p>Merging to-and-fro between two branches in any order is possible using
    the automatic reintegration merge (the "keep-alive dance" is no longer
    necessary). For best results, it is recommended to always merge all
    eligible revisions, i.e. not using the -r or -c options of svn merge.
    Merging just a subset of eligible revisions increases the likelihood
    of problems during future
    merges.(<a href="https://subversion.apache.org/docs/release-notes/1.8.html" rel="nofollow">https://subversion.apache.org/docs/release-notes/1.8.html</a>)</p>
  </blockquote>
  
  <p>So my point is that this branch reuse without the keep alive trickery clearly doesn't work in the face of local mergeinfo and my script seems to show that.</p>
  
  <p>If you still feel that the warning about the missing ranges could be correct, except for maybe the reported range numbers, please show me where in my script I cause a missing range. My script is a simple back and forth between trunk and branch <strong>without</strong> parallel work on both of them.</p>
  
  <p>Also could you explain why also modifying file2.txt by adding:
  <em>"echo Additional file contents created in the trunk. >> trunk\file2.txt"</em>
  to step 7, will result in not having an error in step 10. Modifying an aditional file on the trunk can't solve a missing ranges problem.</p>