git@vger.kernel.org list mirror (unofficial, one of many)
 help / color / mirror / code / Atom feed
From: "Hariom Verma via GitGitGadget" <gitgitgadget@gmail.com>
To: git@vger.kernel.org
Cc: Hariom Verma <hariom18599@gmail.com>
Subject: [PATCH v2 0/9] [GSoC] Improvements to ref-filter
Date: Wed, 05 Aug 2020 21:51:36 +0000	[thread overview]
Message-ID: <pull.684.v2.git.1596664305.gitgitgadget@gmail.com> (raw)
In-Reply-To: <pull.684.git.1595882588.gitgitgadget@gmail.com>

This is the first patch series that introduces some improvements and
features to file ref-filter.{c,h}. These changes are useful to ref-filter,
but in near future also will allow us to use ref-filter's logic in pretty.c

I plan to add more to format-support.{c,h} in the upcoming patch series.
That will lead to more improved and feature-rich ref-filter.c

Hariom Verma (9):
  ref-filter: support different email formats
  ref-filter: refactor `grab_objectname()`
  ref-filter: modify error messages in `grab_objectname()`
  ref-filter: rename `objectname` related functions and fields
  ref-filter: add `short` modifier to 'tree' atom
  ref-filter: add `short` modifier to 'parent' atom
  pretty: refactor `format_sanitized_subject()`
  format-support: move `format_sanitized_subject()` from pretty
  ref-filter: add `sanitize` option for 'subject' atom

 Documentation/git-for-each-ref.txt |  10 +-
 Makefile                           |   1 +
 format-support.c                   |  43 ++++++++
 format-support.h                   |   6 ++
 pretty.c                           |  40 +-------
 ref-filter.c                       | 159 +++++++++++++++++++----------
 t/t6300-for-each-ref.sh            |  35 +++++++
 7 files changed, 202 insertions(+), 92 deletions(-)
 create mode 100644 format-support.c
 create mode 100644 format-support.h


base-commit: dc04167d378fb29d30e1647ff6ff51dd182bc9a3
Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-684%2Fharry-hov%2Fonly-rf6-v2
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-684/harry-hov/only-rf6-v2
Pull-Request: https://github.com/gitgitgadget/git/pull/684

