match: make 'listfile:' split on LF and CRLF
authorPatrick Mezard <pmezard@gmail.com>
Sat, 07 May 2011 21:12:30 +0200
changeset 14248 25c68ac247c1
parent 14247 c9720ada999c
child 14249 f4766e1bb0b3
match: make 'listfile:' split on LF and CRLF We want util.readfile() to operate in binary mode, so EOLs have to be handled correctly depending on the platform. It seems both easier and more convenient to treat LF and CRLF the same way on all platforms.
mercurial/match.py
tests/test-walk.t
--- a/mercurial/match.py	Sat May 07 17:25:12 2011 +0200
+++ b/mercurial/match.py	Sat May 07 21:12:30 2011 +0200
@@ -273,9 +273,12 @@
         elif kind in ('relglob', 'path'):
             name = util.normpath(name)
         elif kind in ('listfile', 'listfile0'):
-            delimiter = kind == 'listfile0' and '\0' or '\n'
             try:
-                files = util.readfile(name).split(delimiter)
+                files = util.readfile(name)
+                if kind == 'listfile0':
+                    files = files.split('\0')
+                else:
+                    files = files.splitlines()
                 files = [f for f in files if f]
             except EnvironmentError:
                 raise util.Abort(_("unable to read file list (%s)") % name)
--- a/tests/test-walk.t	Sat May 07 17:25:12 2011 +0200
+++ b/tests/test-walk.t	Sat May 07 21:12:30 2011 +0200
@@ -295,6 +295,18 @@
   $ hg debugwalk ignored/file
   f  ignored/file  ignored/file  exact
 
+Test listfile and listfile0
+
+  $ python -c "file('../listfile0', 'wb').write('fenugreek\0new\0')"
+  $ hg debugwalk -I 'listfile0:../listfile0'
+  f  fenugreek  fenugreek
+  f  new        new
+  $ python -c "file('../listfile', 'wb').write('fenugreek\nnew\r\nmammals/skunk\n')"
+  $ hg debugwalk -I 'listfile:../listfile'
+  f  fenugreek      fenugreek
+  f  mammals/skunk  mammals/skunk
+  f  new            new
+
   $ cd ..
   $ hg debugwalk -R t t/mammals/skunk
   f  mammals/skunk  t/mammals/skunk  exact