Re: [PATCH] The diff-raw format updates.
- From
Linus Torvalds <torvalds@osdl.org>
- Date
- May 22, 2005, 20:24 UTC
- Message-ID
- <Pine.LNX.4.58.0505221259110.2307@ppc970.osdl.org>
- In-Reply-To
- <7vy8a7cavf.fsf@assigned-by-dhcp.cox.net>
On Sun, 22 May 2005, Junio C Hamano wrote:
Show 5 quoted lines
> > I deliberatly chose not to record rename/copy distinction in diff-raw > --- it is to be inferred from which entry touches the src _last_. > Everything but the last one to touch the same path is copy, and the last > one is rename.
My counter-example: there is no rename at all, just a copy.
The current raw-diff output simply _cannot_ distinguish this from the case where there is a rename, as far as I can tell.
Basically, imagine doing something like this:
mkdir test-copy cd test-copy git-init-db cp ~/v2.6/linux/kernel/sched.c . git-update-cache --add sched.c echo duh | git-commit-tree $(git-write-tree) > .git/HEAD sed 's/sched\.c/other\.c/g' < sched.c > other.c git-update-cache --add other.c echo duh2 | git-commit-tree $(git-write-tree) -p HEAD
and dammit, if "other.c" doesn't show up as a copy (with small differences) of sched.c, then the whole diff algorithm is broken and clearly isn't doing copy-diffs right at all (right now it doesn't do it since diff-tree doesn't even do the "check copies against old", but that's a different issue).
In other words, how do you propose to _describe_ that copy?
The whole point to the "raw diff" format is that you should be able to get the same output with
git-diff-tree -C HEAD | git-diff-helper git-diff-tree -C -p HEAD
and right now I don't see how you can do that.. And if you can't do that, then the raw diff format is pointless. It's not "raw diff" at all, it's a "less capable diff" format.
THAT is why I think the raw diff output is broken right now. All the rest was about just trying to also make it a bit more readable while at it.
Try it. I added in the "&& detect_rename < 2" thing to diff-tree.c, and I get:
git-whatchanged -C --root | git-diff-helper | less -S
resulting in:
diff-tree eb773598aa29bb642d6016a0d5961c80628ce490 (from 8c63fcad1f27ceed6825110aa806349dad99d89f) Author: Linus Torvalds <torvalds@ppc970.osdl.org> Date: Sun May 22 13:17:40 2005 -0700 duh2 diff --git a/sched.c b/other.c --- a/sched.c +++ b/other.c @@ -1,5 +1,5 @@ /* - * kernel/sched.c + * kernel/other.c * * Kernel scheduler and related syscalls *
ie it does NOT say it is a copy, because it _cannot_ say it is a copy. It just doesn't know. A copy and a rename look exactly the same in the raw diff output, and that's a BUG.
Linus