All of lore.kernel.org
 help / color / mirror / Atom feed
From: Karthik Nayak <karthik.188@gmail.com>
To: git@vger.kernel.org
Cc: christian.couder@gmail.com, Matthieu.Moy@grenoble-inp.fr,
	gitster@pobox.com
Subject: Re: [RFC/PATCH 5/9] ref-filter: add option to match literal pattern
Date: Sat, 27 Jun 2015 02:45:23 +0530	[thread overview]
Message-ID: <558DC0EB.3050203@gmail.com> (raw)
In-Reply-To: <1435232596-27466-5-git-send-email-karthik.188@gmail.com>

Just a few things I need to fix, personal note.

On 06/25/2015 05:13 PM, Karthik Nayak wrote:
> Since 'ref-filter' only has an option to match path names.
> Add an option for regular pattern matching.
>
> Mentored-by: Christian Couder <christian.couder@gmail.com>
> Mentored-by: Matthieu Moy <matthieu.moy@grenoble-inp.fr>
> Signed-off-by: Karthik Nayak <karthik.188@gmail.com>
> ---
>   builtin/for-each-ref.c |  1 +
>   ref-filter.c           | 30 ++++++++++++++++++++++++------
>   ref-filter.h           |  3 ++-
>   3 files changed, 27 insertions(+), 7 deletions(-)
>
> diff --git a/builtin/for-each-ref.c b/builtin/for-each-ref.c
> index c318e33..01d5363 100644
> --- a/builtin/for-each-ref.c
> +++ b/builtin/for-each-ref.c
> @@ -68,6 +68,7 @@ int cmd_for_each_ref(int argc, const char **argv, const char *prefix)
>   	git_config(git_default_config, NULL);
>
>   	filter.name_patterns = argv;
> +	filter.match_as_path = 1;
>   	filter_refs(&array, &filter, FILTER_REFS_ALL | FILTER_REFS_INCLUDE_BROKEN);
>   	ref_array_sort(sorting, &array);
>
> diff --git a/ref-filter.c b/ref-filter.c
> index e307fab..1f97910 100644
> --- a/ref-filter.c
> +++ b/ref-filter.c
> @@ -954,6 +954,20 @@ static int commit_contains(struct ref_filter *filter, struct commit *commit)
>
>   /*
>    * Return 1 if the refname matches one of the patterns, otherwise 0.
> + * A pattern can be a literal prefix (e.g. a refname "refs/heads/master"
> + * matches a pattern "refs/heads/m") or a wildcard (e.g. the same ref
> + * matches "refs/heads/m*",too).
> + */
> +static int match_pattern(const char **patterns, const char *refname)
> +{
> +	for (; *patterns; patterns++)
> +		if (!wildmatch(*patterns, refname, 0, NULL))
> +			return 1;
> +	return 0;
> +}
> +
> +/*
> + * Return 1 if the refname matches one of the patterns, otherwise 0.
>    * A pattern can be path prefix (e.g. a refname "refs/heads/master"
>    * matches a pattern "refs/heads/") or a wildcard (e.g. the same ref
>    * matches "refs/heads/m*",too).
> @@ -977,6 +991,15 @@ static int match_name_as_path(const char **pattern, const char *refname)
>   	return 0;
>   }
>
> +static int filter_pattern_match(struct ref_filter *filter, const char *refname)
> +{
> +	if (!*filter->name_patterns)
> +		return 0;

Should return 1.

> +	if (filter->match_as_path)
> +		return match_name_as_path(filter->name_patterns, refname);
> +	return match_pattern(filter->name_patterns, refname);
> +}
> +
>   /*
>    * Given a ref (sha1, refname) see if it points to one of the sha1s
>    * in a sha1_array.
> @@ -1026,17 +1049,12 @@ static int ref_filter_handler(const char *refname, const struct object_id *oid,
>   	struct ref_array_item *ref;
>   	struct commit *commit = NULL;
>
> -	if (flag & REF_BAD_NAME) {
> -		  warning("ignoring ref with broken name %s", refname);
> -		  return 0;
> -	}
> -

Undo this merge conflict.

>   	if (flag & REF_ISBROKEN) {
>   		warning("ignoring broken ref %s", refname);
>   		return 0;
>   	}
>
> -	if (*filter->name_patterns && !match_name_as_path(filter->name_patterns, refname))
> +	if (!filter_pattern_match(filter, refname))
>   		return 0;
>
>   	if (!match_points_at(&filter->points_at, oid->hash, refname))
> diff --git a/ref-filter.h b/ref-filter.h
> index 6b6fb96..a4809c8 100644
> --- a/ref-filter.h
> +++ b/ref-filter.h
> @@ -54,7 +54,8 @@ struct ref_filter {
>   	} merge;
>   	struct commit *merge_commit;
>
> -	unsigned int with_commit_tag_algo: 1;
> +	unsigned int with_commit_tag_algo: 1,
> +		match_as_path: 1;
>   	unsigned int lines;
>   };
>
>

I'll add these changes to my local branch.

-- 
Regards,
Karthik

  reply	other threads:[~2015-06-26 21:15 UTC|newest]

Thread overview: 23+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-06-25  9:55 [RFC/PATCH 0/9] port tag.c to use ref-filter library Karthik Nayak
2015-06-25 11:43 ` [RFC/PATCH 1/9] ref-filter: add %(refname:lalignX) option Karthik Nayak
2015-06-25 11:43   ` [RFC/PATCH 2/9] ref-filter: add option to filter only tags Karthik Nayak
2015-06-25 11:43   ` [RFC/PATCH 3/9] ref-filter: support printing N lines from tag annotation Karthik Nayak
2015-06-25 11:43   ` [RFC/PATCH 4/9] ref-filter: add support to sort by version Karthik Nayak
2015-07-12  9:09     ` Duy Nguyen
2015-07-12 13:37       ` Karthik Nayak
2015-06-25 11:43   ` [RFC/PATCH 5/9] ref-filter: add option to match literal pattern Karthik Nayak
2015-06-26 21:15     ` Karthik Nayak [this message]
2015-06-29 18:20     ` Junio C Hamano
2015-06-30 13:36       ` Karthik Nayak
2015-06-25 11:43   ` [RFC/PATCH 6/9] tag.c: use 'ref-filter' data structures Karthik Nayak
2015-06-25 11:43   ` [RFC/PATCH 7/9] tag.c: use 'ref-filter' APIs Karthik Nayak
2015-06-25 11:43   ` [RFC/PATCH 8/9] tag.c: implement '--format' option Karthik Nayak
2015-06-25 13:03     ` Karthik Nayak
2015-06-25 11:43   ` [RFC/PATCH 9/9] tag.c: implement '--merged' and '--no-merged' options Karthik Nayak
2015-06-27 20:02   ` [RFC/PATCH 1/9] ref-filter: add %(refname:lalignX) option Christian Couder
2015-06-28  4:53     ` Christian Couder
2015-06-28  6:59     ` Karthik Nayak
2015-06-27 23:43   ` Duy Nguyen
2015-06-28  7:39   ` Junio C Hamano
2015-06-28  9:13     ` Karthik Nayak
2015-06-29  4:44       ` 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=558DC0EB.3050203@gmail.com \
    --to=karthik.188@gmail.com \
    --cc=Matthieu.Moy@grenoble-inp.fr \
    --cc=christian.couder@gmail.com \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    /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.