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 2011/11/21 19:19:12 UTC

hosed working copy after interrupted rename

Hi,

Stumbled upon the following problem with 1.7.1+ (latest 1.7.x branch):

$ svn co http://tvserver/svn/Test/trunk/TortoiseSVN/Languages renametest
$ cd renametest
- now open another console window in subfolder 'de' (so that the folder 
is locked and can't be removed)
$ svn mv de de2
A   de2
svn: E720032: Can't move '.....de' to '....de2': The process cannot 
access the file because it is being used by another process.

After that, the folder 'de2' is marked as 'missing' when doing an 'svn 
st'. Reverting or updating 'restores' that folder, marked as 'normal'. 
But since there was never a commit with that name, the folder 'de2' is 
now marked in the wc as if it is in the repository.

Stefan

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

Re: hosed working copy after interrupted rename

Posted by Stefan Küng <to...@gmail.com>.
On 21.11.2011 20:45, Philip Martin wrote:
> Stefan Küng<to...@gmail.com>  writes:
>
>> But it seems it works now as expected. Had updated my working copy of
>> SVN but forgot to do a rebuild so I had a version that's about a week
>> old. Now that I did a rebuild, it works and a revert actually removes
>> the missing folder properly.
>>
>> But I can't see anything in the changelog that would explain that it
>> works now?
>
> I don't see anything either.  Perhaps the failing build was made with
> some local mods?
>

I haven't modified anything in the subversion code.
The only thing I messed with lately was with some build flags for the 
compiler.
Maybe an optimization bug that triggered this?
Anyway: sorry for the noise.

Stefan

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

Re: hosed working copy after interrupted rename

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

> But it seems it works now as expected. Had updated my working copy of
> SVN but forgot to do a rebuild so I had a version that's about a week
> old. Now that I did a rebuild, it works and a revert actually removes
> the missing folder properly.
>
> But I can't see anything in the changelog that would explain that it
> works now?

I don't see anything either.  Perhaps the failing build was made with
some local mods?

-- 
uberSVN: Apache Subversion Made Easy
http://www.uberSVN.com

Re: hosed working copy after interrupted rename

Posted by Stefan Küng <to...@gmail.com>.
On 21.11.2011 19:56, Philip Martin wrote:
> Stefan Küng<to...@gmail.com>  writes:
>
>> Stumbled upon the following problem with 1.7.1+ (latest 1.7.x branch):
>>
>> $ svn co http://tvserver/svn/Test/trunk/TortoiseSVN/Languages renametest
>> $ cd renametest
>> - now open another console window in subfolder 'de' (so that the
>> folder is locked and can't be removed)
>> $ svn mv de de2
>> A   de2
>> svn: E720032: Can't move '.....de' to '....de2': The process cannot
>> access the file because it is being used by another process.
>
> Where does the code fail?  Is it inside the svn_io_file_rename call in
> svn_wc_move?
>
>> After that, the folder 'de2' is marked as 'missing' when doing an 'svn
>> st'. Reverting or updating 'restores' that folder, marked as
>> normal'. But since there was never a commit with that name, the folder
>> de2' is now marked in the wc as if it is in the repository.
>
> Why does revert restore de2?  It's a copy, revert should revove it.  If
> I try to reproduce by interrupting a mv on Linux:
>
> $ svnadmin create repo
> $ svn mkdir -mm --parents file://`pwd`/repo/A/B
> $ svn mv wc/A wc/X    # interrupt at svn_io_file_rename
> $ sqlite3 wc/.svn/wc.db "select op_depth, local_relpath, presence, revision from nodes"
> 0|A/B|normal|1
> 0|A|normal|1
> 0||normal|1
> 1|X|normal|1
> 1|X/B|normal|1
>
> Running "svn revert -R wc/X" removes the X rows as expected.

Stepping through the code, I see that it fails in io.c, line 3374 
apr_file_rename(from_path_apr, to_path_apr, pool);

But it seems it works now as expected. Had updated my working copy of 
SVN but forgot to do a rebuild so I had a version that's about a week 
old. Now that I did a rebuild, it works and a revert actually removes 
the missing folder properly.

But I can't see anything in the changelog that would explain that it 
works now?

Stefan


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

Re: hosed working copy after interrupted rename

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

> Stumbled upon the following problem with 1.7.1+ (latest 1.7.x branch):
>
> $ svn co http://tvserver/svn/Test/trunk/TortoiseSVN/Languages renametest
> $ cd renametest
> - now open another console window in subfolder 'de' (so that the
> folder is locked and can't be removed)
> $ svn mv de de2
> A   de2
> svn: E720032: Can't move '.....de' to '....de2': The process cannot
> access the file because it is being used by another process.

Where does the code fail?  Is it inside the svn_io_file_rename call in
svn_wc_move?

> After that, the folder 'de2' is marked as 'missing' when doing an 'svn
> st'. Reverting or updating 'restores' that folder, marked as
> normal'. But since there was never a commit with that name, the folder
> de2' is now marked in the wc as if it is in the repository.

Why does revert restore de2?  It's a copy, revert should revove it.  If
I try to reproduce by interrupting a mv on Linux:

$ svnadmin create repo
$ svn mkdir -mm --parents file://`pwd`/repo/A/B
$ svn mv wc/A wc/X    # interrupt at svn_io_file_rename
$ sqlite3 wc/.svn/wc.db "select op_depth, local_relpath, presence, revision from nodes"
0|A/B|normal|1
0|A|normal|1
0||normal|1
1|X|normal|1
1|X/B|normal|1

Running "svn revert -R wc/X" removes the X rows as expected.

-- 
uberSVN: Apache Subversion Made Easy
http://www.uberSVN.com