branch: elpa/git-commit commit 543efd16e78db356688736b3bfced42f9d215a56 Author: Jonas Bernoulli <jo...@bernoul.li> Commit: Jonas Bernoulli <jo...@bernoul.li>
Ignore magit-buffer-topdir when preparing another buffer Since [1: 623d335b4d] we set `magit-buffer-topdir' and use that in `magit-toplevel', but when we determine and create a buffer that concerns another buffer, then that value does not apply. Without this, visiting a module from the status buffer of the super-repository, resulted in the super-repositories buffer being reused to display the module's status, which then caused many commands to fail when invoked in that directory. 1: 2023-03-17 623d335b4dddc64f205748862520ed41661a7a80 Memorize gitdir and topdir for each Magit buffer --- lisp/magit-git.el | 7 +++++-- lisp/magit-mode.el | 4 ++-- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/lisp/magit-git.el b/lisp/magit-git.el index afeceb9935..bedb121422 100644 --- a/lisp/magit-git.el +++ b/lisp/magit-git.el @@ -970,8 +970,11 @@ returning the truename." ;; working tree. (file-name-directory (directory-file-name gitdir)))))))))))) -(defun magit--toplevel-safe () - (or (magit-toplevel) +(defun magit--toplevel-safe (&optional nocache) + (or (if nocache + (let ((magit-buffer-topdir nil)) + (magit-toplevel)) + (magit-toplevel)) (magit--not-inside-repository-error))) (defmacro magit-with-toplevel (&rest body) diff --git a/lisp/magit-mode.el b/lisp/magit-mode.el index 98daf538cf..77b5286562 100644 --- a/lisp/magit-mode.el +++ b/lisp/magit-mode.el @@ -801,7 +801,7 @@ 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." - (let ((topdir (magit--toplevel-safe))) + (let ((topdir (magit--toplevel-safe 'nocache))) (cl-flet* ((b (buffer) (with-current-buffer buffer (and (eq major-mode mode) @@ -823,7 +823,7 @@ If a frame, then only consider buffers on that frame." ((guard (framep frame)) (seq-some #'w (window-list frame))))))) (defun magit-generate-new-buffer (mode &optional value directory) - (let* ((default-directory (or directory (magit--toplevel-safe))) + (let* ((default-directory (or directory (magit--toplevel-safe 'nocache))) (name (funcall magit-generate-buffer-name-function mode value)) (buffer (generate-new-buffer name))) (with-current-buffer buffer