GNU bug report logs -
#20892
25.0.50; Applying vc-diff hunks on CRLF tracked files
Previous Next
Reported by: joaotavora <at> gmail.com (João Távora)
Date: Wed, 24 Jun 2015 11:30:05 UTC
Severity: normal
Found in version 25.0.50
Done: Eli Zaretskii <eliz <at> gnu.org>
Bug is archived. No further changes may be made.
Full log
View this message in rfc822 format
[Message part 1 (text/plain, inline)]
Your message dated Sat, 02 Apr 2016 17:27:20 +0300
with message-id <837fggrsqf.fsf <at> gnu.org>
and subject line Re: bug#20892: 25.0.50; Applying vc-diff hunks on CRLF tracked files
has caused the debbugs.gnu.org bug report #20892,
regarding 25.0.50; Applying vc-diff hunks on CRLF tracked files
to be marked as done.
(If you believe you have received this mail in error, please contact
help-debbugs <at> gnu.org.)
--
20892: http://debbugs.gnu.org/cgi/bugreport.cgi?bug=20892
GNU Bug Tracking System
Contact help-debbugs <at> gnu.org with problems
[Message part 2 (message/rfc822, inline)]
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
[Message part 3 (message/rfc822, inline)]
> From: João Távora <joaotavora <at> gmail.com>
> Date: Sat, 2 Apr 2016 14:42:48 +0100
> Cc: Stefan Monnier <monnier <at> iro.umontreal.ca>, 20892 <at> debbugs.gnu.org
>
> 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.
This bug report was last modified 9 years and 52 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.