##// END OF EJS Templates
manifest: fix a bug where working copy file 'add' mark was buggy...
manifest: fix a bug where working copy file 'add' mark was buggy Because the same dictionary was used to (1) get node from parent and (2) store annotated version, we could end up with buggy values. For example with a chain of renames: $ hg mv b c $ hg mv a b The value from 'b' would be updated as "<old-a>a", then the value of c would be updated as "<old-b>a'. With the current dictionary sharing this ends up with: '<new-c>' == '<old-a>aa' This value is double-wrong as we should use '<old-b>' and a single 'a'. We now use a read-only value for lookup. The 'test-rename.t' test is impacted because such a chained added file is suddenly detected as such.

File last commit:

r23401:fd1bab28 stable
r23401:fd1bab28 stable
Show More
test-rename.t
638 lines | 13.4 KiB | text/troff | Tads3Lexer
Nicolas Dumazet
tests: unify test-rename
r12098 $ hg init
$ mkdir d1 d1/d11 d2
$ echo d1/a > d1/a
$ echo d1/ba > d1/ba
$ echo d1/a1 > d1/d11/a1
$ echo d1/b > d1/b
$ echo d2/b > d2/b
$ hg add d1/a d1/b d1/ba d1/d11/a1 d2/b
Martin Geisler
tests: remove unneeded -d flags...
r12156 $ hg commit -m "1"
Nicolas Dumazet
tests: unify test-rename
r12098
rename a single file
$ hg rename d1/d11/a1 d2/c
Adrian Buehlmann
add: introduce a warning message for non-portable filenames (issue2756) (BC)...
r13962 $ hg --config ui.portablefilenames=abort rename d1/a d1/con.xml
abort: filename contains 'con', which is reserved on Windows: 'd1/con.xml'
[255]
Nicolas Dumazet
tests: unify test-rename
r12098 $ hg sum
Martin Geisler
tests: remove unneeded -d flags...
r12156 parent: 0:9b4b6e7b2c26 tip
Nicolas Dumazet
tests: unify test-rename
r12098 1
branch: default
commit: 1 renamed
update: (current)
$ hg status -C
A d2/c
d1/d11/a1
R d1/d11/a1
$ hg update -C
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ rm d2/c
Martin Geisler
test-rename: test with absolute paths
r12898 rename a single file using absolute paths
$ hg rename `pwd`/d1/d11/a1 `pwd`/d2/c
$ hg status -C
A d2/c
d1/d11/a1
R d1/d11/a1
$ hg update -C
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ rm d2/c
Nicolas Dumazet
tests: unify test-rename
r12098 rename --after a single file
$ mv d1/d11/a1 d2/c
$ hg rename --after d1/d11/a1 d2/c
$ hg status -C
A d2/c
d1/d11/a1
R d1/d11/a1
$ hg update -C
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ rm d2/c
rename --after a single file when src and tgt already tracked
$ mv d1/d11/a1 d2/c
$ hg addrem -s 0
removing d1/d11/a1
adding d2/c
$ hg rename --after d1/d11/a1 d2/c
$ hg status -C
A d2/c
d1/d11/a1
R d1/d11/a1
$ hg update -C
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ rm d2/c
timeless@mozdev.org
spelling: nonexistent
r17492 rename --after a single file to a nonexistent target filename
Nicolas Dumazet
tests: unify test-rename
r12098
$ hg rename --after d1/a dummy
Mads Kiilerich
tests: make (glob) on windows accept \ instead of /...
r15447 d1/a: not recording move - dummy does not exist (glob)
Nicolas Dumazet
tests: unify test-rename
r12098
move a single file to an existing directory
$ hg rename d1/d11/a1 d2
$ hg status -C
A d2/a1
d1/d11/a1
R d1/d11/a1
$ hg update -C
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ rm d2/a1
move --after a single file to an existing directory
$ mv d1/d11/a1 d2
$ hg rename --after d1/d11/a1 d2
$ hg status -C
A d2/a1
d1/d11/a1
R d1/d11/a1
$ hg update -C
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ rm d2/a1
rename a file using a relative path
$ (cd d1/d11; hg rename ../../d2/b e)
$ hg status -C
A d1/d11/e
d2/b
R d2/b
$ hg update -C
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ rm d1/d11/e
rename --after a file using a relative path
$ (cd d1/d11; mv ../../d2/b e; hg rename --after ../../d2/b e)
$ hg status -C
A d1/d11/e
d2/b
R d2/b
$ hg update -C
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ rm d1/d11/e
rename directory d1 as d3
$ hg rename d1/ d3
Mads Kiilerich
tests: make (glob) on windows accept \ instead of /...
r15447 moving d1/a to d3/a (glob)
moving d1/b to d3/b (glob)
moving d1/ba to d3/ba (glob)
moving d1/d11/a1 to d3/d11/a1 (glob)
Nicolas Dumazet
tests: unify test-rename
r12098 $ hg status -C
A d3/a
d1/a
A d3/b
d1/b
A d3/ba
d1/ba
A d3/d11/a1
d1/d11/a1
R d1/a
R d1/b
R d1/ba
R d1/d11/a1
$ hg update -C
4 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ rm -rf d3
rename --after directory d1 as d3
$ mv d1 d3
$ hg rename --after d1 d3
Mads Kiilerich
tests: make (glob) on windows accept \ instead of /...
r15447 moving d1/a to d3/a (glob)
moving d1/b to d3/b (glob)
moving d1/ba to d3/ba (glob)
moving d1/d11/a1 to d3/d11/a1 (glob)
Nicolas Dumazet
tests: unify test-rename
r12098 $ hg status -C
A d3/a
d1/a
A d3/b
d1/b
A d3/ba
d1/ba
A d3/d11/a1
d1/d11/a1
R d1/a
R d1/b
R d1/ba
R d1/d11/a1
$ hg update -C
4 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ rm -rf d3
move a directory using a relative path
$ (cd d2; mkdir d3; hg rename ../d1/d11 d3)
Mads Kiilerich
tests: make (glob) on windows accept \ instead of /...
r15447 moving ../d1/d11/a1 to d3/d11/a1 (glob)
Nicolas Dumazet
tests: unify test-rename
r12098 $ hg status -C
A d2/d3/d11/a1
d1/d11/a1
R d1/d11/a1
$ hg update -C
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ rm -rf d2/d3
move --after a directory using a relative path
$ (cd d2; mkdir d3; mv ../d1/d11 d3; hg rename --after ../d1/d11 d3)
Mads Kiilerich
tests: make (glob) on windows accept \ instead of /...
r15447 moving ../d1/d11/a1 to d3/d11/a1 (glob)
Nicolas Dumazet
tests: unify test-rename
r12098 $ hg status -C
A d2/d3/d11/a1
d1/d11/a1
R d1/d11/a1
$ hg update -C
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ rm -rf d2/d3
move directory d1/d11 to an existing directory d2 (removes empty d1)
$ hg rename d1/d11/ d2
Mads Kiilerich
tests: make (glob) on windows accept \ instead of /...
r15447 moving d1/d11/a1 to d2/d11/a1 (glob)
Nicolas Dumazet
tests: unify test-rename
r12098 $ hg status -C
A d2/d11/a1
d1/d11/a1
R d1/d11/a1
$ hg update -C
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ rm -rf d2/d11
move directories d1 and d2 to a new directory d3
$ mkdir d3
$ hg rename d1 d2 d3
Mads Kiilerich
tests: make (glob) on windows accept \ instead of /...
r15447 moving d1/a to d3/d1/a (glob)
moving d1/b to d3/d1/b (glob)
moving d1/ba to d3/d1/ba (glob)
moving d1/d11/a1 to d3/d1/d11/a1 (glob)
moving d2/b to d3/d2/b (glob)
Nicolas Dumazet
tests: unify test-rename
r12098 $ hg status -C
A d3/d1/a
d1/a
A d3/d1/b
d1/b
A d3/d1/ba
d1/ba
A d3/d1/d11/a1
d1/d11/a1
A d3/d2/b
d2/b
R d1/a
R d1/b
R d1/ba
R d1/d11/a1
R d2/b
$ hg update -C
5 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ rm -rf d3
move --after directories d1 and d2 to a new directory d3
$ mkdir d3
$ mv d1 d2 d3
$ hg rename --after d1 d2 d3
Mads Kiilerich
tests: make (glob) on windows accept \ instead of /...
r15447 moving d1/a to d3/d1/a (glob)
moving d1/b to d3/d1/b (glob)
moving d1/ba to d3/d1/ba (glob)
moving d1/d11/a1 to d3/d1/d11/a1 (glob)
moving d2/b to d3/d2/b (glob)
Nicolas Dumazet
tests: unify test-rename
r12098 $ hg status -C
A d3/d1/a
d1/a
A d3/d1/b
d1/b
A d3/d1/ba
d1/ba
A d3/d1/d11/a1
d1/d11/a1
A d3/d2/b
d2/b
R d1/a
R d1/b
R d1/ba
R d1/d11/a1
R d2/b
$ hg update -C
5 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ rm -rf d3
move everything under directory d1 to existing directory d2, do not
overwrite existing files (d2/b)
$ hg rename d1/* d2
d2/b: not overwriting - file exists
Mads Kiilerich
tests: make (glob) on windows accept \ instead of /...
r15447 moving d1/d11/a1 to d2/d11/a1 (glob)
Nicolas Dumazet
tests: unify test-rename
r12098 $ hg status -C
A d2/a
d1/a
A d2/ba
d1/ba
A d2/d11/a1
d1/d11/a1
R d1/a
R d1/ba
R d1/d11/a1
$ diff -u d1/b d2/b
Brodie Rao
tests: add glob matching for unified tests...
r12376 --- d1/b * (glob)
+++ d2/b * (glob)
Mads Kiilerich
test-rename: accept solaris diff...
r12405 @@ * (glob)
Nicolas Dumazet
tests: unify test-rename
r12098 -d1/b
+d2/b
Matt Mackall
tests: add exit codes to unified tests
r12316 [1]
Nicolas Dumazet
tests: unify test-rename
r12098 $ hg update -C
3 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ rm d2/a d2/ba d2/d11/a1
attempt to move one file into a non-existent directory
$ hg rename d1/a dx/
abort: destination dx/ is not a directory
Matt Mackall
tests: add exit codes to unified tests
r12316 [255]
Nicolas Dumazet
tests: unify test-rename
r12098 $ hg status -C
$ hg update -C
0 files updated, 0 files merged, 0 files removed, 0 files unresolved
attempt to move potentially more than one file into a non-existent directory
$ hg rename 'glob:d1/**' dx
abort: with multiple sources, destination must be an existing directory
Matt Mackall
tests: add exit codes to unified tests
r12316 [255]
Nicolas Dumazet
tests: unify test-rename
r12098
move every file under d1 to d2/d21 (glob)
$ mkdir d2/d21
$ hg rename 'glob:d1/**' d2/d21
Mads Kiilerich
tests: make (glob) on windows accept \ instead of /...
r15447 moving d1/a to d2/d21/a (glob)
moving d1/b to d2/d21/b (glob)
moving d1/ba to d2/d21/ba (glob)
moving d1/d11/a1 to d2/d21/a1 (glob)
Nicolas Dumazet
tests: unify test-rename
r12098 $ hg status -C
A d2/d21/a
d1/a
A d2/d21/a1
d1/d11/a1
A d2/d21/b
d1/b
A d2/d21/ba
d1/ba
R d1/a
R d1/b
R d1/ba
R d1/d11/a1
$ hg update -C
4 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ rm -rf d2/d21
move --after some files under d1 to d2/d21 (glob)
$ mkdir d2/d21
$ mv d1/a d1/d11/a1 d2/d21
$ hg rename --after 'glob:d1/**' d2/d21
Mads Kiilerich
tests: make (glob) on windows accept \ instead of /...
r15447 moving d1/a to d2/d21/a (glob)
d1/b: not recording move - d2/d21/b does not exist (glob)
d1/ba: not recording move - d2/d21/ba does not exist (glob)
moving d1/d11/a1 to d2/d21/a1 (glob)
Nicolas Dumazet
tests: unify test-rename
r12098 $ hg status -C
A d2/d21/a
d1/a
A d2/d21/a1
d1/d11/a1
R d1/a
R d1/d11/a1
$ hg update -C
2 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ rm -rf d2/d21
move every file under d1 starting with an 'a' to d2/d21 (regexp)
$ mkdir d2/d21
$ hg rename 're:d1/([^a][^/]*/)*a.*' d2/d21
Mads Kiilerich
tests: make (glob) on windows accept \ instead of /...
r15447 moving d1/a to d2/d21/a (glob)
moving d1/d11/a1 to d2/d21/a1 (glob)
Nicolas Dumazet
tests: unify test-rename
r12098 $ hg status -C
A d2/d21/a
d1/a
A d2/d21/a1
d1/d11/a1
R d1/a
R d1/d11/a1
$ hg update -C
2 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ rm -rf d2/d21
attempt to overwrite an existing file
$ echo "ca" > d1/ca
$ hg rename d1/ba d1/ca
d1/ca: not overwriting - file exists
$ hg status -C
? d1/ca
$ hg update -C
0 files updated, 0 files merged, 0 files removed, 0 files unresolved
forced overwrite of an existing file
$ echo "ca" > d1/ca
$ hg rename --force d1/ba d1/ca
$ hg status -C
A d1/ca
d1/ba
R d1/ba
$ hg update -C
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ rm d1/ca
Patrick Mezard
Merge with stable
r12345 attempt to overwrite an existing broken symlink
Adrian Buehlmann
test-rename.t: enable for Windows
r16902 #if symlink
Patrick Mezard
Merge with stable
r12345 $ ln -s ba d1/ca
$ hg rename --traceback d1/ba d1/ca
d1/ca: not overwriting - file exists
$ hg status -C
? d1/ca
$ hg update -C
0 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ rm d1/ca
Nicolas Dumazet
tests: unify test-rename
r12098 replace a symlink with a file
$ ln -s ba d1/ca
$ hg rename --force d1/ba d1/ca
$ hg status -C
A d1/ca
d1/ba
R d1/ba
$ hg update -C
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ rm d1/ca
Adrian Buehlmann
test-rename.t: enable for Windows
r16902 #endif
Nicolas Dumazet
tests: unify test-rename
r12098
do not copy more than one source file to the same destination file
$ mkdir d3
$ hg rename d1/* d2/* d3
Mads Kiilerich
tests: make (glob) on windows accept \ instead of /...
r15447 moving d1/d11/a1 to d3/d11/a1 (glob)
Nicolas Dumazet
tests: unify test-rename
r12098 d3/b: not overwriting - d2/b collides with d1/b
$ hg status -C
A d3/a
d1/a
A d3/b
d1/b
A d3/ba
d1/ba
A d3/d11/a1
d1/d11/a1
R d1/a
R d1/b
R d1/ba
R d1/d11/a1
$ hg update -C
4 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ rm -rf d3
Martin Geisler
test-rename: fix \" -> " in comments
r12897 move a whole subtree with "hg rename ."
Nicolas Dumazet
tests: unify test-rename
r12098
$ mkdir d3
$ (cd d1; hg rename . ../d3)
moving a to ../d3/d1/a
moving b to ../d3/d1/b
moving ba to ../d3/d1/ba
Mads Kiilerich
tests: make (glob) on windows accept \ instead of /...
r15447 moving d11/a1 to ../d3/d1/d11/a1 (glob)
Nicolas Dumazet
tests: unify test-rename
r12098 $ hg status -C
A d3/d1/a
d1/a
A d3/d1/b
d1/b
A d3/d1/ba
d1/ba
A d3/d1/d11/a1
d1/d11/a1
R d1/a
R d1/b
R d1/ba
R d1/d11/a1
$ hg update -C
4 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ rm -rf d3
Martin Geisler
test-rename: fix \" -> " in comments
r12897 move a whole subtree with "hg rename --after ."
Nicolas Dumazet
tests: unify test-rename
r12098
$ mkdir d3
$ mv d1/* d3
$ (cd d1; hg rename --after . ../d3)
moving a to ../d3/a
moving b to ../d3/b
moving ba to ../d3/ba
Mads Kiilerich
tests: make (glob) on windows accept \ instead of /...
r15447 moving d11/a1 to ../d3/d11/a1 (glob)
Nicolas Dumazet
tests: unify test-rename
r12098 $ hg status -C
A d3/a
d1/a
A d3/b
d1/b
A d3/ba
d1/ba
A d3/d11/a1
d1/d11/a1
R d1/a
R d1/b
R d1/ba
R d1/d11/a1
$ hg update -C
4 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ rm -rf d3
Martin Geisler
test-rename: fix \" -> " in comments
r12897 move the parent tree with "hg rename .."
Nicolas Dumazet
tests: unify test-rename
r12098
$ (cd d1/d11; hg rename .. ../../d3)
Mads Kiilerich
tests: make (glob) on windows accept \ instead of /...
r15447 moving ../a to ../../d3/a (glob)
moving ../b to ../../d3/b (glob)
moving ../ba to ../../d3/ba (glob)
Nicolas Dumazet
tests: unify test-rename
r12098 moving a1 to ../../d3/d11/a1
$ hg status -C
A d3/a
d1/a
A d3/b
d1/b
A d3/ba
d1/ba
A d3/d11/a1
d1/d11/a1
R d1/a
R d1/b
R d1/ba
R d1/d11/a1
$ hg update -C
4 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ rm -rf d3
skip removed files
$ hg remove d1/b
$ hg rename d1 d3
Mads Kiilerich
tests: make (glob) on windows accept \ instead of /...
r15447 moving d1/a to d3/a (glob)
moving d1/ba to d3/ba (glob)
moving d1/d11/a1 to d3/d11/a1 (glob)
Nicolas Dumazet
tests: unify test-rename
r12098 $ hg status -C
A d3/a
d1/a
A d3/ba
d1/ba
A d3/d11/a1
d1/d11/a1
R d1/a
R d1/b
R d1/ba
R d1/d11/a1
$ hg update -C
4 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ rm -rf d3
transitive rename
$ hg rename d1/b d1/bb
$ hg rename d1/bb d1/bc
$ hg status -C
A d1/bc
d1/b
R d1/b
$ hg update -C
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ rm d1/bc
transitive rename --after
$ hg rename d1/b d1/bb
$ mv d1/bb d1/bc
$ hg rename --after d1/bb d1/bc
$ hg status -C
A d1/bc
d1/b
R d1/b
$ hg update -C
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ rm d1/bc
$ echo "# idempotent renames (d1/b -> d1/bb followed by d1/bb -> d1/b)"
# idempotent renames (d1/b -> d1/bb followed by d1/bb -> d1/b)
$ hg rename d1/b d1/bb
$ echo "some stuff added to d1/bb" >> d1/bb
$ hg rename d1/bb d1/b
$ hg status -C
M d1/b
$ hg update -C
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
overwriting with renames (issue1959)
$ hg rename d1/a d1/c
$ hg rename d1/b d1/a
$ hg status -C
A d1/a
d1/b
A d1/c
d1/a
R d1/b
$ hg diff --git
diff --git a/d1/b b/d1/a
rename from d1/b
rename to d1/a
diff --git a/d1/a b/d1/c
copy from d1/a
copy to d1/c
$ hg update -C
Pierre-Yves David
manifest: fix a bug where working copy file 'add' mark was buggy...
r23401 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ rm d1/c # The file was marked as added, so 'hg update' action was 'forget'
Nicolas Dumazet
tests: unify test-rename
r12098
check illegal path components
$ hg rename d1/d11/a1 .hg/foo
Mads Kiilerich
tests: make (glob) on windows accept \ instead of /...
r15447 abort: path contains illegal component: .hg/foo (glob)
Matt Mackall
tests: add exit codes to unified tests
r12316 [255]
Nicolas Dumazet
tests: unify test-rename
r12098 $ hg status -C
$ hg rename d1/d11/a1 ../foo
Mads Kiilerich
scmutil: localize and improve 'not under root' message
r18450 abort: ../foo not under root '$TESTTMP'
Matt Mackall
tests: add exit codes to unified tests
r12316 [255]
Nicolas Dumazet
tests: unify test-rename
r12098 $ hg status -C
$ mv d1/d11/a1 .hg/foo
$ hg rename --after d1/d11/a1 .hg/foo
Mads Kiilerich
tests: make (glob) on windows accept \ instead of /...
r15447 abort: path contains illegal component: .hg/foo (glob)
Matt Mackall
tests: add exit codes to unified tests
r12316 [255]
Nicolas Dumazet
tests: unify test-rename
r12098 $ hg status -C
! d1/d11/a1
$ hg update -C
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ rm .hg/foo
$ hg rename d1/d11/a1 .hg
Mads Kiilerich
tests: make (glob) on windows accept \ instead of /...
r15447 abort: path contains illegal component: .hg/a1 (glob)
Matt Mackall
tests: add exit codes to unified tests
r12316 [255]
Nicolas Dumazet
tests: unify test-rename
r12098 $ hg status -C
$ hg rename d1/d11/a1 ..
Mads Kiilerich
tests: fix for windows - slashes and no serve
r18506 abort: ../a1 not under root '$TESTTMP' (glob)
Matt Mackall
tests: add exit codes to unified tests
r12316 [255]
Nicolas Dumazet
tests: unify test-rename
r12098 $ hg status -C
$ mv d1/d11/a1 .hg
$ hg rename --after d1/d11/a1 .hg
Mads Kiilerich
tests: make (glob) on windows accept \ instead of /...
r15447 abort: path contains illegal component: .hg/a1 (glob)
Matt Mackall
tests: add exit codes to unified tests
r12316 [255]
Nicolas Dumazet
tests: unify test-rename
r12098 $ hg status -C
! d1/d11/a1
$ hg update -C
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ rm .hg/a1
$ (cd d1/d11; hg rename ../../d2/b ../../.hg/foo)
Mads Kiilerich
tests: make (glob) on windows accept \ instead of /...
r15447 abort: path contains illegal component: .hg/foo (glob)
Matt Mackall
tests: add exit codes to unified tests
r12316 [255]
Nicolas Dumazet
tests: unify test-rename
r12098 $ hg status -C
$ (cd d1/d11; hg rename ../../d2/b ../../../foo)
Mads Kiilerich
scmutil: localize and improve 'not under root' message
r18450 abort: ../../../foo not under root '$TESTTMP'
Matt Mackall
tests: add exit codes to unified tests
r12316 [255]
Nicolas Dumazet
tests: unify test-rename
r12098 $ hg status -C