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)))))))))