git-blame.el: Use with-current-buffer where appropriate

In git-blame-filter and git-blame-create-overlay we want to save
(along with the values of point and mark) the current-buffer in scope
when calling the functions.  The idiom

    (save-excursion
      (set-buffer buf)
      ...)

will correctly restore the correct buffer, but will not save the
values of point and mark in buf (only in the buffer current when the
save-excursion call is executed).  The intention of these functions is
to save the current buffer from the calling scope and the values of
point and mark in the buffer they are modifying.  The correct idiom
for this is

    (with-current-buffer buf
      (save-excursion
        ...))

Signed-off-by: Rüdiger Sonderfeld <ruediger@c-plusplus.de>
Signed-off-by: Lawrence Mitchell <wence@gmx.li>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Lawrence Mitchell
2012-06-14 10:37:59 +01:00
committed by Junio C Hamano
parent 5d7da9a944
commit 0e59a6f601

View File

@ -337,16 +337,16 @@ See also function `git-blame-mode'."
(defvar in-blame-filter nil) (defvar in-blame-filter nil)
(defun git-blame-filter (proc str) (defun git-blame-filter (proc str)
(save-excursion (with-current-buffer (process-buffer proc)
(set-buffer (process-buffer proc)) (save-excursion
(goto-char (process-mark proc)) (goto-char (process-mark proc))
(insert-before-markers str) (insert-before-markers str)
(goto-char 0) (goto-char 0)
(unless in-blame-filter (unless in-blame-filter
(let ((more t) (let ((more t)
(in-blame-filter t)) (in-blame-filter t))
(while more (while more
(setq more (git-blame-parse))))))) (setq more (git-blame-parse))))))))
(defun git-blame-parse () (defun git-blame-parse ()
(cond ((looking-at "\\([0-9a-f]\\{40\\}\\) \\([0-9]+\\) \\([0-9]+\\) \\([0-9]+\\)\n") (cond ((looking-at "\\([0-9a-f]\\{40\\}\\) \\([0-9]+\\) \\([0-9]+\\) \\([0-9]+\\)\n")
@ -385,33 +385,33 @@ See also function `git-blame-mode'."
info)))) info))))
(defun git-blame-create-overlay (info start-line num-lines) (defun git-blame-create-overlay (info start-line num-lines)
(save-excursion (with-current-buffer git-blame-file
(set-buffer git-blame-file) (save-excursion
(let ((inhibit-point-motion-hooks t) (let ((inhibit-point-motion-hooks t)
(inhibit-modification-hooks t)) (inhibit-modification-hooks t))
(goto-char (point-min)) (goto-char (point-min))
(forward-line (1- start-line)) (forward-line (1- start-line))
(let* ((start (point)) (let* ((start (point))
(end (progn (forward-line num-lines) (point))) (end (progn (forward-line num-lines) (point)))
(ovl (make-overlay start end)) (ovl (make-overlay start end))
(hash (car info)) (hash (car info))
(spec `((?h . ,(substring hash 0 6)) (spec `((?h . ,(substring hash 0 6))
(?H . ,hash) (?H . ,hash)
(?a . ,(git-blame-get-info info 'author)) (?a . ,(git-blame-get-info info 'author))
(?A . ,(git-blame-get-info info 'author-mail)) (?A . ,(git-blame-get-info info 'author-mail))
(?c . ,(git-blame-get-info info 'committer)) (?c . ,(git-blame-get-info info 'committer))
(?C . ,(git-blame-get-info info 'committer-mail)) (?C . ,(git-blame-get-info info 'committer-mail))
(?s . ,(git-blame-get-info info 'summary))))) (?s . ,(git-blame-get-info info 'summary)))))
(push ovl git-blame-overlays) (push ovl git-blame-overlays)
(overlay-put ovl 'git-blame info) (overlay-put ovl 'git-blame info)
(overlay-put ovl 'help-echo (overlay-put ovl 'help-echo
(format-spec git-blame-mouseover-format spec)) (format-spec git-blame-mouseover-format spec))
(if git-blame-use-colors (if git-blame-use-colors
(overlay-put ovl 'face (list :background (overlay-put ovl 'face (list :background
(cdr (assq 'color (cdr info)))))) (cdr (assq 'color (cdr info))))))
(overlay-put ovl 'line-prefix (overlay-put ovl 'line-prefix
(propertize (format-spec git-blame-prefix-format spec) (propertize (format-spec git-blame-prefix-format spec)
'face 'git-blame-prefix-face)))))) 'face 'git-blame-prefix-face)))))))
(defun git-blame-add-info (info key value) (defun git-blame-add-info (info key value)
(nconc info (list (cons (intern key) value)))) (nconc info (list (cons (intern key) value))))