convert/mtn: handle directory move into moved directory (issue1619/3)

This commit is contained in:
Patrick Mezard 2009-04-22 10:25:05 +02:00
parent 6bbead8918
commit f7e8a4c038
3 changed files with 100 additions and 10 deletions

View File

@ -160,6 +160,10 @@ class monotone_source(converter_source, commandline):
continue
if tofile.startswith(todir + '/'):
renamed[tofile] = fromdir + tofile[len(todir):]
# Avoid chained moves like:
# d1(/a) => d3/d1(/a)
# d2 => d3
ignoremove[tofile] = 1
for tofile, fromfile in renamed.items():
self.ui.debug (_("copying file in renamed dir from '%s' to '%s'")
% (fromfile, tofile), '\n')

View File

@ -88,6 +88,26 @@ mtn ci -m dirfilemove
mtn mv dir3/a dir3/d1/a
mtn mv dir3/d1 dir3/d2
mtn ci -m dirfilemove2
echo '% test directory move into another directory move'
mkdir dir4
mkdir dir5
echo a > dir4/a
mtn add dir4/a dir5
mtn ci -m dirdirmove
mtn mv dir5 dir6
mtn mv dir4 dir6/dir4
mtn ci -m dirdirmove2
echo '% test diverging directory moves'
mkdir -p dir7/dir9/dir8
echo a > dir7/dir9/dir8/a
echo b > dir7/dir9/b
echo c > dir7/c
mtn add -R dir7
mtn ci -m divergentdirmove
mtn mv dir7 dir7-2
mtn mv dir7-2/dir9 dir9-2
mtn mv dir9-2/dir8 dir8-2
mtn ci -m divergentdirmove2
cd ..
echo % convert incrementally
@ -118,5 +138,9 @@ echo % check file remove with directory move
hg manifest -r 5
echo % check file move with directory move
hg manifest -r 9
echo % check file directory directory move
hg manifest -r 11
echo % check divergent directory moves
hg manifest -r 13
exit 0

View File

@ -65,21 +65,58 @@ mtn: skipping dir3, already accounted for in workspace
mtn: renaming dir3/d1 to dir3/d2 in workspace manifest
mtn: beginning commit on branch 'com.selenic.test'
mtn: committed revision 8b543a400d3ee7f6d4bb1835b9b9e3747c8cb632
% test directory move into another directory move
mtn: adding dir4 to workspace manifest
mtn: adding dir4/a to workspace manifest
mtn: adding dir5 to workspace manifest
mtn: beginning commit on branch 'com.selenic.test'
mtn: committed revision 466e0b2afc7a55aa2b4ab2f57cb240bb6cd66fc7
mtn: renaming dir5 to dir6 in workspace manifest
mtn: skipping dir6, already accounted for in workspace
mtn: renaming dir4 to dir6/dir4 in workspace manifest
mtn: beginning commit on branch 'com.selenic.test'
mtn: committed revision 3d1f77ebad0c23a5d14911be3b670f990991b749
% test diverging directory moves
mtn: adding dir7 to workspace manifest
mtn: adding dir7/c to workspace manifest
mtn: adding dir7/dir9 to workspace manifest
mtn: adding dir7/dir9/b to workspace manifest
mtn: adding dir7/dir9/dir8 to workspace manifest
mtn: adding dir7/dir9/dir8/a to workspace manifest
mtn: beginning commit on branch 'com.selenic.test'
mtn: committed revision 08a08511f18b428d840199b062de90d0396bc2ed
mtn: renaming dir7 to dir7-2 in workspace manifest
mtn: renaming dir7-2/dir9 to dir9-2 in workspace manifest
mtn: renaming dir9-2/dir8 to dir8-2 in workspace manifest
mtn: beginning commit on branch 'com.selenic.test'
mtn: committed revision 4a736634505795f17786fffdf2c9cbf5b11df6f6
% convert incrementally
assuming destination repo.mtn-hg
scanning source...
sorting...
converting...
7 update2 "with" quotes
6 createdir1
5 movedir1
4 movedir
3 emptydir
2 dropdirectory
1 dirfilemove
0 dirfilemove2
7 files updated, 0 files merged, 0 files removed, 0 files unresolved
@ 9 "dirfilemove2" files: dir3/a dir3/d2/a
11 update2 "with" quotes
10 createdir1
9 movedir1
8 movedir
7 emptydir
6 dropdirectory
5 dirfilemove
4 dirfilemove2
3 dirdirmove
2 dirdirmove2
1 divergentdirmove
0 divergentdirmove2
11 files updated, 0 files merged, 0 files removed, 0 files unresolved
@ 13 "divergentdirmove2" files: dir7-2/c dir7/c dir7/dir9/b dir7/dir9/dir8/a dir8-2/a dir9-2/b
|
o 12 "divergentdirmove" files: dir7/c dir7/dir9/b dir7/dir9/dir8/a
|
o 11 "dirdirmove2" files: dir4/a dir6/dir4/a
|
o 10 "dirdirmove" files: dir4/a
|
o 9 "dirfilemove2" files: dir3/a dir3/d2/a
|
o 8 "dirfilemove" files: dir3/a
|
@ -106,6 +143,10 @@ dir1/subdir2_other/file1
dir2/a
dir2/newfile
dir3/d2/a
dir6/dir4/a
dir7-2/c
dir8-2/a
dir9-2/b
e
% contents
a
@ -135,3 +176,24 @@ dir2/a
dir2/newfile
dir3/d2/a
e
% check file directory directory move
bin2
dir1/subdir2/file1
dir1/subdir2_other/file1
dir2/a
dir2/newfile
dir3/d2/a
dir6/dir4/a
e
% check divergent directory moves
bin2
dir1/subdir2/file1
dir1/subdir2_other/file1
dir2/a
dir2/newfile
dir3/d2/a
dir6/dir4/a
dir7-2/c
dir8-2/a
dir9-2/b
e