Thread (3 messages) flat view 3 messages, 3 authors, 2016-06-15

Re: [PATCH] show changed tree objects with recursive git-diff-tree

From: Nicolas Pitre <hidden>
Date: 2016-06-15 22:41:58
Subsystem: the rest · Maintainer: Linus Torvalds

Possibly related (same subject, not in this thread)

[catching up after a weekind away -- you guys have not been standing still]

On Fri, 20 May 2005, Linus Torvalds wrote:
On Fri, 20 May 2005, Junio C Hamano wrote:
quoted
Although I do not have immediate objections to what it tries to
do, I have to think about the intent of the patch and its
ramifications.
I really think it should be a totally separate flag to enable showing the
sub-trees if the tree-blobification wants this.

In fact, I can pretty much _guarantee_ that the patch as posted is the
wrong thing to do: it will do horribly wrong things for things like

	git-whatchanged arch/i386/kernel/head.S

(but I haven't tried it - try it yourself. The correct output for the 
kernel archive is just a single commit, and a single blob change in that 
commit).
OK.  What about the following patch?  It outputs changed tree objects 
only if -p nor -v nor -s is specified, i.e. whenever what is really 
wanted is output of what changed at the object level.  This makes it 
more coherent with the non-recursive output as well.  Checked that 
git-diff-helper doesn't get confused.

If a separate flag is really needed, then consistency dictates that the 
non recursive output should provide output for tree objects only when 
that flag is given as well, which makes the non recursive output rather 
useless in most cases.  And IMHO this is just too much burden for little 
benefit (the extra flag not the recursive tree object output).

=====

This patch includes output of modified tree objects to recursive output, 
just like non recursive output already does.  When -v, -s or -p  is 
specified then the recursive output supresses modified tree objects 
since they don't make much sense in that case.

Signed-off-by: Nicolas Pitre <redacted>
diff --git a/diff-tree.c b/diff-tree.c
--- a/diff-tree.c
+++ b/diff-tree.c
@@ -127,6 +127,8 @@ static int compare_tree_entry(void *tree
 	if (recursive && S_ISDIR(mode1)) {
 		int retval;
 		char *newbase = malloc_base(base, path1, pathlen1);
+		if (!silent && !verbose_header && !show_root_diff)
+			diff_change(mode1, mode2, sha1, sha2, base, path1);
 		retval = diff_tree_sha1(sha1, sha2, newbase);
 		free(newbase);
 		return retval;
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help