> -----Original Message-----
> From: Marc Strapetz [mailto:marc.strap...@syntevo.com]
> Sent: woensdag 27 november 2013 09:30
> To: Philip Martin
> Cc: Branko Čibej; users@subversion.apache.org
> Subject: Re: wc.db: corruption after move?
> 
> On 26.11.2013 21:38, Philip Martin wrote:
> > Marc Strapetz <marc.strap...@syntevo.com> writes:
> >
> >>>>> As far as I have been told, this has already been fixed and backported
> >>>>> to 1.8.5. Still, for those users which already have this corruption, is
> >>>>> there a way to recover their working copies with standard Subversion
> >>>>> functionality? Could a Revert work? And if it currently does not, could
> >>>>> the Revert be more tolerant, so it could handle such cases?
> >>>> What operation is failing?  Are you getting some error?
> >>
> >> I can't tell whether an operation fails, because an assertion when
> >> reading the wc.db is hit before. I'd expect some operations (in the GUI)
> >> to fail later, because we are assuming at various places that a moved
> >> file must have a move-source. Is this assumption correct?
> >
> > Is that Subversion that is asserting?  It would help if you showed the
> > exact error or assertion.
> 
> It's an assertion in SmartSVN which directly reads wc.db.
> 
> > If moved_to is missing Subversion usually falls back to copy and delete:
> 
> OK, so it's a valid wc.db state? I think that answers my question and I
> will fix/remove SmartSVN's assertion accordingly.

No, this is not a valid state. But we prefer to fix the problem how you got 
there, over updating Subversion to cope with invalid states everywhere.

That is why we asked for a reproduction recipe on how you got the working copy 
in this state.

(I think you can find a few of those in new test cases for fixes nominated for 
backport for 1.8.6)

        Bert
> 
> > $ svnadmin create repo
> > $ svn import -mm repo/format file://`pwd`/repo/A/f
> > $ svn co file://`pwd`/repo wc
> > $ svn wc/A wc/B
> > $ svn mv wc/B/f wc/B/g
> >
> > $ svn st wc
> > D       wc/A
> >         > moved to wc/B
> > D       wc/A/f
> > A  +    wc/B
> >         > moved from wc/A
> > D  +    wc/B/f
> >         > moved to wc/B/g
> > A  +    wc/B/g
> >         > moved from wc/B/f
> >
> > $ sqlite3 wc/.svn/wc.db "update nodes set moved_to = null"
> > $ svn st wc
> > D       wc/A
> > D       wc/A/f
> > A  +    wc/B
> > D  +    wc/B/f
> > A  +    wc/B/g
> 
> -Marc


Reply via email to