GNU bug report logs - #55652
please elaborate on diff -u -I RE

Previous Next

Package: diffutils;

Reported by: Harald Dunkel <harri <at> afaics.de>

Date: Thu, 26 May 2022 09:16:02 UTC

Severity: normal

Done: Paul Eggert <eggert <at> cs.ucla.edu>

Bug is archived. No further changes may be made.

Full log


View this message in rfc822 format

From: help-debbugs <at> gnu.org (GNU bug Tracking System)
To: Harald Dunkel <harri <at> afaics.de>
Subject: bug#55652: closed (Re: [bug-diffutils] bug#55652: please
 elaborate on diff -u -I RE)
Date: Fri, 27 May 2022 01:54:02 +0000
[Message part 1 (text/plain, inline)]
Your bug report

#55652: please elaborate on diff -u -I RE

which was filed against the diffutils package, has been closed.

The explanation is attached below, along with your original report.
If you require more details, please reply to 55652 <at> debbugs.gnu.org.

-- 
55652: https://debbugs.gnu.org/cgi/bugreport.cgi?bug=55652
GNU Bug Tracking System
Contact help-debbugs <at> gnu.org with problems
[Message part 2 (message/rfc822, inline)]
From: Paul Eggert <eggert <at> cs.ucla.edu>
To: Harald Dunkel <harri <at> afaics.de>
Cc: 55652-done <at> debbugs.gnu.org
Subject: Re: [bug-diffutils] bug#55652: please elaborate on diff -u -I RE
Date: Thu, 26 May 2022 18:53:20 -0700
On 5/26/22 02:15, Harald Dunkel wrote:
> How comes diff -u
> reports 2 different lines, with an unchanged line in between?

What else can diff do? You asked for context, and the context lines differ.


> Is this
> as expected? 

Yes, the manual says:

   However, '-I' only ignores the insertion or deletion of lines that
contain the regular expression if every changed line in the hunk--every
insertion and every deletion--matches the regular expression.  In other
words, for each nonignorable change, 'diff' prints the complete set of
changes in its vicinity, including the ignorable ones.


One might add an option to make diff behave differently in this case, 
although it's not clear what the "right" behavior would be. In the 
meantime perhaps you can get by with "diff -U0 -Iwhatever".

[Message part 3 (message/rfc822, inline)]
From: Harald Dunkel <harri <at> afaics.de>
To: bug-diffutils <at> gnu.org
Subject: please elaborate on diff -u -I RE
Date: Thu, 26 May 2022 11:15:39 +0200
Hi folks,

I have hoped that

	diff -I '^[[:space:]]*\#' file1 file2

would ignore comment lines, but it doesn't work as I expected.
Example:

	#!/bin/bash

	diff -version | head -1

	echo -e '\t# comment 1' >/tmp/x1
	echo -e '\t# comment 2' >/tmp/x2
	diff -u -I '^[[:space:]]*\#' /tmp/x1 /tmp/x2 && echo 'no diffs'

	echo -e '' >>/tmp/x1
	echo -e '' >>/tmp/x2
	diff -u -I '^[[:space:]]*\#' /tmp/x1 /tmp/x2 && echo 'still no diffs'

	echo -e 'hello, world' >>/tmp/x2
	diff -u -I '^[[:space:]]*\#' /tmp/x1 /tmp/x2 && echo 'no diffs'
	echo "diff --normal"
	diff -I '^[[:space:]]*\#' /tmp/x1 /tmp/x2 && echo 'no diffs'

Output:

	diff (GNU diffutils) 3.8
	no diffs
	still no diffs
	--- /tmp/x1     2022-05-26 10:54:36.187361365 +0200
	+++ /tmp/x2     2022-05-26 10:54:36.191361276 +0200
	@@ -1,2 +1,3 @@
	-       # comment 1
	+       # comment 2
	
	+hello, world
	diff --normal
	2a3
	> hello, world

This seems weird. Only 1 line has been appended to x2 before running
diff the third time. It does not match the pattern. How comes diff -u
reports 2 different lines, with an unchanged line in between? Is this
as expected?


Regards

Harri



This bug report was last modified 2 years and 359 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.