Function: majutsu-file-revert-buffer
majutsu-file-revert-buffer is a natively compiled function defined in
majutsu-file.el.
Signature
(majutsu-file-revert-buffer IGNORE-AUTO NOCONFIRM)
Documentation
Revert the current blob buffer content.
If revision metadata moved, preserve location heuristically:
- same change-id + same commit-id: keep current location
- same change-id + different commit-id: offset line across revisions
- different change-id: jump to beginning
Source Code
;; Defined in /nix/store/jagqw3nms546pad0gxi5f3wsckk6pji7-emacs-packages-deps/share/emacs/site-lisp/majutsu-file.el
(defun majutsu-file-revert-buffer (_ignore-auto noconfirm)
"Revert the current blob buffer content.
If revision metadata moved, preserve location heuristically:
- same change-id + same commit-id: keep current location
- same change-id + different commit-id: offset line across revisions
- different change-id: jump to beginning"
(let* ((local-drift (and majutsu-buffer-blob-content-hash
(not (equal majutsu-buffer-blob-content-hash
(majutsu-file--current-content-hash)))))
(modified (or (buffer-modified-p) local-drift)))
(when (or noconfirm
(not modified)
(y-or-n-p "Revert blob buffer? "))
(unless majutsu-buffer-blob-root
(user-error "Not in a blob buffer"))
(when majutsu-blob-edit-mode
(user-error "Finish or abort blob edit mode before refresh"))
(let* ((inhibit-read-only t)
(default-directory majutsu-buffer-blob-root)
(path majutsu-buffer-blob-path)
(line (line-number-at-pos))
(col (current-column))
(old-change (or majutsu-buffer-blob-change-id majutsu-buffer-blob-revision))
(old-commit majutsu-buffer-blob-commit-id)
(rev-info (or (majutsu-file--resolve-single-rev-info majutsu-buffer-blob-revset)
(user-error "Revset no longer resolves to a single revision")))
(new-change (plist-get rev-info :change-id))
(new-commit (plist-get rev-info :commit-id))
(target-line line)
(target-col col)
(reload-needed t))
(cond
((and (equal old-change new-change)
majutsu-buffer-blob-content-hash
(equal old-commit new-commit)
(not modified))
;; Nothing changed remotely and nothing changed locally.
(setq reload-needed nil))
((and old-change old-commit
(equal old-change new-change)
new-commit)
(setq target-line
(or (condition-case nil
(majutsu-diff-visit--offset
majutsu-buffer-blob-root path old-commit new-commit line)
(error line))
line)))
((not (equal old-change new-change))
(setq target-line 1
target-col 0)))
(if (not reload-needed)
nil
(erase-buffer)
(majutsu-jj-insert "file" "show" "-r"
(or new-commit (majutsu-file--normalize-revset majutsu-buffer-blob-revset))
(majutsu-jj-fileset-quote path))
(let ((buffer-file-name (expand-file-name path default-directory))
(after-change-major-mode-hook
(seq-difference after-change-major-mode-hook
'(global-diff-hl-mode-enable-in-buffer
global-diff-hl-mode-enable-in-buffers)
#'eq)))
(normal-mode (not enable-local-variables)))
(setq majutsu-buffer-blob-revision new-change)
(setq majutsu-buffer-blob-change-id new-change)
(setq majutsu-buffer-blob-commit-id new-commit)
(majutsu-file--refresh-buffer-name)
(setq buffer-read-only t)
(set-buffer-modified-p nil)
(setq-local majutsu-buffer-blob-content-hash (majutsu-file--current-content-hash))
(majutsu-blob-mode 1)
(majutsu-file--goto-line-col (or target-line 1) (or target-col 0)))))))