From 2888a97eb5437535f484f725d3d9606f1cbdbd8f Mon Sep 17 00:00:00 2001 From: "Eric S. Raymond" Date: Sat, 10 May 2008 13:27:16 +0000 Subject: [PATCH] Remove assumption about what nil means as a first arument to vc-do-command. --- lisp/ChangeLog | 18 ++++++++++++++++++ lisp/vc-arch.el | 2 +- lisp/vc-bzr.el | 2 +- lisp/vc-cvs.el | 2 +- lisp/vc-dispatcher.el | 21 +++++++++++---------- lisp/vc-git.el | 2 +- lisp/vc-hg.el | 2 +- lisp/vc-mcvs.el | 4 ++-- lisp/vc-mtn.el | 2 +- lisp/vc-rcs.el | 40 ++++++++++++++++++++-------------------- lisp/vc-sccs.el | 4 ++-- lisp/vc-svn.el | 16 ++++++---------- 12 files changed, 65 insertions(+), 50 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index b33a6e3f6a0..0317cd9f7cb 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -7,6 +7,24 @@ * vc-dispatcher.el (vc-dir-next-directory, vc-dir-prev-directory): New functions implementing motion to next and previous directory. + * vc-arch.el (vc-arch-command), + vc-bzr.el (vc-bzr-command), + vc-cvs.el (vc-cvs-command), + vc-dispatcher.el (vc-do-command), + vc-git.el (vc-git-command), + vc-hg.el (vc-hg-command), + vc-mcvs.el (vc-mvcs-command), + vc-mtn.el (vc-mtn-command), + vc-sccs.el (vc-sccs-command, vc-sccs-workfile, + vc-sccs-workfile-unchanged-p), + vc-svn.el (vc-svn-command, vc-svn-create-repo), + vc-rcs.el (all methods): + Remove assumption about what a nil argument to vc-do-command + means. This means no buffer name needs to be hardcoded into the + dispatcher layer, and it's better to be explicit anyway. + + vc-svn.el (vc-svn-dir-state-heuristic): Removed. + 2008-05-10 Dan Nicolaescu * vc.el: Update todo. diff --git a/lisp/vc-arch.el b/lisp/vc-arch.el index 7257eeae586..5aeeaf5e864 100644 --- a/lisp/vc-arch.el +++ b/lisp/vc-arch.el @@ -426,7 +426,7 @@ Return non-nil if FILE is unchanged." (defun vc-arch-command (buffer okstatus file &rest flags) "A wrapper around `vc-do-command' for use in vc-arch.el." - (apply 'vc-do-command buffer okstatus vc-arch-command file flags)) + (apply 'vc-do-command (or buffer "*vc*") okstatus vc-arch-command file flags)) (defun vc-arch-init-revision () nil) diff --git a/lisp/vc-bzr.el b/lisp/vc-bzr.el index e721cff2884..c0da7c836b6 100644 --- a/lisp/vc-bzr.el +++ b/lisp/vc-bzr.el @@ -92,7 +92,7 @@ Invoke the bzr command adding `BZR_PROGRESS_BAR=none' and (list* "BZR_PROGRESS_BAR=none" ; Suppress progress output (bzr >=0.9) "LC_MESSAGES=C" ; Force English output process-environment))) - (apply 'vc-do-command buffer okstatus vc-bzr-program + (apply 'vc-do-command (or buffer "*vc*") okstatus vc-bzr-program file-or-list bzr-command args))) diff --git a/lisp/vc-cvs.el b/lisp/vc-cvs.el index 603b61d1730..41372debcf0 100644 --- a/lisp/vc-cvs.el +++ b/lisp/vc-cvs.el @@ -695,7 +695,7 @@ If UPDATE is non-nil, then update (resynch) any affected buffers." "A wrapper around `vc-do-command' for use in vc-cvs.el. The difference to vc-do-command is that this function always invokes `cvs', and that it passes `vc-cvs-global-switches' to it before FLAGS." - (apply 'vc-do-command buffer okstatus "cvs" files + (apply 'vc-do-command (or buffer "*vc*") okstatus "cvs" files (if (stringp vc-cvs-global-switches) (cons vc-cvs-global-switches flags) (append vc-cvs-global-switches diff --git a/lisp/vc-dispatcher.el b/lisp/vc-dispatcher.el index 8fe42f183f1..3a1de2575fb 100644 --- a/lisp/vc-dispatcher.el +++ b/lisp/vc-dispatcher.el @@ -286,15 +286,16 @@ and is passed 3 arguments: the COMMAND, the FILES and the FLAGS.") ;;;###autoload (defun vc-do-command (buffer okstatus command file-or-list &rest flags) "Execute a slave command, notifying user and checking for errors. -Output from COMMAND goes to BUFFER, or *vc* if BUFFER is nil or the -current buffer if BUFFER is t. If the destination buffer is not -already current, set it up properly and erase it. The command is -considered successful if its exit status does not exceed OKSTATUS (if -OKSTATUS is nil, that means to ignore error status, if it is `async', that -means not to wait for termination of the subprocess; if it is t it means to -ignore all execution errors). FILE-OR-LIST is the name of a working file; -it may be a list of files or be nil (to execute commands that don't expect -a file name or set of files). If an optional list of FLAGS is present, +Output from COMMAND goes to BUFFER, or the current buffer if +BUFFER is t. If the destination buffer is not already current, +set it up properly and erase it. The command is considered +successful if its exit status does not exceed OKSTATUS (if +OKSTATUS is nil, that means to ignore error status, if it is +`async', that means not to wait for termination of the +subprocess; if it is t it means to ignore all execution errors). +FILE-OR-LIST is the name of a working file; it may be a list of +files or be nil (to execute commands that don't expect a file +name or set of files). If an optional list of FLAGS is present, that is inserted into the command line before the filename." ;; FIXME: file-relative-name can return a bogus result because ;; it doesn't look at the actual file-system to see if symlinks @@ -318,7 +319,7 @@ that is inserted into the command line before the filename." (and (stringp buffer) (string= (buffer-name) buffer)) (eq buffer (current-buffer))) - (vc-setup-buffer (or buffer "*vc*"))) + (vc-setup-buffer buffer)) ;; If there's some previous async process still running, just kill it. (let ((oldproc (get-buffer-process (current-buffer)))) ;; If we wanted to wait for oldproc to finish before doing diff --git a/lisp/vc-git.el b/lisp/vc-git.el index bf58572a083..b4704efc61e 100644 --- a/lisp/vc-git.el +++ b/lisp/vc-git.el @@ -695,7 +695,7 @@ This command shares argument histories with \\[rgrep] and \\[grep]." (defun vc-git-command (buffer okstatus file-or-list &rest flags) "A wrapper around `vc-do-command' for use in vc-git.el. The difference to vc-do-command is that this function always invokes `git'." - (apply 'vc-do-command buffer okstatus "git" file-or-list flags)) + (apply 'vc-do-command (or buffer "*vc*") okstatus "git" file-or-list flags)) (defun vc-git--empty-db-p () "Check if the git db is empty (no commit done yet)." diff --git a/lisp/vc-hg.el b/lisp/vc-hg.el index 3867c371e73..ef5c90291e3 100644 --- a/lisp/vc-hg.el +++ b/lisp/vc-hg.el @@ -551,7 +551,7 @@ REV is the revision to check out into WORKFILE." "A wrapper around `vc-do-command' for use in vc-hg.el. The difference to vc-do-command is that this function always invokes `hg', and that it passes `vc-hg-global-switches' to it before FLAGS." - (apply 'vc-do-command buffer okstatus "hg" file-or-list + (apply 'vc-do-command (or buffer "*vc*") okstatus "hg" file-or-list (if (stringp vc-hg-global-switches) (cons vc-hg-global-switches flags) (append vc-hg-global-switches diff --git a/lisp/vc-mcvs.el b/lisp/vc-mcvs.el index 7bef11c2401..dfe3bb1d1f9 100644 --- a/lisp/vc-mcvs.el +++ b/lisp/vc-mcvs.el @@ -533,13 +533,13 @@ and that it passes `vc-mcvs-global-switches' to it before FLAGS." (append vc-mcvs-global-switches flags))))) (if (not (member (car flags) '("diff" "log" "status"))) ;; No need to filter: do it the easy way. - (apply 'vc-do-command buffer okstatus "mcvs" file args) + (apply 'vc-do-command (or buffer "*vc*") okstatus "mcvs" file args) ;; We need to filter the output. ;; The output of the filter uses filenames relative to the root, ;; so we need to change the default-directory. ;; (assert (equal default-directory (vc-mcvs-root file))) (vc-do-command - buffer okstatus "sh" nil "-c" + (or buffer "*vc*") okstatus "sh" nil "-c" (concat "mcvs " (mapconcat 'shell-quote-argument diff --git a/lisp/vc-mtn.el b/lisp/vc-mtn.el index d4d1b1ff8e3..4a415bbf34a 100644 --- a/lisp/vc-mtn.el +++ b/lisp/vc-mtn.el @@ -70,7 +70,7 @@ (let ((process-environment ;; Avoid localization of messages so we can parse the output. (cons "LC_MESSAGES=C" process-environment))) - (apply 'vc-do-command buffer okstatus vc-mtn-command files flags))) + (apply 'vc-do-command (or buffer "*vc*") okstatus vc-mtn-command files flags))) (defun vc-mtn-state (file) ;; If `mtn' fails or returns status>0, or if the search files, just diff --git a/lisp/vc-rcs.el b/lisp/vc-rcs.el index f0aab4e90aa..14a091c4a6f 100644 --- a/lisp/vc-rcs.el +++ b/lisp/vc-rcs.el @@ -236,12 +236,12 @@ When VERSION is given, perform check for that version." ;; do a double take and remember the fact for the future (let* ((version (concat "-r" (vc-working-revision file))) (status (if (eq vc-rcsdiff-knows-brief 'no) - (vc-do-command nil 1 "rcsdiff" file version) - (vc-do-command nil 2 "rcsdiff" file "--brief" version)))) + (vc-do-command "*vc*" 1 "rcsdiff" file version) + (vc-do-command "*vc*" 2 "rcsdiff" file "--brief" version)))) (if (eq status 2) (if (not vc-rcsdiff-knows-brief) (setq vc-rcsdiff-knows-brief 'no - status (vc-do-command nil 1 "rcsdiff" file version)) + status (vc-do-command "*vc*" 1 "rcsdiff" file version)) (error "rcsdiff failed")) (if (not vc-rcsdiff-knows-brief) (setq vc-rcsdiff-knows-brief 'yes))) ;; The workfile is unchanged if rcsdiff found no differences. @@ -284,7 +284,7 @@ expanded if `vc-keep-workfiles' is non-nil, otherwise, delete the workfile." nil ".*,v$" t)) (yes-or-no-p "Create RCS subdirectory? ") (make-directory subdir)) - (apply 'vc-do-command nil 0 "ci" file + (apply 'vc-do-command "*vc*" 0 "ci" file ;; if available, use the secure registering option (and (vc-rcs-release-p "5.6.4") "-i") (concat (if vc-keep-workfiles "-u" "-r") rev) @@ -362,7 +362,7 @@ whether to remove it." (setq switches (cons "-f" switches))) (if (and (not rev) old-version) (setq rev (vc-branch-part old-version))) - (apply 'vc-do-command nil 0 "ci" (vc-name file) + (apply 'vc-do-command "*vc*" 0 "ci" (vc-name file) ;; if available, use the secure check-in option (and (vc-rcs-release-p "5.6.4") "-j") (concat (if vc-keep-workfiles "-u" "-r") rev) @@ -394,12 +394,12 @@ whether to remove it." (if (not (vc-rcs-release-p "5.6.2")) ;; exit status of 1 is also accepted. ;; It means that the lock was removed before. - (vc-do-command nil 1 "rcs" (vc-name file) + (vc-do-command "*vc*" 1 "rcs" (vc-name file) (concat "-u" old-version))))))))) (defun vc-rcs-find-revision (file rev buffer) (apply 'vc-do-command - buffer 0 "co" (vc-name file) + (or buffer "*vc*") 0 "co" (vc-name file) "-q" ;; suppress diagnostic output (concat "-p" rev) (vc-switches 'RCS 'checkout))) @@ -431,7 +431,7 @@ attempt the checkout for all registered files beneath it." (vc-rcs-set-default-branch file nil)) ;; now do the checkout (apply 'vc-do-command - nil 0 "co" (vc-name file) + "*vc*" 0 "co" (vc-name file) ;; If locking is not strict, force to overwrite ;; the writable workfile. (if (eq (vc-rcs-checkout-model (list file)) 'implicit) "-f") @@ -484,7 +484,7 @@ expanded to all regidtered subfuiles in them." discard file))) (error "Aborted")) (message "Removing revision %s from %s." discard file) - (vc-do-command nil 0 "rcs" (vc-name file) (concat "-o" discard)) + (vc-do-command "*vc*" 0 "rcs" (vc-name file) (concat "-o" discard)) ;; Check out the most recent remaining version. If it ;; fails, because the whole branch got deleted, do a ;; double-take and check out the version where the branch @@ -492,7 +492,7 @@ expanded to all regidtered subfuiles in them." (while (not done) (condition-case err (progn - (vc-do-command nil 0 "co" (vc-name file) "-f" + (vc-do-command "*vc*" 0 "co" (vc-name file) "-f" (concat "-u" previous)) (setq done t)) (error (set-buffer "*vc*") @@ -512,14 +512,14 @@ expanded to all regidtered subfuiles in them." revert all registered files beneath it." (if (file-directory-p file) (mapc 'vc-rcs-revert (vc-expand-dirs (list file))) - (vc-do-command nil 0 "co" (vc-name file) "-f" + (vc-do-command "*vc*" 0 "co" (vc-name file) "-f" (concat (if (eq (vc-state file) 'edited) "-u" "-r") (vc-working-revision file))))) (defun vc-rcs-merge (file first-version &optional second-version) "Merge changes into current working copy of FILE. The changes are between FIRST-VERSION and SECOND-VERSION." - (vc-do-command nil 1 "rcsmerge" (vc-name file) + (vc-do-command "*vc*" 1 "rcsmerge" (vc-name file) "-kk" ; ignore keyword conflicts (concat "-r" first-version) (if second-version (concat "-r" second-version)))) @@ -530,16 +530,16 @@ If FUILEis 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))) - (vc-do-command nil 0 "rcs" (vc-name file) "-M" (concat "-u" rev)) + (vc-do-command "*vc*" 0 "rcs" (vc-name file) "-M" (concat "-u" rev)) ;; Do a real checkout after stealing the lock, so that we see ;; expanded headers. - (vc-do-command nil 0 "co" (vc-name file) "-f" (concat "-l" rev)))) + (vc-do-command "*vc*" 0 "co" (vc-name file) "-f" (concat "-l" rev)))) (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)) - (vc-do-command nil 0 "rcs" (vc-name file) + (vc-do-command "*vc*" 0 "rcs" (vc-name file) (concat "-m" rev ":" comment)))) @@ -550,7 +550,7 @@ directory the operation is applied to all registered files beneath it." (defun vc-rcs-print-log (files &optional buffer) "Get change log associated with FILE. If FILE is a directory the operation is applied to all registered files beneath it." - (vc-do-command buffer 0 "rlog" (mapcar 'vc-name (vc-expand-dirs files)))) + (vc-do-command (or buffer "*vc*") 0 "rlog" (mapcar 'vc-name (vc-expand-dirs files)))) (defun vc-rcs-diff (files &optional oldvers newvers buffer) "Get a difference report using RCS between two sets of files." @@ -792,7 +792,7 @@ systime, or nil if there is none. Also, reposition point." (defun vc-rcs-assign-name (file name) "Assign to FILE's latest version a given NAME." - (vc-do-command nil 0 "rcs" (vc-name file) (concat "-n" name ":"))) + (vc-do-command "*vc*" 0 "rcs" (vc-name file) (concat "-n" name ":"))) ;;; @@ -1063,18 +1063,18 @@ If the user has not set variable `vc-rcs-release' and it is nil, variable `vc-rcs-release' is set to the returned value." (or vc-rcs-release (setq vc-rcs-release - (or (and (zerop (vc-do-command nil nil "rcs" nil "-V")) + (or (and (zerop (vc-do-command "*vc*" nil "rcs" nil "-V")) (with-current-buffer (get-buffer "*vc*") (vc-parse-buffer "^RCS version \\([0-9.]+ *.*\\)" 1))) 'unknown)))) (defun vc-rcs-set-non-strict-locking (file) - (vc-do-command nil 0 "rcs" file "-U") + (vc-do-command "*vc*" 0 "rcs" file "-U") (vc-file-setprop file 'vc-checkout-model 'implicit) (set-file-modes file (logior (file-modes file) 128))) (defun vc-rcs-set-default-branch (file branch) - (vc-do-command nil 0 "rcs" (vc-name file) (concat "-b" branch)) + (vc-do-command "*vc*" 0 "rcs" (vc-name file) (concat "-b" branch)) (vc-file-setprop file 'vc-rcs-default-branch branch)) (defun vc-rcs-parse (&optional buffer) diff --git a/lisp/vc-sccs.el b/lisp/vc-sccs.el index d4bc33fe9d3..f8a98f52702 100644 --- a/lisp/vc-sccs.el +++ b/lisp/vc-sccs.el @@ -180,7 +180,7 @@ For a description of possible values, see `vc-check-master-templates'." (defun vc-sccs-workfile-unchanged-p (file) "SCCS-specific implementation of `vc-workfile-unchanged-p'." - (zerop (apply 'vc-do-command nil 1 "vcdiff" (vc-name file) + (zerop (apply 'vc-do-command "*vc*" 1 "vcdiff" (vc-name file) (list "--brief" "-q" (concat "-r" (vc-working-revision file)))))) @@ -192,7 +192,7 @@ For a description of possible values, see `vc-check-master-templates'." (defun vc-sccs-do-command (buffer okstatus command file-or-list &rest flags) ;; (let ((load-path (append vc-sccs-path load-path))) ;; (apply 'vc-do-command buffer okstatus command file-or-list flags)) - (apply 'vc-do-command buffer okstatus "sccs" file-or-list command flags)) + (apply 'vc-do-command (or buffer "*vc*") okstatus "sccs" file-or-list command flags)) (defun vc-sccs-create-repo () "Create a new SCCS repository." diff --git a/lisp/vc-svn.el b/lisp/vc-svn.el index 7b12717dd81..44f7e8eb44d 100644 --- a/lisp/vc-svn.el +++ b/lisp/vc-svn.el @@ -208,8 +208,8 @@ RESULT is a list of conses (FILE . STATE) for directory DIR." (defun vc-svn-create-repo () "Create a new SVN repository." - (vc-do-command nil 0 "svnadmin" '("create" "SVN")) - (vc-do-command nil 0 "svn" '(".") + (vc-do-command "*vc*" 0 "svnadmin" '("create" "SVN")) + (vc-do-command "*vc*" 0 "svn" '(".") "checkout" (concat "file://" default-directory "SVN"))) (defun vc-svn-register (files &optional rev comment) @@ -389,17 +389,17 @@ or svn+ssh://." ;; Repository Root is a local file. (progn (unless (vc-do-command - nil 0 "svnadmin" nil + "*vc*" 0 "svnadmin" nil "setlog" "--bypass-hooks" directory "-r" rev (format "%s" tempfile)) (error "Log edit failed")) (delete-file tempfile)) ;; Remote repository, using svn+ssh. - (unless (vc-do-command nil 0 "scp" nil "-q" tempfile remotefile) + (unless (vc-do-command "*vc*" 0 "scp" nil "-q" tempfile remotefile) (error "Copy of comment to %s failed" remotefile)) (unless (vc-do-command - nil 0 "ssh" nil "-q" host + "*vc*" 0 "ssh" nil "-q" host (format "svnadmin setlog --bypass-hooks %s -r %s %s; rm %s" directory rev tempfile tempfile)) (error "Log edit failed"))))) @@ -517,7 +517,7 @@ NAME is assumed to be a URL." "A wrapper around `vc-do-command' for use in vc-svn.el. The difference to vc-do-command is that this function always invokes `svn', and that it passes `vc-svn-global-switches' to it before FLAGS." - (apply 'vc-do-command buffer okstatus vc-svn-program file-or-list + (apply 'vc-do-command (or buffer "*vc*") okstatus vc-svn-program file-or-list (if (stringp vc-svn-global-switches) (cons vc-svn-global-switches flags) (append vc-svn-global-switches @@ -625,10 +625,6 @@ information about FILENAME and return its status." (t 'edited))))) (if filename (vc-file-getprop filename 'vc-state)))) -(defun vc-svn-dir-state-heuristic (dir) - "Find the SVN state of all files in DIR, using only local information." - (vc-svn-dir-state dir 'local)) - (defun vc-svn-valid-symbolic-tag-name-p (tag) "Return non-nil if TAG is a valid symbolic tag name." ;; According to the SVN manual, a valid symbolic tag must start with -- 2.39.2