1
0
mirror of https://git.savannah.gnu.org/git/emacs.git synced 2025-01-03 11:33:37 +00:00

Allow use of vc-root-* commands in *vc-log* buffers.

* lisp/vc/log-edit.el (log-edit-vc-backend): New variable.
(log-edit): Doc fix.

* lisp/vc/log-view.el (log-view-vc-fileset, log-view-vc-backend): Doc fix.

* lisp/vc/vc-dispatcher.el (vc-log-edit): New args.  Use PARAMS
argument of log-edit to set up all local variables.
(vc-start-logentry): New optional arg specifying VC backend.

* lisp/vc/vc.el (vc-checkin): Use it.
(vc-deduce-fileset): Handle Log Edit buffers.
(vc-diff): Make first argument optional too.
This commit is contained in:
Chong Yidong 2012-07-11 12:35:13 +08:00
parent 984e7f300e
commit 9af577566a
5 changed files with 49 additions and 22 deletions

View File

@ -1,3 +1,18 @@
2012-07-11 Chong Yidong <cyd@gnu.org>
* vc/log-edit.el (log-edit-vc-backend): New variable.
(log-edit): Doc fix.
* vc/vc-dispatcher.el (vc-log-edit): New args. Use PARAMS
argument of log-edit to set up all local variables.
(vc-start-logentry): New optional arg specifying VC backend.
* vc/vc.el (vc-checkin): Use it.
(vc-deduce-fileset): Handle Log Edit buffers.
(vc-diff): Make first argument optional too.
* vc/log-view.el (log-view-vc-fileset, log-view-vc-backend): Doc fix.
2012-07-10 Michael Albinus <michael.albinus@gmx.de>
* eshell/esh-ext.el (eshell-remote-command): Remove remote part of

View File

@ -190,6 +190,9 @@ when this variable is set to nil.")
(defvar log-edit-parent-buffer nil)
(defvar log-edit-vc-backend nil
"VC fileset corresponding to the current log.")
;;; Originally taken from VC-Log mode
(defconst log-edit-maximum-comment-ring-size 32
@ -405,23 +408,27 @@ automatically."
;;;###autoload
(defun log-edit (callback &optional setup params buffer mode &rest _ignore)
"Setup a buffer to enter a log message.
\\<log-edit-mode-map>The buffer will be put in mode MODE or `log-edit-mode'
if MODE is nil.
If SETUP is non-nil, the buffer is then erased and `log-edit-hook' is run.
Mark and point will be set around the entire contents of the buffer so
that it is easy to kill the contents of the buffer with \\[kill-region].
Once you're done editing the message, pressing \\[log-edit-done] will call
`log-edit-done' which will end up calling CALLBACK to do the actual commit.
The buffer is put in mode MODE or `log-edit-mode' if MODE is nil.
\\<log-edit-mode-map>
If SETUP is non-nil, erase the buffer and run `log-edit-hook'.
Set mark and point around the entire contents of the buffer, so
that it is easy to kill the contents of the buffer with
\\[kill-region]. Once the user is done editing the message,
invoking the command \\[log-edit-done] (`log-edit-done') will
call CALLBACK to do the actual commit.
PARAMS if non-nil is an alist. Possible keys and associated values:
PARAMS if non-nil is an alist of variables and buffer-local
values to give them in the Log Edit buffer. Possible keys and
associated values:
`log-edit-listfun' -- function taking no arguments that returns the list of
files that are concerned by the current operation (using relative names);
`log-edit-diff-function' -- function taking no arguments that
displays a diff of the files concerned by the current operation.
`vc-log-fileset' -- the VC fileset to be committed (if any).
If BUFFER is non-nil `log-edit' will jump to that buffer, use it to edit the
log message and go back to the current buffer when done. Otherwise, it
uses the current buffer."
If BUFFER is non-nil `log-edit' will jump to that buffer, use it
to edit the log message and go back to the current buffer when
done. Otherwise, it uses the current buffer."
(let ((parent (current-buffer)))
(if buffer (pop-to-buffer buffer))
(when (and log-edit-setup-invert (not (eq setup 'force)))

View File

@ -245,10 +245,10 @@ The match group number 1 should match the revision number itself.")
'(log-view-font-lock-keywords t nil nil nil))
(defvar log-view-vc-fileset nil
"Set this to the fileset corresponding to the current log.")
"The VC fileset corresponding to the current log.")
(defvar log-view-vc-backend nil
"Set this to the VC backend that created the current log.")
"The VC backend that created the current log.")
;;;;
;;;; Actual code

View File

@ -575,10 +575,10 @@ NOT-URGENT means it is ok to continue if the user says not to save."
;; Set up key bindings for use while editing log messages
(defun vc-log-edit (fileset mode)
(defun vc-log-edit (fileset mode backend)
"Set up `log-edit' for use on FILE."
(setq default-directory
(with-current-buffer vc-parent-buffer default-directory))
(buffer-local-value 'default-directory vc-parent-buffer))
(log-edit 'vc-finish-logentry
nil
`((log-edit-listfun . (lambda ()
@ -586,14 +586,15 @@ NOT-URGENT means it is ok to continue if the user says not to save."
;; for directories.
(mapcar 'file-relative-name
',fileset)))
(log-edit-diff-function . (lambda () (vc-diff nil))))
(log-edit-diff-function . vc-diff)
(log-edit-vc-backend . ,backend)
(vc-log-fileset . ,fileset))
nil
mode)
(set (make-local-variable 'vc-log-fileset) fileset)
(set-buffer-modified-p nil)
(setq buffer-file-name nil))
(defun vc-start-logentry (files comment initial-contents msg logbuf mode action &optional after-hook)
(defun vc-start-logentry (files comment initial-contents msg logbuf mode action &optional after-hook backend)
"Accept a comment for an operation on FILES.
If COMMENT is nil, pop up a LOGBUF buffer, emit MSG, and set the
action on close to ACTION. If COMMENT is a string and
@ -604,7 +605,8 @@ entered COMMENT. If COMMENT is t, also do action immediately with an
empty comment. Remember the file's buffer in `vc-parent-buffer'
\(current one if no file). Puts the log-entry buffer in major-mode
MODE, defaulting to `log-edit-mode' if MODE is nil.
AFTER-HOOK specifies the local value for `vc-log-after-operation-hook'."
AFTER-HOOK specifies the local value for `vc-log-after-operation-hook'.
BACKEND, if non-nil, specifies a VC backend for the Log Edit buffer."
(let ((parent
(if (vc-dispatcher-browsing)
;; If we are called from a directory browser, the parent buffer is
@ -619,7 +621,7 @@ AFTER-HOOK specifies the local value for `vc-log-after-operation-hook'."
(set (make-local-variable 'vc-parent-buffer) parent)
(set (make-local-variable 'vc-parent-buffer-name)
(concat " from " (buffer-name vc-parent-buffer)))
(vc-log-edit files mode)
(vc-log-edit files mode backend)
(make-local-variable 'vc-log-after-operation-hook)
(when after-hook
(setq vc-log-after-operation-hook after-hook))

View File

@ -936,11 +936,13 @@ Within directories, only files already under version control are noticed."
(defvar vc-dir-backend)
(defvar log-view-vc-backend)
(defvar log-edit-vc-backend)
(defvar diff-vc-backend)
(defun vc-deduce-backend ()
(cond ((derived-mode-p 'vc-dir-mode) vc-dir-backend)
((derived-mode-p 'log-view-mode) log-view-vc-backend)
((derived-mode-p 'log-edit-mode) log-edit-vc-backend)
((derived-mode-p 'diff-mode) diff-vc-backend)
;; Maybe we could even use comint-mode rather than shell-mode?
((derived-mode-p 'dired-mode 'shell-mode 'compilation-mode)
@ -1434,7 +1436,8 @@ Runs the normal hooks `vc-before-checkin-hook' and `vc-checkin-hook'."
(vc-checkout-time . ,(nth 5 (file-attributes file)))
(vc-working-revision . nil)))
(message "Checking in %s...done" (vc-delistify files)))
'vc-checkin-hook))
'vc-checkin-hook
backend))
;;; Additional entry points for examining version histories
@ -1680,7 +1683,7 @@ Return t if the buffer had changes, nil otherwise."
(called-interactively-p 'interactive)))
;;;###autoload
(defun vc-diff (historic &optional not-urgent)
(defun vc-diff (&optional historic not-urgent)
"Display diffs between file revisions.
Normally this compares the currently selected fileset with their
working revisions. With a prefix argument HISTORIC, it reads two revision