ref-filter: introduce refname_atom_parser_internal()
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> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Karthik Nayak committed
Jan 10, 2017 at 14:19 UTC
b180e6fe19ee4cf701d3a3478025dd7125fb0749
1 file changed
+21
ref-filter.c
+21
@@ -32,6 +32,11 @@ struct if_then_else {
32
condition_satisfied : 1;
33
};
34
35
+struct refname_atom {
36
+ enum { R_NORMAL, R_SHORT, R_STRIP } option;
37
+ unsigned int strip;
38
+};
39
+
40
/*
41
* An atom is a valid field atom listed below, possibly prefixed with
42
* a "*" to denote deref_tag().
@@ -64,6 +69,7 @@ static struct used_atom {
69
enum { O_FULL, O_LENGTH, O_SHORT } option;
70
unsigned int length;
71
} objectname;
72
+ struct refname_atom refname;
73
} u;
74
} *used_atom;
75
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)
83
die(_("unrecognized color: %%(color:%s)"), color_value);
84
}
85
86
+static void refname_atom_parser_internal(struct refname_atom *atom,
87
+ const char *arg, const char *name)
88
+{
89
+ if (!arg)
90
+ atom->option = R_NORMAL;
91
+ else if (!strcmp(arg, "short"))
92
+ atom->option = R_SHORT;
93
+ else if (skip_prefix(arg, "strip=", &arg)) {
94
+ atom->option = R_STRIP;
95
+ if (strtoul_ui(arg, 10, &atom->strip) || atom->strip <= 0)
96
+ die(_("positive value expected refname:strip=%s"), arg);
97
+ } else
98
+ die(_("unrecognized %%(%s) argument: %s"), name, arg);
99
+}
100
+
101
static void remote_ref_atom_parser(struct used_atom *atom, const char *arg)
102
{
103
struct string_list params = STRING_LIST_INIT_DUP;