Function: majutsu-conflict-revision-at-point
majutsu-conflict-revision-at-point is a natively compiled function
defined in majutsu-conflict.el.
Signature
(majutsu-conflict-revision-at-point)
Documentation
Return conflict metadata at point as a plist.
Returns a plist with :change-id, :commit-id, and :side (add/remove/base), or nil when point is not inside a labeled section.
Source Code
;; Defined in /nix/store/jagqw3nms546pad0gxi5f3wsckk6pji7-emacs-packages-deps/share/emacs/site-lisp/majutsu-conflict.el
(defun majutsu-conflict-revision-at-point ()
"Return conflict metadata at point as a plist.
Returns a plist with :change-id, :commit-id, and :side (add/remove/base),
or nil when point is not inside a labeled section."
(let ((conflict (majutsu-conflict-at-point)))
(when conflict
(let ((pos (point))
(begin (majutsu-conflict-begin-pos conflict))
(end (majutsu-conflict-end-pos conflict))
(style (majutsu-conflict-style conflict)))
(save-excursion
(goto-char begin)
(let ((done nil)
(state nil)
(add-count 0)
(current-label nil)
(diff-remove-label nil)
(diff-add-label nil)
(base-label nil)
(side nil)
(label nil))
(while (and (not done) (< (point) end))
(let* ((line-beg (line-beginning-position))
(line-end (line-end-position))
(line (buffer-substring-no-properties line-beg line-end))
(on-line (and (<= line-beg pos) (<= pos line-end))))
(cond
((string-match majutsu-conflict-end-re line)
(setq state nil)
(when on-line
(setq done t)))
((string-match majutsu-conflict-diff-re line)
(setq state 'diff
diff-remove-label
(majutsu-conflict--normalize-diff-remove-label
(match-string 2 line))
diff-add-label nil)
(when on-line
(setq side 'remove
label diff-remove-label
done t)))
((string-match majutsu-conflict-begin-re line)
(when (eq style 'git)
(setq state 'remove
current-label (match-string 2 line))
(when on-line
(setq side 'remove
label current-label
done t))))
((string-match majutsu-conflict-note-re line)
(when (eq state 'diff)
(setq diff-add-label
(majutsu-conflict--normalize-diff-add-label
(match-string 2 line))))
(when on-line
(setq side 'add
label diff-add-label
done t)))
((string-match majutsu-conflict-remove-re line)
(setq state 'remove
current-label (match-string 2 line))
(when on-line
(setq side 'remove
label current-label
done t)))
((string-match majutsu-conflict-add-re line)
(cl-incf add-count)
(setq state (if (or (eq style 'jj-diff)
(and (eq style 'jj-snapshot) (= add-count 1)))
'base
'add)
current-label (match-string 2 line))
(when on-line
(setq side state
label current-label
done t)))
((string-match majutsu-conflict-git-ancestor-re line)
(setq state 'base
base-label (match-string 2 line)
current-label base-label)
(when on-line
(setq side 'base
label base-label
done t)))
((string-match majutsu-conflict-git-separator-re line)
(setq state 'add)
(when on-line
(setq side 'add
label nil
done t)))
(t
(when on-line
(cond
((eq state 'diff)
(cond
((string-prefix-p "-" line)
(setq side 'remove
label diff-remove-label))
((string-prefix-p "+" line)
(setq side 'add
label diff-add-label))))
((eq state 'remove)
(setq side 'remove
label current-label))
((eq state 'add)
(setq side 'add
label current-label))
((eq state 'base)
(setq side 'base
label current-label)))
(setq done t))))
(forward-line 1)))
(let ((parsed (majutsu-conflict-parse-label label)))
(when (and parsed side)
(list :change-id (plist-get parsed :change-id)
:commit-id (plist-get parsed :commit-id)
:side side)))))))))