Function: ediff-append-custom-diff
ediff-append-custom-diff is a byte-compiled function defined in
ediff-mult.el.gz.
Signature
(ediff-append-custom-diff SESSION SESSIONNUM)
Source Code
;; Defined in /usr/src/emacs/lisp/vc/ediff-mult.el.gz
(defun ediff-append-custom-diff (session sessionNum)
(or (ediff-collect-diffs-metajob)
(error "Can't compute multifile patch in this context"))
(let ((session-buf (ediff-get-session-buffer session))
(meta-diff-buff ediff-meta-diff-buffer)
(metajob ediff-metajob-name)
tmp-buf custom-diff-buf)
(if (ediff-buffer-live-p session-buf)
(ediff-with-current-buffer session-buf
(if (eq ediff-control-buffer session-buf) ; individual session
(progn
(ediff-compute-custom-diffs-maybe)
(setq custom-diff-buf ediff-custom-diff-buffer)))))
(or (ediff-buffer-live-p meta-diff-buff)
(user-error "Ediff: Something wrong--killed multiple diff's buffer"))
(cond ((ediff-buffer-live-p custom-diff-buf)
;; for live session buffers we do them first because the user may
;; have changed them with respect to the underlying files
(with-current-buffer meta-diff-buff
(goto-char (point-max))
(insert-buffer-substring custom-diff-buf)
(insert "\n")))
;; if ediff session is not live, run diff directly on the files
((memq metajob '(ediff-directories
ediff-merge-directories
ediff-merge-directories-with-ancestor))
;; get diffs by calling shell command on ediff-custom-diff-program
(with-current-buffer
(setq tmp-buf (get-buffer-create ediff-tmp-buffer))
(erase-buffer)
(shell-command
(format
"%s %s %s %s"
(shell-quote-argument ediff-custom-diff-program)
ediff-custom-diff-options
(shell-quote-argument (ediff-get-session-objA-name session))
(shell-quote-argument (ediff-get-session-objB-name session))
)
t)
)
(with-current-buffer meta-diff-buff
(goto-char (point-max))
(insert-buffer-substring tmp-buf)
(insert "\n")))
(t
(ediff-kill-buffer-carefully meta-diff-buff)
(user-error "Session %d compares versions of file. Such session must be active to enable multifile patch collection" sessionNum )))
))