[PATCH] teach diff machinery about --ignore-space-at-eol

Previous thread: Re: mingw, windows, crlf/lf, and git by Mark Levedahl on Tuesday, February 13, 2007 - 12:36 pm. (6 messages)

Next thread: Missing documentation for GIT_DIFF_OPTS and GIT_EXTERNAL_DIFF by Yann Dirson on Tuesday, February 13, 2007 - 3:36 pm. (1 message)
From: Timur Tabi
Date: Tuesday, February 13, 2007 - 2:59 pm

I have configured my text editor to remove spaces at the end of each line 
whenever it saves a file.  I do this so that I don't inadvertently add spaces to 
the end of any line.

Unfortunately, if the file *already* had spaces at the end of some lines before 
I start editing it, this spaces will also be removed.

After I commit my changes, I use git-format-patch to make a patch.  I then get 
deltas like this:

   * Copyright (C) 1996-2005 Paul Mackerras.
- *
+ *
   *  Adapted for 64bit PowerPC by Dave Engebretsen and Peter Bergner.
- *    {engebret|bergner}@us.ibm.com
+ *    {engebret|bergner}@us.ibm.com
   *

I don't want these deltas in my patch.  However, if I specify an option like 
--ignore-all-space, git-format-patch omits deltas like this one:

-               memcpy(fs_enet_data.macaddr, mac_addr, 6);
+                       memcpy(fs_enet_data.macaddr, mac_addr, 6);

In this case, I *do* want the delta, because I'm indenting a line to fix a 
formatting error.

So how do I get the output that I want, and not the output that I don't want?

-- 
Timur Tabi
Linux Kernel Developer @ Freescale
-

From: Junio C Hamano
Date: Tuesday, February 13, 2007 - 3:24 pm

You could revert the change to the editor configuration and rely
on "git diff" before committing to point out the whitespace
breakage that you newly introduced to the file.  Then you would
be sending out exactly what you changed.


-

From: Timur Tabi
Date: Tuesday, February 13, 2007 - 3:36 pm

Thanks, but I was hoping that git would make my life easier, not more difficult.

-- 
Timur Tabi
Linux Kernel Developer @ Freescale
-

From: Johannes Schindelin
Date: Tuesday, February 13, 2007 - 5:30 pm

`git diff --ignore-space-at-eol` will ignore whitespace at the
line ends.

Signed-off-by: Johannes Schindelin <Johannes.Schindelin@gmx.de>

---

	On Tue, 13 Feb 2007, Timur Tabi wrote:
	
	> Junio C Hamano wrote:
	> 
	> > You could revert the change to the editor configuration and 
	> > rely on "git diff" before committing to point out the 
	> > whitespace breakage that you newly introduced to the file.  
	> > Then you would be sending out exactly what you changed.
	> 
	> Thanks, but I was hoping that git would make my life easier, not 
	> more difficult.

	Strictly speaking, you made life difficult on git by asking your 
	editor to edit text it should not edit.

	However, this was a nice late-night exercise.

 diff.c         |    2 ++
 xdiff/xdiff.h  |    3 ++-
 xdiff/xutils.c |   24 ++++++++++++++++++++++++
 3 files changed, 28 insertions(+), 1 deletions(-)

diff --git a/diff.c b/diff.c
index d712181..815a7a8 100644
--- a/diff.c
+++ b/diff.c
@@ -2059,6 +2059,8 @@ int diff_opt_parse(struct diff_options *options, const char **av, int ac)
 		options->xdl_opts |= XDF_IGNORE_WHITESPACE;
 	else if (!strcmp(arg, "-b") || !strcmp(arg, "--ignore-space-change"))
 		options->xdl_opts |= XDF_IGNORE_WHITESPACE_CHANGE;
+	else if (!strcmp(arg, "--ignore-space-at-eol"))
+		options->xdl_opts |= XDF_IGNORE_WHITESPACE_AT_EOL;
 	else if (!strcmp(arg, "--color-words"))
 		options->color_diff = options->color_diff_words = 1;
 	else if (!strcmp(arg, "--no-renames"))
diff --git a/xdiff/xdiff.h b/xdiff/xdiff.h
index fa409d5..e874a7c 100644
--- a/xdiff/xdiff.h
+++ b/xdiff/xdiff.h
@@ -31,7 +31,8 @@ extern "C" {
 #define XDF_NEED_MINIMAL (1 << 1)
 #define XDF_IGNORE_WHITESPACE (1 << 2)
 #define XDF_IGNORE_WHITESPACE_CHANGE (1 << 3)
-#define XDF_WHITESPACE_FLAGS (XDF_IGNORE_WHITESPACE | XDF_IGNORE_WHITESPACE_CHANGE)
+#define XDF_IGNORE_WHITESPACE_AT_EOL (1 << 4)
+#define XDF_WHITESPACE_FLAGS (XDF_IGNORE_WHITESPACE | XDF_IGNORE_WHITESPACE_CHANGE | XDF_IGNORE_WHITESPACE_AT_EOL)
 
 ...
From: Timur Tabi
Date: Tuesday, February 13, 2007 - 10:28 pm

Given a choice between me and my computer, I think my computer should be 

You are truly a most awesome dude.  Thank you.

-

From: Timur Tabi
Date: Wednesday, February 14, 2007 - 10:18 am

This patch works great!  Oh git maintainer, please please please please apply 
this patch to the next version of git.  My descendants will sing praises to your 
glory for a thousand years.

-- 
Timur Tabi
Linux Kernel Developer @ Freescale
-

Previous thread: Re: mingw, windows, crlf/lf, and git by Mark Levedahl on Tuesday, February 13, 2007 - 12:36 pm. (6 messages)

Next thread: Missing documentation for GIT_DIFF_OPTS and GIT_EXTERNAL_DIFF by Yann Dirson on Tuesday, February 13, 2007 - 3:36 pm. (1 message)