emacs-diffs
[Top][All Lists]
Advanced

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

[Emacs-diffs] master 92411a0: Clean up a longstanding to-do item.


From: Eric S. Raymond
Subject: [Emacs-diffs] master 92411a0: Clean up a longstanding to-do item.
Date: Tue, 02 Dec 2014 09:39:33 +0000

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

    Clean up a longstanding to-do item.
    
    * vc.el (vc-expand-dirs): Now takes a second BACKEND argument,
    improving behavior on directories using multiple file-oriented VCSEs.
---
 lisp/vc/vc-rcs.el  |   23 +++++++++--------------
 lisp/vc/vc-sccs.el |   22 +++++++++-------------
 lisp/vc/vc-src.el  |   13 ++++---------
 lisp/vc/vc.el      |   11 ++++-------
 4 files changed, 26 insertions(+), 43 deletions(-)

diff --git a/lisp/vc/vc-rcs.el b/lisp/vc/vc-rcs.el
index 40a1027..5b37586 100644
--- a/lisp/vc/vc-rcs.el
+++ b/lisp/vc/vc-rcs.el
@@ -158,14 +158,9 @@ For a description of possible values, see 
`vc-check-master-templates'."
 (autoload 'vc-expand-dirs "vc")
 
 (defun vc-rcs-dir-status (dir update-function)
-  ;; FIXME: this function should be rewritten or `vc-expand-dirs'
-  ;; should be changed to take a backend parameter.  Using
-  ;; `vc-expand-dirs' is not TRTD because it returns files from
-  ;; multiple backends.  It should also return 'unregistered files.
-
   ;; Doing individual vc-state calls is painful but there
   ;; is no better way in RCS-land.
-  (let ((flist (vc-expand-dirs (list dir)))
+  (let ((flist (vc-expand-dirs (list dir) 'RCS))
        (result nil))
     (dolist (file flist)
       (let ((state (vc-state file))
@@ -319,7 +314,7 @@ whether to remove it."
   "RCS-specific version of `vc-backend-checkin'."
   (let (rev (switches (vc-switches 'RCS 'checkin)))
     ;; Now operate on the files
-    (dolist (file (vc-expand-dirs files))
+    (dolist (file (vc-expand-dirs files 'RCS))
       (let ((old-version (vc-working-revision file)) new-version
            (default-branch (vc-file-getprop file 'vc-rcs-default-branch)))
        ;; Force branch creation if an appropriate
@@ -378,7 +373,7 @@ whether to remove it."
   "Retrieve a copy of a saved version of FILE.  If FILE is a directory,
 attempt the checkout for all registered files beneath it."
   (if (file-directory-p file)
-      (mapc 'vc-rcs-checkout (vc-expand-dirs (list file)))
+      (mapc 'vc-rcs-checkout (vc-expand-dirs (list file) 'RCS))
     (let ((file-buffer (get-file-buffer file))
          switches)
       (message "Checking out %s..." file)
@@ -445,7 +440,7 @@ attempt the checkout for all registered files beneath it."
 expanded to all registered subfiles in them."
   (if (not files)
       (error "RCS backend doesn't support directory-level rollback"))
-  (dolist (file (vc-expand-dirs files))
+  (dolist (file (vc-expand-dirs files 'RCS))
          (let* ((discard (vc-working-revision file))
                 (previous (if (vc-rcs-trunk-p discard) "" (vc-branch-part 
discard)))
                 (config (current-window-configuration))
@@ -481,7 +476,7 @@ expanded to all registered subfiles in them."
   "Revert FILE to the version it was based on.  If FILE is a directory,
 revert all registered files beneath it."
   (if (file-directory-p file)
-      (mapc 'vc-rcs-revert (vc-expand-dirs (list file)))
+      (mapc 'vc-rcs-revert (vc-expand-dirs (list file) 'RCS))
     (vc-do-command "*vc*" 0 "co" (vc-master-name file) "-f"
                   (concat (if (eq (vc-state file) 'edited) "-u" "-r")
                           (vc-working-revision file)))))
@@ -524,7 +519,7 @@ The changes are between FIRST-VERSION and SECOND-VERSION."
 If FILE is a directory, steal the lock on all registered files beneath it.
 Needs RCS 5.6.2 or later for -M."
   (if (file-directory-p file)
-      (mapc 'vc-rcs-steal-lock (vc-expand-dirs (list file)))
+      (mapc 'vc-rcs-steal-lock (vc-expand-dirs (list file) 'RCS))
     (vc-do-command "*vc*" 0 "rcs" (vc-master-name file) "-M" (concat "-u" rev))
     ;; Do a real checkout after stealing the lock, so that we see
     ;; expanded headers.
@@ -548,7 +543,7 @@ Needs RCS 5.6.2 or later for -M."
 (defun vc-rcs-modify-change-comment (files rev comment)
   "Modify the change comments change on FILES on a specified REV.  If FILE is a
 directory the operation is applied to all registered files beneath it."
-  (dolist (file (vc-expand-dirs files))
+  (dolist (file (vc-expand-dirs files 'RCS))
     (vc-do-command "*vc*" 0 "rcs" (vc-master-name file)
                   (concat "-m" rev ":" comment))))
 
@@ -575,7 +570,7 @@ Remaining arguments are ignored.
 If FILE is a directory the operation is applied to all registered
 files beneath it."
   (vc-do-command (or buffer "*vc*") 0 "rlog"
-                 (mapcar 'vc-master-name (vc-expand-dirs files)))
+                 (mapcar 'vc-master-name (vc-expand-dirs files 'RCS)))
   (with-current-buffer (or buffer "*vc*")
     (vc-rcs-print-log-cleanup))
   (when limit 'limit-unsupported))
@@ -584,7 +579,7 @@ files beneath it."
   "Get a difference report using RCS between two sets of files."
   (apply #'vc-do-command (or buffer "*vc-diff*")
         (if async 'async 1)
-        "rcsdiff" (vc-expand-dirs files)
+        "rcsdiff" (vc-expand-dirs files 'RCS)
          (append (list "-q"
                        (and oldvers (concat "-r" oldvers))
                        (and newvers (concat "-r" newvers)))
diff --git a/lisp/vc/vc-sccs.el b/lisp/vc/vc-sccs.el
index 8a9e0b1..514748e 100644
--- a/lisp/vc/vc-sccs.el
+++ b/lisp/vc/vc-sccs.el
@@ -135,13 +135,9 @@ For a description of possible values, see 
`vc-check-master-templates'."
 (autoload 'vc-expand-dirs "vc")
 
 (defun vc-sccs-dir-status (dir update-function)
-  ;; FIXME: this function should be rewritten, using `vc-expand-dirs'
-  ;; is not TRTD because it returns files from multiple backends.
-  ;; It should also return 'unregistered files.
-
   ;; 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)))
+  (let ((flist (vc-expand-dirs (list dir) 'SCCS))
        (result nil))
     (dolist (file flist)
       (let ((state (vc-state file))
@@ -232,7 +228,7 @@ expanded if `vc-keep-workfiles' is non-nil, otherwise, 
delete the workfile."
 
 (defun vc-sccs-checkin (files comment)
   "SCCS-specific version of `vc-backend-checkin'."
-  (dolist (file (vc-expand-dirs files))
+  (dolist (file (vc-expand-dirs files 'SCCS))
     (apply 'vc-sccs-do-command nil 0 "delta" (vc-master-name file)
           (concat "-y" comment)
           (vc-switches 'SCCS 'checkin))
@@ -255,7 +251,7 @@ If FILE is a directory, all version-controlled files 
beneath are checked out.
 EDITABLE non-nil means that the file should be writable and
 locked.  REV is the revision to check out."
   (if (file-directory-p file)
-      (mapc 'vc-sccs-checkout (vc-expand-dirs (list file)))
+      (mapc 'vc-sccs-checkout (vc-expand-dirs (list file) 'SCCS))
     (let ((file-buffer (get-file-buffer file))
          switches)
       (message "Checking out %s..." file)
@@ -284,7 +280,7 @@ locked.  REV is the revision to check out."
 (defun vc-sccs-rollback (files)
   "Roll back, undoing the most recent checkins of FILES.  Directories
 are expanded to all version-controlled subfiles."
-  (setq files (vc-expand-dirs files))
+  (setq files (vc-expand-dirs files 'SCCS))
   (if (not files)
       (error "SCCS backend doesn't support directory-level rollback"))
   (dolist (file files)
@@ -301,7 +297,7 @@ are expanded to all version-controlled subfiles."
   "Revert FILE to the version it was based on. If FILE is a directory,
 revert all subfiles."
   (if (file-directory-p file)
-      (mapc 'vc-sccs-revert (vc-expand-dirs (list file)))
+      (mapc 'vc-sccs-revert (vc-expand-dirs (list file) 'SCCS))
     (vc-sccs-do-command nil 0 "unget" (vc-master-name file))
     (vc-sccs-do-command nil 0 "get" (vc-master-name file))
     ;; Checking out explicit revisions is not supported under SCCS, yet.
@@ -312,7 +308,7 @@ revert all subfiles."
 (defun vc-sccs-steal-lock (file &optional rev)
   "Steal the lock on the current workfile for FILE and revision REV."
   (if (file-directory-p file)
-      (mapc 'vc-sccs-steal-lock (vc-expand-dirs (list file)))
+      (mapc 'vc-sccs-steal-lock (vc-expand-dirs (list file) 'SCCS))
     (vc-sccs-do-command nil 0 "unget"
                        (vc-master-name file) "-n" (if rev (concat "-r" rev)))
     (vc-sccs-do-command nil 0 "get"
@@ -320,7 +316,7 @@ revert all subfiles."
 
 (defun vc-sccs-modify-change-comment (files rev comment)
   "Modify (actually, append to) the change comments for FILES on a specified 
REV."
-  (dolist (file (vc-expand-dirs files))
+  (dolist (file (vc-expand-dirs files 'SCCS))
     (vc-sccs-do-command nil 0 "cdc" (vc-master-name file)
                         (concat "-y" comment) (concat "-r" rev))))
 
@@ -332,7 +328,7 @@ revert all subfiles."
 (defun vc-sccs-print-log (files buffer &optional _shortlog 
_start-revision-ignored limit)
   "Print commit log associated with FILES into specified BUFFER.
 Remaining arguments are ignored."
-  (setq files (vc-expand-dirs files))
+  (setq files (vc-expand-dirs files 'SCCS))
   (vc-sccs-do-command buffer 0 "prs" (mapcar 'vc-master-name files))
   (when limit 'limit-unsupported))
 
@@ -344,7 +340,7 @@ Remaining arguments are ignored."
 ;; FIXME use sccsdiff if present?
 (defun vc-sccs-diff (files &optional _async oldvers newvers buffer)
   "Get a difference report using SCCS between two filesets."
-  (setq files (vc-expand-dirs files))
+  (setq files (vc-expand-dirs files 'SCCS))
   (setq oldvers (vc-sccs-lookup-triple (car files) oldvers))
   (setq newvers (vc-sccs-lookup-triple (car files) newvers))
   (or buffer (setq buffer "*vc-diff*"))
diff --git a/lisp/vc/vc-src.el b/lisp/vc/vc-src.el
index f3d0585..9e17d05 100644
--- a/lisp/vc/vc-src.el
+++ b/lisp/vc/vc-src.el
@@ -180,13 +180,8 @@ For a description of possible values, see 
`vc-check-master-templates'."
 (autoload 'vc-expand-dirs "vc")
 
 (defun vc-src-dir-status (dir update-function)
-  ;; FIXME: this function should be rewritten or `vc-expand-dirs'
-  ;; should be changed to take a backend parameter.  Using
-  ;; `vc-expand-dirs' is not TRTD because it returns files from
-  ;; multiple backends.  It should also return 'unregistered files.
-
   ;; FIXME: Use one src status -a call for this
-  (let ((flist (vc-expand-dirs (list dir)))
+  (let ((flist (vc-expand-dirs (list dir) 'SRC))
        (result nil))
     (dolist (file flist)
       (let ((state (vc-state file))
@@ -253,13 +248,13 @@ REV is the revision to check out into WORKFILE."
   "Revert FILE to the version it was based on.  If FILE is a directory,
 revert all registered files beneath it."
   (if (file-directory-p file)
-      (mapc 'vc-src-revert (vc-expand-dirs (list file)))
+      (mapc 'vc-src-revert (vc-expand-dirs (list file) 'SRC))
     (vc-src-command nil file "co")))
 
 (defun vc-src-modify-change-comment (files rev comment)
   "Modify the change comments change on FILES on a specified REV.  If FILE is a
 directory the operation is applied to all registered files beneath it."
-  (dolist (file (vc-expand-dirs files))
+  (dolist (file (vc-expand-dirs files 'SRC))
     (vc-src-command nil file "amend" "-m" comment rev)))
 
 ;; History functions
@@ -271,7 +266,7 @@ directory the operation is applied to all registered files 
beneath it."
                  (repeat :tag "Argument List" :value ("") string))
   :group 'vc-src)
 
-(defun vc-src-print-log (files buffer &optional shortlog start-revision limit)
+(defun vc-src-print-log (files buffer &optional shortlog _start-revision limit)
   "Print commit log associated with FILES into specified BUFFER.
 If SHORTLOG is non-nil, use the list method.
 If START-REVISION is non-nil, it is the newest revision to show.
diff --git a/lisp/vc/vc.el b/lisp/vc/vc.el
index 52deb13..ad3a2c4 100644
--- a/lisp/vc/vc.el
+++ b/lisp/vc/vc.el
@@ -631,9 +631,6 @@
 ;;
 ;;;; Internal cleanups:
 ;;
-;; - vc-expand-dirs should take a backend parameter and only look for
-;;   files managed by that backend.
-;;
 ;; - 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
@@ -955,14 +952,14 @@ responsible for FILE is returned."
               (throw 'found backend))))
       (error "No VC backend is responsible for %s" file)))
 
-(defun vc-expand-dirs (file-or-dir-list)
+(defun vc-expand-dirs (file-or-dir-list backend)
   "Expands directories in a file list specification.
 Within directories, only files already under version control are noticed."
   (let ((flattened '()))
     (dolist (node file-or-dir-list)
       (when (file-directory-p node)
        (vc-file-tree-walk
-        node (lambda (f) (when (vc-backend f) (push f flattened)))))
+        node (lambda (f) (when (eq (vc-backend f) backend) (push f 
flattened)))))
       (unless (file-directory-p node) (push node flattened)))
     (nreverse flattened)))
 
@@ -1000,8 +997,8 @@ Otherwise, throw an error.
 STATE-MODEL-ONLY-FILES if non-nil, means that the caller needs
 the FILESET-ONLY-FILES STATE and MODEL info.  Otherwise, that
 part may be skipped.
-BEWARE: this function may change the
-current buffer."
+
+BEWARE: this function may change the current buffer."
   ;; FIXME: OBSERVER is unused.  The name is not intuitive and is not
   ;; documented.  It's set to t when called from diff and print-log.
   (let (backend)



reply via email to

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