# HG changeset patch # User Patrick Mezard # Date 2011-05-07 19:12:30 # Node ID 25c68ac247c1681035ff446df503d2fa18307471 # Parent c9720ada999c17cc9d1d7aa64f0851cd68df428b 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. diff --git a/mercurial/match.py b/mercurial/match.py --- a/mercurial/match.py +++ b/mercurial/match.py @@ -273,9 +273,12 @@ def _normalize(names, default, root, cwd 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) diff --git a/tests/test-walk.t b/tests/test-walk.t --- a/tests/test-walk.t +++ b/tests/test-walk.t @@ -295,6 +295,18 @@ Test patterns: $ 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