Function: majutsu-annotate--parse-output

majutsu-annotate--parse-output is a natively compiled function defined in majutsu-annotate.el.

Signature

(majutsu-annotate--parse-output OUTPUT)

Documentation

Parse OUTPUT from jj file annotate into chunks.

Returns a list of majutsu-annotate-chunk structures.

Source Code

;; Defined in /nix/store/jagqw3nms546pad0gxi5f3wsckk6pji7-emacs-packages-deps/share/emacs/site-lisp/majutsu-annotate.el
;;; Parsing

(defun majutsu-annotate--parse-output (output)
  "Parse OUTPUT from `jj file annotate' into chunks.
Returns a list of `majutsu-annotate-chunk' structures."
  (let ((lines (split-string output "\n" t))
        chunks current-chunk)
    (dolist (line lines)
      (let* ((fields (split-string line "\t"))
             (change-id (nth 0 fields))
             (parents (nth 1 fields))
             (author (nth 2 fields))
             (timestamp (nth 3 fields))
             (line-num (string-to-number (or (nth 4 fields) "0")))
             (orig-line-num (string-to-number (or (nth 5 fields) "0")))
             (first-in-hunk (equal (nth 6 fields) "true"))
             (summary (or (nth 7 fields) "")))
        (when (and change-id (> line-num 0))
          ;; Cache revinfo
          (unless (gethash change-id majutsu-annotate-cache)
            (puthash change-id
                     `(("summary" . ,summary)
                       ("author" . ,author)
                       ("committer-time" . ,timestamp))
                     majutsu-annotate-cache))
          (if (and current-chunk
                   (not first-in-hunk)
                   (equal change-id (majutsu-annotate-chunk-orig-rev current-chunk)))
              ;; Extend current chunk
              (cl-incf (majutsu-annotate-chunk-num-lines current-chunk))
            ;; Start new chunk
            (when current-chunk
              (push current-chunk chunks))
            (setq current-chunk
                  (make-majutsu-annotate-chunk
                   :orig-rev change-id
                   :orig-line orig-line-num
                   :final-line line-num
                   :num-lines 1
                   :prev-rev (and (not (string-empty-p parents))
                                  (car (split-string parents ",")))))))))
    (when current-chunk
      (push current-chunk chunks))
    (nreverse chunks)))