On Tue, Feb 16, 2016 at 05:49:19PM -0500, Eric Sunshine wrote:
> On Tue, Feb 16, 2016 at 5:34 PM, Jeff King <[email protected]> wrote:
> > On Tue, Feb 16, 2016 at 04:09:53PM -0500, Eric Sunshine wrote:
> >> My initial reaction was negative due to the heavy review burden this
> >> series has demanded thus far, however, my mind was changing even as I
> >> composed the above response. In retrospect, I think I'd be okay seeing
> >> a v6, for the following reasons:
> >>
> >> - I already ended up reviewing the the suggested new changes pretty
> >> closely as a side-effect of reading your proposal.
> >>
> >> - It would indeed be nice to avoid introducing
> >> strbuf_split_str_omit_term() in the first place; thus one less thing
> >> to worry about if someone ever takes on the task of retiring the
> >> strbuf_split interface.
> >>
> >> - It should be only a minimal amount of work for Karthik, thus
> >> turnaround time should be short.
> >>
> >> So, I think I'm fine with it, if Karthik is game.
> >
> > I started to write up a commit message for my proposed change. But it
> > did make me think of a counter-argument. Right now we parse
> > "%(align:10,middle)" but do not allow "%(align: 10, middle)".
> >
> > Should we? Or perhaps: might we? If the answer is yes, we are likely
> > better off with strbuf_split, because then we are only a strbuf_trim()
> > away from making that work.
>
> I also considered the issue of embedded whitespace very early on when
> reading your initial proposal, but didn't mention anything about it
> due to a vague recollection from one of the early reviews (or possibly
> a review of one of Karthik's other patch series) of someone (possibly
> Junio) saying or implying that embedded whitespace would not be
> supported. Unfortunately, I can't locate that message (assuming it
> even exists and wasn't a figment of my imagination).
Yeah, I could not find any relevant reference (though I didn't spend all
that long digging).
For reference, I rebuilt Karthik's series on top of my proposal, and the
changes are fairly minor. I pushed it to:
git://github.com/peff/git.git jk/tweaked-ref-filter
The tbdiff is below. Hopefully having that done makes it easier to
decide based on the outcome, rather than the pain of rebasing. :)
To be honest, though, I am now on the fence, considering the possible
whitespace issue.
1: 92de9c7 < --: ------- strbuf: introduce strbuf_split_str_omit_term()
2: 4845dc5 < --: ------- ref-filter: use strbuf_split_str_omit_term()
--: ------- > 1: 29177cc ref-filter: use string_list_split over strbuf_split
3: 040e9ce = 2: ed284bc ref-filter: bump 'used_atom' and related code to
the top
4: c7eb061 = 3: 2a99777 ref-filter: introduce struct used_atom
5: c3e24cf = 4: b18f23b ref-filter: introduce parsing functions for each
valid atom
6: 0b7fe83 = 5: e5221cc ref-filter: introduce color_atom_parser()
7: ffb3afe ! 6: 454af9c ref-filter: introduce parse_align_position()
@@ -32,21 +32,21 @@
const char *name;
cmp_type cmp_type;
@@
- align->position = ALIGN_LEFT;
-
- while (*s) {
+ string_list_split(¶ms, valp, ',', -1);
+ for (i = 0; i < params.nr; i++) {
+ const char *s = params.items[i].string;
+ int position;
+
- if (!strtoul_ui(s[0]->buf, 10, (unsigned int
*)&width))
+ if (!strtoul_ui(s, 10, (unsigned int *)&width))
;
-- else if (!strcmp(s[0]->buf, "left"))
+- else if (!strcmp(s, "left"))
- align->position = ALIGN_LEFT;
-- else if (!strcmp(s[0]->buf, "right"))
+- else if (!strcmp(s, "right"))
- align->position = ALIGN_RIGHT;
-- else if (!strcmp(s[0]->buf, "middle"))
+- else if (!strcmp(s, "middle"))
- align->position = ALIGN_MIDDLE;
-+ else if ((position =
parse_align_position(s[0]->buf)) >= 0)
++ else if ((position = parse_align_position(s))
>= 0)
+ align->position = position;
else
- die(_("improper format entered
align:%s"), s[0]->buf);
- s++;
+ die(_("improper format entered
align:%s"), s);
+ }
8: 0f0e596 ! 7: 0779954 ref-filter: introduce align_atom_parser()
@@ -43,18 +43,19 @@
+static void align_atom_parser(struct used_atom *atom, const char *arg)
+{
+ struct align *align = &atom->u.align;
-+ struct strbuf **v, **to_free;
++ struct string_list params = STRING_LIST_INIT_DUP;
++ int i;
+ unsigned int width = ~0U;
+
+ if (!arg)
+ die(_("expected format: %%(align:<width>,<position>)"));
-+ v = to_free = strbuf_split_str_omit_term(arg, ',', 0);
+
+ align->position = ALIGN_LEFT;
+
-+ while (*v) {
++ string_list_split(¶ms, arg, ',', -1);
++ for (i = 0; i < params.nr; i++) {
++ const char *s = params.items[i].string;
+ int position;
-+ const char *s = v[0]->buf;
+
+ if (!strtoul_ui(s, 10, &width))
+ ;
@@ -62,13 +63,12 @@
+ align->position = position;
+ else
+ die(_("unrecognized %%(align) argument: %s"), s);
-+ v++;
+ }
+
+ if (width == ~0U)
+ die(_("positive width expected with the %%(align) atom"));
+ align->width = width;
-+ strbuf_list_free(to_free);
++ string_list_clear(¶ms, 0);
+}
+
static struct {
@@ -130,32 +130,32 @@
continue;
- } else if (match_atom_name(name, "align", &valp)) {
- struct align *align = &v->u.align;
-- struct strbuf **s, **to_free;
+- struct string_list params = STRING_LIST_INIT_DUP;
+- int i;
- int width = -1;
-
- if (!valp)
- die(_("expected format:
%%(align:<width>,<position>)"));
-
-- s = to_free = strbuf_split_str_omit_term(valp, ',', 0);
--
- align->position = ALIGN_LEFT;
-
-- while (*s) {
+- string_list_split(¶ms, valp, ',', -1);
+- for (i = 0; i < params.nr; i++) {
+- const char *s = params.items[i].string;
- int position;
-
-- if (!strtoul_ui(s[0]->buf, 10, (unsigned int
*)&width))
+- if (!strtoul_ui(s, 10, (unsigned int *)&width))
- ;
-- else if ((position =
parse_align_position(s[0]->buf)) >= 0)
+- else if ((position = parse_align_position(s))
>= 0)
- align->position = position;
- else
-- die(_("improper format entered
align:%s"), s[0]->buf);
-- s++;
+- die(_("improper format entered
align:%s"), s);
- }
-
- if (width < 0)
- die(_("positive width expected with the
%%(align) atom"));
- align->width = width;
-- strbuf_list_free(to_free);
+- string_list_clear(¶ms, 0);
+ } else if (starts_with(name, "align")) {
+ v->u.align = atom->u.align;
v->handler = align_atom_handler;
9: d3dc384 ! 8: 792c89a ref-filter: align: introduce long-form syntax
@@ -45,8 +45,8 @@
--- a/ref-filter.c
+++ b/ref-filter.c
@@
+ const char *s = params.items[i].string;
int position;
- const char *s = v[0]->buf;
- if (!strtoul_ui(s, 10, &width))
+ if (skip_prefix(s, "position=", &s)) {
10: 3ae28b5 = 9: 019fee7 ref-filter: introduce remote_ref_atom_parser()
11: 06c70af = 10: f6e4f5a ref-filter: introduce contents_atom_parser()
12: c9db181 = 11: 0a84b70 ref-filter: introduce objectname_atom_parser()
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html