All of lore.kernel.org
 help / color / mirror / Atom feed
From: Karthik Nayak <karthik.188@gmail.com>
To: git@vger.kernel.org
Cc: jacob.keller@gmail.com, gitster@pobox.com,
	Karthik Nayak <karthik.188@gmail.com>,
	Karthik Nayak <Karthik.188@gmail.com>
Subject: [PATCH v10 10/20] ref-filter: introduce refname_atom_parser_internal()
Date: Tue, 10 Jan 2017 14:19:43 +0530	[thread overview]
Message-ID: <20170110084953.15890-11-Karthik.188@gmail.com> (raw)
In-Reply-To: <20170110084953.15890-1-Karthik.188@gmail.com>

From: Karthik Nayak <karthik.188@gmail.com>

Since there are multiple atoms which print refs ('%(refname)',
'%(symref)', '%(push)', '%(upstream)'), it makes sense to have a common
ground for parsing them. This would allow us to share implementations of
the atom modifiers between these atoms.

Introduce refname_atom_parser_internal() to act as a common parsing
function for ref printing atoms. This would eventually be used to
introduce refname_atom_parser() and symref_atom_parser() and also be
internally used in remote_ref_atom_parser().

Helped-by: Jeff King <peff@peff.net>
Signed-off-by: Karthik Nayak <Karthik.188@gmail.com>
---
 ref-filter.c | 21 +++++++++++++++++++++
 1 file changed, 21 insertions(+)

diff --git a/ref-filter.c b/ref-filter.c
index e98ef4bb6..c1ebc406c 100644
--- a/ref-filter.c
+++ b/ref-filter.c
@@ -32,6 +32,11 @@ struct if_then_else {
 		condition_satisfied : 1;
 };
 
+struct refname_atom {
+	enum { R_NORMAL, R_SHORT, R_STRIP } option;
+	unsigned int strip;
+};
+
 /*
  * An atom is a valid field atom listed below, possibly prefixed with
  * a "*" to denote deref_tag().
@@ -64,6 +69,7 @@ static struct used_atom {
 			enum { O_FULL, O_LENGTH, O_SHORT } option;
 			unsigned int length;
 		} objectname;
+		struct refname_atom refname;
 	} u;
 } *used_atom;
 static int used_atom_cnt, need_tagged, need_symref;
@@ -77,6 +83,21 @@ static void color_atom_parser(struct used_atom *atom, const char *color_value)
 		die(_("unrecognized color: %%(color:%s)"), color_value);
 }
 
+static void refname_atom_parser_internal(struct refname_atom *atom,
+					 const char *arg, const char *name)
+{
+	if (!arg)
+		atom->option = R_NORMAL;
+	else if (!strcmp(arg, "short"))
+		atom->option = R_SHORT;
+	else if (skip_prefix(arg, "strip=", &arg)) {
+		atom->option = R_STRIP;
+		if (strtoul_ui(arg, 10, &atom->strip) || atom->strip <= 0)
+			die(_("positive value expected refname:strip=%s"), arg);
+	} else
+		die(_("unrecognized %%(%s) argument: %s"), name, arg);
+}
+
 static void remote_ref_atom_parser(struct used_atom *atom, const char *arg)
 {
 	struct string_list params = STRING_LIST_INIT_DUP;
-- 
2.11.0


  parent reply	other threads:[~2017-01-10  8:49 UTC|newest]

Thread overview: 28+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-01-10  8:49 [PATCH v10 00/20] port branch.c to use ref-filter's printing options Karthik Nayak
2017-01-10  8:49 ` [PATCH v10 01/20] ref-filter: implement %(if), %(then), and %(else) atoms Karthik Nayak
2017-01-10  8:49 ` [PATCH v10 02/20] ref-filter: include reference to 'used_atom' within 'atom_value' Karthik Nayak
2017-01-10  8:49 ` [PATCH v10 03/20] ref-filter: implement %(if:equals=<string>) and %(if:notequals=<string>) Karthik Nayak
2017-01-10 20:45   ` Junio C Hamano
2017-01-14 10:02     ` Karthik Nayak
2017-01-10  8:49 ` [PATCH v10 04/20] ref-filter: modify "%(objectname:short)" to take length Karthik Nayak
2017-01-10  8:49 ` [PATCH v10 05/20] ref-filter: move get_head_description() from branch.c Karthik Nayak
2017-01-10  8:49 ` [PATCH v10 06/20] ref-filter: introduce format_ref_array_item() Karthik Nayak
2017-01-10  8:49 ` [PATCH v10 07/20] ref-filter: make %(upstream:track) prints "[gone]" for invalid upstreams Karthik Nayak
2017-01-10  8:49 ` [PATCH v10 08/20] ref-filter: add support for %(upstream:track,nobracket) Karthik Nayak
2017-01-10  8:49 ` [PATCH v10 09/20] ref-filter: make "%(symref)" atom work with the ':short' modifier Karthik Nayak
2017-01-10  8:49 ` Karthik Nayak [this message]
2017-01-10  8:49 ` [PATCH v10 11/20] ref-filter: introduce refname_atom_parser() Karthik Nayak
2017-01-10  8:49 ` [PATCH v10 12/20] ref-filter: make remote_ref_atom_parser() use refname_atom_parser_internal() Karthik Nayak
2017-01-10  8:49 ` [PATCH v10 13/20] ref-filter: rename the 'strip' option to 'lstrip' Karthik Nayak
2017-01-10  8:49 ` [PATCH v10 14/20] ref-filter: Do not abruptly die when using the 'lstrip=<N>' option Karthik Nayak
2017-01-10  8:49 ` [PATCH v10 15/20] ref-filter: modify the 'lstrip=<N>' option to work with negative '<N>' Karthik Nayak
2017-01-10  8:49 ` [PATCH v10 16/20] ref-filter: add an 'rstrip=<N>' option to atoms which deal with refnames Karthik Nayak
2017-01-10  8:49 ` [PATCH v10 17/20] ref-filter: allow porcelain to translate messages in the output Karthik Nayak
2017-01-10  8:49 ` [PATCH v10 18/20] branch, tag: use porcelain output Karthik Nayak
2017-01-10  8:49 ` [PATCH v10 19/20] branch: use ref-filter printing APIs Karthik Nayak
2017-01-11 23:47   ` Jacob Keller
2017-01-14 10:01     ` Karthik Nayak
2017-01-15  5:51       ` Jacob Keller
2017-01-10  8:49 ` [PATCH v10 20/20] branch: implement '--format' option Karthik Nayak
2017-01-10 20:51 ` [PATCH v10 00/20] port branch.c to use ref-filter's printing options Junio C Hamano
2017-01-14 10:03   ` Karthik Nayak

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=20170110084953.15890-11-Karthik.188@gmail.com \
    --to=karthik.188@gmail.com \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    --cc=jacob.keller@gmail.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.