Skip to content

cl-assertion-failed in diff-hl-revert-hunk due to track-changes in Emacs 30+ #286

Description

@jamescherti

When using diff-hl-revert-hunk, an assertion failure occurs while the confirmation prompt is active:

Debugger entered--Lisp error: (cl-assertion-failed ((<= (point-min) beg end (point-max)) nil))
  cl--assertion-failed((<= (point-min) beg end (point-max)))
  track-changes-fetch(#s(track-changes--tracker :signal diff--track-changes-signal :state #s(track-changes--state :beg 1760 :end 2179 :before 399 :undo nil :next #s(track-changes--state :beg 2157 :end 1752 :before nil :undo t :next nil)) :nobefore t :immediate nil) diff--track-changes-function)
  diff--track-changes-signal(#s(track-changes--tracker :signal diff--track-changes-signal :state #s(track-changes--state :beg 1760 :end 2179 :before 399 :undo nil :next #s(track-changes--state :beg 2157 :end 1752 :before nil :undo t :next nil)) :nobefore t :immediate nil))
  track-changes--call-signal(#<buffer *diff-hl-revert*> #s(track-changes--tracker :signal diff--track-changes-signal :state #s(track-changes--state :beg 1760 :end 2179 :before 399 :undo nil :next #s(track-changes--state :beg 2157 :end 1752 :before nil :undo t :next nil)) :nobefore t :immediate nil))
  apply(track-changes--call-signal (#<buffer *diff-hl-revert*> #s(track-changes--tracker :signal diff--track-changes-signal :state #s(track-changes--state :beg 1760 :end 2179 :before 399 :undo nil :next #s(track-changes--state :beg 2157 :end 1752 :before nil :undo t :next nil)) :nobefore t :immediate nil)))
  timer-event-handler([t 27173 23866 166673 nil track-changes--call-signal (#<buffer *diff-hl-revert*> #s(track-changes--tracker :signal diff--track-changes-signal :state #s(track-changes--state :beg 1760 :end 2179 :before 399 :undo nil :next #s(track-changes--state :beg 2157 :end 1752 :before nil :undo t :next nil)) :nobefore t :immediate nil)) nil 46000 nil])
  read-from-minibuffer(#("Revert current hunk in /home/user/tests/diff-hl/diff-hl.el? (y or n) " 65 66 (face help-key-binding font-lock-face help-key-binding) 70 71 (face help-key-binding font-lock-face help-key-binding)) nil (keymap (keymap (escape . abort-recursive-edit) (remap keymap (quit . abort-recursive-edit) (exit-prefix . abort-recursive-edit) (exit . y-or-n-p-insert-other) (scroll-other-window-down . minibuffer-scroll-other-window-down) (scroll-other-window . minibuffer-scroll-other-window) (scroll-down . minibuffer-scroll-down-command) (scroll-up . minibuffer-scroll-up-command) (recenter . minibuffer-recenter-top-bottom) (self-insert-command . y-or-n-p-insert-other) (ignore . y-or-n-p-insert-other) (delete-and-edit . y-or-n-p-insert-other) (edit-replacement . y-or-n-p-insert-other) (edit . y-or-n-p-insert-other) (undo-all . y-or-n-p-insert-other) (undo . y-or-n-p-insert-other) (backup . y-or-n-p-insert-other) (skip . y-or-n-p-insert-n) (automatic . y-or-n-p-insert-y) (act-and-exit . y-or-n-p-insert-y) (act-and-show . y-or-n-p-insert-y) (act . y-or-n-p-insert-y)) keymap (C-down . next-history-element) (C-up . previous-history-element) (normal-state keymap "Auxiliary keymap for Normal state" (13 . exit-minibuffer) (escape . abort-recursive-edit) (99 . evil-collection-change-in-minibuffer)) (menu-bar keymap (minibuf "Minibuf" keymap (previous menu-item "Previous History Item" previous-history-element :help "Put previous minibuffer history element in the minibuffer") (next menu-item "Next History Item" next-history-element :help "Put next minibuffer history element in the minibuffer") (isearch-backward menu-item "Isearch History Backward" isearch-backward :help "Incrementally search minibuffer history backward") (isearch-forward menu-item "Isearch History Forward" isearch-forward :help "Incrementally search minibuffer history forward") (return menu-item "Enter" exit-minibuffer :key-sequence "\15" :help "Terminate input and exit minibuffer") (quit menu-item "Quit" abort-recursive-edit :help "Abort input and exit minibuffer") "Minibuf")) (24 keymap (down . minibuffer-complete-defaults) (up . minibuffer-complete-history)) (13 . exit-minibuffer) (10 . exit-minibuffer) (7 . abort-minibuffers) (C-tab . file-cache-minibuffer-complete) (9 . self-insert-command) (XF86Back . previous-history-element) (up . previous-line-or-history-element) (prior . previous-history-element) (XF86Forward . next-history-element) (down . next-line-or-history-element) (next . next-history-element) (27 keymap (65 . marginalia-cycle) (60 . minibuffer-beginning-of-buffer) (114 . consult-history) (115 . consult-history) (112 . previous-history-element) (110 . next-history-element))) keymap (escape . exit-prefix) (M-prior . scroll-other-window-down) (M-next . scroll-other-window) (prior . scroll-down) (next . scroll-up) (27 keymap (33554454 . scroll-other-window-down) (22 . scroll-other-window) (118 . scroll-down)) (22 . scroll-up) (29 . quit) (7 . quit) (63 . help) (help . help) (f1 . help) (8 . help) (100 . diff) (85 . undo-all) (117 . undo) (94 . backup) (33 . automatic) (12 . recenter) (23 . delete-and-edit) (18 . edit) (46 . act-and-exit) (return . exit) (13 . exit) (113 . exit) (44 . act-and-show) (69 . edit-replacement-exact-case) (101 . edit-replacement) (78 . skip) (89 . act) (110 . skip) (121 . act) (backspace . skip) (delete . skip) (127 . skip) (32 . act)) nil t)
  y-or-n-p("Revert current hunk in /home/user/tests/diff-hl/diff-hl.el? ")
  yes-or-no-p("Revert current hunk in /home/user/tests/diff-hl/diff-hl.el? ")
  (if (yes-or-no-p (format "Revert current hunk in %s? " file)) nil (user-error "Revert canceled"))
  (if diff-hl-ask-before-revert-hunk (if (yes-or-no-p (format "Revert current hunk in %s? " file)) nil (user-error "Revert canceled")))
  (let (beg-line end-line m-beg m-end) (if (eobp) (progn (save-current-buffer (set-buffer buffer) (diff-hl-remove-overlays)) (user-error "Buffer is up-to-date"))) (with-no-warnings (let (diff-auto-refine-mode) (diff-hl-diff-skip-to line))) (setq m-end (diff-hl-split-away-changes 3)) (setq m-beg (point-marker)) (funcall diff-hl-highlight-revert-hunk-function m-end) (progn (setq beg-line (line-number-at-pos m-beg)) (setq end-line (line-number-at-pos m-end))) (let ((wbh (window-body-height))) (if (>= wbh (- end-line beg-line)) (recenter (/ (+ wbh (- beg-line end-line) 2) 2)) (recenter 1))) (with-no-warnings (if diff-auto-refine-mode (progn (diff-refine-hunk)))) (if diff-hl-ask-before-revert-hunk (if (yes-or-no-p (format "Revert current hunk in %s? " file)) nil (user-error "Revert canceled"))) (widen) (let ((diff-advance-after-apply-hunk nil)) (let ((wconfig (current-window-configuration))) (unwind-protect (progn (diff-apply-hunk t)) (set-window-configuration wconfig)))) (save-current-buffer (set-buffer buffer) (save-buffer)) (message "Hunk reverted"))
  #f(lambda () [(file "/home/user/tests/diff-hl/diff-hl.el") (line 745) (buffer #<buffer diff-hl.el>) (diff-buffer #<buffer *diff-hl-revert*>)] (vc-diff-finish diff-buffer nil) (let (beg-line end-line m-beg m-end) (if (eobp) (progn (save-current-buffer (set-buffer buffer) (diff-hl-remove-overlays)) (user-error "Buffer is up-to-date"))) (with-no-warnings (let (diff-auto-refine-mode) (diff-hl-diff-skip-to line))) (setq m-end (diff-hl-split-away-changes 3)) (setq m-beg (point-marker)) (funcall diff-hl-highlight-revert-hunk-function m-end) (progn (setq beg-line (line-number-at-pos m-beg)) (setq end-line (line-number-at-pos m-end))) (let ((wbh (window-body-height))) (if (>= wbh (- end-line beg-line)) (recenter (/ (+ wbh (- beg-line end-line) 2) 2)) (recenter 1))) (with-no-warnings (if diff-auto-refine-mode (progn (diff-refine-hunk)))) (if diff-hl-ask-before-revert-hunk (if (yes-or-no-p (format "Revert current hunk in %s? " file)) nil (user-error "Revert canceled"))) (widen) (let ((diff-advance-after-apply-hunk nil)) (let ((wconfig (current-window-configuration))) (unwind-protect (progn (diff-apply-hunk t)) (set-window-configuration wconfig)))) (save-current-buffer (set-buffer buffer) (save-buffer)) (message "Hunk reverted")))()
  #f(compiled-function () #<bytecode -0x140d1f6a0c9d3852>)()
  vc-exec-after(#f(lambda () [(file "/home/user/tests/diff-hl/diff-hl.el") (line 745) (buffer #<buffer diff-hl.el>) (diff-buffer #<buffer *diff-hl-revert*>)] (vc-diff-finish diff-buffer nil) (let (beg-line end-line m-beg m-end) (if (eobp) (progn (save-current-buffer (set-buffer buffer) (diff-hl-remove-overlays)) (user-error "Buffer is up-to-date"))) (with-no-warnings (let (diff-auto-refine-mode) (diff-hl-diff-skip-to line))) (setq m-end (diff-hl-split-away-changes 3)) (setq m-beg (point-marker)) (funcall diff-hl-highlight-revert-hunk-function m-end) (progn (setq beg-line (line-number-at-pos m-beg)) (setq end-line (line-number-at-pos m-end))) (let ((wbh (window-body-height))) (if (>= wbh (- end-line beg-line)) (recenter (/ (+ wbh ... 2) 2)) (recenter 1))) (with-no-warnings (if diff-auto-refine-mode (progn (diff-refine-hunk)))) (if diff-hl-ask-before-revert-hunk (if (yes-or-no-p (format "Revert current hunk in %s? " file)) nil (user-error "Revert canceled"))) (widen) (let ((diff-advance-after-apply-hunk nil)) (let ((wconfig (current-window-configuration))) (unwind-protect (progn (diff-apply-hunk t)) (set-window-configuration wconfig)))) (save-current-buffer (set-buffer buffer) (save-buffer)) (message "Hunk reverted"))))
  (progn (vc-setup-buffer diff-buffer) (save-current-buffer (set-buffer buffer) (diff-hl-diff-against-reference file backend diff-buffer)) (diff-mode) (setq diff-vc-backend (prog1 backend (make-local-variable 'diff-vc-backend))) (setq diff-vc-revisions (prog1 (list diff-hl-reference-revision nil) (make-local-variable 'diff-vc-revisions))) (setq buffer-read-only t) (pop-to-buffer diff-buffer) (vc-exec-after #'(lambda nil (vc-diff-finish diff-buffer nil) (let (beg-line end-line m-beg m-end) (if (eobp) (progn (save-current-buffer ... ...) (user-error "Buffer is up-to-date"))) (with-no-warnings (let (diff-auto-refine-mode) (diff-hl-diff-skip-to line))) (setq m-end (diff-hl-split-away-changes 3)) (setq m-beg (point-marker)) (funcall diff-hl-highlight-revert-hunk-function m-end) (progn (setq beg-line (line-number-at-pos m-beg)) (setq end-line (line-number-at-pos m-end))) (let ((wbh ...)) (if (>= wbh ...) (recenter ...) (recenter 1))) (with-no-warnings (if diff-auto-refine-mode (progn ...))) (if diff-hl-ask-before-revert-hunk (if (yes-or-no-p ...) nil (user-error "Revert canceled"))) (widen) (let ((diff-advance-after-apply-hunk nil)) (let (...) (unwind-protect ... ...))) (save-current-buffer (set-buffer buffer) (save-buffer)) (message "Hunk reverted")))))
  (unwind-protect (progn (vc-setup-buffer diff-buffer) (save-current-buffer (set-buffer buffer) (diff-hl-diff-against-reference file backend diff-buffer)) (diff-mode) (setq diff-vc-backend (prog1 backend (make-local-variable 'diff-vc-backend))) (setq diff-vc-revisions (prog1 (list diff-hl-reference-revision nil) (make-local-variable 'diff-vc-revisions))) (setq buffer-read-only t) (pop-to-buffer diff-buffer) (vc-exec-after #'(lambda nil (vc-diff-finish diff-buffer nil) (let (beg-line end-line m-beg m-end) (if (eobp) (progn ... ...)) (with-no-warnings (let ... ...)) (setq m-end (diff-hl-split-away-changes 3)) (setq m-beg (point-marker)) (funcall diff-hl-highlight-revert-hunk-function m-end) (progn (setq beg-line ...) (setq end-line ...)) (let (...) (if ... ... ...)) (with-no-warnings (if diff-auto-refine-mode ...)) (if diff-hl-ask-before-revert-hunk (if ... nil ...)) (widen) (let (...) (let ... ...)) (save-current-buffer (set-buffer buffer) (save-buffer)) (message "Hunk reverted"))))) (quit-windows-on diff-buffer t))
  (let* ((diff-buffer (get-buffer-create (generate-new-buffer-name "*diff-hl-revert*"))) (buffer (current-buffer)) (diff-hl-update-async nil) (line (save-excursion (diff-hl-find-current-hunk) (line-number-at-pos))) (file (diff-hl--buffer-file-name)) (backend (vc-backend file))) (unwind-protect (progn (vc-setup-buffer diff-buffer) (save-current-buffer (set-buffer buffer) (diff-hl-diff-against-reference file backend diff-buffer)) (diff-mode) (setq diff-vc-backend (prog1 backend (make-local-variable 'diff-vc-backend))) (setq diff-vc-revisions (prog1 (list diff-hl-reference-revision nil) (make-local-variable 'diff-vc-revisions))) (setq buffer-read-only t) (pop-to-buffer diff-buffer) (vc-exec-after #'(lambda nil (vc-diff-finish diff-buffer nil) (let (beg-line end-line m-beg m-end) (if ... ...) (with-no-warnings ...) (setq m-end ...) (setq m-beg ...) (funcall diff-hl-highlight-revert-hunk-function m-end) (progn ... ...) (let ... ...) (with-no-warnings ...) (if diff-hl-ask-before-revert-hunk ...) (widen) (let ... ...) (save-current-buffer ... ...) (message "Hunk reverted"))))) (quit-windows-on diff-buffer t)))
  (save-restriction (widen) (save-current-buffer (set-buffer (diff-hl--target-buffer)) (vc-buffer-sync)) (let* ((diff-buffer (get-buffer-create (generate-new-buffer-name "*diff-hl-revert*"))) (buffer (current-buffer)) (diff-hl-update-async nil) (line (save-excursion (diff-hl-find-current-hunk) (line-number-at-pos))) (file (diff-hl--buffer-file-name)) (backend (vc-backend file))) (unwind-protect (progn (vc-setup-buffer diff-buffer) (save-current-buffer (set-buffer buffer) (diff-hl-diff-against-reference file backend diff-buffer)) (diff-mode) (setq diff-vc-backend (prog1 backend (make-local-variable 'diff-vc-backend))) (setq diff-vc-revisions (prog1 (list diff-hl-reference-revision nil) (make-local-variable 'diff-vc-revisions))) (setq buffer-read-only t) (pop-to-buffer diff-buffer) (vc-exec-after #'(lambda nil (vc-diff-finish diff-buffer nil) (let ... ... ... ... ... ... ... ... ... ... ... ... ... ...)))) (quit-windows-on diff-buffer t))))
  diff-hl-revert-hunk-1()
  (save-current-buffer (set-buffer (current-buffer)) (diff-hl-revert-hunk-1))
  diff-hl-revert-hunk()
  funcall-interactively(diff-hl-revert-hunk)
  command-execute(diff-hl-revert-hunk)

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions