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