You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@subversion.apache.org by Michael Price <mp...@atl.lmco.com> on 2002/12/02 02:21:25 UTC

bug round 2

OK. The last "bug" I emailed was one I ran into while trying to come up
with a short recipe for the real bug that was annoying me. Here is the
recipe for the really annoying one.

Summary: "mv" on two working copy directories can result in the files
contained in that directory no longer appearing in the working copy.

There is another bug I'm trying to come up with a short recipe for where
instead of no file at all you get old contents for the directory (from
several revisions back).

Michael

$ ~/tmp> dir
$ ~/tmp> svn co http://jail/svn/test
Checked out revision 0.
$ ~/tmp> cd test
$ ~/tmp/test> svn mkdir "dir1"
A         dir1
$ ~/tmp/test> cd dir1
$ ~/tmp/test/dir1> svn mkdir dir2
A         dir2
$ ~/tmp/test/dir1> cd ..
$ ~/tmp/test> svn commit -m "new dirs"
Adding         dir1
Adding         dir1/dir2

Committed revision 1.
$ ~/tmp/test> cd dir1 
$ ~/tmp/test/dir1> cd dir2
$ ~/tmp/test/dir1/dir2> echo "file" > file1
$ ~/tmp/test/dir1/dir2> svn add file1
A         file1
$ ~/tmp/test/dir1/dir2> svn commit -m "new file"
Adding         dir2/file1
Transmitting file data .
Committed revision 2.
$ ~/tmp/test/dir1/dir2> echo "new" > file2
$ ~/tmp/test/dir1/dir2> svn add file2
A         file2
$ ~/tmp/test/dir1/dir2> svn rm file1
D         file1
$ ~/tmp/test/dir1/dir2> svn commit -m "delete one add one"
Deleting       dir2/file1
Adding         dir2/file2
Transmitting file data .
Committed revision 3.
$ ~/tmp/test/dir1/dir2> cd ..
$ ~/tmp/test/dir1> cd ..
$ ~/tmp/test> svn mkdir newdir
A         newdir
$ ~/tmp/test> svn commit -m "director"
Adding         newdir

Committed revision 4.
$ ~/tmp/test> svn mv dir1 newdir
A         newdir/dir1
D         dir1/dir2/file2
D         dir1/dir2
D         dir1
$ ~/tmp/test> svn commit -m "mv"
Deleting       dir1
Adding         newdir/dir1
Adding         newdir/dir1/dir2/file2

Committed revision 5.
$ ~/tmp/test> dir newdir/dir1/dir2
total 2
-rw-------  1 mixtim  mixtim  4 Dec  1 21:13 file2
$ ~/tmp/test> svn update
At revision 5.
$ ~/tmp/test> cd ..
$ ~/tmp> rm -fr test
$ ~/tmp> svn co http://jail/svn/test
A  test/newdir
A  test/newdir/dir1
A  test/newdir/dir1/dir2
Checked out revision 5.
$ ~/tmp> cd test/newdir/dir1/dir2
$ ~/tmp/test/newdir/dir1/dir2> dir
$ ~/tmp/test/newdir/dir1/dir2> svn update
At revision 5.
$ ~/tmp/test/newdir/dir1/dir2> dir
$ ~/tmp/test/newdir/dir1/dir2> cd ..
$ ~/tmp/test/newdir/dir1> cd ..
$ ~/tmp/test/newdir> cd ..
$ ~/tmp/test> svn merge -r 5:4 .
A         dir1
A         dir1/dir2
A  dir1/dir2/file2
D         newdir/dir1
$ ~/tmp/test> svn commit -m "huh?"
Adding         dir1
Deleting       newdir/dir1

Committed revision 6.
$ ~/tmp/test> cd dir1
$ ~/tmp/test/dir1> cd dir2
$ ~/tmp/test/dir1/dir2> dir
total 2
-rw-------  1 mixtim  mixtim  4 Dec  1 21:16 file2
$ ~/tmp/test/dir1/dir2> cat file2
new


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@subversion.tigris.org
For additional commands, e-mail: dev-help@subversion.tigris.org

Re: bug round 2

Posted by Philip Martin <ph...@codematters.co.uk>.
cmpilato@collab.net writes:

