--- Begin Message ---
Subject: |
25.0.50; Applying vc-diff hunks on CRLF tracked files |
Date: |
Wed, 24 Jun 2015 12:29:05 +0100 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/25.0.50 (windows-nt) |
Hello maintainers,
1. Navigate to a repository where files are tracked with CRLF line
endings.
2. Modify one of those files.
3. Use M-x vc-root-diff. Observe how, in the latest trunk, the carriage
return (represented as ^M) are visible as a part of the diff hunk's
content. This is correct, in my opinion, if a little visually
distracting.
4. Undo of of those diffs with C-c C-a
5. Redo the same hunk with C-c C-a again
6. Notive how diff-apply-hunk incorrectly applies the carriage return
characters themselves.
Here's a trivial patch to lisp/vc/diff-mode.el, or simply cherry-pick
the commit
7ed2b6299425c4b2ea6bd8d8e8eb5eaa5e5ddf7e
which is available in this url
https://github.com/capitaomorte/emacs.git
@@ -1799,7 +1799,8 @@
(with-current-buffer buf
(goto-char (car pos))
(delete-region (car pos) (cdr pos))
- (insert (car new)))
+ (insert (decode-coding-string (car new)
+ buffer-file-coding-system)))
;; Display BUF in a window
(set-window-point (display-buffer buf) (+ (car pos) (cdr new)))
(diff-hunk-status-msg line-offset (diff-xor switched reverse) nil)
The commit message is
Consider coding system when applying diff-mode hunks.
Without this, applying hunks may garble line endings in the
destination buffer.
* lisp/vc/diff-mode.el (diff-apply-hunk): Use decode-coding-string and
buffer-file-coding-system.
Sorry I couldn't properly inline a patch,
Thanks,
João
--- End Message ---
--- Begin Message ---
Subject: |
Re: bug#20892: 25.0.50; Applying vc-diff hunks on CRLF tracked files |
Date: |
Sat, 02 Apr 2016 17:27:20 +0300 |
> From: João Távora <address@hidden>
> Date: Sat, 2 Apr 2016 14:42:48 +0100
> Cc: Stefan Monnier <address@hidden>, address@hidden
>
> 1. Sometime in June 2015, upgrade my emacs. vc-diff some CRLF file
>
> 2. "Cool, a new feature now makes it show precisely which chars were
> added and deleted even the CRs"
>
> 3. "Oh, but vc-apply-hunk stopped working, let's open bug 20892"
>
> 4. Discuss bug, argue that showing ^M is cool for when you really want
> to apply patches that add and remove just one or two of those.
>
> 5. Apply some reasonable fix to my config. Be side-tracked by
> dayjob. Lose interest in discussing the bug,
>
> 6. Eventually, realize 4 is silly and if you're mixing CRLF and
> non-CRLF line endings you've already lost.
>
> 7. Recently, March 2016, also realize that diacritics are also wrong
> in latin-1 files.
>
> 8. Decide to reevaluate situation, read some code and commit messages,
> and propose a new fix that makes the vc-diff buffer have the same
> encoding as the originating file, as apparently was intended.
> vc-apply-hunk is fixed, if I ever need to do something like 4
> I'll do it outside of emacs.
>
> I think you can close the bug.
Thanks, closing.
--- End Message ---