That's right, kids. 'svn ls -R' calls RA->get_dir() on *every* directory in the tree, builds a single Mega-hash in memory, then sends back this massive thing to the client to print at the very end. It makes the whole operation seem very slow to the user, and we shouldn't be holding whole trees in memory like that. It's the way 'svn status' used to be. The True Solution is to make svn_client_ls() streamily invoke a callback, just like svn_client_status() does. This might be an svn 2.0 change. For svn 1.1, we could write a new public API that is a 'streamy' version of svn_client_ls(). Less ambitiously, we could at least make the current svn_client_ls() use a scratchpool for recursion... oy!