You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@subversion.apache.org by Stefan Küng <to...@gmail.com> on 2010/10/18 16:50:43 UTC

update corrupts wc

Hi,

Using a build from r1023755 (about 3 hours ago), here's how I can 
corrupt the working copy beyond repair (at least I don't know how to 
repair it):


svnadmin create repo
svn co file:///d:/repo wc
cd wc
mkdir test
mkdir test\test
mkdir test\test\test
svn add test
svn ci . -m "adding folders"
svn rm test\test\test
svn ci . -m "removing folder"
svn rm test\test
svn ci . -m "removing folder"

now here, I get an "out of date" error (svn: Directory '/test/test' is 
out of date). Not sure why this would give such an error, but updating 
isn't a big deal so I try this:

svn up .


which corrupts the repository:
    C test\test
...libsvn_subr\sqlite.c:308: (apr_err=235000)
svn: In file '...libsvn_wc\workqueue.c' line 506: assertion failed 
(have_base)


After that, the working copy is corrupted. No command works, not even 
cleanup or status.


Stefan

-- 
        ___
   oo  // \\      "De Chelonian Mobile"
  (_,\/ \_/ \     TortoiseSVN
    \ \_/_\_/>    The coolest Interface to (Sub)Version Control
    /_/   \_\     http://tortoisesvn.net

Re: update corrupts wc

Posted by Philip Martin <ph...@wandisco.com>.
Philip Martin <ph...@wandisco.com> writes:

> The first commit leaves A/B,not-present,op_depth=0 and that's correct.
> The second delete converts that to op_depth=2.  That's wrong (I
> think).  The A/B,not-present,op_depth=0 node should continue to exist,
> but perhaps we need an op_depth=2 node as well?

I've added an XFAIL regression test for this.

We have a related problem with excluded nodes:

svn up --set-depth exclude wc/A/B  # A/B op_depth=0
svn rm wc/A                        # A/B op_depth=2
svn revert wc/A                    # A/B op_depth=2

I think delete is supposed to add a working node for every child with
a base_node, not convert base_nodes into working nodes.

-- 
Philip

Re: update corrupts wc

Posted by Philip Martin <ph...@wandisco.com>.
Stefan Küng <to...@gmail.com> writes:

> svnadmin create repo
> svn co file:///d:/repo wc
> cd wc
> mkdir test
> mkdir test\test
> mkdir test\test\test
> svn add test
> svn ci . -m "adding folders"
> svn rm test\test\test
> svn ci . -m "removing folder"
> svn rm test\test
> svn ci . -m "removing folder"

Only two levels of directories are required:

svnadmin create repo
svn mkdir --parents -mm file://`pwd`/repo/A/B
svn co file://`pwd`/repo wc
svn rm wc/A/B
svn ci -mm wc
svn rm wc/A

The first commit leaves A/B,not-present,op_depth=0 and that's correct.
The second delete converts that to op_depth=2.  That's wrong (I
think).  The A/B,not-present,op_depth=0 node should continue to exist,
but perhaps we need an op_depth=2 node as well?

-- 
Philip