157
ATOM_IF,
158
ATOM_THEN,
159
ATOM_ELSE,
160
+ ATOM_REST,
161
};
162
163
/*
560
return 0;
561
}
562
563
+static int rest_atom_parser(struct ref_format *format, struct used_atom *atom,
564
+ const char *arg, struct strbuf *err)
565
+{
566
+ if (arg)
567
+ return strbuf_addf_ret(err, -1, _("%%(rest) does not take arguments"));
568
+ format->use_rest = 1;
569
+ return 0;
570
+}
571
+
572
static int head_atom_parser(struct ref_format *format, struct used_atom *atom,
573
const char *arg, struct strbuf *unused_err)
574
{
625
[ATOM_IF] = { "if", SOURCE_NONE, FIELD_STR, if_atom_parser },
626
[ATOM_THEN] = { "then", SOURCE_NONE },
627
[ATOM_ELSE] = { "else", SOURCE_NONE },
628
+ [ATOM_REST] = { "rest", SOURCE_NONE, FIELD_STR, rest_atom_parser },
629
/*
630
* Please update $__git_ref_fieldlist in git-completion.bash
631
* when you add new atoms
1003
return NULL;
1004
}
1005
1006
+static int reject_atom(enum atom_type atom_type)
1007
+{
1008
+ return atom_type == ATOM_REST;
1009
+}
1010
+
1011
/*
1012
* Make sure the format string is well formed, and parse out
1013
* the used atoms.
1028
at = parse_ref_filter_atom(format, sp + 2, ep, &err);
1029
if (at < 0)
1030
die("%s", err.buf);
1031
+ if (reject_atom(used_atom[at].atom_type))
1032
+ die(_("this command reject atom %%(%.*s)"), (int)(ep - sp - 2), sp + 2);
1033
1034
if ((format->quote_style == QUOTE_PYTHON ||
1035
format->quote_style == QUOTE_SHELL ||
1949
v->handler = else_atom_handler;
1950
v->s = xstrdup("");
1951
continue;
1952
+ } else if (atom_type == ATOM_REST) {
1953
+ if (ref->rest)
1954
+ v->s = xstrdup(ref->rest);
1955
+ else
1956
+ v->s = xstrdup("");
1957
+ continue;
1958
} else
1959
continue;
1960
2172
2173
FLEX_ALLOC_STR(ref, refname, refname);
2174
oidcpy(&ref->objectname, oid);
2175
+ ref->rest = NULL;
2176
2177
return ref;
2178
}