* Bug: With diff.noprefix=true, `git format-patch` creates a patch that `git am` rejects
@ 2022-01-08 0:36 Keith Thompson
2022-01-08 2:45 ` Gwyneth Morgan
0 siblings, 1 reply; 2+ messages in thread
From: Keith Thompson @ 2022-01-08 0:36 UTC (permalink / raw)
To: git; +Cc: Keith Thompson
Thank you for filling out a Git bug report!
Please answer the following questions to help us understand your issue.
What did you do before the bug happened? (Steps to reproduce your issue)
git format-patch master
What did you expect to happen? (Expected behavior)
I expected `git format-patch` to create a patch consumable by `git am`.
What happened instead? (Actual behavior)
`git am` choked on the patch because it was missing the `a/` and `b/`
prefixes.
For a simple example, a patch affecting only a top-level file, the error was:
Applying: Fix typo
error: git diff header lacks filename information when removing 1
leading pathname component (line 9)
Patch failed at 0001 Fix typo
For a patch affecting a file in a subdirectory ("DIR/README"), the error was:
Applying: Fix typo
error: README: does not exist in index
Patch failed at 0001 Fix typo
What's different between what you expected and what actually happened?
See above.
Anything else you want to add:
The details: I had this in my $HOME/.gitconfig:
[diff]
noprefix = true
This caused `git format-patch` *not* to generate the `a/` and `b/`
prefixes in the patch file. Setting "noprefix = false" works around
the problem.
Here are the first few lines of the resulting patch file:
===
cat 0001-Fix-documented-argv-and-envp-params-for-posix_spawn.patch,000
From f4a41189d86bc208a90e754387294b9c4c11cdfc Mon Sep 17 00:00:00 2001
From: Keith Thompson <Keith.S.Thompson@gmail.com>
Date: Wed, 5 Jan 2022 13:30:16 -0800
Subject: [PATCH] Fix documented argv and envp params for posix_spawn
---
newlib/libc/posix/posix_spawn.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git newlib/libc/posix/posix_spawn.c newlib/libc/posix/posix_spawn.c
index 005471fde..85bfa6477 100644
--- newlib/libc/posix/posix_spawn.c
+++ newlib/libc/posix/posix_spawn.c
===
Feeding this patch to `git am` caused it to strip the `newlib/`
prefix from the file name. There doesn't seem to be a way to coax
`git format-patch` to ignore the current diff.noprefix setting,
or `git am` to tolerate the missing prefixes.
Changing my .gitconfig to set diff.noprefix to false avoids the problem.
I could probably have done that in the local repo rather than in my
$HOME/.gitconfig .
Suggested possible fixes:
1. Make `git format-patch` ignore the `diff.noprefix` setting, or at
least provide an option to do so. In my opinion this is the best
solution. There's no point in letting `git format-patch` create
a patch that `git am` can't handle.
2. Make `git am` tolerate the missing prefixes, perhaps by not
removing prefixes that match, or at least provide an option to
do so. For example, given
a/newlib/libc/posix/posix_spawn.c
b/newlib/libc/posix/posix_spawn.c
delete the a/ and b/ prefixes, but given
newlib/libc/posix/posix_spawn.c
newlib/libc/posix/posix_spawn.c
leave the path alone because the top-level directory is identical.
3. Make `git format-patch` print a warning if diff.noprefix is true,
letting the person creating the patch know how to avoid the problem.
4. Make `git am` recognize this issue and print a warning, letting
the recipient of the patch know they need to manually edit the patch
or request a new one. (This would still be inconvenient.)
This issue is likely to affect other commands including `git apply`
and possibly others.
Please review the rest of the bug report below.
You can delete any lines you don't wish to share.
[System Info]
git version:
git version 2.33.1
cpu: x86_64
built from commit: af6d1d602a8f64164b266364339c4e936d5bbc33
sizeof-long: 8
sizeof-size_t: 8
shell-path: /bin/sh
uname: Linux 5.4.0-91-generic #102-Ubuntu SMP Fri Nov 5 16:31:28 UTC 2021 x86_64
compiler info: gnuc: 9.3
libc info: glibc: 2.31
$SHELL (typically, interactive shell): /o/bin/bash
^ permalink raw reply [flat|nested] 2+ messages in thread
* Re: Bug: With diff.noprefix=true, `git format-patch` creates a patch that `git am` rejects
2022-01-08 0:36 Bug: With diff.noprefix=true, `git format-patch` creates a patch that `git am` rejects Keith Thompson
@ 2022-01-08 2:45 ` Gwyneth Morgan
0 siblings, 0 replies; 2+ messages in thread
From: Gwyneth Morgan @ 2022-01-08 2:45 UTC (permalink / raw)
To: Keith Thompson; +Cc: git
On 2022-01-07 16:36:27-0800, Keith Thompson wrote:
> The details: I had this in my $HOME/.gitconfig:
>
> [diff]
> noprefix = true
>
> This caused `git format-patch` *not* to generate the `a/` and `b/`
> prefixes in the patch file. Setting "noprefix = false" works around
> the problem.
>
> Here are the first few lines of the resulting patch file:
> ===
> cat 0001-Fix-documented-argv-and-envp-params-for-posix_spawn.patch,000
> >From f4a41189d86bc208a90e754387294b9c4c11cdfc Mon Sep 17 00:00:00 2001
> From: Keith Thompson <Keith.S.Thompson@gmail.com>
> Date: Wed, 5 Jan 2022 13:30:16 -0800
> Subject: [PATCH] Fix documented argv and envp params for posix_spawn
>
> ---
> newlib/libc/posix/posix_spawn.c | 4 ++--
> 1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git newlib/libc/posix/posix_spawn.c newlib/libc/posix/posix_spawn.c
> index 005471fde..85bfa6477 100644
> --- newlib/libc/posix/posix_spawn.c
> +++ newlib/libc/posix/posix_spawn.c
> ===
>
> Feeding this patch to `git am` caused it to strip the `newlib/`
> prefix from the file name. There doesn't seem to be a way to coax
> `git format-patch` to ignore the current diff.noprefix setting,
> or `git am` to tolerate the missing prefixes.
The -p<num> flag controls how many segments `git am` or `git apply`
removes. The default is -p1. `git am -p0` should apply the patch
correctly.
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2022-01-08 2:56 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-01-08 0:36 Bug: With diff.noprefix=true, `git format-patch` creates a patch that `git am` rejects Keith Thompson
2022-01-08 2:45 ` Gwyneth Morgan
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).