changeset 24408:caa6b6c65dc3

fileset: add a fileset for portable filenames This has mostly the same semantics as the files that the 'ui.portablefilenames' config option would warn or abort about. The only difference is filenames that case-fold to the same string -- given a set of filenames we've already checked we can check whether a new one collides with them, but we don't have a way to tell which filename it collided with.
author Siddharth Agarwal <sid0@fb.com>
date Thu, 19 Mar 2015 21:26:18 -0700
parents 1297480ed347
children 30b8db6d0c04
files mercurial/fileset.py tests/test-fileset.t
diffstat 2 files changed, 43 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/mercurial/fileset.py	Mon Mar 16 16:01:16 2015 -0700
+++ b/mercurial/fileset.py	Thu Mar 19 21:26:18 2015 -0700
@@ -256,6 +256,16 @@
     ignore = mctx.ctx.repo().dirstate._ignore
     return [f for f in mctx.subset if ignore(f)]
 
+def portable(mctx, x):
+    """``portable()``
+    File that has a portable name. (This doesn't include filenames with case
+    collisions.)
+    """
+    # i18n: "portable" is a keyword
+    getargs(x, 0, 0, _("portable takes no arguments"))
+    checkwinfilename = util.checkwinfilename
+    return [f for f in mctx.subset if checkwinfilename(f) is None]
+
 def grep(mctx, x):
     """``grep(regex)``
     File contains the given regular expression.
@@ -416,6 +426,7 @@
     'ignored': ignored,
     'hgignore': hgignore,
     'modified': modified,
+    'portable': portable,
     'removed': removed,
     'resolved': resolved,
     'size': size,
--- a/tests/test-fileset.t	Mon Mar 16 16:01:16 2015 -0700
+++ b/tests/test-fileset.t	Thu Mar 19 21:26:18 2015 -0700
@@ -111,6 +111,28 @@
   $ hg add b2link
 #endif
 
+#if no-windows
+  $ echo foo > con.xml
+  $ echo bar > 'bar '
+  $ echo baz > 'baz\'
+  $ ls
+  b1
+  b2
+  b2link
+  bar 
+  baz\
+  bin
+  c1
+  c2
+  c3
+  con.xml
+  $ fileset 'not portable()'
+  bar 
+  baz\
+  con.xml
+  $ hg --config ui.portablefilenames=ignore add con.xml 'bar ' 'baz\'
+#endif
+
   >>> file('1k', 'wb').write(' '*1024)
   >>> file('2k', 'wb').write(' '*2048)
   $ hg add 1k 2k
@@ -220,6 +242,13 @@
   b2link
 #endif
 
+#if no-windows
+  $ fileset -r1 'not portable()'
+  bar 
+  baz\
+  con.xml
+#endif
+
   $ fileset -r4 'subrepo("re:su.*")'
   sub
   $ fileset -r4 'subrepo("sub")'
@@ -242,7 +271,10 @@
   a1
   b1
   b2
+  bar 
+  baz\
   c1
+  con.xml
   mixed
   $ fileset 'eol(mac)'
   mac