# HG changeset patch # User Dan Nicolaescu # Date 1223860609 0 # Node ID 2cae4bd13e6719a0359fcdace504113eafe3a2ac # Parent bde81f3667cde57c5ec8ab35653fff6a1ee62a73 * vc-hooks.el (vc-stay-local): Add a new choice and default to it. * vc-cvs.el (vc-cvs-dir-stay-local): Remove. (vc-cvs-stay-local): Add a new choice and default to it. (vc-cvs-dir-status): Use the new vc-stay-local choice. * vc-svn.el (vc-svn-dir-status): Use the new vc-stay-local choice. diff -r bde81f3667cd -r 2cae4bd13e67 lisp/ChangeLog --- a/lisp/ChangeLog Sun Oct 12 23:06:29 2008 +0000 +++ b/lisp/ChangeLog Mon Oct 13 01:16:49 2008 +0000 @@ -1,3 +1,13 @@ +2008-10-13 Dan Nicolaescu + + * vc-hooks.el (vc-stay-local): Add a new choice and default to it. + + * vc-cvs.el (vc-cvs-dir-stay-local): Remove. + (vc-cvs-stay-local): Add a new choice and default to it. + (vc-cvs-dir-status): Use the new vc-stay-local choice. + + * vc-svn.el (vc-svn-dir-status): Use the new vc-stay-local choice. + 2008-10-12 Stephen Leake * progmodes/ada-mode.el (ada-get-indent-end, ada-goto-matching-start): diff -r bde81f3667cd -r 2cae4bd13e67 lisp/vc-cvs.el --- a/lisp/vc-cvs.el Sun Oct 12 23:06:29 2008 +0000 +++ b/lisp/vc-cvs.el Mon Oct 13 01:16:49 2008 +0000 @@ -105,11 +105,15 @@ :version "21.1" :group 'vc) -(defcustom vc-cvs-stay-local t +(defcustom vc-cvs-stay-local 'only-file "*Non-nil means use local operations when possible for remote repositories. This avoids slow queries over the network and instead uses heuristics and past information to determine the current status of a file. +If value is the symbol `only-file' `vc-dir' will connect to the +server, but heuristics will be used to determine the status for +all other VC operations. + The value can also be a regular expression or list of regular expressions to match against the host name of a repository; then VC only stays local for hosts that match it. Alternatively, the value @@ -117,19 +121,12 @@ symbol `except'; then VC always stays local except for hosts matched by these regular expressions." :type '(choice (const :tag "Always stay local" t) - (const :tag "Don't stay local" nil) + (const :tag "Only for file operations" 'only-file) + (const :tag "Don't stay local" nil) (list :format "\nExamine hostname and %v" :tag "Examine hostname ..." (set :format "%v" :inline t (const :format "%t" :tag "don't" except)) (regexp :format " stay local,\n%t: %v" :tag "if it matches") (repeat :format "%v%i\n" :inline t (regexp :tag "or")))) - :version "21.1" - :group 'vc) - -(defcustom vc-cvs-dir-stay-local nil - "*Non-nil means use local operations when possible for remote repositories. -This avoids slow queries over the network and instead uses heuristics -and past information to determine the current status of files for `vc-dir'." - :type 'boolean :version "23.1" :group 'vc) @@ -961,17 +958,18 @@ (defun vc-cvs-dir-status (dir update-function) "Create a list of conses (file . state) for DIR." ;; FIXME check all files in DIR instead? - (if vc-cvs-dir-stay-local - (vc-cvs-dir-status-heuristic dir update-function) - (vc-cvs-command (current-buffer) 'async dir "-f" "status") - ;; Alternative implementation: use the "update" command instead of - ;; the "status" command. - ;; (vc-cvs-command (current-buffer) 'async - ;; (file-relative-name dir) - ;; "-f" "-n" "update" "-d" "-P") - (vc-exec-after - `(vc-cvs-after-dir-status (quote ,update-function))))) - + (let ((local (vc-stay-local-p dir))) + (if (and local (not (eq local 'only-file))) + (vc-cvs-dir-status-heuristic dir update-function) + (vc-cvs-command (current-buffer) 'async dir "-f" "status") + ;; Alternative implementation: use the "update" command instead of + ;; the "status" command. + ;; (vc-cvs-command (current-buffer) 'async + ;; (file-relative-name dir) + ;; "-f" "-n" "update" "-d" "-P") + (vc-exec-after + `(vc-cvs-after-dir-status (quote ,update-function)))))) + (defun vc-cvs-dir-status-files (dir files default-state update-function) "Create a list of conses (file . state) for DIR." (apply 'vc-cvs-command (current-buffer) 'async dir "-f" "status" files) diff -r bde81f3667cd -r 2cae4bd13e67 lisp/vc-hooks.el --- a/lisp/vc-hooks.el Sun Oct 12 23:06:29 2008 +0000 +++ b/lisp/vc-hooks.el Mon Oct 13 01:16:49 2008 +0000 @@ -142,24 +142,30 @@ (funcall vc-mistrust-permissions (vc-backend-subdirectory-name file))))) -(defcustom vc-stay-local t +(defcustom vc-stay-local 'only-file "Non-nil means use local operations when possible for remote repositories. This avoids slow queries over the network and instead uses heuristics and past information to determine the current status of a file. +If value is the symbol `only-file' `vc-dir' will connect to the +server, but heuristics will be used to determine the status for +all other VC operations. + The value can also be a regular expression or list of regular expressions to match against the host name of a repository; then VC only stays local for hosts that match it. Alternatively, the value can be a list of regular expressions where the first element is the symbol `except'; then VC always stays local except for hosts matched by these regular expressions." - :type '(choice (const :tag "Always stay local" t) + :type '(choice + (const :tag "Always stay local" t) + (const :tag "Only for file operations" 'only-file) (const :tag "Don't stay local" nil) (list :format "\nExamine hostname and %v" :tag "Examine hostname ..." (set :format "%v" :inline t (const :format "%t" :tag "don't" except)) (regexp :format " stay local,\n%t: %v" :tag "if it matches") (repeat :format "%v%i\n" :inline t (regexp :tag "or")))) - :version "22.1" + :version "23.1" :group 'vc) (defun vc-stay-local-p (file) diff -r bde81f3667cd -r 2cae4bd13e67 lisp/vc-svn.el --- a/lisp/vc-svn.el Sun Oct 12 23:06:29 2008 +0000 +++ b/lisp/vc-svn.el Mon Oct 13 01:16:49 2008 +0000 @@ -180,7 +180,8 @@ CALLBACK is called as (CALLBACK RESULT BUFFER), where RESULT is a list of conses (FILE . STATE) for directory DIR." ;; FIXME should this rather be all the files in dir? - (let ((remote (not (vc-stay-local-p dir)))) + (let* ((local (vc-stay-local-p dir)) + (remote (and local (not (eq local 'only-file))))) (vc-svn-command (current-buffer) 'async nil "status" (if remote "-u")) (vc-exec-after