[PATCH 16 of 19 STABLE] largefiles: show unknown files matching against 'directory pattern' correctly
FUJIWARA Katsunori
foozy at lares.dti.ne.jp
Mon Feb 27 10:46:41 UTC 2012
# HG changeset patch
# User FUJIWARA Katsunori <foozy at lares.dti.ne.jp>
# Date 1330335216 -32400
# Branch stable
# Node ID 65d6e452e239d195df6c14f5191ac7d802fdc51f
# Parent 0e26a7e35a1ec4cfde13987fd15e977336e570ce
largefiles: show unknown files matching against 'directory pattern' correctly
current implementation can't show status for unknown files correctly
in 'working' route, if specified pattern is:
- 'directory pattern', and
- related to largefiles
there are some examination ways for listing specified (non-STANDIN)
'directory pattern' in 'match.files()':
1. always:
this causes unexpected warning message ('No such file or
directory'), if:
a. specified directory doesn't exist, and
b. there is no normal file matching against specified
pattern in source context
2. only if it is related to normal files in current/target context:
this works right, only if already tracked normal file happens
to exist under specified directory, because dirstate has no
entry in 'dirs()' for unknown files
3. (2) or specified directory exists:
this works right, but increases cost by stat system call
this patch chooses (3) for correct behavior.
diff -r 0e26a7e35a1e -r 65d6e452e239 hgext/largefiles/reposetup.py
--- a/hgext/largefiles/reposetup.py Mon Feb 27 18:33:36 2012 +0900
+++ b/hgext/largefiles/reposetup.py Mon Feb 27 18:33:36 2012 +0900
@@ -170,7 +170,10 @@
continue
if dinctx(sf):
yield sf # directory pattern for large file
- continue
+ # file existence check is needed to
+ # show unknown files correctly
+ if not (dinctx(f) or os.path.lexists(f)):
+ continue
yield f
def matchfn(orgmatchfn, f):
wf = lfutil.splitstandin(f)
diff -r 0e26a7e35a1e -r 65d6e452e239 tests/test-largefiles.t
--- a/tests/test-largefiles.t Mon Feb 27 18:33:36 2012 +0900
+++ b/tests/test-largefiles.t Mon Feb 27 18:33:36 2012 +0900
@@ -1111,6 +1111,40 @@
$ hg status -A --rev . --rev 4 another1
A another1/e.large
+add unknown file under same directory:
+
+ $ echo f > sub/sub/f.normal
+
+ $ hg status -A sub/sub
+ ? sub/sub/f.normal
+ C sub/sub/d.large
+ $ hg status -A --rev 2 sub/sub
+ A sub/sub/d.large
+ ? sub/sub/f.normal
+ $ hg status -A --rev . --rev 2 sub/sub
+ R sub/sub/d.large
+ $ hg status -A --rev 0 --rev 3 sub/sub
+ A sub/sub/d.large
+
+add normal file under same directory:
+
+ $ hg add sub/sub/f.normal
+ $ hg commit -m '#5'
+ Invoking status precommit hook
+ A sub/sub/f.normal
+
+ $ hg status -A sub/sub
+ C sub/sub/d.large
+ C sub/sub/f.normal
+ $ hg status -A --rev 2 sub/sub
+ A sub/sub/d.large
+ A sub/sub/f.normal
+ $ hg status -A --rev . --rev 2 sub/sub
+ R sub/sub/d.large
+ R sub/sub/f.normal
+ $ hg status -A --rev 0 --rev 3 sub/sub
+ A sub/sub/d.large
+
$ cd ..
tests for pattern matching for removed files in working context:
More information about the Mercurial-devel
mailing list