tests/test-rename.out
author Nicolas Dumazet <nicdumz.commits@gmail.com>
Sat, 23 May 2009 18:44:01 +0900
changeset 8600 d46cdfcecaf1
parent 8518 3f4f14eab085
child 10466 d1f209bb9564
permissions -rw-r--r--
inotify: proper fix for issue1542 (partially reverting 67e59a9886d5) issue1542 description: Unknown files (?) placed in a directory are still marked as present and unknown when the containing directory is moved out of the repository scope. Why 67e59a9886d5 was bad: * When the problem we're addressing only deals with unknown files, the fix to updatestatus applies for all statuses * The only reason to move the call schedule_work(wpath, 'd') seems to be that it allowed an updatestatus call on the deleted directory, in deleted(). But deleted() should not be called on directories in the first place. * After fixing an independant issue (1371), test-inotify-issue1542 was failing Fix: When processing a deletion of a directory, walk the tree of the unknown files and remove the entries from repowatcher. This step does not need to be added in the generic scan() routine: it is only necessary on a directory deletion.

# rename a single file
A d2/c
  d1/d11/a1
R d1/d11/a1
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
# rename --after a single file
A d2/c
  d1/d11/a1
R d1/d11/a1
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
# move a single file to an existing directory
A d2/a1
  d1/d11/a1
R d1/d11/a1
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
# move --after a single file to an existing directory
A d2/a1
  d1/d11/a1
R d1/d11/a1
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
# rename a file using a relative path
A d1/d11/e
  d2/b
R d2/b
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
# rename --after a file using a relative path
A d1/d11/e
  d2/b
R d2/b
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
# rename directory d1 as d3
moving d1/a to d3/a
moving d1/b to d3/b
moving d1/ba to d3/ba
moving d1/d11/a1 to d3/d11/a1
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
4 files updated, 0 files merged, 0 files removed, 0 files unresolved
# rename --after directory d1 as d3
moving d1/a to d3/a
moving d1/b to d3/b
moving d1/ba to d3/ba
moving d1/d11/a1 to d3/d11/a1
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
4 files updated, 0 files merged, 0 files removed, 0 files unresolved
# move a directory using a relative path
moving ../d1/d11/a1 to d3/d11/a1
A d2/d3/d11/a1
  d1/d11/a1
R d1/d11/a1
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
# move --after a directory using a relative path
moving ../d1/d11/a1 to d3/d11/a1
A d2/d3/d11/a1
  d1/d11/a1
R d1/d11/a1
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
# move directory d1/d11 to an existing directory d2 (removes empty d1)
moving d1/d11/a1 to d2/d11/a1
A d2/d11/a1
  d1/d11/a1
R d1/d11/a1
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
# move directories d1 and d2 to a new directory d3
moving d1/a to d3/d1/a
moving d1/b to d3/d1/b
moving d1/ba to d3/d1/ba
moving d1/d11/a1 to d3/d1/d11/a1
moving d2/b to d3/d2/b
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
5 files updated, 0 files merged, 0 files removed, 0 files unresolved
# move --after directories d1 and d2 to a new directory d3
moving d1/a to d3/d1/a
moving d1/b to d3/d1/b
moving d1/ba to d3/d1/ba
moving d1/d11/a1 to d3/d1/d11/a1
moving d2/b to d3/d2/b
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
5 files updated, 0 files merged, 0 files removed, 0 files unresolved
# move everything under directory d1 to existing directory d2, do not
# overwrite existing files (d2/b)
d2/b: not overwriting - file exists
moving d1/d11/a1 to d2/d11/a1
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
1c1
< d1/b
---
> d2/b
3 files updated, 0 files merged, 0 files removed, 0 files unresolved
# attempt to move one file into a non-existent directory
abort: destination dx/ is not a directory
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
abort: with multiple sources, destination must be an existing directory
# move every file under d1 to d2/d21 (glob)
moving d1/a to d2/d21/a
moving d1/b to d2/d21/b
moving d1/ba to d2/d21/ba
moving d1/d11/a1 to d2/d21/a1
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
4 files updated, 0 files merged, 0 files removed, 0 files unresolved
# move --after some files under d1 to d2/d21 (glob)
moving d1/a to d2/d21/a
moving d1/d11/a1 to d2/d21/a1
A d2/d21/a
  d1/a
A d2/d21/a1
  d1/d11/a1
R d1/a
R d1/d11/a1
2 files updated, 0 files merged, 0 files removed, 0 files unresolved
# move every file under d1 starting with an 'a' to d2/d21 (regexp)
moving d1/a to d2/d21/a
moving d1/d11/a1 to d2/d21/a1
A d2/d21/a
  d1/a
A d2/d21/a1
  d1/d11/a1
R d1/a
R d1/d11/a1
2 files updated, 0 files merged, 0 files removed, 0 files unresolved
# attempt to overwrite an existing file
d1/ca: not overwriting - file exists
? d1/ca
0 files updated, 0 files merged, 0 files removed, 0 files unresolved
# forced overwrite of an existing file
A d1/ca
  d1/ba
R d1/ba
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
# replace a symlink with a file
A d1/ca
  d1/ba
R d1/ba
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
# do not copy more than one source file to the same destination file
moving d1/d11/a1 to d3/d11/a1
d3/b: not overwriting - d2/b collides with d1/b
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
4 files updated, 0 files merged, 0 files removed, 0 files unresolved
# move a whole subtree with "hg rename ."
moving a to ../d3/d1/a
moving b to ../d3/d1/b
moving ba to ../d3/d1/ba
moving d11/a1 to ../d3/d1/d11/a1
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
4 files updated, 0 files merged, 0 files removed, 0 files unresolved
# move a whole subtree with "hg rename --after ."
moving a to ../d3/a
moving b to ../d3/b
moving ba to ../d3/ba
moving d11/a1 to ../d3/d11/a1
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
4 files updated, 0 files merged, 0 files removed, 0 files unresolved
# move the parent tree with "hg rename .."
moving ../a to ../../d3/a
moving ../b to ../../d3/b
moving ../ba to ../../d3/ba
moving a1 to ../../d3/d11/a1
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
4 files updated, 0 files merged, 0 files removed, 0 files unresolved
# skip removed files
moving d1/a to d3/a
moving d1/ba to d3/ba
moving d1/d11/a1 to d3/d11/a1
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
4 files updated, 0 files merged, 0 files removed, 0 files unresolved
# transitive rename
A d1/bc
  d1/b
R d1/b
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
# transitive rename --after
A d1/bc
  d1/b
R d1/b
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
# idempotent renames (d1/b -> d1/bb followed by d1/bb -> d1/b)
M d1/b
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
# check illegal path components
abort: path contains illegal component: .hg/foo
abort: ../foo not under root
abort: path contains illegal component: .hg/foo
! d1/d11/a1
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
abort: path contains illegal component: .hg/a1
abort: ../a1 not under root
abort: path contains illegal component: .hg/a1
! d1/d11/a1
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
abort: path contains illegal component: .hg/foo
abort: ../../../foo not under root