> Philip, I'm having a brain-O moment right now.  I've been looking at
> this recipe for a bit this morning, and I can't figure out why you've
> deemed ra_local corrent, and ra_dav incorrect, in this case?  Can you
> ignore the fact that I *should* be able to understand this stuff, and
> tell me anyway? :-)  Thanks.

As I said in another mail, the rules for mixed revision working copies
are to a certain extent arbitrary.  So the classification as
correct/incorrect is just my interpretation of our (unwritten?) rules.

As I understand it we can add additional files or sub-directories to a
directory that is out of date, assuming the additional items don't
cause conflicts with HEAD.  We can also delete files and
sub-directories from an out of date directory, provided the items
being deleted are up to date.

We cannot modify properties on a directory that is out of date, and we
cannot delete a file or directory that is out of date.

The point at which I think the sequence below should fail is when we
attempt to delete dir1 when it is out of date.

> > svn mv wc/dir1 wc/newdir
> > svn ci -m "mv" wc
> > 
> > Over ra_local I get
> > 
> > ...
> > Committed revision 4.
> > A         wc/newdir/dir1
> > D         wc/dir1/dir2/file2
> > D         wc/dir1/dir2
> > D         wc/dir1
> > Deleting       wc/dir1
> > svn: Transaction is out of date
> > svn: Commit failed (details follow):
> > svn: out of date: `dir1' in txn `5'
> > 
> > as expected, but over ra_dav I get
> > 
> > ...
> > Committed revision 4.
> > A         wc/newdir/dir1
> > D         wc/dir1/dir2/file2
> > D         wc/dir1/dir2
> > D         wc/dir1
> > Deleting       wc/dir1
> > Adding         wc/newdir/dir1
> > Adding         wc/newdir/dir1/dir2/file2
> > 
> > Committed revision 5.
> > 
> > In both cases (ra_dav and ra_local) the working copy before the move
> > looks like
> > 
> >                 0        0         ?    wc
> >                 1        1   anonymous   wc/dir1
> >                 1        1   anonymous   wc/dir1/dir2
> >                 3        3   anonymous   wc/dir1/dir2/file2
> >                 4        4   anonymous   wc/newdir
> > Head revision:      4

Here wc/dir1 is being deleted and yet it is out of date.  The HEAD
revision may contain items that have never been updated/created in
this working copy.

-- 
Philip Martin

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@subversion.tigris.org
For additional commands, e-mail: dev-help@subversion.tigris.org

Re: bug round 2

Posted by cm...@collab.net.
Philip, I'm having a brain-O moment right now.  I've been looking at
this recipe for a bit this morning, and I can't figure out why you've
deemed ra_local corrent, and ra_dav incorrect, in this case?  Can you
ignore the fact that I *should* be able to understand this stuff, and
tell me anyway? :-)  Thanks.

Philip Martin <ph...@codematters.co.uk> writes:

