On 2015-10-16 at 19:07:34 +0200, Junio C Hamano <gitster@xxxxxxxxx> wrote: > Tobias Klauser <tklauser@xxxxxxxxxx> writes: > > > Use parse-options to parse command-line options instead of a > > hand-crafted implementation. > > > > This is a preparatory patch to simplify the introduction of the > > --count-lines option in a follow-up patch. > > The second paragraph is probably of much lessor importance than one > thing you forgot to mention: the users can now use a unique prefix > of the option and say "stripspace --comment". I didn't even know about that feature, but now that you've mentioned it I will certainly make use of it more in the future :) And of course, I'll adjust the commit message accordingly for v3. > > +enum stripspace_mode { > > + STRIP_DEFAULT = 0, > > + STRIP_COMMENTS, > > + COMMENT_LINES > > +}; > > > > int cmd_stripspace(int argc, const char **argv, const char *prefix) > > { > > struct strbuf buf = STRBUF_INIT; > > - int strip_comments = 0; > > - enum { INVAL = 0, STRIP_SPACE = 1, COMMENT_LINES = 2 } mode = STRIP_SPACE; > > - > > - if (argc == 2) { > > - if (!strcmp(argv[1], "-s") || > > - !strcmp(argv[1], "--strip-comments")) { > > - strip_comments = 1; > > - } else if (!strcmp(argv[1], "-c") || > > - !strcmp(argv[1], "--comment-lines")) { > > - mode = COMMENT_LINES; > > - } else { > > - mode = INVAL; > > - } > > - } else if (argc > 1) { > > - mode = INVAL; > > - } > > - > > - if (mode == INVAL) > > - usage(usage_msg); > > When given "git stripspace -s blorg", we used to set mode to INVAL > and then showed the correct usage. But we no longer have a check > that corresponds to the old INVAL thing, do we? Perhaps check argc > to detect presence of an otherwise ignored non-option argument > immediately after parse_options() returns? Agreed, we should check it. I'll go with the implementation you suggested in the follow-up message. > > - if (strip_comments || mode == COMMENT_LINES) > > + enum stripspace_mode mode = STRIP_DEFAULT; > > + > > + const struct option options[] = { > > + OPT_CMDMODE('s', "strip-comments", &mode, > > + N_("skip and remove all lines starting with comment character"), > > + STRIP_COMMENTS), > > + OPT_CMDMODE('c', "comment-lines", &mode, > > + N_("prepend comment character and blank to each line"), > > + COMMENT_LINES), > > + OPT_END() > > + }; > > + > > + argc = parse_options(argc, argv, prefix, options, stripspace_usage, > > + PARSE_OPT_KEEP_DASHDASH); > > What is the point of keep-dashdash here? Likewise, it shouldn't be there as in your follow-up patch. -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html