Skip to content

Commit 8850dc2

Browse files
committed
Merge branch 'kh/doc-am-format-sendmail' into next
Doc update. * kh/doc-am-format-sendmail: doc: add caveat about round-tripping format-patch
2 parents d1286b2 + a454cdc commit 8850dc2

5 files changed

Lines changed: 62 additions & 7 deletions

File tree

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
The output from linkgit:git-format-patch[1] can lead to a different
2+
commit message when applied with linkgit:git-am[1]. The patch that is
3+
applied may also be different from the one that was generated, or patch
4+
application may fail outright.
5+
ifdef::git-am[]
6+
See the <<discussion,DISCUSSION>> section above for the syntactic rules.
7+
endif::git-am[]
8+
9+
ifndef::git-am[]
10+
include::format-patch-end-of-commit-message.adoc[]
11+
endif::git-am[]
12+
13+
Note that this is especially problematic for unindented diffs that occur
14+
in the commit message; the diff in the commit message might get applied
15+
along with the patch section, or the patch application machinery might
16+
trip up because the patch target doesn't apply. This could for example
17+
be caused by a diff in a Markdown code block.
18+
19+
The solution for this is to indent the diff or other text that could
20+
cause problems.
21+
22+
This loss of fidelity might be simple to notice if you are applying
23+
patches directly from a mailbox. However, changes originating from Git
24+
could be applied in bulk, in which case this would be much harder to
25+
notice. This could for example be a Linux distribution which uses patch
26+
files to apply changes on top of the commits from the upstream
27+
repositories. This goes to show that this behavior does not only impact
28+
email workflows.
29+
30+
Given these limitations, one might be tempted to use a general-purpose
31+
utility like patch(1) instead. However, patch(1) will not only look for
32+
unindented diffs (like linkgit:git-am[1]) but will try to apply indented
33+
diffs as well.
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
Any line that is of the form:
2+
3+
* three-dashes and end-of-line, or
4+
* a line that begins with "diff -", or
5+
* a line that begins with "Index: "
6+
7+
is taken as the beginning of a patch, and the commit log message
8+
is terminated before the first occurrence of such a line.

Documentation/git-am.adoc

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -233,6 +233,7 @@ applying.
233233
create an empty commit with the contents of the e-mail message
234234
as its log message.
235235

236+
[[discussion]]
236237
DISCUSSION
237238
----------
238239

@@ -252,14 +253,11 @@ where the patch begins. Excess whitespace at the end of each
252253
line is automatically stripped.
253254

254255
The patch is expected to be inline, directly following the
255-
message. Any line that is of the form:
256+
message.
257+
include::format-patch-end-of-commit-message.adoc[]
256258

257-
* three-dashes and end-of-line, or
258-
* a line that begins with "diff -", or
259-
* a line that begins with "Index: "
260-
261-
is taken as the beginning of a patch, and the commit log message
262-
is terminated before the first occurrence of such a line.
259+
This means that the contents of the commit message can inadvertently
260+
interrupt the processing (see the <<caveats,CAVEATS>> section below).
263261

264262
When initially invoking `git am`, you give it the names of the mailboxes
265263
to process. Upon seeing the first patch that does not apply, it
@@ -283,6 +281,13 @@ commits, like running 'git am' on the wrong branch or an error in the
283281
commits that is more easily fixed by changing the mailbox (e.g.
284282
errors in the "From:" lines).
285283

284+
[[caveats]]
285+
CAVEATS
286+
-------
287+
288+
:git-am: 1
289+
include::format-patch-caveats.adoc[]
290+
286291
HOOKS
287292
-----
288293
This command can run `applypatch-msg`, `pre-applypatch`,

Documentation/git-format-patch.adoc

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -798,6 +798,10 @@ if they are part of the requested range. A simple "patch" does not
798798
include enough information for the receiving end to reproduce the same
799799
merge commit.
800800
801+
=== PATCH APPLICATION
802+
803+
include::format-patch-caveats.adoc[]
804+
801805
SEE ALSO
802806
--------
803807
linkgit:git-am[1], linkgit:git-send-email[1]

Documentation/git-send-email.adoc

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -692,6 +692,11 @@ Links of a few such community maintained helpers are:
692692
- https://github.com/AdityaGarg8/git-credential-email[git-msgraph]
693693
(cross platform client that can send emails using the Microsoft Graph API)
694694

695+
CAVEATS
696+
-------
697+
698+
include::format-patch-caveats.adoc[]
699+
695700
SEE ALSO
696701
--------
697702
linkgit:git-format-patch[1], linkgit:git-imap-send[1], mbox(5)

0 commit comments

Comments
 (0)