branch: elpa/git-commit commit 67352a64b555a99e77fba8651487fa6449c88078 Author: Jonas Bernoulli <jo...@bernoul.li> Commit: Jonas Bernoulli <jo...@bernoul.li>
magit--toplevel-safe: New function --- lisp/magit-git.el | 12 +++++----- lisp/magit-mode.el | 66 ++++++++++++++++++++++++++---------------------------- 2 files changed, 38 insertions(+), 40 deletions(-) diff --git a/lisp/magit-git.el b/lisp/magit-git.el index 341167f3d1..bd1fee84d3 100644 --- a/lisp/magit-git.el +++ b/lisp/magit-git.el @@ -918,14 +918,14 @@ returning the truename." ;; Step outside the control directory to enter the working tree. (file-name-directory (directory-file-name gitdir))))))))))) +(defun magit--toplevel-safe () + (or (magit-toplevel) + (magit--not-inside-repository-error))) + (defmacro magit-with-toplevel (&rest body) (declare (indent defun) (debug (body))) - (let ((toplevel (cl-gensym "toplevel"))) - `(let ((,toplevel (magit-toplevel))) - (if ,toplevel - (let ((default-directory ,toplevel)) - ,@body) - (magit--not-inside-repository-error))))) + `(let ((default-directory (magit--toplevel-safe))) + ,@body)) (define-error 'magit-outside-git-repo "Not inside Git repository") (define-error 'magit-corrupt-git-config "Corrupt Git configuration") diff --git a/lisp/magit-mode.el b/lisp/magit-mode.el index 7956e8565a..4cefd402de 100644 --- a/lisp/magit-mode.el +++ b/lisp/magit-mode.el @@ -849,45 +849,43 @@ If `visible', then only consider buffers on all visible frames. If `selected' or t, then only consider buffers on the selected frame. If a frame, then only consider buffers on that frame." - (if-let ((topdir (magit-toplevel))) - (cl-flet* ((b (buffer) - (with-current-buffer buffer - (and (eq major-mode mode) - (equal magit--default-directory topdir) - (if value - (and magit-buffer-locked-p - (equal (magit-buffer-value) value)) - (not magit-buffer-locked-p)) - buffer))) - (w (window) - (b (window-buffer window))) - (f (frame) - (seq-some #'w (window-list frame 'no-minibuf)))) - (pcase-exhaustive frame - ('nil (seq-some #'b (buffer-list))) - ('all (seq-some #'f (frame-list))) - ('visible (seq-some #'f (visible-frame-list))) - ((or 'selected 't) (seq-some #'w (window-list (selected-frame)))) - ((guard (framep frame)) (seq-some #'w (window-list frame))))) - (magit--not-inside-repository-error))) + (let ((topdir (magit--toplevel-safe))) + (cl-flet* ((b (buffer) + (with-current-buffer buffer + (and (eq major-mode mode) + (equal magit--default-directory topdir) + (if value + (and magit-buffer-locked-p + (equal (magit-buffer-value) value)) + (not magit-buffer-locked-p)) + buffer))) + (w (window) + (b (window-buffer window))) + (f (frame) + (seq-some #'w (window-list frame 'no-minibuf)))) + (pcase-exhaustive frame + ('nil (seq-some #'b (buffer-list))) + ('all (seq-some #'f (frame-list))) + ('visible (seq-some #'f (visible-frame-list))) + ((or 'selected 't) (seq-some #'w (window-list (selected-frame)))) + ((guard (framep frame)) (seq-some #'w (window-list frame))))))) (defun magit-mode-get-buffer (mode &optional create frame value) (declare (obsolete magit-get-mode-buffer "Magit 3.0.0")) (when create (error "`magit-mode-get-buffer's CREATE argument is obsolete")) - (if-let ((topdir (magit-toplevel))) - (--first (with-current-buffer it - (and (eq major-mode mode) - (equal magit--default-directory topdir) - (if value - (and magit-buffer-locked-p - (equal (magit-buffer-value) value)) - (not magit-buffer-locked-p)))) - (if frame - (mapcar #'window-buffer - (window-list (unless (eq frame t) frame))) - (buffer-list))) - (magit--not-inside-repository-error))) + (let ((topdir (magit--toplevel-safe))) + (--first (with-current-buffer it + (and (eq major-mode mode) + (equal magit--default-directory topdir) + (if value + (and magit-buffer-locked-p + (equal (magit-buffer-value) value)) + (not magit-buffer-locked-p)))) + (if frame + (mapcar #'window-buffer + (window-list (unless (eq frame t) frame))) + (buffer-list))))) (defun magit-generate-new-buffer (mode &optional value) (let* ((name (funcall magit-generate-buffer-name-function mode value))