git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH v5 09/16] ref-filter: introduce refname_atom_parser_internal()

From
Karthik Nayak <karthik.188@gmail.com>
Date
Apr 22, 2016, 19:04 UTC
Message-ID
<1461351847-22903-10-git-send-email-Karthik.188@gmail.com>
In-Reply-To
<1461351847-22903-1-git-send-email-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 083cc27..778fe02 100644
--- a/ref-filter.c
+++ b/ref-filter.c
@@ -30,6 +30,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().
@@ -62,6 +67,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;
@@ -75,6 +81,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.8.0
Previous: Karthik NayakNext: Karthik Nayak
Message 10 of 17 in “port branch.c to use ref-filter's printing options”
  1. 00/16 port branch.c to use ref-filter's printing optionsKarthik Nayak, Apr 22, 2016
  2. 01/16 ref-filter: include reference to 'used_atom' within 'atom_value'Karthik Nayak, Apr 22, 2016
  3. 02/16 ref-filter: implement %(if:equals=<string>) and %(if:notequals=<string>)Karthik Nayak, Apr 22, 2016
  4. 03/16 ref-filter: modify "%(objectname:short)" to take lengthKarthik Nayak, Apr 22, 2016
  5. 04/16 ref-filter: move get_head_description() from branch.cKarthik Nayak, Apr 22, 2016
  6. 05/16 ref-filter: introduce format_ref_array_item()Karthik Nayak, Apr 22, 2016
  7. 06/16 ref-filter: make %(upstream:track) prints "[gone]" for invalid upstreamsKarthik Nayak, Apr 22, 2016
  8. 07/16 ref-filter: add support for %(upstream:track,nobracket)Karthik Nayak, Apr 22, 2016
  9. 08/16 ref-filter: make "%(symref)" atom work with the ':short' modifierKarthik Nayak, Apr 22, 2016
  10. 09/16 ref-filter: introduce refname_atom_parser_internal()Karthik Nayak, Apr 22, 2016
  11. 10/16 ref-filter: introduce symref_atom_parser() and refname_atom_parser()Karthik Nayak, Apr 22, 2016
  12. 11/16 ref-filter: make remote_ref_atom_parser() use refname_atom_parser_internal()Karthik Nayak, Apr 22, 2016
  13. 12/16 ref-filter: add `:dir` and `:base` options for ref printing atomsKarthik Nayak, Apr 22, 2016
  14. 13/16 ref-filter: allow porcelain to translate messages in the outputKarthik Nayak, Apr 22, 2016
  15. 14/16 branch, tag: use porcelain outputKarthik Nayak, Apr 22, 2016
  16. 15/16 branch: use ref-filter printing APIsKarthik Nayak, Apr 22, 2016
  17. 16/16 branch: implement '--format' optionKarthik Nayak, Apr 22, 2016

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.