You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@subversion.apache.org by Dmitry Pavlenko <pa...@tmatesoft.com> on 2012/05/18 15:51:22 UTC

moved externals are not reported as externals by status

Hello all,

Hello all. I save a directory with svn:externals set, external is checked out. "svn status -v" 
reports it as 'X' for both WC  1.6 and WC 1.7. When I move the directory with svn:externals property 
into another directory: for SVN 1.6 case external is still reported as 'X', but in the case of 
SVN1.7 it is reported as unversioned.

I tried to investiage the problem.

svn_wc__internal_walk_status      calls    svn_wc__db_externals_defined_below    to fill 
'wb.externals' map.

svn_wc__db_externals_defined_below   performs just a simple SQL request to EXTERNALS table without 
considering local moves.

Later         send_unversioned_item just performs a lookup of a moved path 
(directory2/directory1/external)  in this map and of course doesn't find anything.

Steps to reproduce:

/tmp$ svnadmin create test
/tmp$ svn co file:///tmp/test test-co
Checked out revision 0.
/tmp$ cd test-co
/tmp/test-co$ svn mkdir directory1 directory2 directory3
A         directory1
A         directory2
A         directory3
/tmp/test-co$ svn propset svn:externals 'file:///tmp/test/directory3 external' directory1
property 'svn:externals' set on 'directory1'
/tmp/test-co$ svn commit -m Initial
Adding         directory1
Adding         directory2
Adding         directory3

Committed revision 1.
/tmp/test-co$ svn update
Updating '.':

Fetching external item into 'directory1/external':
External at revision 1.

At revision 1.
/tmp/test-co$ svn status -v
                 1        1 dmit10       .
                 1        1 dmit10       directory1
X                                        directory1/external
                 1        1 dmit10       directory2
                 1        1 dmit10       directory3                                                                                                                                                        
                                                                                                                                                                                                           
Performing status on external item at 'directory1/external':                                                                                                                                               
                 1        1 dmit10       /tmp/test-co/directory1/external                                                                                                                                  
/tmp/test-co$ svn mv directory1 directory2/directory1
A         directory2/directory1                                                                                                                                                                            
D         directory1                                                                                                                                                                                       
/tmp/test-co$ svn status -v
                 1        1 dmit10       .                                                                                                                                                                 
D                1        1 dmit10       directory1                                                                                                                                                        
                 1        1 dmit10       directory2                                                                                                                                                        
A  +             -        1 dmit10       directory2/directory1                                                                                                                                             
?                                        directory2/directory1/external                                                                                                                                    
                 1        1 dmit10       directory3                                                                                                                                                        
                                                                                                                                                                                                           
Performing status on external item at 'directory2/directory1/external':                                                                                                                                    
                 1        1 dmit10       /tmp/test-co/directory2/directory1/external