Re: [PATCH v2] Do not show "diff --git" metainfo with --no-prefix
- From
Junio C Hamano <gitster@pobox.com>
- Date
- Jan 17, 2008, 02:28 UTC
- Message-ID
- <7vzlv5kwxy.fsf@gitster.siamese.dyndns.org>
- In-Reply-To
- <alpine.LSU.1.00.0801170151040.17650@racer.site>
Johannes Schindelin <Johannes.Schindelin@gmx.de> writes:
Show 11 quoted lines
>> No, what you are talking about is a need of negative prefix, which you >> did not implement in that no/src/dst-prefix patch. > > I'm probably missing something, but wouldn't a "diff --git gitk-git/gitk > gitk-git/gitk" instead of "diff --git a/gitk-git/gitk b/gitk-git/gitk" in > mbox format be directly grokkable by git-am? > >> Using --no-prefix is a _hack_ that may happen to work only when >> the subtree-merged project is one level down. > > Yep. But my point was more to show that it is still a valid git diff.
My point was that the validness you mentined above is a happenstance, and not a result of a good design.
After I move gitk-git one level down to modules/gitk but before making it as a submodule, the output with --no-prefix will say "diff --git modules/gitk/gitk modules/gitk/gitk", and that will not be a suitable diff for Paul to apply to his tree.
I think he needs "-p2", but then he can already do that to diffs produced without using your --no-prefix that talks about "diff --git a/gitk-git/gitk b/gitk-git/gitk". IOW, --no-prefix is not a solution to anything.
And that is why I keep calling your "--no-prefix happens to work if you are only talking about a project that is subtree-merged one level down" argument a _hack_.
If we were to do this properly in "git diff", we would:
- introduce a separate --strip-paths=1 (or whatever number of levels of leading prefix);
- not use --{src,dst,no}-prefixand you would do:
$ git diff --strip-paths=1 gitk-git
in the current tree, which would first strip one path component and then do the usual opt->a_prefix/b_prefix thing to show:
diff --git a/gitk b/gitk
Similarly you would run:
$ git diff --strip-paths=2 modules/gitk
after I move gitk-git down one level.
An alternative would be to use the jc/diff-relative topic currently parked in 'offcuts' branch, and run:
$ cd gitk-git && git diff .
or
$ cd modules/gitk && git diff .
which would give diffs in relative paths.