> Michael Price <mp...@atl.lmco.com> writes:
> 
> > $ ~/tmp> dir
> > $ ~/tmp> svn co http://jail/svn/test
> > Checked out revision 0.
> > $ ~/tmp> cd test
> > $ ~/tmp/test> svn mkdir "dir1"
> > A         dir1
> > $ ~/tmp/test> cd dir1
> > $ ~/tmp/test/dir1> svn mkdir dir2
> > A         dir2
> > $ ~/tmp/test/dir1> cd ..
> > $ ~/tmp/test> svn commit -m "new dirs"
> > Adding         dir1
> > Adding         dir1/dir2
> > 
> > Committed revision 1.
> > $ ~/tmp/test> cd dir1 
> > $ ~/tmp/test/dir1> cd dir2
> > $ ~/tmp/test/dir1/dir2> echo "file" > file1
> > $ ~/tmp/test/dir1/dir2> svn add file1
> > A         file1
> > $ ~/tmp/test/dir1/dir2> svn commit -m "new file"
> > Adding         dir2/file1
> > Transmitting file data .
> > Committed revision 2.
> > $ ~/tmp/test/dir1/dir2> echo "new" > file2
> > $ ~/tmp/test/dir1/dir2> svn add file2
> > A         file2
> > $ ~/tmp/test/dir1/dir2> svn rm file1
> > D         file1
> > $ ~/tmp/test/dir1/dir2> svn commit -m "delete one add one"
> > Deleting       dir2/file1
> > Adding         dir2/file2
> > Transmitting file data .
> > Committed revision 3.
> > $ ~/tmp/test/dir1/dir2> cd ..
> > $ ~/tmp/test/dir1> cd ..
> > $ ~/tmp/test> svn mkdir newdir
> > A         newdir
> > $ ~/tmp/test> svn commit -m "director"
> > Adding         newdir
> > 
> > Committed revision 4.
> > $ ~/tmp/test> svn mv dir1 newdir
> > A         newdir/dir1
> > D         dir1/dir2/file2
> > D         dir1/dir2
> > D         dir1
> > $ ~/tmp/test> svn commit -m "mv"
> > Deleting       dir1
> > Adding         newdir/dir1
> > Adding         newdir/dir1/dir2/file2
> > 
> > Committed revision 5.
> 
> This is a bug.  It should fail here with transaction out of date.  It
> *does* fail over ra_local, but not over ra_dav.
> 
> $ cat doit
> export REPO=file:///tmp/repo
> #export REPO=http://localhost:8888/tmp/repo
> rm -rf /tmp/repo wc
> svnadmin create /tmp/repo
> svn co $REPO wc
> svn mkdir wc/dir1
> svn mkdir wc/dir1/dir2
> svn ci -m "new dirs" wc
> echo file1 > wc/dir1/dir2/file1
> svn add wc/dir1/dir2/file1
> svn ci -m "new file" wc
> echo file2 > wc/dir1/dir2/file2
> svn add wc/dir1/dir2/file2
> svn rm wc/dir1/dir2/file1
> svn ci -m "delete one add one" wc
> svn mkdir wc/newdir
> svn ci -m "director" wc
> svn mv wc/dir1 wc/newdir
> svn ci -m "mv" wc
> 
> Over ra_local I get
> 
> ...
> Committed revision 4.
> A         wc/newdir/dir1
> D         wc/dir1/dir2/file2
> D         wc/dir1/dir2
> D         wc/dir1
> Deleting       wc/dir1
> svn: Transaction is out of date
> svn: Commit failed (details follow):
> svn: out of date: `dir1' in txn `5'
> 
> as expected, but over ra_dav I get
> 
> ...
> Committed revision 4.
> A         wc/newdir/dir1
> D         wc/dir1/dir2/file2
> D         wc/dir1/dir2
> D         wc/dir1
> Deleting       wc/dir1
> Adding         wc/newdir/dir1
> Adding         wc/newdir/dir1/dir2/file2
> 
> Committed revision 5.
> 
> In both cases (ra_dav and ra_local) the working copy before the move
> looks like
> 
>                 0        0         ?    wc
>                 1        1   anonymous   wc/dir1
>                 1        1   anonymous   wc/dir1/dir2
>                 3        3   anonymous   wc/dir1/dir2/file2
>                 4        4   anonymous   wc/newdir
> Head revision:      4
> 
> and after the move but before the commit it looks like
> 
>                 0        0         ?    wc
> D               1        1   anonymous   wc/dir1
> D               1        1   anonymous   wc/dir1/dir2
> D               3        3   anonymous   wc/dir1/dir2/file2
>                 4        4   anonymous   wc/newdir
> A  +            -        1   anonymous   wc/newdir/dir1
>    +            -        1   anonymous   wc/newdir/dir1/dir2
>    +            -        3   anonymous   wc/newdir/dir1/dir2/file2
> 
> so ra_dav and mod_dav_svn are the likely suspects.
> 
> -- 
> Philip Martin
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscribe@subversion.tigris.org
> For additional commands, e-mail: dev-help@subversion.tigris.org

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@subversion.tigris.org
For additional commands, e-mail: dev-help@subversion.tigris.org

Re: bug round 2

Posted by Philip Martin <ph...@codematters.co.uk>.
Michael Price <mp...@atl.lmco.com> writes:

