From f253ef6a8e0dd71cf9fd58e3d9407549d30e091d Mon Sep 17 00:00:00 2001 From: Reiner Steib Date: Fri, 16 Jul 2010 13:17:13 +0300 Subject: [PATCH] Fix bug #4451. vc.el (vc-coding-system-inherit-eol): New defvar. (vc-coding-system-for-diff): Use it to decide whether to inherit from the file the EOL format for reading the diffs of that file. --- lisp/ChangeLog | 7 +++++++ lisp/vc.el | 17 ++++++++++++++++- 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index bdbc96a5afe..0ce0e8e3073 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,10 @@ +2010-07-16 Reiner Steib + + * vc.el (vc-coding-system-inherit-eol): New defvar. + (vc-coding-system-for-diff): Use it to decide whether to inherit + from the file the EOL format for reading the diffs of that file. + (Bug#4451) + 2010-07-16 Eli Zaretskii * mail/rmailmm.el (rmail-mime-save): Make the temp buffer diff --git a/lisp/vc.el b/lisp/vc.el index 194c2a08983..a7d4ec66391 100644 --- a/lisp/vc.el +++ b/lisp/vc.el @@ -1398,6 +1398,16 @@ Runs the normal hooks `vc-before-checkin-hook' and `vc-checkin-hook'." ;; (vc-call-backend ',(vc-backend f) ;; 'diff (list ',f) ',rev1 ',rev2)))))) +(defvar vc-coding-system-inherit-eol t + "When non-nil, inherit the EOL format for reading Diff output from the file. + +Used in `vc-coding-system-for-diff' to determine the EOL format to use +for reading Diff output for a file. If non-nil, the EOL format is +inherited from the file itself. +Set this variable to nil if your Diff tool might use a different +EOL. Then Emacs will auto-detect the EOL format in Diff output, which +gives better results.") ;; Cf. bug#4451. + (defun vc-coding-system-for-diff (file) "Return the coding system for reading diff output for FILE." (or coding-system-for-read @@ -1405,7 +1415,12 @@ Runs the normal hooks `vc-before-checkin-hook' and `vc-checkin-hook'." ;; use the buffer's coding system (let ((buf (find-buffer-visiting file))) (when buf (with-current-buffer buf - buffer-file-coding-system))) + (if vc-coding-system-inherit-eol + buffer-file-coding-system + ;; Don't inherit the EOL part of the coding-system, + ;; because some Diff tools may choose to use + ;; a different one. bug#4451. + (coding-system-base buffer-file-coding-system))))) ;; otherwise, try to find one based on the file name (car (find-operation-coding-system 'insert-file-contents file)) ;; and a final fallback -- 2.39.2