[svn.haxx.se] · SVN Dev · SVN Users · SVN Org · TSVN Dev · TSVN Users · Subclipse Dev · Subclipse Users · this month's index

Re: BUG Tree conflict + revert leads to missing/forgotten file

From: Daniel Shahaf <d.s_at_daniel.shahaf.name>
Date: Thu, 21 Apr 2011 07:36:09 +0300

I can reproduce this with current trunk.

Output immediately after the 'update' which introduces a conflict:
[[[
% svnqlite3-dump ../ | grep iota
INSERT INTO "ACTUAL_NODE" VALUES(1,'trunk/iota','trunk',NULL,NULL,NULL,NULL,NULL,NULL,NULL,'(conflict iota file update deleted edited (version file:///tmp/svn/r1 1 1 trunk/iota file) (version file:///tmp/svn/r1 1 2 trunk/iota none))',NULL,NULL,NULL,NULL);
INSERT INTO "NODES" VALUES(1,'trunk/iota',2,'trunk',1,'trunk/iota',1,'normal',NULL,NULL,'file',(),NULL,'$sha1$2c0aa9014a0cd07f01795a333d82485ef6d083e2',NULL,1,"Thu Apr 21 07:30:46 2011",'daniel',25,"Thu Apr 21 07:30:48 2011",NULL,NULL);
INSERT INTO "NODES" VALUES(1,'trunk/iota',0,'trunk',1,'trunk/iota',2,'not-present',NULL,NULL,'file',NULL,NULL,NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL);
% $svnversion
2M
% $svn st
A + C iota
> local edit, incoming delete upon update
Summary of conflicts:
  Tree conflicts: 1
]]]

After reverting 'iota':

[[[
% $svn revert iota
Reverted 'iota'
% svnqlite3-dump ../ | grep iota
INSERT INTO "NODES" VALUES(1,'trunk/iota',0,'trunk',1,'trunk/iota',2,'not-present',NULL,NULL,'file',NULL,NULL,NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL);
% $svnversion
2
% $svn st -q
% $svn st -v iota
? iota
]]]

I've used the following meta-recipe to reproduce:

[[[
create a greek tree working copy

cd wc1/trunk
$svn rm -q iota
echo alt > iota
$svn add -q iota
$svn ci -qm replace

$svn up -qr 1
echo mod >> iota

$svn up
]]]

On Wed, 20 Apr 2011 16:34 -0700, "Andrew Buchanan" <abuchanan_at_grio.com> wrote:
> Hello all,
> I just got bitten by what looks like a bug in the handling of tree conflicts
> involving replaced files. To demonstrate:
> User A replaces foo.txt and commits their change:
> $ svn st -v
> R 4 4 abuchanan foo.txt
> $ svn commit -m 'replacing foo'
> Replacing foo.txt
>
> User B has modified foo.txt and gets a tree conflict when they svn up:
> $ svn up
> C foo.txt
> At revision 5.
> Summary of conflicts:
> Tree conflicts: 1
> $ svn st -v
> A + C - 4 abuchanan foo.txt
> > local edit, incoming delete upon update
>
> Knowing that their modifications can be discarded, user B tries to get
> things on track by reverting foo.txt.
> ***This results in their local foo.txt no longer being versioned and their
> working directory "forgetting" about the incoming replacement.***
> $ svn revert foo.txt
> Reverted 'foo.txt'
> $ svn st -v
> 5 5 abuchanan .
> ? foo.txt
> $ svn up
> At revision 5.
> $ svn st -v
> 5 5 abuchanan .
> ? foo.txt
> $
>
> foo.txt is in the repository, but svn up doesn't grab it. Deleting the now
> unversioned copy and running svn up with foo.txt as the explicit target will
> correctly check it out, but it can be hard to realize that something's
> missing when svn st and svn up of that directory say that everything's up to
> date.
>
> Thanks,
> -Andrew
>
Received on 2011-04-21 06:36:41 CEST

This is an archived mail posted to the Subversion Users mailing list.

This site is subject to the Apache Privacy Policy and the Apache Public Forum Archive Policy.