branch: elpa/magit
commit 6419ec79d8d31cebfac05866130c50af954ac389
Author: Jonas Bernoulli <[email protected]>
Commit: Jonas Bernoulli <[email protected]>

    magit-find-file-noselect: Trigger point restoration from here
    
    Commands, which previously called `magit-find-file--internal'
    to do this, can now use `magit-find-file-noselect' directly.
    Deprecate the former.
---
 lisp/magit-diff.el  |  3 +-
 lisp/magit-ediff.el | 35 ++++++++++++----------
 lisp/magit-files.el | 85 ++++++++++++++++++++++++++++-------------------------
 3 files changed, 66 insertions(+), 57 deletions(-)

diff --git a/lisp/magit-diff.el b/lisp/magit-diff.el
index 13a1ee505d..543cd6240c 100644
--- a/lisp/magit-diff.el
+++ b/lisp/magit-diff.el
@@ -40,7 +40,8 @@
 ;; For `magit-diff-popup'
 (declare-function magit-stash-show "magit-stash" (stash &optional args files))
 ;; For `magit-diff-visit-file'
-(declare-function magit-find-file-noselect "magit-files" (rev file))
+(declare-function magit-find-file-noselect "magit-files"
+                  (rev file &optional no-restore-position))
 (declare-function magit-status-setup-buffer "magit-status" (&optional 
directory))
 ;; For `magit-diff-wash-diff'
 (defvar magit-log-heading-re)
diff --git a/lisp/magit-ediff.el b/lisp/magit-ediff.el
index 76a04dbb57..44a30a91e1 100644
--- a/lisp/magit-ediff.el
+++ b/lisp/magit-ediff.el
@@ -269,17 +269,17 @@ and alternative commands."
         (cond (fileC
                (magit-ediff-buffers
                 ((magit-get-revision-buffer revA fileA)
-                 (magit-find-file-noselect  revA fileA))
+                 (magit-ediff--find-file    revA fileA))
                 ((magit-get-revision-buffer revB fileB)
-                 (magit-find-file-noselect  revB fileB))
+                 (magit-ediff--find-file    revB fileB))
                 ((magit-get-revision-buffer revC fileC)
-                 (magit-find-file-noselect  revC fileC))
+                 (magit-ediff--find-file    revC fileC))
                 setup quit file))
               ((magit-ediff-buffers
                 ((magit-get-revision-buffer revA fileA)
-                 (magit-find-file-noselect  revA fileA))
+                 (magit-ediff--find-file    revA fileA))
                 ((magit-get-revision-buffer revB fileB)
-                 (magit-find-file-noselect  revB fileB))
+                 (magit-ediff--find-file    revB fileB))
                 nil setup quit file)))))))
 
 ;;;###autoload
@@ -332,8 +332,8 @@ FILE has to be relative to the top directory of the 
repository."
            (bufC* (or bufC (find-file-noselect file)))
            (coding-system-for-read
             (buffer-local-value 'buffer-file-coding-system bufC*))
-           (bufA* (magit-find-file-noselect "HEAD" file))
-           (bufB* (magit-find-file-index-noselect file)))
+           (bufA* (magit-ediff--find-file "HEAD" file))
+           (bufB* (magit-ediff--find-file "{index}" file)))
       (with-current-buffer bufB* (setq buffer-read-only nil))
       (magit-ediff-buffers
        (bufA bufA*)
@@ -373,9 +373,9 @@ range)."
              (magit-ediff-read-files revA revB))))
   (magit-ediff-buffers
    ((if revA (magit-get-revision-buffer revA fileA) (get-file-buffer    fileA))
-    (if revA (magit-find-file-noselect  revA fileA) (find-file-noselect 
fileA)))
+    (if revA (magit-ediff--find-file    revA fileA) (find-file-noselect 
fileA)))
    ((if revB (magit-get-revision-buffer revB fileB) (get-file-buffer    fileB))
-    (if revB (magit-find-file-noselect  revB fileB) (find-file-noselect 
fileB)))))
+    (if revB (magit-ediff--find-file    revB fileB) (find-file-noselect 
fileB)))))
 
 (defun magit-ediff-compare--read-revisions (&optional arg mbase)
   (let ((input (or arg (magit-diff-read-range-or-commit
@@ -503,9 +503,9 @@ FILE must be relative to the top directory of the 
repository."
                                   (magit-staged-files)
                                   "No staged files")))
   (magit-ediff-buffers ((magit-get-revision-buffer "HEAD" file)
-                        (magit-find-file-noselect "HEAD" file))
+                        (magit-ediff--find-file "HEAD" file))
                        ((get-buffer (concat file ".~{index}~"))
-                        (magit-find-file-index-noselect file))))
+                        (magit-ediff--find-file "{index}" file))))
 
 ;;;###autoload
 (defun magit-ediff-show-unstaged (file)
@@ -520,7 +520,7 @@ FILE must be relative to the top directory of the 
repository."
                                   (magit-unstaged-files)
                                   "No unstaged files")))
   (magit-ediff-buffers ((get-buffer (concat file ".~{index}~"))
-                        (magit-find-file-index-noselect file))
+                        (magit-ediff--find-file "{index}" file))
                        ((get-file-buffer file)
                         (find-file-noselect file))))
 
@@ -533,7 +533,7 @@ FILE must be relative to the top directory of the 
repository."
                                   (magit-changed-files "HEAD")
                                   "No changed files")))
   (magit-ediff-buffers ((magit-get-revision-buffer "HEAD" file)
-                        (magit-find-file-noselect  "HEAD" file))
+                        (magit-ediff--find-file "HEAD" file))
                        ((get-file-buffer file)
                         (find-file-noselect file))))
 
@@ -563,13 +563,16 @@ stash that were staged."
              (member fileA (magit-changed-files revB revA)))
         (magit-ediff-buffers
          ((magit-get-revision-buffer revA fileA)
-          (magit-find-file-noselect  revA fileA))
+          (magit-ediff--find-file    revA fileA))
          ((magit-get-revision-buffer revB fileB)
-          (magit-find-file-noselect  revB fileB))
+          (magit-ediff--find-file    revB fileB))
          ((magit-get-revision-buffer revC fileC)
-          (magit-find-file-noselect  revC fileC)))
+          (magit-ediff--find-file    revC fileC)))
       (magit-ediff-compare revA revC fileA fileC))))
 
+(defun magit-ediff--find-file (rev file)
+  (magit-find-file-noselect rev file t))
+
 (defun magit-ediff-cleanup-auxiliary-buffers ()
   (let* ((ctl-buf ediff-control-buffer)
          (ctl-win (ediff-get-visible-buffer-window ctl-buf))
diff --git a/lisp/magit-files.el b/lisp/magit-files.el
index 3bf24e58ef..67ef29da28 100644
--- a/lisp/magit-files.el
+++ b/lisp/magit-files.el
@@ -50,7 +50,7 @@ already exists.  If prior to calling this command the current
 buffer and/or cursor position is about the same file, then go
 to the line and column corresponding to that location."
   (interactive (magit-find-file-read-args "Find file"))
-  (magit-find-file--internal rev file #'pop-to-buffer-same-window))
+  (pop-to-buffer-same-window (magit-find-file-noselect rev file)))
 
 ;;;###autoload
 (defun magit-find-file-other-window (rev file)
@@ -60,7 +60,7 @@ already exists.  If prior to calling this command the current
 buffer and/or cursor position is about the same file, then go to
 the line and column corresponding to that location."
   (interactive (magit-find-file-read-args "Find file in other window"))
-  (magit-find-file--internal rev file #'switch-to-buffer-other-window))
+  (switch-to-buffer-other-window (magit-find-file-noselect rev file)))
 
 ;;;###autoload
 (defun magit-find-file-other-frame (rev file)
@@ -70,7 +70,7 @@ already exists.  If prior to calling this command the current
 buffer and/or cursor position is about the same file, then go to
 the line and column corresponding to that location."
   (interactive (magit-find-file-read-args "Find file in other frame"))
-  (magit-find-file--internal rev file #'switch-to-buffer-other-frame))
+  (switch-to-buffer-other-frame (magit-find-file-noselect rev file)))
 
 (defun magit-find-file-read-args (prompt)
   (let* ((pseudo-revs '("{worktree}" "{index}"))
@@ -84,46 +84,45 @@ the line and column corresponding to that location."
           (magit-read-file-from-rev (if (member rev pseudo-revs) "HEAD" rev)
                                     prompt))))
 
-(defun magit-find-file--internal (rev file display)
-  (let ((buf (magit-find-file-noselect rev file)))
-    (when (equal (magit-file-relative-name) file)
-      (let ((pos (magit-find-file--position)))
-        (with-current-buffer buf
-          (apply #'magit-find-file--restore-position pos))))
-    (funcall display buf)
-    buf))
-
-(defun magit-find-file-noselect (rev file)
+(defun magit-find-file-noselect (rev file &optional no-restore-position)
   "Read FILE from REV into a buffer and return the buffer.
 REV is a revision or one of \"{worktree}\" or \"{index}\"."
   (when (and (equal rev "{index}")
              (length> (magit--file-index-stages file) 1))
     (setq rev "{worktree}"))
-  (cond-let*
-    [[topdir (magit-toplevel)]
-     [file (expand-file-name file topdir)]]
-    ((equal rev "{worktree}")
-     (let ((revert-without-query
-            (if (and$ (find-buffer-visiting file)
-                      (buffer-local-value 'auto-revert-mode $))
-                (cons "." revert-without-query)
-              revert-without-query)))
-       (find-file-noselect file)))
-    ([_ topdir]
-     [defdir (file-name-directory file)]
-     [rev (magit--abbrev-if-hash rev)]
-     (unless (file-in-directory-p file topdir)
-       (error "%s is not in repository %s" file topdir))
-     (with-current-buffer (magit-get-revision-buffer-create
-                           rev
-                           (file-relative-name file topdir))
-       (setq magit-buffer-revision rev)
-       (setq magit-buffer-file-name file)
-       (setq default-directory (if (file-exists-p defdir) defdir topdir))
-       (setq-local revert-buffer-function #'magit--revert-blob-buffer)
-       (magit--refresh-blob-buffer)
-       (current-buffer)))
-    ((error "%s isn't inside a Git repository" file))))
+  (let* ((topdir (magit-toplevel))
+         (file (expand-file-name file topdir))
+         (file-relative (file-relative-name file topdir))
+         (buffer
+          (cond-let
+            ((equal rev "{worktree}")
+             (let ((revert-without-query
+                    (if (and$ (find-buffer-visiting file)
+                              (buffer-local-value 'auto-revert-mode $))
+                        (cons "." revert-without-query)
+                      revert-without-query)))
+               (find-file-noselect file)))
+            ([_ topdir]
+             [defdir (file-name-directory file)]
+             [rev (magit--abbrev-if-hash rev)]
+             (unless (file-in-directory-p file topdir)
+               (error "%s is not in repository %s" file topdir))
+             (with-current-buffer
+                 (magit-get-revision-buffer-create rev file-relative)
+               (setq magit-buffer-revision rev)
+               (setq magit-buffer-file-name file)
+               (setq default-directory
+                     (if (file-exists-p defdir) defdir topdir))
+               (setq-local revert-buffer-function #'magit--revert-blob-buffer)
+               (magit--refresh-blob-buffer)
+               (current-buffer)))
+            ((error "%s isn't inside a Git repository" file)))))
+    (when (and (not no-restore-position)
+               (equal (magit-file-relative-name) file-relative))
+      (let ((pos (magit-find-file--position)))
+        (with-current-buffer buffer
+          (apply #'magit-find-file--restore-position pos))))
+    buffer))
 
 (defun magit-get-revision-buffer-create (rev file)
   (magit-get-revision-buffer rev file t))
@@ -211,7 +210,7 @@ See also https://github.com/doomemacs/doomemacs/pull/6309.";
 
 (defun magit-find-file-index-noselect (file)
   "Read FILE from the index into a buffer and return the buffer."
-  (magit-find-file-noselect "{index}" file))
+  (magit-find-file-noselect "{index}" file t))
 
 (defun magit-update-index ()
   "Update the index with the contents of the current buffer.
@@ -427,7 +426,7 @@ When visiting a blob or the version from the index, then go 
to
 the same location in the respective file in the working tree."
   (interactive)
   (if-let ((file (magit-file-relative-name)))
-      (magit-find-file--internal "{worktree}" file #'pop-to-buffer-same-window)
+      (pop-to-buffer-same-window (magit-find-file-noselect "{worktree}" file))
     (user-error "Not visiting a blob")))
 
 (defun magit-blob-visit (rev file)
@@ -639,6 +638,12 @@ If DEFAULT is non-nil, use this as the default value 
instead of
 (define-obsolete-function-alias 'magit-find-file-noselect-1
   'magit-find-file-noselect "Magit 4.4.0")
 
+(defun magit-find-file--internal (rev file display)
+  (declare (obsolete magit-find-file-noselect "Magit 4.6.0"))
+  (let ((buf (magit-find-file-noselect rev file)))
+    (funcall display buf)
+    buf))
+
 (provide 'magit-files)
 ;; Local Variables:
 ;; read-symbol-shorthands: (

Reply via email to