Hello and good morning,

Michael J Gruber <g...@drmicha.warpmail.net> wrote:
 |Junio C Hamano venit, vidit, dixit 24.07.2014 19:19:
 |> Michael J Gruber <g...@drmicha.warpmail.net> writes:
 |>> Steffen Nurpmeso venit, vidit, dixit 24.07.2014 15:29:
 |>>> Hello (again, psssssst, after a long time),
 |>>>
 |>>> it happened yesterday that i needed to do
 |>>>
 |>>>   $ git diff HEAD:FILE COMMIT:SAME-FILE |
 |>>>> (cd src && git apply -) 
 |>>> ...
 |>>
 |>> Ah little more context would help. Are you diffing files in the subdir
 |>> src, or a file at the root which happens to be present in the subdir src
 |>> as well?
 |> 
 |> As the <treeish>:<path> form is not meant to produce "git apply"
 |> applicable patch in the first place, I am not sure what the OP is
 |> trying to achieve in the first place.  Not just "how many leading
 |> levels to strip?" but "which file is being modified?" does not
 |> appear in a usable form.  For example, here is what you would see:
 |> 
 |>     $ git diff HEAD:GIT-VERSION-GEN maint:GIT-VERSION-GEN
 |>     diff --git a/HEAD:GIT-VERSION-GEN b/maint:GIT-VERSION-GEN
 |>     index 40adbf7..0d1a86c 100755
 |>     --- a/HEAD:GIT-VERSION-GEN
 |>     +++ b/maint:GIT-VERSION-GEN
 |>     @@ -1,7 +1,7 @@
 |>     ...
 |> 
 |> and neither "HEAD:GIT-VERSION-GEN" nor "maint:GIT-VERSION-GEN" is
 |> the file being modified ("GIT-VERSION-GEN" is).
 |
 |I thought "git apply" knows how to strip the rev part.

That would brighten the sky of the glorious future.  Perfect!

 |> I would understand if the upstream of the pipe were
 |> 
 |>     $ git diff HEAD maint -- GIT-VERSION-GEN | ...
 |> 
 |> though.

Yes, in this case it applies the patch.

 |> Needless to say, if the place "cd" goes is not a worktree controlled
 |> by git, then "git apply" would not know where the top-level of the
 |> target tree is, so even though the input with the corrected command
 |> on the upstream side of the pipe tells it which file is being
 |> modified, it needs to be told with the proper -p<n> parameter how
 |> many leading levels to strip.
 |
 |I think it's a common mistake to think of "git apply" as some sort of
 |magic extension of "patch" which can do anything that "patch" does and
 |more, and can be fed anything that "git diff" produces", figuring out by
 |itself what to do with it :)

This was indeed my mistake.
But regardless i think the current behaviour sucks:

  ?0[steffen@sherwood x.git]$ git diff HEAD:XY 5d0d74:XY |
  > (cd src && patch -p4)
  can't find file to patch at input line 5
  Perhaps you used the wrong -p or --strip option?
  The text leading up to this was:
  ?130[steffen@sherwood x.git]$ git diff HEAD:XY 5d0d74:XY |
  > (cd src && git apply -p4)
  ?0[steffen@sherwood x.git]$

and

  ?0[steffen@sherwood groff.git]$ git diff HEAD:XY 5d0d74:XY |
  > (cd src && git apply -p2)
  ?0[steffen@sherwood groff.git]$ git diff HEAD:XY 5d0d74:XY |
  > (cd src && patch -p2)
  patching file XY
  ?0[steffen@sherwood groff.git]$ 

The number after `?' is the exit status of the last command, btw.
Ciao (and yes, thanks a lot for git(1)!)

--steffen
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to