Function: ediff-patch-buffer-internal

ediff-patch-buffer-internal is a byte-compiled function defined in ediff-ptch.el.gz.

Signature

(ediff-patch-buffer-internal PATCH-BUF BUF-TO-PATCH-NAME &optional STARTUP-HOOKS)

Source Code

;; Defined in /usr/src/emacs/lisp/vc/ediff-ptch.el.gz
;; When patching a buffer, never change the orig file.  Instead, create a new
;; buffer, ***_patched, even if the buff visits a file.
;; Users who want to actually patch the buffer should use
;; ediff-patch-file, not ediff-patch-buffer.
(defun ediff-patch-buffer-internal (patch-buf
				    buf-to-patch-name
				    &optional startup-hooks)
  (let* ((buf-to-patch (get-buffer buf-to-patch-name))
	 (visited-file (if buf-to-patch (buffer-file-name  buf-to-patch)))
	 (buf-mod-status (buffer-modified-p buf-to-patch))
	 (multifile-patch-p (> (length (ediff-with-current-buffer patch-buf
					 ediff-patch-map)) 1))
	 default-dir file-name ctl-buf)
    (if multifile-patch-p
	(error
	 "To apply multi-file patches, please use `ediff-patch-file'"))

    ;; create a temp file to patch
    (ediff-with-current-buffer buf-to-patch
      (setq default-dir default-directory)
      (setq file-name (ediff-make-temp-file buf-to-patch))
      ;; temporarily switch visited file name, if any
      (set-visited-file-name file-name)
      ;; don't create auto-save file, if buff was visiting a file
      (or visited-file
	  (setq buffer-auto-save-file-name nil))
      ;; don't confuse the user with a new bufname
      (rename-buffer buf-to-patch-name)
      (set-buffer-modified-p nil)
      (set-visited-file-modtime) ; sync buffer and temp file
      (setq default-directory default-dir)
      )

    ;; dispatch a patch function
    (setq ctl-buf (ediff-dispatch-file-patching-job
		   patch-buf file-name startup-hooks))

    (ediff-with-current-buffer ctl-buf
      (delete-file (buffer-file-name ediff-buffer-A))
      (delete-file (buffer-file-name ediff-buffer-B))
      (ediff-with-current-buffer ediff-buffer-A
	(if default-dir (setq default-directory default-dir))
	(set-visited-file-name visited-file) ; visited-file might be nil
	(rename-buffer buf-to-patch-name)
	(set-buffer-modified-p buf-mod-status))
      (ediff-with-current-buffer ediff-buffer-B
	(setq buffer-auto-save-file-name nil) ; don't create auto-save file
	(if default-dir (setq default-directory default-dir))
	(set-visited-file-name nil)
	(rename-buffer (ediff-unique-buffer-name
			(concat buf-to-patch-name "_patched") ""))
	(set-buffer-modified-p t)))
    ))