emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] master b1a765b: In vc, abolish the dir-status method.


From: Eric S. Raymond
Subject: [Emacs-diffs] master b1a765b: In vc, abolish the dir-status method.
Date: Tue, 02 Dec 2014 15:11:59 +0000

branch: master
commit b1a765b3a8586cd53c21579982c8fbc0ce534336
Author: Eric S. Raymond <address@hidden>
Commit: Eric S. Raymond <address@hidden>

    In vc, abolish the dir-status method.
---
 lisp/ChangeLog     |    3 +++
 lisp/vc/vc-arch.el |    5 +++--
 lisp/vc/vc-bzr.el  |   11 ++---------
 lisp/vc/vc-cvs.el  |   17 ++++++-----------
 lisp/vc/vc-dir.el  |    2 +-
 lisp/vc/vc-git.el  |    9 ++-------
 lisp/vc/vc-hg.el   |    6 ------
 lisp/vc/vc-mtn.el  |    5 +++--
 lisp/vc/vc-rcs.el  |   10 ++++------
 lisp/vc/vc-sccs.el |   10 ++++------
 lisp/vc/vc-src.el  |   11 +++++------
 lisp/vc/vc-svn.el  |   16 +++++++---------
 lisp/vc/vc.el      |   52 ++++++++++++++++++++++++++++------------------------
 13 files changed, 68 insertions(+), 89 deletions(-)

diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index 8226b3d..364d28e 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -1,5 +1,8 @@
 2014-12-02  Eric S. Raymond  <address@hidden>
 
+       *  vc.el, all backends: API simplification: Abolish dir-status.
+       It's replaced by dir-status-files.
+
        * vc.el, all backends: API simplification: Remove 4th
        'default-state' argument from vc-dir-status files and its backend
        methods - no backend method ever set it.  It was used only in the
diff --git a/lisp/vc/vc-arch.el b/lisp/vc/vc-arch.el
index 1bdad2a..d1344f2 100644
--- a/lisp/vc/vc-arch.el
+++ b/lisp/vc/vc-arch.el
@@ -310,10 +310,11 @@ Only the value `maybe' can be trusted :-(."
                    'up-to-date
                  'edited)))))))))
 
-;; -dir-status called from vc-dir, which loads vc, which loads vc-dispatcher.
+;; dir-status-files called from vc-dir, which loads vc,
+;; which loads vc-dispatcher.
 (declare-function vc-exec-after "vc-dispatcher" (code))
 
-(defun vc-arch-dir-status (dir callback)
+(defun vc-arch-dir-status-files (dir _files callback)
   "Run 'tla inventory' for DIR and pass results to CALLBACK.
 CALLBACK expects (ENTRIES &optional MORE-TO-COME); see
 `vc-dir-refresh'."
diff --git a/lisp/vc/vc-bzr.el b/lisp/vc/vc-bzr.el
index a534a1c..1963f4e 100644
--- a/lisp/vc/vc-bzr.el
+++ b/lisp/vc/vc-bzr.el
@@ -967,9 +967,9 @@ stream.  Standard error output is discarded."
         (forward-line))
       (funcall update-function result)))
 