Range-diff vs v1:

  1:  aeb116c5aa !  1:  78e69032df ref-filter: support different email formats
     @@ Metadata
       ## Commit message ##
          ref-filter: support different email formats
      
     -    Currently, ref-filter only supports printing email with arrow brackets.
     +    Currently, ref-filter only supports printing email with angle brackets.
      
          Let's add support for two more email options.
     -    - trim : print email without arrow brackets.
     -    - localpart : prints the part before the @ sign
     +    - trim : for email without angle brackets.
     +    - localpart : for the part before the @ sign out of trimmed email
      
          Mentored-by: Christian Couder <chriscool@tuxfamily.org>
          Mentored-by: Heba Waly <heba.waly@gmail.com>
          Signed-off-by: Hariom Verma <hariom18599@gmail.com>
      
     + ## Documentation/git-for-each-ref.txt ##
     +@@ Documentation/git-for-each-ref.txt: These are intended for working on a mix of annotated and lightweight tags.
     + 
     + Fields that have name-email-date tuple as its value (`author`,
     + `committer`, and `tagger`) can be suffixed with `name`, `email`,
     +-and `date` to extract the named component.
     ++and `date` to extract the named component.  For email fields (`authoremail`,
     ++`committeremail` and `taggeremail`), `:trim` can be appended to get the email
     ++without angle brackets, and `:localpart` to get the part before the `@` symbol
     ++out of the trimmed email.
     + 
     + The message in a commit or a tag object is `contents`, from which
     + `contents:<part>` can be used to extract various parts out of:
     +
       ## ref-filter.c ##
     -@@ ref-filter.c: static struct ref_to_worktree_map {
     - 	struct worktree **worktrees;
     - } ref_to_worktree_map;
     +@@ ref-filter.c: static struct used_atom {
     + 			enum { O_FULL, O_LENGTH, O_SHORT } option;
     + 			unsigned int length;
     + 		} objectname;
     ++		struct email_option {
     ++			enum { EO_RAW, EO_TRIM, EO_LOCALPART } option;
     ++		} email_option;
     + 		struct refname_atom refname;
     + 		char *head;
     + 	} u;
     +@@ ref-filter.c: static int objectname_atom_parser(const struct ref_format *format, struct used_a
     + 	return 0;
     + }
       
     -+static struct email_option{
     -+	enum { EO_INVALID, EO_RAW, EO_TRIM, EO_LOCALPART } option;
     -+} email_option;
     ++static int person_email_atom_parser(const struct ref_format *format, struct used_atom *atom,
     ++				    const char *arg, struct strbuf *err)
     ++{
     ++	if (!arg)
     ++		atom->u.email_option.option = EO_RAW;
     ++	else if (!strcmp(arg, "trim"))
     ++		atom->u.email_option.option = EO_TRIM;
     ++	else if (!strcmp(arg, "localpart"))
     ++		atom->u.email_option.option = EO_LOCALPART;
     ++	else
     ++		return strbuf_addf_ret(err, -1, _("unrecognized email option: %s"), arg);
     ++	return 0;
     ++}
      +
     - /*
     -  * An atom is a valid field atom listed below, possibly prefixed with
     -  * a "*" to denote deref_tag().
     -@@ ref-filter.c: static const char *copy_email(const char *buf)
     + static int refname_atom_parser(const struct ref_format *format, struct used_atom *atom,
     + 			       const char *arg, struct strbuf *err)
     + {
     +@@ ref-filter.c: static struct {
     + 	{ "tag", SOURCE_OBJ },
     + 	{ "author", SOURCE_OBJ },
     + 	{ "authorname", SOURCE_OBJ },
     +-	{ "authoremail", SOURCE_OBJ },
     ++	{ "authoremail", SOURCE_OBJ, FIELD_STR, person_email_atom_parser },
     + 	{ "authordate", SOURCE_OBJ, FIELD_TIME },
     + 	{ "committer", SOURCE_OBJ },
     + 	{ "committername", SOURCE_OBJ },
     +-	{ "committeremail", SOURCE_OBJ },
     ++	{ "committeremail", SOURCE_OBJ, FIELD_STR, person_email_atom_parser },
     + 	{ "committerdate", SOURCE_OBJ, FIELD_TIME },
     + 	{ "tagger", SOURCE_OBJ },
     + 	{ "taggername", SOURCE_OBJ },
     +-	{ "taggeremail", SOURCE_OBJ },
     ++	{ "taggeremail", SOURCE_OBJ, FIELD_STR, person_email_atom_parser },
     + 	{ "taggerdate", SOURCE_OBJ, FIELD_TIME },
     + 	{ "creator", SOURCE_OBJ },
     + 	{ "creatordate", SOURCE_OBJ, FIELD_TIME },
     +@@ ref-filter.c: static const char *copy_name(const char *buf)
     + 	return xstrdup("");
     + }
     + 
     +-static const char *copy_email(const char *buf)
     ++static const char *copy_email(const char *buf, struct used_atom *atom)
     + {
     + 	const char *email = strchr(buf, '<');
       	const char *eoemail;
       	if (!email)
       		return xstrdup("");
      -	eoemail = strchr(email, '>');
     -+	switch (email_option.option) {
     ++	switch (atom->u.email_option.option) {
      +	case EO_RAW:
     -+		eoemail = strchr(email, '>') + 1;
     ++		eoemail = strchr(email, '>');
     ++		if (eoemail)
     ++			eoemail++;
      +		break;
      +	case EO_TRIM:
      +		email++;
     @@ ref-filter.c: static const char *copy_email(const char *buf)
      +	case EO_LOCALPART:
      +		email++;
      +		eoemail = strchr(email, '@');
     ++		if (!eoemail)
     ++			eoemail = strchr(email, '>');
      +		break;
     -+	case EO_INVALID:
      +	default:
     -+		return xstrdup("");
     ++		BUG("unknown email option");
      +	}
      +
       	if (!eoemail)
     @@ ref-filter.c: static void grab_person(const char *who, struct atom_value *val, i
       		else if (!strcmp(name + wholen, "name"))
       			v->s = copy_name(wholine);
      -		else if (!strcmp(name + wholen, "email"))
     -+		else if (starts_with(name + wholen, "email")) {
     -+			email_option.option = EO_INVALID;
     -+			if (!strcmp(name + wholen, "email"))
     -+				email_option.option = EO_RAW;
     -+			if (!strcmp(name + wholen, "email:trim"))
     -+				email_option.option = EO_TRIM;
     -+			if (!strcmp(name + wholen, "email:localpart"))
     -+				email_option.option = EO_LOCALPART;
     - 			v->s = copy_email(wholine);
     -+		}
     +-			v->s = copy_email(wholine);
     ++		else if (starts_with(name + wholen, "email"))
     ++			v->s = copy_email(wholine, &used_atom[i]);
       		else if (starts_with(name + wholen, "date"))
       			grab_date(wholine, v, name);
       	}
  -:  ---------- >  2:  b6b6acab9a ref-filter: refactor `grab_objectname()`
  -:  ---------- >  3:  65fee332a3 ref-filter: modify error messages in `grab_objectname()`
  -:  ---------- >  4:  976f2041a4 ref-filter: rename `objectname` related functions and fields
  -:  ---------- >  5:  dda7400b14 ref-filter: add `short` modifier to 'tree' atom
  2:  49344f1b55 !  6:  764bb23b59 ref-filter: add `short` option for 'tree' and 'parent'
     @@ Metadata
      Author: Hariom Verma <hariom18599@gmail.com>
      
       ## Commit message ##
     -    ref-filter: add `short` option for 'tree' and 'parent'
     +    ref-filter: add `short` modifier to 'parent' atom
      
     -    Sometimes while using 'parent' and 'tree' atom, user might
     -    want to see abbrev hash instead of full 40 character hash.
     +    Sometimes while using 'parent' atom, user might want to see abbrev hash
     +    instead of full 40 character hash.
      
     -    'objectname' and 'refname' already supports printing abbrev hash.
     -    It might be convenient for users to have the same option for printing
     -    'parent' and 'tree' hash.
     +    Just like 'objectname', it might be convenient for users to have the
     +    `:short` and `:short=<length>` option for printing 'parent' hash.
      
     -    Let's introduce `short` option to 'parent' and 'tree' atom.
     -
     -    `tree:short` - for abbrev tree hash
     -    `parent:short` - for abbrev parent hash
     +    Let's introduce `short` option to 'parent' atom.
      
          Mentored-by: Christian Couder <chriscool@tuxfamily.org>
          Mentored-by: Heba Waly <heba.waly@gmail.com>
          Signed-off-by: Hariom Verma <hariom18599@gmail.com>
      
     + ## Documentation/git-for-each-ref.txt ##
     +@@ Documentation/git-for-each-ref.txt: worktreepath::
     + In addition to the above, for commit and tag objects, the header
     + field names (`tree`, `parent`, `object`, `type`, and `tag`) can
     + be used to specify the value in the header field.
     +-Field `tree` can also be used with modifier `:short` and
     ++Fields `tree` and `parent` can also be used with modifier `:short` and
     + `:short=<length>` just like `objectname`.
     + 
     + For commit and tag objects, the special `creatordate` and `creator`
     +
       ## ref-filter.c ##
     +@@ ref-filter.c: static struct {
     + 	{ "objectname", SOURCE_OTHER, FIELD_STR, oid_atom_parser },
     + 	{ "deltabase", SOURCE_OTHER, FIELD_STR, deltabase_atom_parser },
     + 	{ "tree", SOURCE_OBJ, FIELD_STR, oid_atom_parser },
     +-	{ "parent", SOURCE_OBJ },
     ++	{ "parent", SOURCE_OBJ, FIELD_STR, oid_atom_parser },
     + 	{ "numparent", SOURCE_OBJ, FIELD_ULONG },
     + 	{ "object", SOURCE_OBJ },
     + 	{ "type", SOURCE_OBJ },
      @@ ref-filter.c: static void grab_commit_values(struct atom_value *val, int deref, struct object
     - 			continue;
     - 		if (deref)
     - 			name++;
     --		if (!strcmp(name, "tree")) {
     -+		if (!strcmp(name, "tree"))
     - 			v->s = xstrdup(oid_to_hex(get_commit_tree_oid(commit)));
     --		}
     -+		else if (!strcmp(name, "tree:short"))
     -+			v->s = xstrdup(find_unique_abbrev(get_commit_tree_oid(commit), DEFAULT_ABBREV));
     - 		else if (!strcmp(name, "numparent")) {
       			v->value = commit_list_count(commit->parents);
       			v->s = xstrfmt("%lu", (unsigned long)v->value);
       		}
     @@ ref-filter.c: static void grab_commit_values(struct atom_value *val, int deref,
       			struct commit_list *parents;
       			struct strbuf s = STRBUF_INIT;
       			for (parents = commit->parents; parents; parents = parents->next) {
     - 				struct commit *parent = parents->item;
     +-				struct commit *parent = parents->item;
     ++				struct object_id *oid = &parents->item->object.oid;
       				if (parents != commit->parents)
       					strbuf_addch(&s, ' ');
      -				strbuf_addstr(&s, oid_to_hex(&parent->object.oid));
     -+				if (!strcmp(name, "parent"))
     -+					strbuf_addstr(&s, oid_to_hex(&parent->object.oid));
     -+				else if (!strcmp(name, "parent:short"))
     -+					strbuf_add_unique_abbrev(&s, &parent->object.oid, DEFAULT_ABBREV);
     ++				strbuf_addstr(&s, do_grab_oid("parent", oid, &used_atom[i]));
       			}
       			v->s = strbuf_detach(&s, NULL);
       		}
      
       ## t/t6300-for-each-ref.sh ##
     -@@ t/t6300-for-each-ref.sh: test_atom head objectname:short $(git rev-parse --short refs/heads/master)
     - test_atom head objectname:short=1 $(git rev-parse --short=1 refs/heads/master)
     - test_atom head objectname:short=10 $(git rev-parse --short=10 refs/heads/master)
     - test_atom head tree $(git rev-parse refs/heads/master^{tree})
     -+test_atom head tree:short $(git rev-parse --short refs/heads/master^{tree})
     +@@ t/t6300-for-each-ref.sh: test_atom head tree:short $(git rev-parse --short refs/heads/master^{tree})
     + test_atom head tree:short=1 $(git rev-parse --short=1 refs/heads/master^{tree})
     + test_atom head tree:short=10 $(git rev-parse --short=10 refs/heads/master^{tree})
       test_atom head parent ''
      +test_atom head parent:short ''
     ++test_atom head parent:short=1 ''
     ++test_atom head parent:short=10 ''
       test_atom head numparent 0
       test_atom head object ''
       test_atom head type ''
     -@@ t/t6300-for-each-ref.sh: test_atom tag objectname:short $(git rev-parse --short refs/tags/testtag)
     - test_atom head objectname:short=1 $(git rev-parse --short=1 refs/heads/master)
     - test_atom head objectname:short=10 $(git rev-parse --short=10 refs/heads/master)
     - test_atom tag tree ''
     -+test_atom tag tree:short ''
     +@@ t/t6300-for-each-ref.sh: test_atom tag tree:short ''
     + test_atom tag tree:short=1 ''
     + test_atom tag tree:short=10 ''
       test_atom tag parent ''
      +test_atom tag parent:short ''
     ++test_atom tag parent:short=1 ''
     ++test_atom tag parent:short=10 ''
       test_atom tag numparent ''
       test_atom tag object $(git rev-parse refs/tags/testtag^0)
       test_atom tag type 'commit'
  3:  69b9d221c0 !  7:  95035765a0 pretty: refactor `format_sanitized_subject()`
     @@ Metadata
       ## Commit message ##
          pretty: refactor `format_sanitized_subject()`
      
     -    This commit refactors `format_sanitized_subject()` in the
     -    hope to use same logic in ref-filter.c
     +    The function 'format_sanitized_subject()' is responsible for
     +    sanitized subject line in pretty.c
     +    e.g.
     +    the subject line
     +    the-sanitized-subject-line
     +
     +    It would be a nice enhancement to `subject` atom to have the
     +    same feature. So in the later commits, we plan to add this feature
     +    to ref-filter.
     +
     +    Refactor `format_sanitized_subject()`, so it can be reused in
     +    ref-filter.c for adding new modifier `sanitize` to "subject" atom.
     +
     +    Currently, the loop inside `format_sanitized_subject()` runs
     +    until `\n` is found. But now, we stored the first occurrence
     +    of `\n` in a variable `eol` and passed it in
     +    `format_sanitized_subject()`. And the loop runs upto `eol`.
     +
     +    But this change isn't sufficient to reuse this function in
     +    ref-filter.c because there exist tags with multiline subject.
     +
     +    It's wise to replace `\n` with ' ', if `format_sanitized_subject()`
     +    encounters `\n` before end of subject line, just like `copy_subject()`.
     +    Because we'll be only using `format_sanitized_subject()` for
     +    "%(subject:sanitize)", instead of `copy_subject()` and
     +    `format_sanitized_subject()` both. So, added the code:
     +    ```
     +    if (char == '\n') /* never true if called inside pretty.c */
     +        char = ' ';
     +    ```
     +
     +    Now, it's ready to be reused in ref-filter.c
      
          Mentored-by: Christian Couder <chriscool@tuxfamily.org>
          Mentored-by: Heba Waly <heba.waly@gmail.com>
  4:  9dc619b448 !  8:  1c43f55d7c format-support: move `format_sanitized_subject()` from pretty
     @@ Commit message
      
          In hope of some new features in `subject` atom, move funtion
          `format_sanitized_subject()` and all the function it uses
     -    to new file format-support.[c/h].
     +    to new file format-support.{c,h}.
      
          Consider this new file as a common interface between functions that
          pretty.c and ref-filter.c shares.
  5:  7b9103cbad !  9:  feace82752 ref-filter: add `sanitize` option for 'subject' atom
     @@ Commit message
      
          `subject:sanitize` - print sanitized subject line, suitable for a filename.
      
     +    e.g.
     +    %(subject): "the subject line"
     +    %(subject:sanitize): "the-subject-line"
     +
          Mentored-by: Christian Couder <chriscool@tuxfamily.org>
          Mentored-by: Heba Waly <heba.waly@gmail.com>
          Signed-off-by: Hariom Verma <hariom18599@gmail.com>
      
     + ## Documentation/git-for-each-ref.txt ##
     +@@ Documentation/git-for-each-ref.txt: contents:subject::
     + 	The first paragraph of the message, which typically is a
     + 	single line, is taken as the "subject" of the commit or the
     + 	tag message.
     ++	Instead of `contents:subject`, field `subject` can also be used to
     ++	obtain same results. `:sanitize` can be appended to `subject` for
     ++	subject line suitable for filename.
     + 
     + contents:body::
     + 	The remainder of the commit or the tag message that follows
     +
       ## ref-filter.c ##
      @@
       #include "worktree.h"
     @@ ref-filter.c: static struct used_atom {
       			unsigned int nobracket : 1, push : 1, push_remote : 1;
       		} remote_ref;
       		struct {
     --			enum { C_BARE, C_BODY, C_BODY_DEP, C_LINES, C_SIG, C_SUB, C_TRAILERS } option;
     -+			enum { C_BARE, C_BODY, C_BODY_DEP, C_LINES, C_SIG, C_SUB, C_SUB_SANITIZE, C_TRAILERS } option;
     +-			enum { C_BARE, C_BODY, C_BODY_DEP, C_LENGTH,
     +-			       C_LINES, C_SIG, C_SUB, C_TRAILERS } option;
     ++			enum { C_BARE, C_BODY, C_BODY_DEP, C_LENGTH, C_LINES,
     ++			       C_SIG, C_SUB, C_SUB_SANITIZE, C_TRAILERS } option;
       			struct process_trailer_options trailer_opts;
       			unsigned int nlines;
       		} contents;
     @@ ref-filter.c: static int body_atom_parser(const struct ref_format *format, struc
       {
      -	if (arg)
      -		return strbuf_addf_ret(err, -1, _("%%(subject) does not take arguments"));
     -+	if (arg) {
     -+		if (!strcmp(arg, "sanitize")) {
     -+			atom->u.contents.option = C_SUB_SANITIZE;
     -+			return 0;
     -+		} else {
     -+			return strbuf_addf_ret(err, -1, _("unrecognized %%(subject) argument: %s"), arg);
     -+		}
     -+	}
     - 	atom->u.contents.option = C_SUB;
     +-	atom->u.contents.option = C_SUB;
     ++	if (!arg)
     ++		atom->u.contents.option = C_SUB;
     ++	else if (!strcmp(arg, "sanitize"))
     ++		atom->u.contents.option = C_SUB_SANITIZE;
     ++	else
     ++		return strbuf_addf_ret(err, -1, _("unrecognized %%(subject) argument: %s"), arg);
       	return 0;
       }
     + 
      @@ ref-filter.c: static void grab_sub_body_contents(struct atom_value *val, int deref, void *buf)
     - 		struct used_atom *atom = &used_atom[i];
     - 		const char *name = atom->name;
     - 		struct atom_value *v = &val[i];
     -+
     - 		if (!!deref != (*name == '*'))
       			continue;
       		if (deref)
       			name++;
     - 		if (strcmp(name, "subject") &&
     -+		    strcmp(name, "subject:sanitize") &&
     - 		    strcmp(name, "body") &&
     +-		if (strcmp(name, "subject") &&
     +-		    strcmp(name, "body") &&
     ++		if (strcmp(name, "body") &&
     ++		    !starts_with(name, "subject") &&
       		    !starts_with(name, "trailers") &&
       		    !starts_with(name, "contents"))
     + 			continue;
      @@ ref-filter.c: static void grab_sub_body_contents(struct atom_value *val, int deref, void *buf)
       
       		if (atom->u.contents.option == C_SUB)
     @@ ref-filter.c: static void grab_sub_body_contents(struct atom_value *val, int der
      +			v->s = strbuf_detach(&sb, NULL);
      +		} else if (atom->u.contents.option == C_BODY_DEP)
       			v->s = xmemdupz(bodypos, bodylen);
     - 		else if (atom->u.contents.option == C_BODY)
     - 			v->s = xmemdupz(bodypos, nonsiglen);
     + 		else if (atom->u.contents.option == C_LENGTH)
     + 			v->s = xstrfmt("%"PRIuMAX, (uintmax_t)strlen(subpos));
      
       ## t/t6300-for-each-ref.sh ##
      @@ t/t6300-for-each-ref.sh: test_atom head taggerdate ''

-- 
gitgitgadget

  parent reply	other threads:[~2020-08-05 21:51 UTC|newest]

Thread overview: 51+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-07-27 20:43 [PATCH 0/5] " Hariom Verma via GitGitGadget
2020-07-27 20:43 ` [PATCH 1/5] ref-filter: support different email formats Hariom Verma via GitGitGadget
2020-07-27 22:51   ` Junio C Hamano
2020-07-28 20:31     ` Hariom verma
2020-07-28 20:43       ` Junio C Hamano
2020-07-28 13:58   ` Đoàn Trần Công Danh
2020-07-28 16:45     ` Junio C Hamano
2020-07-27 20:43 ` [PATCH 2/5] ref-filter: add `short` option for 'tree' and 'parent' Hariom Verma via GitGitGadget
2020-07-27 23:21   ` Junio C Hamano
2020-07-27 20:43 ` [PATCH 3/5] pretty: refactor `format_sanitized_subject()` Hariom Verma via GitGitGadget
2020-07-27 20:43 ` [PATCH 4/5] format-support: move `format_sanitized_subject()` from pretty Hariom Verma via GitGitGadget
2020-07-27 20:43 ` [PATCH 5/5] ref-filter: add `sanitize` option for 'subject' atom Hariom Verma via GitGitGadget
2020-08-05 21:51 ` Hariom Verma via GitGitGadget [this message]
2020-08-05 21:51   ` [PATCH v2 1/9] ref-filter: support different email formats Hariom Verma via GitGitGadget
2020-08-05 21:51   ` [PATCH v2 2/9] ref-filter: refactor `grab_objectname()` Hariom Verma via GitGitGadget
2020-08-05 21:51   ` [PATCH v2 3/9] ref-filter: modify error messages in `grab_objectname()` Hariom Verma via GitGitGadget
2020-08-05 21:51   ` [PATCH v2 4/9] ref-filter: rename `objectname` related functions and fields Hariom Verma via GitGitGadget
2020-08-05 21:51   ` [PATCH v2 5/9] ref-filter: add `short` modifier to 'tree' atom Hariom Verma via GitGitGadget
2020-08-05 21:51   ` [PATCH v2 6/9] ref-filter: add `short` modifier to 'parent' atom Hariom Verma via GitGitGadget
2020-08-05 21:51   ` [PATCH v2 7/9] pretty: refactor `format_sanitized_subject()` Hariom Verma via GitGitGadget
2020-08-05 21:51   ` [PATCH v2 8/9] format-support: move `format_sanitized_subject()` from pretty Hariom Verma via GitGitGadget
2020-08-05 21:51   ` [PATCH v2 9/9] ref-filter: add `sanitize` option for 'subject' atom Hariom Verma via GitGitGadget
2020-08-05 22:04   ` [PATCH v2 0/9] [GSoC] Improvements to ref-filter Junio C Hamano
2020-08-06 13:47     ` Hariom verma
2020-08-17 18:10   ` [PATCH v3 0/9] [Resend][GSoC] " Hariom Verma via GitGitGadget
2020-08-17 18:10     ` [PATCH v3 1/9] ref-filter: support different email formats Hariom Verma via GitGitGadget
2020-08-17 18:10     ` [PATCH v3 2/9] ref-filter: refactor `grab_objectname()` Hariom Verma via GitGitGadget
2020-08-17 18:10     ` [PATCH v3 3/9] ref-filter: modify error messages in `grab_objectname()` Hariom Verma via GitGitGadget
2020-08-17 18:10     ` [PATCH v3 4/9] ref-filter: rename `objectname` related functions and fields Hariom Verma via GitGitGadget
2020-08-17 18:10     ` [PATCH v3 5/9] ref-filter: add `short` modifier to 'tree' atom Hariom Verma via GitGitGadget
2020-08-17 18:10     ` [PATCH v3 6/9] ref-filter: add `short` modifier to 'parent' atom Hariom Verma via GitGitGadget
2020-08-17 18:10     ` [PATCH v3 7/9] pretty: refactor `format_sanitized_subject()` Hariom Verma via GitGitGadget
2020-08-17 19:29       ` Junio C Hamano
2020-08-19 13:36         ` Hariom verma
2020-08-19 16:01           ` Junio C Hamano
2020-08-19 16:08             ` Junio C Hamano
2020-08-20 17:33               ` Hariom verma
2020-08-20 17:27             ` Hariom verma
2020-08-17 18:10     ` [PATCH v3 8/9] format-support: move `format_sanitized_subject()` from pretty Hariom Verma via GitGitGadget
2020-08-17 19:33       ` Junio C Hamano
2020-08-17 18:10     ` [PATCH v3 9/9] ref-filter: add `sanitize` option for 'subject' atom Hariom Verma via GitGitGadget
2020-08-17 19:37     ` [PATCH v3 0/9] [Resend][GSoC] Improvements to ref-filter Junio C Hamano
2020-08-21 21:41     ` [PATCH v4 0/8] [GSoC] " Hariom Verma via GitGitGadget
2020-08-21 21:41       ` [PATCH v4 1/8] ref-filter: support different email formats Hariom Verma via GitGitGadget
2020-08-21 21:41       ` [PATCH v4 2/8] ref-filter: refactor `grab_objectname()` Hariom Verma via GitGitGadget
2020-08-21 21:41       ` [PATCH v4 3/8] ref-filter: modify error messages in `grab_objectname()` Hariom Verma via GitGitGadget
2020-08-21 21:41       ` [PATCH v4 4/8] ref-filter: rename `objectname` related functions and fields Hariom Verma via GitGitGadget
2020-08-21 21:41       ` [PATCH v4 5/8] ref-filter: add `short` modifier to 'tree' atom Hariom Verma via GitGitGadget
2020-08-21 21:41       ` [PATCH v4 6/8] ref-filter: add `short` modifier to 'parent' atom Hariom Verma via GitGitGadget
2020-08-21 21:41       ` [PATCH v4 7/8] pretty: refactor `format_sanitized_subject()` Hariom Verma via GitGitGadget
2020-08-21 21:41       ` [PATCH v4 8/8] ref-filter: add `sanitize` option for 'subject' atom Hariom Verma via GitGitGadget

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

  List information: http://vger.kernel.org/majordomo-info.html

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

  git send-email \
    --in-reply-to=pull.684.v2.git.1596664305.gitgitgadget@gmail.com \
    --to=gitgitgadget@gmail.com \
    --cc=git@vger.kernel.org \
    --cc=hariom18599@gmail.com \
    --subject='Re: [PATCH v2 0/9] [GSoC] Improvements to ref-filter' \
    /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

git@vger.kernel.org list mirror (unofficial, one of many)

This inbox may be cloned and mirrored by anyone:

	git clone --mirror https://public-inbox.org/git
	git clone --mirror http://ou63pmih66umazou.onion/git
	git clone --mirror http://czquwvybam4bgbro.onion/git
	git clone --mirror http://hjrcffqmbrq6wope.onion/git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V1 git git/ https://public-inbox.org/git \
		git@vger.kernel.org
	public-inbox-index git

Example config snippet for mirrors.
Newsgroups are available over NNTP:
	nntp://news.public-inbox.org/inbox.comp.version-control.git
	nntp://7fh6tueqddpjyxjmgtdiueylzoqt6pt7hec3pukyptlmohoowvhde4yd.onion/inbox.comp.version-control.git
	nntp://ie5yzdi7fg72h7s4sdcztq5evakq23rdt33mfyfcddc5u3ndnw24ogqd.onion/inbox.comp.version-control.git
	nntp://4uok3hntl7oi7b4uf4rtfwefqeexfzil2w6kgk2jn5z2f764irre7byd.onion/inbox.comp.version-control.git
	nntp://news.gmane.io/gmane.comp.version-control.git
 note: .onion URLs require Tor: https://www.torproject.org/

code repositories for project(s) associated with this inbox:

	https://80x24.org/mirrors/git.git

AGPL code for this site: git clone https://public-inbox.org/public-inbox.git