public inbox for git@vger.kernel.org 
 help / color / mirror / Atom feed
From: Jakub Narebski <jnareb@gmail•com>
To: Junio C Hamano <gitster@pobox•com>
Cc: Brian Gernhardt <brian@gernhardtsoftware•com>,
	Git List <git@vger•kernel.org>
Subject: Re: [PATCH] t/gitweb-lib: Split HTTP response with non-GNU sed
Date: Tue, 24 Nov 2009 17:59:28 +0100	[thread overview]
Message-ID: <200911241759.28972.jnareb@gmail.com> (raw)
In-Reply-To: <7vocmtyu3v.fsf@alter.siamese.dyndns.org>

On Mon, 23 Nov 2009, Junio C Hamano wrote:
> Brian Gernhardt <brian@gernhardtsoftware•com> 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.output >gitweb.headers &&
> > -       sed -e '1,/^\r$/d' <gitweb.output >gitweb.body    &&
> > +       sed -e   '/^
> > $/q' <gitweb.output >gitweb.headers &&
> > +       sed -e '1,/^
> > $/d' <gitweb.output >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.output >gitweb.headers &&
> -	sed -e '1,/^\r$/d' <gitweb.output >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

      parent reply	other threads:[~2009-11-24 17:00 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-11-23 17:33 [PATCH] t/gitweb-lib: Split HTTP response with non-GNU sed Brian Gernhardt
2009-11-23 18:27 ` Junio C Hamano
2009-11-23 18:50   ` Brian Gernhardt
2009-11-24 16:59   ` Jakub Narebski [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=200911241759.28972.jnareb@gmail.com \
    --to=jnareb@gmail$(echo .)com \
    --cc=brian@gernhardtsoftware$(echo .)com \
    --cc=git@vger$(echo .)kernel.org \
    --cc=gitster@pobox$(echo .)com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox