From: Jakub Narebski Date: Tue, 24 Nov 2009 16:59:28 GMT Subject: Re: [PATCH] t/gitweb-lib: Split HTTP response with non-GNU sed Message-ID: <200911241759.28972.jnareb@gmail.com> In-Reply-To: <7vocmtyu3v.fsf@alter.siamese.dyndns.org> On Mon, 23 Nov 2009, Junio C Hamano wrote: > Brian Gernhardt writes: > > > Recognizing \r in a regex is something GNU sed will do, but other sed > > implementation's won't. (Found with BSD sed on OS X.) So use a > > literal carriage return instead. [...] > > diff --git a/t/gitweb-lib.sh b/t/gitweb-lib.sh > > index 32b841d..35dda58 100644 > > --- a/t/gitweb-lib.sh > > +++ b/t/gitweb-lib.sh > > @@ -52,8 +52,8 @@ gitweb_run () { > >         rm -f gitweb.log && > >         perl -- "$SCRIPT_NAME" \ > >                 >gitweb.output 2>gitweb.log && > > -       sed -e   '/^\r$/q' gitweb.headers && > > -       sed -e '1,/^\r$/d' gitweb.body    && > > +       sed -e   '/^ > > $/q' gitweb.headers && > > +       sed -e '1,/^ > > $/d' gitweb.body    && > >         if grep '^[[]' gitweb.log >/dev/null 2>&1; then false; else > > true; fi > >         # gitweb.log is left for debugging If we were to do it this way, I would prefer to set and then use 'cr' or 'crlf' variable (in sed expression). > > I'd actually prefer not having to deal with this issue. How about doing > something like this instead? > > t/gitweb-lib.sh | 14 ++++++++++++-- > 1 files changed, 12 insertions(+), 2 deletions(-) > > diff --git a/t/gitweb-lib.sh b/t/gitweb-lib.sh > index 32b841d..3121950 100644 > --- a/t/gitweb-lib.sh > +++ b/t/gitweb-lib.sh > @@ -52,8 +52,18 @@ gitweb_run () { > rm -f gitweb.log && > perl -- "$SCRIPT_NAME" \ > >gitweb.output 2>gitweb.log && > - sed -e '/^\r$/q' gitweb.headers && > - sed -e '1,/^\r$/d' gitweb.body && > + perl -w -e ' "perl", or "$PERL", or "$PERL_PATH"? > + open O, ">gitweb.headers"; Well, modern Perl would use here + open my $fh, ">", "gitweb.headers"; But it is not that important here. > + while (<>) { > + print O; > + last if (/^\r$/ || /^$/); > + } > + open O, ">gitweb.body"; > + while (<>) { > + print O; > + } > + close O; > + ' gitweb.output && > if grep '^[[]' gitweb.log >/dev/null 2>&1; then false; else true; fi > > # gitweb.log is left for debugging > This is a good solution. We test Perl script anyway (so Perl is required for running this test), and this way we can do this portably and in one pass (one fork). -- Jakub Narebski Poland