[PATCH v3] t9001: avoid not portable '\n' with sed

Subsystems: the rest

DORMANTno replies

2 messages, 2 authors, 2016-06-15 · open the first message on its own page

[PATCH v3] t9001: avoid not portable '\n' with sed

From: Torsten Bögershausen <hidden>
Date: 2016-06-15 23:01:33

t9001 used a '\n' in a sed expression to split one line into two lines,
but the usage of '\n' in the "replacement string" is not portable.

The '\n' can be used to match a newline in the "pattern space",
but otherwise the meaning of '\n' is unspecified in POSIX.

- Gnu versions of sed will treat '\n' as a newline character.
- Other versions of sed (like /usr/bin/sed under Mac OS X)
  simply ignore the '\' before the 'n', treating '\n' as 'n'.

For reference see:
pubs.opengroup.org/onlinepubs/9699919799/utilities/sed.html
http://www.gnu.org/software/sed/manual/sed.html

As the test already requires perl as a prerequisite, use perl instead of sed.

Signed-off-by: Torsten Bögershausen <redacted>
---
Sending a V3 patch seems "spammish", but after re-reading all
the comments I think that the commit msg should point out the difference
between POSIX sed and gnu sed somewhat better.

 t/t9001-send-email.sh | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/t/t9001-send-email.sh b/t/t9001-send-email.sh
index 64d9434..19a3ced 100755
--- a/t/t9001-send-email.sh
+++ b/t/t9001-send-email.sh
@@ -1342,7 +1342,7 @@ test_cover_addresses () {
 	git format-patch --cover-letter -2 -o outdir &&
 	cover=`echo outdir/0000-*.patch` &&
 	mv $cover cover-to-edit.patch &&
-	sed "s/^From:/$header: extra@address.com\nFrom:/" cover-to-edit.patch >"$cover" &&
+	perl -pe "s/^From:/$header: extra\@address.com\nFrom:/" cover-to-edit.patch >"$cover" &&
 	git send-email \
 	  --force \
 	  --from="Example <nobody@example.com>" \
-- 
2.0.0.553.ged01b91

Re: [PATCH v3] t9001: avoid not portable '\n' with sed

From: Eric Sunshine <hidden>
Date: 2016-06-15 23:01:33

On Tue, Jun 10, 2014 at 12:07 AM, Torsten Bögershausen [off-list ref] wrote:
t9001 used a '\n' in a sed expression to split one line into two lines,
but the usage of '\n' in the "replacement string" is not portable.

The '\n' can be used to match a newline in the "pattern space",
but otherwise the meaning of '\n' is unspecified in POSIX.

- Gnu versions of sed will treat '\n' as a newline character.
- Other versions of sed (like /usr/bin/sed under Mac OS X)
  simply ignore the '\' before the 'n', treating '\n' as 'n'.

For reference see:
pubs.opengroup.org/onlinepubs/9699919799/utilities/sed.html
http://www.gnu.org/software/sed/manual/sed.html

As the test already requires perl as a prerequisite, use perl instead of sed.
René Scharfe pointed out this useful resource [1] for writing portable
'sed' when he fixed [2] a problem on NetBSD in a test I had written.

[1]: http://sed.sourceforge.net/sedfaq4.html
[2]: http://thread.gmane.org/gmane.comp.version-control.git/231654
quoted hunk
Signed-off-by: Torsten Bögershausen <redacted>
---
Sending a V3 patch seems "spammish", but after re-reading all
the comments I think that the commit msg should point out the difference
between POSIX sed and gnu sed somewhat better.

 t/t9001-send-email.sh | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/t/t9001-send-email.sh b/t/t9001-send-email.sh
index 64d9434..19a3ced 100755
--- a/t/t9001-send-email.sh
+++ b/t/t9001-send-email.sh
@@ -1342,7 +1342,7 @@ test_cover_addresses () {
        git format-patch --cover-letter -2 -o outdir &&
        cover=`echo outdir/0000-*.patch` &&
        mv $cover cover-to-edit.patch &&
-       sed "s/^From:/$header: extra@address.com\nFrom:/" cover-to-edit.patch >"$cover" &&
+       perl -pe "s/^From:/$header: extra\@address.com\nFrom:/" cover-to-edit.patch >"$cover" &&
        git send-email \
          --force \
          --from="Example <nobody@example.com>" \
--
2.0.0.553.ged01b91
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help