* Special strings in commit messages
@ 2017-10-08 18:24 Florian Weimer
2017-10-08 21:30 ` Eric Wong
0 siblings, 1 reply; 4+ messages in thread
From: Florian Weimer @ 2017-10-08 18:24 UTC (permalink / raw)
To: git
I have a commit which looks like this:
$ git cat-file commit 4ca76eb7b47724c2444dfea7890fa8db4edd5762
tree c845be47a0653624b1984d0dc1a0b485b527811d
parent 9eee98638ef06149e17f94afaa357e3a9e296e69
author Florian Weimer <fweimer@redhat.com> 1507481682 +0200
committer Florian Weimer <fweimer@redhat.com> 1507481682 +0200
19: glibc-fedora-nis-rh188246.patch
From baba5d9461d4e8a581ac26fe4412ad783ffc73e7 Mon Sep 17 00:00:00 2001
From: Jakub Jelinek <jakub@redhat.com>
Date: Mon, 1 May 2006 08:02:53 +0000
Subject: [PATCH] Enable SETENT_BATCH_READ nis/nss option by default
* Mon May 1 2006 Jakub Jelinek <jakub@redhat.com> 2.4.90-4
- SETENT_BATCH_READ /etc/default/nss option for speeding up
some usages of NIS+ (#188246)
This commit causes git rebase to fail, with this error:
fatal: could not parse .git/rebase-apply/0008
At this point, .git/rebase-apply/0008 contains this:
“
From baba5d9461d4e8a581ac26fe4412ad783ffc73e7 Mon Sep 17 00:00:00 2001
From: Jakub Jelinek <jakub@redhat.com>
Date: Mon, 1 May 2006 08:02:53 +0000
Subject: [PATCH] Enable SETENT_BATCH_READ nis/nss option by default
* Mon May 1 2006 Jakub Jelinek <jakub@redhat.com> 2.4.90-4
- SETENT_BATCH_READ /etc/default/nss option for speeding up
some usages of NIS+ (#188246)
---
nis/nss | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/nis/nss b/nis/nss
index
0ac6774a1ff29f012efaec9c4be1fcc3b83da7e8..d720e719267db5f741b67e7b98e4052e503c4333
100644
”
Followed by the diff. The preceding patch, .git/rebase-apply/0007, is:
“
[fweimer@oldenburg glibc-patches]$ cat .git/rebase-apply/0007
From 4ca76eb7b47724c2444dfea7890fa8db4edd5762 Mon Sep 17 00:00:00 2001
From: Florian Weimer <fweimer@redhat.com>
Date: Sun, 8 Oct 2017 18:54:42 +0200
Subject: 19: glibc-fedora-nis-rh188246.patch
”
Based on strace output, something in git rebase calls git mailsplit, and
it probably sees the "\nFrom " string and treats it as a start of a new
mail message, and things go downhill from there.
I will escape "\nFrom " in commit messages (probably as "\n.From " or
maybe "\n>From ", plus escaping for "\n."/"\n>" to make the encoding
reversible), but I wonder if there is something else I need to escape
while I'm at it.
Thanks,
Florian
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: Special strings in commit messages
2017-10-08 18:24 Special strings in commit messages Florian Weimer
@ 2017-10-08 21:30 ` Eric Wong
2017-10-09 13:38 ` Florian Weimer
0 siblings, 1 reply; 4+ messages in thread
From: Eric Wong @ 2017-10-08 21:30 UTC (permalink / raw)
To: Florian Weimer; +Cc: git
Florian Weimer <fweimer@redhat.com> wrote:
> Based on strace output, something in git rebase calls git mailsplit, and it
> probably sees the "\nFrom " string and treats it as a start of a new mail
> message, and things go downhill from there.
>
> I will escape "\nFrom " in commit messages (probably as "\n.From " or maybe
> "\n>From ", plus escaping for "\n."/"\n>" to make the encoding reversible),
> but I wonder if there is something else I need to escape while I'm at it.
I suppose it's safe to start using mboxrd internally when
there's little danger of mixing different git versions.
Totally untested (but passes "make test"), can you try this?
-----8<------
Subject: [PATCH] rebase: use mboxrd format to avoid split errors
The mboxrd format allows the use of embedded "From " lines in
commit messages without being misinterpreted by mailsplit
Reported-by: Florian Weimer <fweimer@redhat.com>
Signed-off-by: Eric Wong <e@80x24.org>
---
git-rebase--am.sh | 2 ++
1 file changed, 2 insertions(+)
diff --git a/git-rebase--am.sh b/git-rebase--am.sh
index 6e64d40d6f..14c50782e0 100644
--- a/git-rebase--am.sh
+++ b/git-rebase--am.sh
@@ -53,6 +53,7 @@ else
git format-patch -k --stdout --full-index --cherry-pick --right-only \
--src-prefix=a/ --dst-prefix=b/ --no-renames --no-cover-letter \
+ --pretty=mboxrd \
$git_format_patch_opt \
"$revisions" ${restrict_revision+^$restrict_revision} \
>"$GIT_DIR/rebased-patches"
@@ -83,6 +84,7 @@ else
fi
git am $git_am_opt --rebasing --resolvemsg="$resolvemsg" \
+ --patch-format=mboxrd \
$allow_rerere_autoupdate \
${gpg_sign_opt:+"$gpg_sign_opt"} <"$GIT_DIR/rebased-patches"
ret=$?
--
EW
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: Special strings in commit messages
2017-10-08 21:30 ` Eric Wong
@ 2017-10-09 13:38 ` Florian Weimer
2017-11-18 1:01 ` [PATCH v2] rebase: use mboxrd format to avoid split errors Eric Wong
0 siblings, 1 reply; 4+ messages in thread
From: Florian Weimer @ 2017-10-09 13:38 UTC (permalink / raw)
To: Eric Wong; +Cc: git
On 10/08/2017 11:30 PM, Eric Wong wrote:
> diff --git a/git-rebase--am.sh b/git-rebase--am.sh
> index 6e64d40d6f..14c50782e0 100644
> --- a/git-rebase--am.sh
> +++ b/git-rebase--am.sh
> @@ -53,6 +53,7 @@ else
>
> git format-patch -k --stdout --full-index --cherry-pick --right-only \
> --src-prefix=a/ --dst-prefix=b/ --no-renames --no-cover-letter \
> + --pretty=mboxrd \
> $git_format_patch_opt \
> "$revisions" ${restrict_revision+^$restrict_revision} \
> >"$GIT_DIR/rebased-patches"
> @@ -83,6 +84,7 @@ else
> fi
>
> git am $git_am_opt --rebasing --resolvemsg="$resolvemsg" \
> + --patch-format=mboxrd \
> $allow_rerere_autoupdate \
> ${gpg_sign_opt:+"$gpg_sign_opt"} <"$GIT_DIR/rebased-patches"
> ret=$?
My context is slightly different, but I added the mboxrd options
manually to both commands, and it fixes my test case.
I'm still wondering if I have to be on the lookout for similar issues
with different strings.
Thanks,
Florian
^ permalink raw reply [flat|nested] 4+ messages in thread
* [PATCH v2] rebase: use mboxrd format to avoid split errors
2017-10-09 13:38 ` Florian Weimer
@ 2017-11-18 1:01 ` Eric Wong
0 siblings, 0 replies; 4+ messages in thread
From: Eric Wong @ 2017-11-18 1:01 UTC (permalink / raw)
To: Junio C Hamano, Florian Weimer; +Cc: git
Sorry, I forgot about this for a while :x
Florian Weimer <fweimer@redhat.com> wrote:
> On 10/08/2017 11:30 PM, Eric Wong wrote:
> >diff --git a/git-rebase--am.sh b/git-rebase--am.sh
<snip, identical change below>
> My context is slightly different, but I added the mboxrd options manually to
> both commands, and it fixes my test case.
>
> I'm still wondering if I have to be on the lookout for similar issues with
> different strings.
I don't think theres other issues with different strings,
"From " lines are the one known ambiguity problem with mbox and
thus the reason mboxrd was created.
Below is an updated patch which adds a test case:
---------8<---------
Subject: [PATCH] rebase: use mboxrd format to avoid split errors
The mboxrd format allows the use of embedded "From " lines in
commit messages without being misinterpreted by mailsplit
Reported-by: Florian Weimer <fweimer@redhat.com>
Signed-off-by: Eric Wong <e@80x24.org>
---
git-rebase--am.sh | 2 ++
t/t3400-rebase.sh | 22 ++++++++++++++++++++++
2 files changed, 24 insertions(+)
diff --git a/git-rebase--am.sh b/git-rebase--am.sh
index 6e64d40d6f..14c50782e0 100644
--- a/git-rebase--am.sh
+++ b/git-rebase--am.sh
@@ -53,6 +53,7 @@ else
git format-patch -k --stdout --full-index --cherry-pick --right-only \
--src-prefix=a/ --dst-prefix=b/ --no-renames --no-cover-letter \
+ --pretty=mboxrd \
$git_format_patch_opt \
"$revisions" ${restrict_revision+^$restrict_revision} \
>"$GIT_DIR/rebased-patches"
@@ -83,6 +84,7 @@ else
fi
git am $git_am_opt --rebasing --resolvemsg="$resolvemsg" \
+ --patch-format=mboxrd \
$allow_rerere_autoupdate \
${gpg_sign_opt:+"$gpg_sign_opt"} <"$GIT_DIR/rebased-patches"
ret=$?
diff --git a/t/t3400-rebase.sh b/t/t3400-rebase.sh
index f5fd15e559..8ac58d5ea5 100755
--- a/t/t3400-rebase.sh
+++ b/t/t3400-rebase.sh
@@ -255,4 +255,26 @@ test_expect_success 'rebase commit with an ancient timestamp' '
grep "author .* 34567 +0600$" actual
'
+test_expect_success 'rebase with "From " line in commit message' '
+ git checkout -b preserve-from master~1 &&
+ cat >From_.msg <<EOF &&
+Somebody embedded an mbox in a commit message
+
+This is from so-and-so:
+
+From a@b Mon Sep 17 00:00:00 2001
+From: John Doe <nobody@example.com>
+Date: Sat, 11 Nov 2017 00:00:00 +0000
+Subject: not this message
+
+something
+EOF
+ >From_ &&
+ git add From_ &&
+ git commit -F From_.msg &&
+ git rebase master &&
+ git log -1 --pretty=format:%B >out &&
+ test_cmp From_.msg out
+'
+
test_done
--
EW
^ permalink raw reply related [flat|nested] 4+ messages in thread
end of thread, other threads:[~2017-11-18 1:10 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-10-08 18:24 Special strings in commit messages Florian Weimer
2017-10-08 21:30 ` Eric Wong
2017-10-09 13:38 ` Florian Weimer
2017-11-18 1:01 ` [PATCH v2] rebase: use mboxrd format to avoid split errors Eric Wong
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.