From 0f457a371c67e28f4eb7ddc60750169badc7f8d8 Mon Sep 17 00:00:00 2001 From: Dmitry Gutov Date: Tue, 3 Dec 2013 00:13:51 +0200 Subject: [PATCH] Support the new log-edit behavior in vc-git-log-edit-toggle-amend * lisp/vc/log-edit.el (log-edit-set-header): Extract from `log-edit-toggle-header'. (log-edit-extract-headers): Separate the summary, when extracted from header, from the rest of the message with an empty line. * lisp/vc/vc-git.el (vc-git-log-edit-toggle-amend): Move the summary line, if present, to the Summary header. --- lisp/ChangeLog | 10 ++++++++++ lisp/vc/log-edit.el | 16 ++++++++++------ lisp/vc/vc-git.el | 12 +++++++++++- 3 files changed, 31 insertions(+), 7 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 103b733f53..9632b9216a 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,13 @@ +2013-12-02 Dmitry Gutov + + * vc/log-edit.el (log-edit-set-header): Extract from + `log-edit-toggle-header'. + (log-edit-extract-headers): Separate the summary, when extracted + from header, from the rest of the message with an empty line. + + * vc/vc-git.el (vc-git-log-edit-toggle-amend): Move the summary + line, if present, to the Summary header. + 2013-12-02 Stefan Monnier * epa-file.el (epa-file-insert-file-contents): Ensure we insert text diff --git a/lisp/vc/log-edit.el b/lisp/vc/log-edit.el index 0845284d6c..7f66f73e9d 100644 --- a/lisp/vc/log-edit.el +++ b/lisp/vc/log-edit.el @@ -944,10 +944,14 @@ Rename relative filenames in the ChangeLog entry as FILES." (defun log-edit-toggle-header (header value) "Toggle a boolean-type header in the current buffer. -If the value of HEADER is VALUE, clear it. Otherwise, add the -header if it's not present and set it to VALUE. Then make sure -there is an empty line after the headers. Return t if toggled -on, otherwise nil." +See `log-edit-set-header' for details." + (log-edit-set-header header value t)) + +(defun log-edit-set-header (header value &optional toggle) + "Set the value of HEADER to VALUE in the current buffer. +If TOGGLE is non-nil, and the value of HEADER already is VALUE, +clear it. Make sure there is an empty line after the headers. +Return t if toggled on (or TOGGLE is nil), otherwise nil." (let ((val t) (line (concat header ": " value "\n"))) (save-excursion @@ -958,7 +962,7 @@ on, otherwise nil." (if (re-search-forward (concat "^" header ":" log-edit-header-contents-regexp) nil t) - (if (setq val (not (string= (match-string 1) value))) + (if (setq val (not (and toggle (string= (match-string 1) value)))) (replace-match line t t) (replace-match "" t t nil 1)) (insert line))) @@ -1006,7 +1010,7 @@ line of MSG." (goto-char (point-min)) (when (looking-at "\\([ \t]*\n\\)+") (delete-region (match-beginning 0) (match-end 0))) - (if summary (insert summary "\n")) + (if summary (insert summary "\n\n")) (cons (buffer-string) res)))) (provide 'log-edit) diff --git a/lisp/vc/vc-git.el b/lisp/vc/vc-git.el index 8acb23dfd6..a14287f8cb 100644 --- a/lisp/vc/vc-git.el +++ b/lisp/vc/vc-git.el @@ -641,7 +641,17 @@ If toggling on, also insert its message into the buffer." (insert (with-output-to-string (vc-git-command standard-output 1 nil - "log" "--max-count=1" "--pretty=format:%B" "HEAD"))))) + "log" "--max-count=1" "--pretty=format:%B" "HEAD"))) + (save-excursion + (rfc822-goto-eoh) + (forward-line 1) + (let ((pt (point))) + (and (zerop (forward-line 1)) + (looking-at "\n\\|\\'") + (let ((summary (buffer-substring-no-properties pt (1- (point))))) + (skip-chars-forward " \n") + (delete-region pt (point)) + (log-edit-set-header "Summary" summary))))))) (defvar vc-git-log-edit-mode-map (let ((map (make-sparse-keymap "Git-Log-Edit"))) -- 2.39.2