Subject: bug#19387: SVN VC backend is unbearably slow on larger repositories

From: Dmitry Gutov <[email-masked]>
Date: Mon, 15 Dec 2014 17:45:09 +0200

Paul Pogonyshev <[email-masked]> writes:

> When I 'C-x v d' my working directory in a recent Emacs, it prints
> "Traversing directory: ..." and goes through the whole repository. I have
> no idea what it looks for. After about 1 minute of waiting I C-g'd it.
>
> It used to work instantly (well, in under 2 seconds anyway) a couple of
> weeks ago; don't remember more precisely.

I can confirm this. The culprit is b1a765b3. We should probably revert
the essence of the change, as well as reinstate the FIXME (the meaning
of which is not exactly clear to me).

diff --git a/lisp/vc/vc-svn.el b/lisp/vc/vc-svn.el
index eedccd8..3f977e0 100644
--- a/lisp/vc/vc-svn.el
+++ b/lisp/vc/vc-svn.el
@@ -202,11 +202,11 @@ If you want to force an empty list of arguments, use t."
 
 (autoload 'vc-expand-dirs "vc")
 
-(defun vc-svn-dir-status-files (dir files callback)
+(defun vc-svn-dir-status-files (_dir files callback)
   "Run 'svn status' for DIR and update BUFFER via CALLBACK.
 CALLBACK is called as (CALLBACK RESULT BUFFER), where
 RESULT is a list of conses (FILE . STATE) for directory DIR."
-  (if (not files) (setq files (vc-expand-dirs (list dir) 'SVN)))
+  ;; FIXME shouldn't this rather default to all the files in dir?
   (vc-svn-command (current-buffer) 'async nil "status" "-u" files)
   (vc-run-delayed (vc-svn-after-dir-status callback)))