git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH] apply.c: tolerate diff from a dirty but unchanged path

From
Junio C Hamano <junkio@cox.net>
Date
Jun 11, 2005, 23:27 UTC
Message-ID
<7vpsusqxsy.fsf_-_@assigned-by-dhcp.cox.net>
In-Reply-To
<Pine.LNX.4.58.0505291151250.10545@ppc970.osdl.org>

I just noticed a problem with empty "diff --git" header a dirty but otherwise unmodified path spits out. The problem is related to an old topic:

    Re: [PATCH] Do not show empty diff in diff-cache uncached.
    >>>>> "LT" == Linus Torvalds <torvalds@osdl.org> writes:
    LT> On Sat, 28 May 2005, Junio C Hamano wrote:
    >> Recent diff-cache produces "diff --git" header internally before
    >> calling the "diff" command, which results in an empty diff for
    >> such a file, cluttering the output.  This patch fixes this.
    LT> I actually _expect_ that "git-diff-files" will show
    LT> files that don't match the index, even if they happen to
    LT> have the exact content that the index points to. It's
    LT> how I know whether the index is up-to-date or not.

I now agree with the reasoning and think showing an empty "diff --git" header is a good thing. I had something like this, while fixing a rename/copy bug:

    ...
     #endif
     static void diff_resolve_rename_copy(void)
    diff --git a/diffcore-break.c b/diffcore-break.c
    diff --git a/diffcore-rename.c b/diffcore-rename.c
    --- a/diffcore-rename.c
    +++ b/diffcore-rename.c
    @@ -249,8 +249,12 @@ void diffcore_rename(int detect_rename, 
    ...

I touched diffcore-break.c and decided I should not change it so I reverted, which is why the empty "diff --git" for that file shows that the cache is dirty. The problem is that currently, "git-apply --stat" seems to barf reading such a patch.

Here is a proposed fix.

------------ apply.c: tolerate diff from a dirty but otherwise unchanged cache.

For such an entry, "diff --git" line without anything else is output, but the next "diff --git" header is not really treated as an unrecognized diff.

Signed-off-by: Junio C Hamano <junkio@cox.net>
---
diff --git a/apply.c b/apply.c
--- a/apply.c
+++ b/apply.c
@@ -343,7 +343,7 @@ static int gitdiff_dissimilarity(const c
  */
 static int gitdiff_unrecognized(const char *line, struct patch *patch)
 {
-	return -1;
+	return -2;
 }
 
 static char *git_header_name(char *line)
@@ -453,8 +453,12 @@ static int parse_git_header(char *line, 
 			int oplen = strlen(p->str);
 			if (len < oplen || memcmp(p->str, line, oplen))
 				continue;
-			if (p->fn(line + oplen, patch) < 0)
+			switch (p->fn(line + oplen, patch)) {
+			case -1:
 				return offset;
+			case -2:
+				return -1;
+			}
 			break;
 		}
 	}
Previous: Junio C HamanoNext: Linus Torvalds
Message 42 of 45 in “Broken directory pathname pruning..”
  1. Linus TorvaldsMay 27, 2005
  2. Junio C HamanoMay 27, 2005
  3. allow pathspec to end with a slashJunio C Hamano, May 27, 2005
  4. allow pathspec to end with a slash (take #2)Junio C Hamano, May 27, 2005
  5. Diff updates, fixing pathspec and rename/copy interaction.Junio C Hamano, May 27, 2005
  6. Linus TorvaldsMay 27, 2005
  7. Junio C HamanoMay 27, 2005
  8. 00/12 Diff updatesJunio C Hamano, May 27, 2005
  9. 01/12 Fix math thinko in similarity estimator.Junio C Hamano, May 27, 2005
  10. 02/12 Introduce diff_free_filepair() funcion.Junio C Hamano, May 27, 2005
  11. 03/12 Make pathspec only care about the detination tree.Junio C Hamano, May 27, 2005
  12. 04/12 Remove unused rank field from diff_core structure.Junio C Hamano, May 27, 2005
  13. 05/12 Do not expose internal scaling to diff-helper.Junio C Hamano, May 27, 2005
  14. 06/12 Remove final newline from the value of xfrm_msg variable.Junio C Hamano, May 27, 2005
  15. 07/12 Clean up diff_setup() to make it more extensible.Junio C Hamano, May 27, 2005
  16. 08/12 Remove a function not used anymore.Junio C Hamano, May 27, 2005
  17. 09/12 Add --pickaxe-all to diff-* brothers.Junio C Hamano, May 27, 2005
  18. 10/12 Fix the way diffcore-rename records unremoved source.Junio C Hamano, May 27, 2005
  19. 11/12 Move pathspec to the beginning of the diffcore chain.Junio C Hamano, May 27, 2005
  20. 12/12 Optimize diff-tree -[CM] --stdinJunio C Hamano, May 27, 2005
  21. Yoichi YuasaJun 4, 2005
  22. Junio C HamanoMay 27, 2005
  23. Do not show empty diff in diff-cache uncached.Junio C Hamano, May 28, 2005
  24. Diff: two fixes.Junio C Hamano, May 28, 2005
  25. diff-helper: fix R/C score parsing under -z flag.Junio C Hamano, May 29, 2005
  26. diff-cache: diff-patch (-p) format fixes.Junio C Hamano, May 29, 2005
  27. diff: code clean-up.Junio C Hamano, May 29, 2005
  28. Linus TorvaldsMay 29, 2005
  29. Junio C HamanoMay 29, 2005
  30. Junio C HamanoMay 29, 2005
  31. 0/3 Leftover bits after 12-seriesJunio C Hamano, May 29, 2005
  32. 1/3 diff-helper: Fix R/C score parsing under -z flag.Junio C Hamano, May 29, 2005
  33. 2/3 diff: consolidate various calls into diffcore.Junio C Hamano, May 29, 2005
  34. 3/3 diff: code clean-up and removal of rename hack.Junio C Hamano, May 29, 2005
  35. 0/4 Junio C Hamano, May 30, 2005
  36. 1/4 diff: further cleanup.Junio C Hamano, May 30, 2005
  37. 2/4 diff: fix the culling of unneeded delete record.Junio C Hamano, May 30, 2005
  38. 3/4 Add -B flag to diff-* brothers.Junio C Hamano, May 30, 2005
  39. 4/4 Add -O<orderfile> option to diff-* brothers.Junio C Hamano, May 30, 2005
  40. Linus TorvaldsMay 30, 2005
  41. Junio C HamanoMay 30, 2005
  42. apply.c: tolerate diff from a dirty but unchanged pathJunio C Hamano, Jun 11, 2005
  43. Linus TorvaldsJun 12, 2005
  44. Linus TorvaldsJun 12, 2005
  45. Junio C HamanoJun 12, 2005

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.