branch: master commit 93aa34da8ec11aa3818decee8751f5de2e028c03 Author: Evgeni Kolev <evgen...@gmail.com> Commit: Evgeni Kolev <evgen...@gmail.com>
Make sure buffer is not narrowed when reverting a hunk --- diff-hl.el | 94 ++++++++++++++++++++++++++++++++------------------------------ 1 file changed, 48 insertions(+), 46 deletions(-) diff --git a/diff-hl.el b/diff-hl.el index b9fd6d2..0567664 100644 --- a/diff-hl.el +++ b/diff-hl.el @@ -405,52 +405,54 @@ in the source file, or the last line of the hunk above it." (defun diff-hl-revert-hunk () "Revert the diff hunk with changes at or above the point." (interactive) - (vc-buffer-sync) - (let ((diff-buffer (generate-new-buffer-name "*diff-hl*")) - (buffer (current-buffer)) - (line (save-excursion - (unless (diff-hl-hunk-overlay-at (point)) - (diff-hl-previous-hunk)) - (line-number-at-pos))) - (fileset (vc-deduce-fileset))) - (unwind-protect - (progn - (vc-diff-internal nil fileset diff-hl-reference-revision nil - nil diff-buffer) - (vc-exec-after - `(let (beg-line end-line m-end) - (when (eobp) - (with-current-buffer ,buffer (diff-hl-remove-overlays)) - (user-error "Buffer is up-to-date")) - (let (diff-auto-refine-mode) - (diff-hl-diff-skip-to ,line)) - (save-excursion - (while (looking-at "[-+]") (forward-line 1)) - (setq end-line (line-number-at-pos (point))) - (setq m-end (point-marker)) - (unless (eobp) (diff-split-hunk))) - (unless (looking-at "[-+]") (forward-line -1)) - (while (looking-at "[-+]") (forward-line -1)) - (setq beg-line (line-number-at-pos (point))) - (unless (looking-at "@") - (forward-line 1) - (diff-split-hunk)) - (funcall diff-hl-highlight-revert-hunk-function m-end) - (let ((wbh (window-body-height))) - (if (>= wbh (- end-line beg-line)) - (recenter (/ (+ wbh (- beg-line end-line) 2) 2)) - (recenter 1))) - (when diff-auto-refine-mode - (diff-refine-hunk)) - (unless (yes-or-no-p (format "Revert current hunk in %s? " - ,(cl-caadr fileset))) - (user-error "Revert canceled")) - (let ((diff-advance-after-apply-hunk nil)) - (diff-apply-hunk t)) - (with-current-buffer ,buffer - (save-buffer)) - (message "Hunk reverted")))) - (quit-windows-on diff-buffer t)))) + (save-restriction + (widen) + (vc-buffer-sync) + (let ((diff-buffer (generate-new-buffer-name "*diff-hl*")) + (buffer (current-buffer)) + (line (save-excursion + (unless (diff-hl-hunk-overlay-at (point)) + (diff-hl-previous-hunk)) + (line-number-at-pos))) + (fileset (vc-deduce-fileset))) + (unwind-protect + (progn + (vc-diff-internal nil fileset diff-hl-reference-revision nil + nil diff-buffer) + (vc-exec-after + `(let (beg-line end-line m-end) + (when (eobp) + (with-current-buffer ,buffer (diff-hl-remove-overlays)) + (user-error "Buffer is up-to-date")) + (let (diff-auto-refine-mode) + (diff-hl-diff-skip-to ,line)) + (save-excursion + (while (looking-at "[-+]") (forward-line 1)) + (setq end-line (line-number-at-pos (point))) + (setq m-end (point-marker)) + (unless (eobp) (diff-split-hunk))) + (unless (looking-at "[-+]") (forward-line -1)) + (while (looking-at "[-+]") (forward-line -1)) + (setq beg-line (line-number-at-pos (point))) + (unless (looking-at "@") + (forward-line 1) + (diff-split-hunk)) + (funcall diff-hl-highlight-revert-hunk-function m-end) + (let ((wbh (window-body-height))) + (if (>= wbh (- end-line beg-line)) + (recenter (/ (+ wbh (- beg-line end-line) 2) 2)) + (recenter 1))) + (when diff-auto-refine-mode + (diff-refine-hunk)) + (unless (yes-or-no-p (format "Revert current hunk in %s? " + ,(cl-caadr fileset))) + (user-error "Revert canceled")) + (let ((diff-advance-after-apply-hunk nil)) + (diff-apply-hunk t)) + (with-current-buffer ,buffer + (save-buffer)) + (message "Hunk reverted")))) + (quit-windows-on diff-buffer t))))) (defun diff-hl-hunk-overlay-at (pos) (cl-loop for o in (overlays-in pos (1+ pos))