> $ ~/tmp> dir
> $ ~/tmp> svn co http://jail/svn/test
> Checked out revision 0.
> $ ~/tmp> cd test
> $ ~/tmp/test> svn mkdir "dir1"
> A         dir1
> $ ~/tmp/test> cd dir1
> $ ~/tmp/test/dir1> svn mkdir dir2
> A         dir2
> $ ~/tmp/test/dir1> cd ..
> $ ~/tmp/test> svn commit -m "new dirs"
> Adding         dir1
> Adding         dir1/dir2
> 
> Committed revision 1.
> $ ~/tmp/test> cd dir1 
> $ ~/tmp/test/dir1> cd dir2
> $ ~/tmp/test/dir1/dir2> echo "file" > file1
> $ ~/tmp/test/dir1/dir2> svn add file1
> A         file1
> $ ~/tmp/test/dir1/dir2> svn commit -m "new file"
> Adding         dir2/file1
> Transmitting file data .
> Committed revision 2.
> $ ~/tmp/test/dir1/dir2> echo "new" > file2
> $ ~/tmp/test/dir1/dir2> svn add file2
> A         file2
> $ ~/tmp/test/dir1/dir2> svn rm file1
> D         file1
> $ ~/tmp/test/dir1/dir2> svn commit -m "delete one add one"
> Deleting       dir2/file1
> Adding         dir2/file2
> Transmitting file data .
> Committed revision 3.
> $ ~/tmp/test/dir1/dir2> cd ..
> $ ~/tmp/test/dir1> cd ..
> $ ~/tmp/test> svn mkdir newdir
> A         newdir
> $ ~/tmp/test> svn commit -m "director"
> Adding         newdir
> 
> Committed revision 4.
> $ ~/tmp/test> svn mv dir1 newdir
> A         newdir/dir1
> D         dir1/dir2/file2
> D         dir1/dir2
> D         dir1
> $ ~/tmp/test> svn commit -m "mv"
> Deleting       dir1
> Adding         newdir/dir1
> Adding         newdir/dir1/dir2/file2
> 
> Committed revision 5.

This is a bug.  It should fail here with transaction out of date.  It
*does* fail over ra_local, but not over ra_dav.

$ cat doit
export REPO=file:///tmp/repo
#export REPO=http://localhost:8888/tmp/repo
rm -rf /tmp/repo wc
svnadmin create /tmp/repo
svn co $REPO wc
svn mkdir wc/dir1
svn mkdir wc/dir1/dir2
svn ci -m "new dirs" wc
echo file1 > wc/dir1/dir2/file1
svn add wc/dir1/dir2/file1
svn ci -m "new file" wc
echo file2 > wc/dir1/dir2/file2
svn add wc/dir1/dir2/file2
svn rm wc/dir1/dir2/file1
svn ci -m "delete one add one" wc
svn mkdir wc/newdir
svn ci -m "director" wc
svn mv wc/dir1 wc/newdir
svn ci -m "mv" wc

Over ra_local I get

...
Committed revision 4.
A         wc/newdir/dir1
D         wc/dir1/dir2/file2
D         wc/dir1/dir2
D         wc/dir1
Deleting       wc/dir1
svn: Transaction is out of date
svn: Commit failed (details follow):
svn: out of date: `dir1' in txn `5'

as expected, but over ra_dav I get

...
Committed revision 4.
A         wc/newdir/dir1
D         wc/dir1/dir2/file2
D         wc/dir1/dir2
D         wc/dir1
Deleting       wc/dir1
Adding         wc/newdir/dir1
Adding         wc/newdir/dir1/dir2/file2

Committed revision 5.

In both cases (ra_dav and ra_local) the working copy before the move
looks like

                0        0         ?    wc
                1        1   anonymous   wc/dir1
                1        1   anonymous   wc/dir1/dir2
                3        3   anonymous   wc/dir1/dir2/file2
                4        4   anonymous   wc/newdir
Head revision:      4

and after the move but before the commit it looks like

                0        0         ?    wc
D               1        1   anonymous   wc/dir1
D               1        1   anonymous   wc/dir1/dir2
D               3        3   anonymous   wc/dir1/dir2/file2
                4        4   anonymous   wc/newdir
A  +            -        1   anonymous   wc/newdir/dir1
   +            -        1   anonymous   wc/newdir/dir1/dir2
   +            -        3   anonymous   wc/newdir/dir1/dir2/file2

so ra_dav and mod_dav_svn are the likely suspects.

-- 
Philip Martin

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@subversion.tigris.org
For additional commands, e-mail: dev-help@subversion.tigris.org