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

svn diff may missreport a revision as the working copy

    XMLWordPrintableJSON

Details

    Description

      It appears that the 'svn diff' command can result in output in which the file 
      headers within the diff are incorrect; the unified diff itself appears to be as 
      expected.  Specifically under some circumstances a diff header will indicate 
      one revision as the working copy when it is not.
      
      In this example revision 0 (BASE) is an empty repository and revision 1 (HEAD) 
      contains a single file containing the word test (the full recipe to reproduce 
      and the full output from all the possible diffs are included at the end of this 
      email).  The working copy from which the diffs are requested is a checkout of 
      revision 0.
      
      If we examine the svn diff -r BASE:HEAD and HEAD:BASE outputs it is clear that 
      the diffs cannot both be against the working copy (if either is) despite the 
      fact that it is clearly labeled as such indeed they are the diff we would 
      expect between the requested versions, the diff (further below) of the real 
      working copy against BASE and HEAD support this.  It seems to me that BASE is 
      being incorrectly reported as working copy.
      
      + svn diff -r BASE:HEAD
      Index: file
      ===================================================================
      --- file        (revision 0)
      +++ file        (working copy)
      @@ -0,0 +1 @@
      +test
      + svn diff -r HEAD:BASE
      Index: file
      ===================================================================
      --- file        (revision 1)
      +++ file        (working copy)
      @@ -1 +0,0 @@
      -test
      
      Does this come under an existing issuse or should I file one.  Feel free to 
      say 'stupid' that's because of 'foo' and expected behaviour.
      
      Cheers.
      
      -apw
      
      
      [apw@kuckoo test2]$ cat T
      rm -rf repo test test2
      svnadmin create repo
      svn checkout file:///`pwd`/repo test
      svn checkout file:///`pwd`/repo test2
      cd test
      echo "test" >file
      svn add file
      svn -m test commit
      cd ../test2
      svn diff -r BASE:HEAD
      svn diff -r HEAD:BASE
      svn diff -r BASE
      svn diff -r HEAD
      svn diff -r 0:BASE
      svn diff -r 0:HEAD
      svn diff -r 0:1
      svn diff -r 1:0
      svn diff -r 0
      svn diff -r 1
      [apw@kuckoo test2]$ sh -x T
      + rm -rf repo test test2
      + svnadmin create repo
      ++ pwd
      + svn checkout file:////home/apw/test2/repo test
      Checked out revision 0.
      ++ pwd
      + svn checkout file:////home/apw/test2/repo test2
      Checked out revision 0.
      + cd test
      + echo test
      + svn add file
      A         file
      + svn -m test commit
      Adding         file
      Transmitting file data .
      Committed revision 1.
      + cd ../test2
      + svn diff -r BASE:HEAD
      Index: file
      ===================================================================
      --- file        (revision 0)
      +++ file        (working copy)
      @@ -0,0 +1 @@
      +test
      + svn diff -r HEAD:BASE
      Index: file
      ===================================================================
      --- file        (revision 1)
      +++ file        (working copy)
      @@ -1 +0,0 @@
      -test
      + svn diff -r BASE
      + svn diff -r HEAD
      Index: file
      ===================================================================
      --- file        (revision 1)
      +++ file        (working copy)
      @@ -1 +0,0 @@
      -test
      + svn diff -r 0:BASE
      + svn diff -r 0:HEAD
      Index: file
      ===================================================================
      --- file        (revision 0)
      +++ file        (revision 1)
      @@ -0,0 +1 @@
      +test
      + svn diff -r 0:1
      Index: file
      ===================================================================
      --- file        (revision 0)
      +++ file        (revision 1)
      @@ -0,0 +1 @@
      +test
      + svn diff -r 1:0
      Index: file
      ===================================================================
      --- file        (revision 1)
      +++ file        (revision 0)
      @@ -1 +0,0 @@
      -test
      + svn diff -r 0
      + svn diff -r 1
      Index: file
      ===================================================================
      --- file        (revision 1)
      +++ file        (working copy)
      @@ -1 +0,0 @@
      -test
      [apw@kuckoo test2]$
      

      Original issue reported by awhitcroft

      Attachments

        Issue Links

          Activity

            People

              Unassigned Unassigned
              subversion-importer Subversion Importer
              Votes:
              0 Vote for this issue
              Watchers:
              1 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: