[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

bug#11894: 24.1.50; [PATCH] diff-apply-hunk can be off by 1 line when th

From: Dmitry Gutov
Subject: bug#11894: 24.1.50; [PATCH] diff-apply-hunk can be off by 1 line when the hunk is 0-context pure removal
Date: Wed, 18 Jul 2012 21:25:10 +0400
User-agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:13.0) Gecko/20120614 Thunderbird/13.0.1

On 18.07.2012 16:53, Stefan Monnier wrote:
Not sure if we can rely on the line number being always off by 1 in such
hunks (there's no insertion, so, technically, the second line number in the
header could be arbitrary), but at least 3 versions of diff across
2 different OSes work the same in this regard.

This looks like a bug in those versions of diff (not that I know
a non-buggy version, tho).  Could you report it to GNU diffutils.

As per Andreas' comment, this is probably not a bug.

Note that if you try to create such hunk with `diff-split-hunk' (by slicing
it off a bigger hunk), the line number won't be off by 1.

Oh, right, so there is a "version of diff" that doesn't have this bug ;-)

Yep, and I'll use it as a workaround if this bug won't be fixed.

Maybe that's a bug in `diff-split-hunk'.

I doubt it.  At least `patch' seems to agree with diff-mode.el:

    % diff -c0 footest1 footest2 |patch -o footest3 footest1
    patching file footest1
    patch: **** replacement text or line numbers mangled in hunk at line 8

`info diff` says: "For proper operation, `patch' typically needs at least two lines of context.", so this just may be a documented problem nobody cares about.

-        (goto-char (point-min)) (forward-line (1- (string-to-number line)))
+        (let ((line-num (string-to-number line)))
+          ;; When the hunk is pure deletion, line number is off by 1.
+          (when (string= (if reverse (car old) (car new)) "")
+            (incf line-num))
+          (goto-char (point-min)) (forward-line (1- line-num)))

Context/unified diffs with 0 context are pretty rare, so I'd rather not
work around such a bug if I don't really have to.

I'm fine either way, just wanted to report this.


reply via email to

[Prev in Thread] Current Thread [Next in Thread]