From: Junio C Hamano Date: Fri, 13 May 2005 23:59:36 GMT Subject: Re: [PATCH] Resurrect diff-tree-helper -R Message-ID: <7vmzqy7k47.fsf@assigned-by-dhcp.cox.net> In-Reply-To: <20050513233354.GK32232@pasky.ji.cz> >>>>> "PB" == Petr Baudis writes: PB> Dear diary, on Sat, May 14, 2005 at 12:59:31AM CEST, I got a letter PB> where Junio C Hamano told me that... >> Created: t/t2000-diff.sh (mode:100755) >> +Mode changed: path0 (100644->100755) PB> Great, so it's even worse than before. :/ Depends on the definition of "before". At the beginning, we did not do anything special and always said l/foo k/foo even when create/delete was involved. Then we did a misguided attempt to minimally be cg-diff compatible, which Linus complained that it was too distracting for human consumption. The current one is something in between, a lot more human side. Yes, it is off course worse than the minimally cg-diff compatible one, from cg-patch'es point of view. You have seen what the current "something in between" does. What I think is that in order not to distract human (read: Linus) who reads patches, they should not share the same special characters like "@". Which unfortunately completely contradicts what you are attempting to do. Another thing we did while you were looking other way ;-) was that we say mode changed only when things change, so in that sense it is "inconsistent" from the scripting point of view. These were all done to make the output more readable by and less distracting for humans, per request from Linus. I do not think nobody uses that current textual "comment" information in automated tools (I do not), so changing them should not be a problem. How about we do something like this: 1. Invent an environment variable you can define. Let's say GIT_DIFF_SHOW_MODES. It could alternatively a flag you pass from git-diff-{files,cache,tree,tree-helper} to the internal diff engine but then you need to add the necessary command line parameter for all these commands. I can be persuaded in either way. 2. When it is defined, we are not interested in pleasing Linus by trying not to be distracting. We are more interested in producing patch that is easily script processible. 3. Keep the current behaviour for human comsumption when we are operating without the option we define in 1. 4. Change the mode stuff when GIT_DIFF_SHOW_MODES is defined. It would produce one of the following for _all_ entries; @. (100644->100755) path/to/a/file/that/changed/mode @. (100644->120000) path/to/a/file/that/changed/to/symlink @. (100644->100644) path/to/a/file/with/no/mode/change @. (.->100644) path/to/a/new/file @. (100644->.) path/to/a/deleted/file I have to stress that these would come immediately before the patch for each file. Not upfront, not grouped together at the beginning. BTW, what do you think about renaming git-diff-tree-helper to just git-diff-helper? It used to be for grokking diff-tree's output but now the family have the same raw output format it does not make much sense to keep "tree" in its name.