--- Begin Message ---
Subject: |
23.1; diff-hunk-kill -vs- final hunk in a file |
Date: |
Mon, 07 Sep 2009 22:13:27 -0600 |
Please write in English if possible, because the Emacs maintainers
usually do not have translators to read other languages for them.
Your bug report will be posted to the bug-gnu-emacs@gnu.org mailing list,
and to the gnu.emacs.bug news group.
Please describe exactly what actions triggered the bug
and the precise symptoms of the bug:
I'm using diff-mode to edit a patch.
The patch was generated by "git diff".
I typed M-k to remove the last hunk in a file.
However, it left the "header" around:
diff --git a/src/data.c b/src/data.c
index 7b59673..9063cef 100644
--- a/src/data.c
+++ b/src/data.c
diff --git a/src/eval.c b/src/eval.c
index 4b7aa32..dbaa385 100644
--- a/src/eval.c
[...]
This yielded an invalid patch.
If Emacs crashed, and you have the Emacs process in the gdb debugger,
please include the output from the following gdb commands:
`bt full' and `xbacktrace'.
If you would like to further debug the crash, please read the file
/usr/share/emacs/23.1/etc/DEBUG for instructions.
In GNU Emacs 23.1.1 (i386-redhat-linux-gnu, GTK+ Version 2.16.5)
of 2009-08-24 on x86-2.fedora.phx.redhat.com
Windowing system distributor `The X.Org Foundation', version 11.0.10601901
configured using `configure '--build=i386-redhat-linux-gnu'
'--host=i386-redhat-linux-gnu' '--target=i586-redhat-linux-gnu'
'--program-prefix=' '--prefix=/usr' '--exec-prefix=/usr' '--bindir=/usr/bin'
'--sbindir=/usr/sbin' '--sysconfdir=/etc' '--datadir=/usr/share'
'--includedir=/usr/include' '--libdir=/usr/lib' '--libexecdir=/usr/libexec'
'--localstatedir=/var' '--sharedstatedir=/var/lib' '--mandir=/usr/share/man'
'--infodir=/usr/share/info' '--with-dbus' '--with-gif' '--with-jpeg'
'--with-png' '--with-rsvg' '--with-tiff' '--with-xft' '--with-xpm'
'--with-x-toolkit=gtk' 'build_alias=i386-redhat-linux-gnu'
'host_alias=i386-redhat-linux-gnu' 'target_alias=i586-redhat-linux-gnu'
'CFLAGS=-DMAIL_USE_LOCKF -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2
-fexceptions -fstack-protector --param=ssp-buffer-size=4 -m32 -march=i586
-mtune=generic -fasynchronous-unwind-tables''
Important settings:
value of $LC_ALL: nil
value of $LC_COLLATE: nil
value of $LC_CTYPE: nil
value of $LC_MESSAGES: nil
value of $LC_MONETARY: nil
value of $LC_NUMERIC: nil
value of $LC_TIME: nil
value of $LANG: en_US.UTF-8
value of $XMODIFIERS: nil
locale-coding-system: utf-8-unix
default-enable-multibyte-characters: t
Major mode: Diff
Minor modes in effect:
shell-dirtrack-mode: t
diff-auto-refine-mode: t
erc-list-mode: t
erc-menu-mode: t
erc-autojoin-mode: t
erc-ring-mode: t
erc-pcomplete-mode: t
erc-track-mode: t
erc-track-minor-mode: t
erc-match-mode: t
erc-button-mode: t
erc-fill-mode: t
erc-stamp-mode: t
erc-netsplit-mode: t
erc-spelling-mode: t
erc-truncate-mode: t
erc-status-mode: t
erc-services-mode: t
erc-networks-mode: t
erc-irccontrols-mode: t
erc-noncommands-mode: t
erc-move-to-prompt-mode: t
erc-readonly-mode: t
tooltip-mode: t
mouse-wheel-mode: t
file-name-shadow-mode: t
global-font-lock-mode: t
global-auto-composition-mode: t
auto-composition-mode: t
auto-encryption-mode: t
auto-compression-mode: t
line-number-mode: t
transient-mark-mode: t
Recent input:
g i t - r e v e r t RET C-x o C-x 1 C-v C-v C-l ESC
v C-x b * s h TAB RET f r o m RET C-x b RET C-l ESC
v C-h u g i t - r e s e t RET C-x o C-x 1 C-v C-v C-v
C-v C-v k C-x b * s h TAB RET C-r 8 a 9 C-w C-r C-r
C-r C-r C-x C-f / t m p / L RET C-s C-s C-a ESC v ESC
v ESC v ESC v C-x b RET ESC p ESC p ESC DEL Q ESC b
ESC b ESC b ESC b ESC t C-_ ESC f ESC t RET C-x C-f
/ t m p / Q RET C-v C-v C-x k RET g i t C-a C-k . RET
g i t SPC a p p l y SPC / t m p / Q RET g i t SPC s
t a t u s RET C-c C-o g i t SPC c o m m i t SPC - a
SPC - m ' r e v e r t SPC a SPC f e w SPC p a t c h
e s SPC b y SPC h n d DEL DEL a n d ' RET g i t SPC
a p p l y SPC t / DEL DEL / t m p / P RET C-x C-f /
t m p / P RET C-c g 1 4 6 RET ESC x r e p o r t - e
m TAB b TAB RET d i f f - C-g C-h k ESC k ESC x r e
p o r t - e m TAB b TAB RET
Recent messages:
Please wait: formatting the git-reset man page...
git-reset man page formatted
Mark saved where search started [2 times]
call-interactively: Beginning of buffer [4 times]
History item: 1
History item: 2
Undo!
Mark set
Quit
Type C-x 1 to delete the help window.
Tom
--- End Message ---
--- Begin Message ---
Subject: |
Re: bug#4368: 23.1; diff-hunk-kill -vs- final hunk in a file |
Date: |
Wed, 09 Sep 2009 10:49:29 -0400 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/23.1.50 (gnu/linux) |
Stefan> Can you show the content before the last M-k ?
> The appended is a sample diff. I just grabbed a couple random hunks
> from the actual diff I was editing. It was originally made by git.
> Put it in a file, then M-x diff-mode.
> M-n to go to the first @@.
> M-k.
> You will see that all the header info from lisp.h remains in the buffer.
> I don't think you even need the second file diff in there to see this, a
> single file will do.
Hmm... indeed it fails all the time. Yet, I'm sure it used to work.
Anyway, the patch below seems to fix it.
Thanks,
Stefan
Index: lisp/diff-mode.el
===================================================================
RCS file: /sources/emacs/emacs/lisp/diff-mode.el,v
retrieving revision 1.161
diff -u -r1.161 diff-mode.el
--- lisp/diff-mode.el 1 Sep 2009 07:24:18 -0000 1.161
+++ lisp/diff-mode.el 9 Sep 2009 14:47:45 -0000
@@ -546,7 +546,8 @@
(interactive)
(diff-beginning-of-hunk)
(let* ((start (point))
- (nexthunk (when (re-search-forward diff-hunk-header-re nil t)
+ ;; Search the second match, since we're looking at the first.
+ (nexthunk (when (re-search-forward diff-hunk-header-re nil t 2)
(match-beginning 0)))
(firsthunk (ignore-errors
(goto-char start)
--- End Message ---