-(defun vc-bzr-dir-status (dir update-function)
+(defun vc-bzr-dir-status-files (dir files update-function)
   "Return a list of conses (file . state) for DIR."
-  (vc-bzr-command "status" (current-buffer) 'async dir "-v" "-S")
+  (apply 'vc-bzr-command "status" (current-buffer) 'async dir "-v" "-S" files)
   (vc-run-delayed
    (vc-bzr-after-dir-status update-function
                             ;; "bzr status" results are relative to
@@ -981,13 +981,6 @@ stream.  Standard error output is discarded."
                             ;; frob the results accordingly.
                             (file-relative-name dir (vc-bzr-root dir)))))
 
-(defun vc-bzr-dir-status-files (dir files update-function)
-  "Return a list of conses (file . state) for DIR."
-  (apply 'vc-bzr-command "status" (current-buffer) 'async dir "-v" "-S" files)
-  (vc-run-delayed
-   (vc-bzr-after-dir-status update-function
-                            (file-relative-name dir (vc-bzr-root dir)))))
-
 (defvar vc-bzr-shelve-map
   (let ((map (make-sparse-keymap)))
     ;; Turn off vc-dir marking
diff --git a/lisp/vc/vc-cvs.el b/lisp/vc/vc-cvs.el
index b07a05c..a5b50c1 100644
--- a/lisp/vc/vc-cvs.el
+++ b/lisp/vc/vc-cvs.el
@@ -1069,13 +1069,14 @@ state."
     (if basedir result
       (funcall update-function result))))
 
-(defun vc-cvs-dir-status (dir update-function)
-  "Create a list of conses (file . state) for DIR."
-  ;; FIXME check all files in DIR instead?
+(defun vc-cvs-dir-status-files (dir files update-function)
+  "Create a list of conses (file . state) for FILES in DIR.
+Query all files in DIR if files is nil."
   (let ((local (vc-cvs-stay-local-p dir)))
-    (if (and local (not (eq local 'only-file)))
+    (if (and (not files) local (not (eq local 'only-file)))
        (vc-cvs-dir-status-heuristic dir update-function)
-      (vc-cvs-command (current-buffer) 'async dir "-f" "status")
+      (if (not files) (setq files (vc-expand-dirs (list dir) 'CVS)))
+      (vc-cvs-command (current-buffer) 'async dir "-f" "status" files)
       ;; Alternative implementation: use the "update" command instead of
       ;; the "status" command.
       ;; (vc-cvs-command (current-buffer) 'async
@@ -1084,12 +1085,6 @@ state."
       (vc-run-delayed
        (vc-cvs-after-dir-status update-function)))))
 
-(defun vc-cvs-dir-status-files (dir files update-function)
-  "Create a list of conses (file . state) for DIR."
-  (apply 'vc-cvs-command (current-buffer) 'async dir "-f" "status" files)
-  (vc-run-delayed
-   (vc-cvs-after-dir-status update-function)))
-
 (defun vc-cvs-file-to-string (file)
   "Read the content of FILE and return it as a string."
   (condition-case nil
diff --git a/lisp/vc/vc-dir.el b/lisp/vc/vc-dir.el
index d97b9cd..7e4bc13 100644
--- a/lisp/vc/vc-dir.el
+++ b/lisp/vc/vc-dir.el
@@ -1097,7 +1097,7 @@ Throw an error if another update process is in progress."
           (setq default-directory def-dir)
           (erase-buffer)
           (vc-call-backend
-           backend 'dir-status def-dir
+           backend 'dir-status-files def-dir nil
            (lambda (entries &optional more-to-come)
              ;; ENTRIES is a list of (FILE VC_STATE EXTRA) items.
              ;; If MORE-TO-COME is true, then more updates will come from
diff --git a/lisp/vc/vc-git.el b/lisp/vc/vc-git.el
index fad834b..048857b 100644
--- a/lisp/vc/vc-git.el
+++ b/lisp/vc/vc-git.el
@@ -50,8 +50,7 @@
 ;; STATE-QUERYING FUNCTIONS
 ;; * registered (file)                             OK
 ;; * state (file)                                  OK
-;; * dir-status (dir update-function)              OK
-;; - dir-status-files (dir files uf)               NOT NEEDED
+;; - dir-status-files (dir files uf)               OK
 ;; * working-revision (file)                       OK
 ;; - latest-on-branch-p (file)                     NOT NEEDED
 ;; * checkout-model (files)                        OK
@@ -474,15 +473,11 @@ or an empty string if none."
   (vc-run-delayed
    (vc-git-after-dir-status-stage stage files update-function)))
 
-(defun vc-git-dir-status (_dir update-function)
+(defun vc-git-dir-status-files (_dir files update-function)
   "Return a list of (FILE STATE EXTRA) entries for DIR."
   ;; Further things that would have to be fixed later:
   ;; - how to handle unregistered directories
   ;; - how to support vc-dir on a subdir of the project tree
-  (vc-git-dir-status-goto-stage 'update-index nil update-function))
-
-(defun vc-git-dir-status-files (_dir files update-function)
-  "Return a list of (FILE STATE EXTRA) entries for FILES in DIR."
   (vc-git-dir-status-goto-stage 'update-index files update-function))
 
 (defvar vc-git-stash-map
diff --git a/lisp/vc/vc-hg.el b/lisp/vc/vc-hg.el
index bfd1447..7099def 100644
--- a/lisp/vc/vc-hg.el
+++ b/lisp/vc/vc-hg.el
@@ -43,7 +43,6 @@
 ;; STATE-QUERYING FUNCTIONS
 ;; * registered (file)                         OK
 ;; * state (file)                              OK
-;; - dir-status (dir update-function)          OK
 ;; - dir-status-files (dir files uf)           OK
 ;; - dir-extra-headers (dir)                   OK
 ;; - dir-printer (fileinfo)                    OK
@@ -613,11 +612,6 @@ REV is the revision to check out into WORKFILE."
 ;; Follows vc-exec-after.
 (declare-function vc-set-async-update "vc-dispatcher" (process-buffer))
 
-(defun vc-hg-dir-status (dir update-function)
-  (vc-hg-command (current-buffer) 'async dir "status" "-C")
-  (vc-run-delayed
-   (vc-hg-after-dir-status update-function)))
-
 (defun vc-hg-dir-status-files (dir files update-function)
   (apply 'vc-hg-command (current-buffer) 'async dir "status" "-mardui" "-C" 
files)
   (vc-run-delayed
diff --git a/lisp/vc/vc-mtn.el b/lisp/vc/vc-mtn.el
index 85aaf3d..f35e87e 100644
--- a/lisp/vc/vc-mtn.el
+++ b/lisp/vc/vc-mtn.el
@@ -126,10 +126,11 @@ If nil, use the value of `vc-diff-switches'.  If t, use 
no switches."
             ((match-end 2) (push (list (match-string 3) 'added) result))))
     (funcall update-function result)))
 
-;; -dir-status called from vc-dir, which loads vc, which loads vc-dispatcher.
+;; dir-status-files called from vc-dir, which loads vc,
+;; which loads vc-dispatcher.
 (declare-function vc-exec-after "vc-dispatcher" (code))
 
-(defun vc-mtn-dir-status (dir update-function)
+(defun vc-mtn-dir-status-files (dir _files update-function)
   (vc-mtn-command (current-buffer) 'async dir "status")
   (vc-run-delayed
    (vc-mtn-after-dir-status update-function)))
diff --git a/lisp/vc/vc-rcs.el b/lisp/vc/vc-rcs.el
index 5b37586..20b292f 100644
--- a/lisp/vc/vc-rcs.el
+++ b/lisp/vc/vc-rcs.el
@@ -157,12 +157,10 @@ For a description of possible values, see 
`vc-check-master-templates'."
 
 (autoload 'vc-expand-dirs "vc")
 
-(defun vc-rcs-dir-status (dir update-function)
-  ;; Doing individual vc-state calls is painful but there
-  ;; is no better way in RCS-land.
-  (let ((flist (vc-expand-dirs (list dir) 'RCS))
-       (result nil))
-    (dolist (file flist)
+(defun vc-rcs-dir-status-files (dir files update-function)
+  (if (not files) (setq files (vc-expand-dirs (list dir) 'RCS)))
+  (let ((result nil))
+    (dolist (file files)
       (let ((state (vc-state file))
            (frel (file-relative-name file)))
        (when (and (eq (vc-backend file) 'RCS)
diff --git a/lisp/vc/vc-sccs.el b/lisp/vc/vc-sccs.el
index 514748e..c7144c0 100644
--- a/lisp/vc/vc-sccs.el
+++ b/lisp/vc/vc-sccs.el
@@ -134,12 +134,10 @@ For a description of possible values, see 
`vc-check-master-templates'."
 
 (autoload 'vc-expand-dirs "vc")
 
-(defun vc-sccs-dir-status (dir update-function)
-  ;; Doing lots of individual VC-state calls is painful, but
-  ;; there is no better option in SCCS-land.
-  (let ((flist (vc-expand-dirs (list dir) 'SCCS))
-       (result nil))
-    (dolist (file flist)
+(defun vc-sccs-dir-status-files (dir files update-function)
+  (if (not files) (setq files (vc-expand-dirs (list dir) 'RCS)))
+  (let ((result nil))
+    (dolist (file files)
       (let ((state (vc-state file))
            (frel (file-relative-name file)))
        (when (and (eq (vc-backend file) 'SCCS)
diff --git a/lisp/vc/vc-src.el b/lisp/vc/vc-src.el
index a2ebeef..3186d72 100644
--- a/lisp/vc/vc-src.el
+++ b/lisp/vc/vc-src.el
@@ -31,8 +31,7 @@
 ;; STATE-QUERYING FUNCTIONS
 ;; * registered (file)                         OK
 ;; * state (file)                              OK
-;; * dir-status (dir update-function)          OK
-;; - dir-status-files (dir files uf)           ??
+;; - dir-status-files (dir files uf)           OK
 ;; - dir-extra-headers (dir)                   NOT NEEDED
 ;; - dir-printer (fileinfo)                    ??
 ;; * working-revision (file)                   OK
@@ -179,11 +178,11 @@ For a description of possible values, see 
`vc-check-master-templates'."
 
 (autoload 'vc-expand-dirs "vc")
 
-(defun vc-src-dir-status (dir update-function)
+(defun vc-src-dir-status-files (dir files update-function)
   ;; FIXME: Use one src status -a call for this
-  (let ((flist (vc-expand-dirs (list dir) 'SRC))
-       (result nil))
-    (dolist (file flist)
+  (if (not files) (setq files (vc-expand-dirs (list dir) 'RCS)))
+  (let ((result nil))
+    (dolist (file files)
       (let ((state (vc-state file))
            (frel (file-relative-name file)))
        (when (and (eq (vc-backend file) 'SRC)
diff --git a/lisp/vc/vc-svn.el b/lisp/vc/vc-svn.el
index 8ca8a09..abeeac0 100644
--- a/lisp/vc/vc-svn.el
+++ b/lisp/vc/vc-svn.el
@@ -195,22 +195,20 @@ If you want to force an empty list of arguments, use t."
          (setq result (cons (list filename state) result)))))
     (funcall callback result)))
 
-;; -dir-status called from vc-dir, which loads vc, which loads vc-dispatcher.
+;; dir-status-files called from vc-dir, which loads vc,
+;; which loads vc-dispatcher.
 (declare-function vc-exec-after "vc-dispatcher" (code))
 
-(defun vc-svn-dir-status (_dir callback)
+(autoload 'vc-expand-dirs "vc")
+
+(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."
-  ;; FIXME should this rather be all the files in dir?
-    (vc-svn-command (current-buffer) 'async nil "status" "-u")
+  (if (not files) (setq files (vc-expand-dirs (list dir) 'SVN)))
+  (vc-svn-command (current-buffer) 'async nil "status" "-u" files)
   (vc-run-delayed (vc-svn-after-dir-status callback)))
 
-(defun vc-svn-dir-status-files (_dir files callback)
-  (apply 'vc-svn-command (current-buffer) 'async nil "status" files)
-  (vc-run-delayed
-   (vc-svn-after-dir-status callback)))
-
 (defun vc-svn-dir-extra-headers (_dir)
   "Generate extra status headers for a Subversion working copy."
   (let (process-file-side-effects)
diff --git a/lisp/vc/vc.el b/lisp/vc/vc.el
index c4810cf..6e0e2c6 100644
--- a/lisp/vc/vc.el
+++ b/lisp/vc/vc.el
@@ -130,31 +130,32 @@
 ;;   reliable state computation; it is usually called immediately after
 ;;   C-x v v.
 ;;
-;; - dir-status (dir update-function)
+;; - dir-status-files (dir files update-function)
 ;;
 ;;   Produce RESULT: a list of lists of the form (FILE VC-STATE EXTRA)
-;;   for the files in DIR.
+;;   for FILES in DIR.  If FILES is nil. report on all files in DIR.
+;;   (It is OK, though possibly inefficient, to ignore the FILES argument
+;;   and always report on all files in DIR.)
+;;
 ;;   EXTRA can be used for backend specific information about FILE.
 ;;   If a command needs to be run to compute this list, it should be
 ;;   run asynchronously using (current-buffer) as the buffer for the
-;;   command.  When RESULT is computed, it should be passed back by
-;;   doing: (funcall UPDATE-FUNCTION RESULT nil).
-;;   If the backend uses a process filter, hence it produces partial results,
-;;   they can be passed back by doing:
-;;      (funcall UPDATE-FUNCTION RESULT t)
-;;   and then do a (funcall UPDATE-FUNCTION RESULT nil)
-;;   when all the results have been computed.
+;;   command.
+;;
+;;   When RESULT is computed, it should be passed back by doing:
+;;   (funcall UPDATE-FUNCTION RESULT nil).  If the backend uses a
+;;   process filter, hence it produces partial results, they can be
+;;   passed back by doing: (funcall UPDATE-FUNCTION RESULT t) and then
+;;   do a (funcall UPDATE-FUNCTION RESULT nil) when all the results
+;;   have been computed.
+;;
 ;;   To provide more backend specific functionality for `vc-dir'
 ;;   the following functions might be needed: `dir-extra-headers',
-;;   `dir-printer', `extra-dir-menu' and `dir-status-files'.
+;;   `dir-printer', and `extra-dir-menu'.
 ;;
-;; - dir-status-files (dir files update-function)
-;;
-;;   This function is identical to dir-status except that it should
-;;   only report status for the specified FILES. Also it needs to
-;;   report on all requested files, including up-to-date or ignored
-;;   files. If not provided, the default is to consider that the files
-;;   are in 'up-to-date state.
+;;   This function should report on all requested files, including
+;;   up-to-date or ignored files. If it is not provided, the default is to
+;;   consider that all files are in 'up-to-date state.
 ;;
 ;; - dir-extra-headers (dir)
 ;;
@@ -389,7 +390,6 @@
 ;;   the backend command.  It should return a status of either 0 (no
 ;;   differences found), or 1 (either non-empty diff or the diff is
 ;;   run asynchronously).
-
 ;;
 ;; - revision-completion-table (files)
 ;;
@@ -580,6 +580,9 @@
 ;; - INCOMPATIBLE CHANGE: The old fourth 'default-state' argument of
 ;;   vc-dir-status-files is gone; none of the back ends actually used it.
 ;;
+;; - vc-dir-status is no longer a public method; it has been replaced
+;;   by vc-dir-status-files.
+;;
 ;; - vc-state-heuristic is no longer a public method (the CVS backend
 ;;   retains it as a private one).
 ;;
@@ -632,12 +635,13 @@
 ;;
 ;;;; Internal cleanups:
 ;;
-;; - Another important thing: merge all the status-like backend operations.
-;;   We should remove dir-status, state, and dir-status-files, and
-;;   replace them with just `status' which takes a fileset and a continuation
-;;   (like dir-status) and returns a buffer in which the process(es) are run
-;;   (or nil if it worked synchronously).  Hopefully we can define the old
-;;   4 operations in term of this one.
+;; - Another important thing: merge all the status-like backend
+;;   operations.  We should remove dir-status-files and state and
+;;   replace them with just `status' which takes a fileset and a
+;;   continuation (like dir-status-files) and returns a buffer in
+;;   which the process(es) are run (or nil if it worked
+;;   synchronously).  Hopefully we can define the old operations in
+;;   term of this one.
 ;;
 ;;;; Unify two different versions of the amend capability
 ;;



reply via email to

[Prev in Thread] Current Thread [Next in Thread]