Skip to contentSkip to conversation

t9001: avoid not portable '\n' with sed

PATCH In review Torsten Bögershausen 3 participants 5 messages Jun 15, 2016

lore
Share & tools
lore
#0 lore raw

PATCH v3 1/1 t9001: avoid not portable '\n' with sed

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.

---
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(-)
t/t9001-send-email.sh +1 -1
index 64d9434..19a3ced 100755
@@ -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: [email protected]\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 <[email protected]>" \
Signature · 1 line
2.0.0.553.ged01b91
#1 lore raw
Quoted 10 lines · Torsten Bögershausen

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'.

Quoted 5 lines

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 24 lines

---
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(-)
t/t9001-send-email.sh +1 -2
index 64d9434..19a3ced 100755
@@ -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: [email protected]\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 <[email protected]>" \
--

2.0.0.553.ged01b91

#2 lore raw
In reply to Torsten Bögershausen
Quoted 2 lines · Torsten Bögershausen

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.

This looks peculiarly familiar; don't I already have it queued?

#3 lore raw
Quoted 5 lines · Junio C Hamano
Quoted 2 lines · Torsten Bögershausen

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.

This looks peculiarly familiar; don't I already have it queued?

Yes, V2 is queued and in pu,and only the commit msg is changed between V2 and V3.

I think that V3 explains the difference between POSIX sed and gnu sed much better, and does reflect all the comments from the list, which otherwise may be lost.
And I suspect that not only the sed under Mac OS X does not handle this very '\n' different from gnu sed, or in other words, more platforms may not have a gnu sed and may need the fix.

#4 lore raw
Quoted 3 lines · Torsten Bögershausen

I think that V3 explains the difference between POSIX sed and gnu sed much better, and does reflect all the comments from the list, which otherwise may be lost.

Too late for that as the patch is already in 'next' X-<.