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