##// END OF EJS Templates
dirstate.walk: use the file foldmap to normalize...
dirstate.walk: use the file foldmap to normalize Computing the set of directories in the dirstate is expensive. It turns out that it isn't necessary for operations like 'hg status' at all. Why? Consider the file 'foo/bar' on disk, which is represented in the dirstate as 'FOO/BAR'. On 'hg status', we'd walk down the directory tree, coming across 'foo' first. Before: we'd normalize 'foo' to 'FOO', then add 'FOO' to our visited stack. We'd then visit 'FOO', finding the file 'bar'. We'd normalize 'FOO/bar' to 'FOO/BAR', then add it to the results dict. After: we wouldn't normalize 'foo' at all. We'd add it to our visited stack, then visit 'foo', finding the file 'bar'. We'd normalize 'foo/bar' to 'FOO/BAR', then add it to the results dict. So whether we normalize intermediate directories or not actually makes no difference in most cases. The only case where normalization matters at all is if a file is replaced with a directory with the same case-folded name. In that case we can do a relatively cheap file normalization instead and still get away with not computing the set of directories. This is a nice boost in status performance. On OS X with case-insensitive HFS+, for a large repo with over 200,000 files, this brings down 'hg status' from 4.00 seconds to 3.62.

File last commit:

r24537:2bb13f2b stable
r24541:e235b5dc default
Show More
test-add.t
172 lines | 2.9 KiB | text/troff | Tads3Lexer
Nicolas Dumazet
tests: unify test-add
r11795 $ hg init a
$ cd a
$ echo a > a
$ hg add -n
adding a
$ hg st
? a
$ hg add
adding a
$ hg st
A a
$ hg forget a
$ hg add
adding a
$ hg st
A a
$ echo b > b
$ hg add -n b
$ hg st
A a
? b
Matt Mackall
tests: cleanup exit code handling in unified tests
r12365 $ hg add b
Nicolas Dumazet
tests: unify test-add
r11795 $ hg st
A a
A b
should fail
$ hg add b
b already tracked!
$ hg st
A a
A b
Adrian Buehlmann
test-add: enable for Windows
r16875 #if no-windows
Adrian Buehlmann
add: introduce a warning message for non-portable filenames (issue2756) (BC)...
r13962 $ echo foo > con.xml
$ hg --config ui.portablefilenames=jump add con.xml
abort: ui.portablefilenames value is invalid ('jump')
[255]
$ hg --config ui.portablefilenames=abort add con.xml
abort: filename contains 'con', which is reserved on Windows: 'con.xml'
[255]
$ hg st
A a
A b
? con.xml
$ hg add con.xml
warning: filename contains 'con', which is reserved on Windows: 'con.xml'
$ hg st
A a
A b
A con.xml
Mads Kiilerich
tests: use hghave eol-in-paths to test for support for ':' in filenames and " "...
r16974 $ hg forget con.xml
$ rm con.xml
#endif
#if eol-in-paths
Adrian Buehlmann
add: introduce a warning message for non-portable filenames (issue2756) (BC)...
r13962 $ echo bla > 'hello:world'
$ hg --config ui.portablefilenames=abort add
adding hello:world
abort: filename contains ':', which is reserved on Windows: 'hello:world'
[255]
$ hg st
A a
A b
? hello:world
$ hg --config ui.portablefilenames=ignore add
adding hello:world
$ hg st
A a
A b
A hello:world
Adrian Buehlmann
test-add: enable for Windows
r16875 #endif
Adrian Buehlmann
add: introduce a warning message for non-portable filenames (issue2756) (BC)...
r13962
Nicolas Dumazet
tests: unify test-add
r11795 $ hg ci -m 0 --traceback
should fail
$ hg add a
a already tracked!
$ echo aa > a
$ hg ci -m 1
$ hg up 0
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ echo aaa > a
$ hg ci -m 2
created new head
$ hg merge
merging a
warning: conflicts during merge.
Matt Mackall
merge: give a special message for internal:merge failure (issue3105)
r15501 merging a incomplete! (edit conflicts, then use 'hg resolve --mark')
Nicolas Dumazet
tests: unify test-add
r11795 0 files updated, 0 files merged, 0 files removed, 1 files unresolved
Brodie Rao
merge: suggest 'hg up -C .' for discarding changes, not 'hg up -C'...
r12314 use 'hg resolve' to retry unresolved file merges or 'hg update -C .' to abandon
Matt Mackall
tests: add exit codes to unified tests
r12316 [1]
Nicolas Dumazet
tests: unify test-add
r11795 $ hg st
M a
? a.orig
should fail
$ hg add a
a already tracked!
$ hg st
M a
? a.orig
$ hg resolve -m a
Pierre-Yves David
resolve: add parenthesis around "no more unresolved files" message...
r21947 (no more unresolved files)
Nicolas Dumazet
tests: unify test-add
r11795 $ hg ci -m merge
Martin Geisler
tests: added a short description to issue numbers...
r12399 Issue683: peculiarity with hg revert of an removed then added file
Nicolas Dumazet
tests: unify test-add
r11795
$ hg forget a
$ hg add a
$ hg st
? a.orig
$ hg rm a
$ hg st
R a
? a.orig
$ echo a > a
$ hg add a
$ hg st
M a
? a.orig
Martin von Zweigbergk
add: add back forgotten files even when not matching exactly (BC)...
r23258 Forgotten file can be added back (as either clean or modified)
$ hg forget b
$ hg add b
$ hg st -A b
C b
$ hg forget b
$ echo modified > b
$ hg add b
$ hg st -A b
M b
$ hg revert -qC b
Nicolas Dumazet
tests: unify test-add
r11795 $ hg add c && echo "unexpected addition of missing file"
Mads Kiilerich
tests: hide 'No such file or directory' messages...
r15521 c: * (glob)
Matt Mackall
tests: add exit codes to unified tests
r12316 [1]
Nicolas Dumazet
tests: unify test-add
r11795 $ echo c > c
$ hg add d c && echo "unexpected addition of missing file"
Mads Kiilerich
tests: hide 'No such file or directory' messages...
r15521 d: * (glob)
Matt Mackall
tests: add exit codes to unified tests
r12316 [1]
Nicolas Dumazet
tests: unify test-add
r11795 $ hg st
M a
A c
? a.orig
Siddharth Agarwal
merge: move forgets to the beginning of the action list...
r19987 $ hg up -C
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
forget and get should have the right order: added but missing dir should be
forgotten before file with same name is added
$ echo file d > d
$ hg add d
$ hg ci -md
$ hg rm d
$ mkdir d
$ echo a > d/a
$ hg add d/a
$ rm -r d
$ hg up -C
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ cat d
file d
Nicolas Dumazet
tests: unify test-add
r11795
Mads Kiilerich
tests: add missing trailing 'cd ..'...
r16913 $ cd ..