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: (