Nick Alcock <[email protected]> writes:

> Currently, `magit-log-edit-commit' erases and buries the commit log buffer, 
> then
> proceeds to do things that rely on the `magit-git-dir'. This function isn't
> going to work as expected unless the buffer that is current after 
> `bury-buffer'
> is located under the `magit-git-dir' -- but there is no guarantee of that.
> Indeed there is no guarantee that any such buffers exist (they may all have 
> been
> deleted). Given the semantics of `bury-buffer' it is sheer luck if you end
> up in the right place, and it is quite likely that `magit-git-dir' will simply
> crash.
>
> The solution is to record the *magit* buffer itself (not its name, the buffer
> itself) in a variable local to the commit log buffer, so that it is guaranteed
> that we always have a suitable buffer to switch back to even if it's been
> killed, then switch back to it at `magit-log-edit-commit' time.
> ---
>  magit.el |    7 ++++++-
>  1 file changed, 6 insertions(+), 1 deletion(-)
>
> diff --git a/magit.el b/magit.el
> index ec43fcc..fb7b142 100644
> --- a/magit.el
> +++ b/magit.el
> @@ -4448,7 +4448,9 @@ environment (potentially empty)."
>                                  (if sign-off '("--signoff") '()))))))))
>      ;; shouldn't we kill that buffer altogether?
>      (erase-buffer)
> -    (bury-buffer)
> +    (let ((magit-buf magit-buffer))
> +      (bury-buffer)
> +      (set-buffer magit-buf))

I would have probably use the with-current-buffer macro, but I'm not
completely convince it would be useful. 

>      (when (file-exists-p (concat (magit-git-dir) "MERGE_MSG"))
>        (delete-file (concat (magit-git-dir) "MERGE_MSG")))
>      ;; potentially the local environment has been altered with settings that
> @@ -4502,6 +4504,7 @@ This means that the eventual commit does 'git commit 
> --allow-empty'."
>  
>  (defun magit-pop-to-log-edit (operation)
>    (let ((dir default-directory)
> +        (magit-buf (current-buffer))
>          (buf (get-buffer-create magit-log-edit-buffer-name)))
>      (setq magit-pre-log-edit-window-configuration
>            (current-window-configuration))
> @@ -4510,6 +4513,8 @@ This means that the eventual commit does 'git commit 
> --allow-empty'."
>        (insert-file-contents (concat (magit-git-dir) "MERGE_MSG")))
>      (setq default-directory dir)
>      (magit-log-edit-mode)
> +    (make-local-variable 'magit-buffer)

You should add a defvar for the magit-buffer variable, preferably with
some useful help string. 

> +    (setq magit-buffer magit-buf)
>      (message "Type C-c C-c to %s (C-c C-k to cancel)." operation)))
>  
>  (defun magit-log-edit (&optional arg)

-- 
Rémi Vanicat

Reply via email to