Mercurial > hg
changeset 16144:4546a8513dcd stable
localrepository: use 'changectx.dirs()' in 'status()' for directory patterns
when pattern which does not match against any files in working context
is specified, current implementation of 'localrepository.status()'
decides whether warning message about it should be shown or not by
'f not in context'
this works correctly for 'file pattern', but not for 'directory
pattern', because 'f not in context' always returns True for
directories, even if they are related to the context.
this patch uses 'changectx.dirs()' to examine whether specified
pattern is related to the context as a directory or not.
author | FUJIWARA Katsunori <foozy@lares.dti.ne.jp> |
---|---|
date | Thu, 23 Feb 2012 00:07:54 +0900 |
parents | fceb2964fa6c |
children | 616c2e278f18 |
files | mercurial/localrepo.py tests/test-status.t |
diffstat | 2 files changed, 39 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/localrepo.py Thu Feb 23 00:07:54 2012 +0900 +++ b/mercurial/localrepo.py Thu Feb 23 00:07:54 2012 +0900 @@ -1351,7 +1351,9 @@ if not parentworking: def bad(f, msg): - if f not in ctx1: + # 'f' may be a directory pattern from 'match.files()', + # so 'f not in ctx1' is not enough + if f not in ctx1 and f not in ctx1.dirs(): self.ui.warn('%s: %s\n' % (self.dirstate.pathto(f), msg)) match.bad = bad
--- a/tests/test-status.t Thu Feb 23 00:07:54 2012 +0900 +++ b/tests/test-status.t Thu Feb 23 00:07:54 2012 +0900 @@ -295,3 +295,39 @@ $ hg ci -q -A -m 'add another file' $ hg status -A --rev 1:2 010a C 010a + + $ cd .. + +test "hg status" with "directory pattern" which matches against files +only known on target revision. + + $ hg init repo6 + $ cd repo6 + + $ echo a > a.txt + $ hg add a.txt + $ hg commit -m '#0' + $ mkdir -p 1/2/3/4/5 + $ echo b > 1/2/3/4/5/b.txt + $ hg add 1/2/3/4/5/b.txt + $ hg commit -m '#1' + + $ hg update -C 0 > /dev/null + $ hg status -A + C a.txt + +the directory matching against specified pattern should be removed, +because directory existence prevents 'dirstate.walk()' from showing +warning message about such pattern. + + $ test ! -d 1 + $ hg status -A --rev 1 1/2/3/4/5/b.txt + R 1/2/3/4/5/b.txt + $ hg status -A --rev 1 1/2/3/4/5 + R 1/2/3/4/5/b.txt + $ hg status -A --rev 1 1/2/3 + R 1/2/3/4/5/b.txt + $ hg status -A --rev 1 1 + R 1/2/3/4/5/b.txt + + $ cd ..