threads / discuss / 56021

Applying a patch with a diff header in its commit message

Subject: Applying a patch with a diff header in its commit message

## tl;dr

5 messages between Jun 28, 2021 and Jul 6, 2021.

replies: 4people: 3as markdown or json

Pratyush Yadav· Jun 28, 2021, 18:30 UTC · lore
Hi,

I have a patch at $DAYJOB that contains a diff header ("diff --git a/...") in its commit message, and unfortunately it is not indented. So naturally, git-am trips up and thinks it is the start of the main diff and tries to apply the diff starting there. It does not apply and the patch is rejected as being corrupt.

I know one option for me is to manually edit the patch and indent the diff header. But I would like to avoid that if possible. Is there any way to apply that patch as-is? Is it possible to tell git-am where to start looking for the diff?

-- 
Regards,
Pratyush Yadav
Felipe Contreras· Jun 28, 2021, 23:44 UTC · re: Pratyush Yadav · lore

RE: Applying a patch with a diff header in its commit message

Pratyush Yadav wrote:
Show 10 quoted lines
> I have a patch at $DAYJOB that contains a diff header ("diff --git 
> a/...") in its commit message, and unfortunately it is not indented. So 
> naturally, git-am trips up and thinks it is the start of the main diff 
> and tries to apply the diff starting there. It does not apply and the 
> patch is rejected as being corrupt.
> 
> I know one option for me is to manually edit the patch and indent the 
> diff header. But I would like to avoid that if possible. Is there any 
> way to apply that patch as-is? Is it possible to tell git-am where to 
> start looking for the diff?
git apply?
-- 
Felipe Contreras
Pratyush Yadav· Jul 6, 2021, 08:17 UTC · re: Felipe Contreras · lore

Re: Applying a patch with a diff header in its commit message

On 28/06/21 06:44PM, Felipe Contreras wrote:
Show 13 quoted lines
> Pratyush Yadav wrote:
> > I have a patch at $DAYJOB that contains a diff header ("diff --git 
> > a/...") in its commit message, and unfortunately it is not indented. So 
> > naturally, git-am trips up and thinks it is the start of the main diff 
> > and tries to apply the diff starting there. It does not apply and the 
> > patch is rejected as being corrupt.
> > 
> > I know one option for me is to manually edit the patch and indent the 
> > diff header. But I would like to avoid that if possible. Is there any 
> > way to apply that patch as-is? Is it possible to tell git-am where to 
> > start looking for the diff?
> 
> git apply?

Sure, that is an option. But then I would have to copy/paste the commit message and add the author information manually. Is there any way to do this automatically? What if I have 100 commits like this?

This is a valid Git commit. It would be nice if the Git email tooling could handle it cleanly.

-- 
Regards,
Pratyush Yadav
Ævar Arnfjörð Bjarmason· Jul 6, 2021, 14:37 UTC · re: Pratyush Yadav · lore

Re: Applying a patch with a diff header in its commit message

On Tue, Jul 06 2021, Pratyush Yadav wrote:
Show 21 quoted lines
> On 28/06/21 06:44PM, Felipe Contreras wrote:
>> Pratyush Yadav wrote:
>> > I have a patch at $DAYJOB that contains a diff header ("diff --git 
>> > a/...") in its commit message, and unfortunately it is not indented. So 
>> > naturally, git-am trips up and thinks it is the start of the main diff 
>> > and tries to apply the diff starting there. It does not apply and the 
>> > patch is rejected as being corrupt.
>> > 
>> > I know one option for me is to manually edit the patch and indent the 
>> > diff header. But I would like to avoid that if possible. Is there any 
>> > way to apply that patch as-is? Is it possible to tell git-am where to 
>> > start looking for the diff?
>> 
>> git apply?
>
> Sure, that is an option. But then I would have to copy/paste the commit 
> message and add the author information manually. Is there any way to do 
> this automatically? What if I have 100 commits like this?
>
> This is a valid Git commit. It would be nice if the Git email tooling 
> could handle it cleanly.
I don't think there is, but it could be fixed.

I had this happen to me the other day and ended up reading the relevant parsing code, I think if it were a bit smarter we could handle the common case, i.e. when we find "diff --git" or whatever it is keep looking and see if we find another one, or perhaps have a "looks like I'm at the diffstat" heuristic where we'll prefer the "diff --git" that follows a "---" line, if there' two of them (that's also going to be ambiguous, but both of them are less likely to happen to the same commit).

Felipe Contreras· Jul 6, 2021, 22:17 UTC · re: Pratyush Yadav · lore

Re: Applying a patch with a diff header in its commit message

Pratyush Yadav wrote:
Show 18 quoted lines
> On 28/06/21 06:44PM, Felipe Contreras wrote:
> > Pratyush Yadav wrote:
> > > I have a patch at $DAYJOB that contains a diff header ("diff --git 
> > > a/...") in its commit message, and unfortunately it is not indented. So 
> > > naturally, git-am trips up and thinks it is the start of the main diff 
> > > and tries to apply the diff starting there. It does not apply and the 
> > > patch is rejected as being corrupt.
> > > 
> > > I know one option for me is to manually edit the patch and indent the 
> > > diff header. But I would like to avoid that if possible. Is there any 
> > > way to apply that patch as-is? Is it possible to tell git-am where to 
> > > start looking for the diff?
> > 
> > git apply?
> 
> Sure, that is an option. But then I would have to copy/paste the commit 
> message and add the author information manually. Is there any way to do 
> this automatically? What if I have 100 commits like this?
Ahh, I misread your full question.
> This is a valid Git commit. It would be nice if the Git email tooling 
> could handle it cleanly.
Yes it would, that's definitely a bug.
-- 
Felipe Contreras

← back to recent threads