All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Michał Kiedrowicz" <michal.kiedrowicz@gmail.com>
To: git@vger.kernel.org
Cc: "Michał Kiedrowicz" <michal.kiedrowicz@gmail.com>,
	"Zbigniew Jędrzejewski-Szmek" <zbyszek@in.waw.pl>
Subject: Re: [PATCH] grep -P: Fix matching ^ and $
Date: Sat, 25 Feb 2012 10:30:50 +0100	[thread overview]
Message-ID: <20120225103050.14f52a91@gmail.com> (raw)
In-Reply-To: <1330161868-7954-1-git-send-email-michal.kiedrowicz@gmail.com>

Michał Kiedrowicz <michal.kiedrowicz@gmail.com> wrote:

> When `git-grep` is run with -P/--perl-regexp, it doesn't match ^ and $ at
> the beginning/end of the line.  This is because PCRE normally matches ^
> and $ at the beginning/end of the whole text, not for each line, and git-grep
> firstly passes a large chunk of text (possibly containing many lines) to
> pcre_exec() before it splits the text into lines.  This makes `git-grep -P`
> behave differently from `git-grep -E` and also from `grep -P` and `pcregrep`:
> 
> 	$ cat file
> 	a
> 	 b
> 	$ git --no-pager grep --no-index -P '^ ' file
> 	$ git --no-pager grep --no-index -E '^ ' file
> 	file: b
> 	$ grep -c -P '^ ' file
> 	 b
> 	$ pcregrep -c '^ ' file
> 	 b
> 

Original report:
http://permalink.gmane.org/gmane.comp.version-control.git/190830

> Reported-by: Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
> Signed-off-by: Michał Kiedrowicz <michal.kiedrowicz@gmail.com>
> ---
>  grep.c          |    2 +-
>  t/t7810-grep.sh |   23 +++++++++++++++++++++++
>  2 files changed, 24 insertions(+), 1 deletions(-)
> 
> diff --git a/grep.c b/grep.c
> index 3821400..f492d26 100644
> --- a/grep.c
> +++ b/grep.c
> @@ -79,7 +79,7 @@ static void compile_pcre_regexp(struct grep_pat *p, const struct grep_opt *opt)
>  {
>  	const char *error;
>  	int erroffset;
> -	int options = 0;
> +	int options = PCRE_MULTILINE;
>  
>  	if (opt->ignore_case)
>  		options |= PCRE_CASELESS;
> diff --git a/t/t7810-grep.sh b/t/t7810-grep.sh
> index 75f4716..dd6e6d5 100755
> --- a/t/t7810-grep.sh
> +++ b/t/t7810-grep.sh
> @@ -47,6 +47,13 @@ test_expect_success setup '
>  	echo vvv >t/v &&
>  	mkdir t/a &&
>  	echo vvv >t/a/v &&
> +	{
> +		echo "line without leading space1"
> +		echo " line with leading space1"
> +		echo " line with leading space2"
> +		echo " line with leading space3"
> +		echo "line without leading space2"
> +	} >space &&
>  	git add . &&
>  	test_tick &&
>  	git commit -m initial
> @@ -893,4 +900,20 @@ test_expect_success 'mimic ack-grep --group' '
>  	test_cmp expected actual
>  '
>  
> +cat >expected <<EOF
> +space: line with leading space1
> +space: line with leading space2
> +space: line with leading space3
> +EOF
> +
> +test_expect_success 'grep -E "^ "' '
> +	git grep -E "^ " space >actual &&
> +	test_cmp expected actual
> +'
> +
> +test_expect_success "grep -P '^ '" '
> +	git grep -P "^ " space >actual &&
> +	test_cmp expected actual
> +'
> +
>  test_done

  reply	other threads:[~2012-02-25  9:31 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-02-25  9:24 [PATCH] grep -P: Fix matching ^ and $ Michał Kiedrowicz
2012-02-25  9:30 ` Michał Kiedrowicz [this message]
2012-02-25 17:52   ` Zbigniew Jędrzejewski-Szmek
2012-02-26 22:39 ` Junio C Hamano
2012-02-27 16:45   ` [PATCH] grep -P: add tests for " Zbigniew Jędrzejewski-Szmek
2012-02-27 20:21     ` Junio C Hamano

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=20120225103050.14f52a91@gmail.com \
    --to=michal.kiedrowicz@gmail.com \
    --cc=git@vger.kernel.org \
    --cc=zbyszek@in.waw.pl \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.