diff --git a/tests/list-tree.py b/tests/list-tree.py
new file mode 100644
index 0000000000000000000000000000000000000000..84607c8b5af824af4e04b5f60fbbd882754cb85e_dGVzdHMvbGlzdC10cmVlLnB5
--- /dev/null
+++ b/tests/list-tree.py
@@ -0,0 +1,27 @@
+from __future__ import (
+    absolute_import,
+    print_function,
+)
+
+import argparse
+import os
+
+ap = argparse.ArgumentParser()
+ap.add_argument('path', nargs='+')
+opts = ap.parse_args()
+
+def gather():
+    for p in opts.path:
+        if not os.path.exists(p):
+            return
+        if os.path.isdir(p):
+            yield p + os.path.sep
+            for dirpath, dirs, files in os.walk(p):
+                for d in dirs:
+                    yield os.path.join(dirpath, d) + os.path.sep
+                for f in files:
+                    yield os.path.join(dirpath, f)
+        else:
+            yield p
+
+print('\n'.join(sorted(gather())))
diff --git a/tests/test-largefiles-misc.t b/tests/test-largefiles-misc.t
index d4ad9d695a9e453b2ccd622207d14bca80550457_dGVzdHMvdGVzdC1sYXJnZWZpbGVzLW1pc2MudA==..84607c8b5af824af4e04b5f60fbbd882754cb85e_dGVzdHMvdGVzdC1sYXJnZWZpbGVzLW1pc2MudA== 100644
--- a/tests/test-largefiles-misc.t
+++ b/tests/test-largefiles-misc.t
@@ -1095,8 +1095,7 @@
 Move (and then undo) a directory move with only largefiles.
 
   $ listtree() {
-  >   find $@ \( -type d -printf "%p/\n" -o -type f -printf "%p\n" \) \
-  >           -a -name .hg -prune | sort
+  >   $PYTHON $TESTDIR/list-tree.py $@
   > }
 
   $ cd subrepo-root