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