check-code: add a rule against a GNU sed-ism
BSD sed requires the 'i' command to be followed with a backslash and a
newline, like so:
$ sed -e '/^@/i\
> other'
We've encountered this problem before, e.g. in test-mq.t (
900767dfa80d).
This change adds a check-code rule and fixes two instances of the
problem in test-record.t.
--- a/contrib/check-code.py Mon Apr 22 12:27:56 2013 +0400
+++ b/contrib/check-code.py Mon Apr 22 16:33:28 2013 -0500
@@ -74,6 +74,8 @@
(r'/dev/u?random', "don't use entropy, use /dev/zero"),
(r'do\s*true;\s*done', "don't use true as loop body, use sleep 0"),
(r'^( *)\t', "don't use tabs to indent"),
+ (r'sed .*\'/[^/]*/i[^\\][^\n]',
+ "put a backslash-escaped newline after sed 'i' command"),
],
# warnings
[
--- a/tests/test-record.t Mon Apr 22 12:27:56 2013 +0400
+++ b/tests/test-record.t Mon Apr 22 16:33:28 2013 -0500
@@ -1039,7 +1039,8 @@
Editing patch (and ignoring trailing text)
$ cat > editor.sh << '__EOF__'
- > sed -e 7d -e '5s/^-/ /' -e '/^# ---/itrailing\nditto' "$1" > tmp
+ > sed -e 7d -e '5s/^-/ /' -e '/^# ---/i\
+ > trailing\nditto' "$1" > tmp
> mv tmp "$1"
> __EOF__
$ cat > editedfile << '__EOF__'
@@ -1204,7 +1205,8 @@
random text in random positions is still an error
$ cat > editor.sh << '__EOF__'
- > sed -e '/^@/iother' "$1" > tmp
+ > sed -e '/^@/i\
+ > other' "$1" > tmp
> mv tmp "$1"
> __EOF__
$ HGEDITOR="\"sh\" \"`pwd`/editor.sh\"" hg record <<EOF