On Mon, 23 Jun 2008, Johannes Schindelin wrote: > > Thinking about the recursive approach again, I came up with this POC: "recursive" is pointless. The problem with the current "parse_options()" is not that it's recursive (although that has been claimed multiple times!. The problem with parse_options() is that it's currently impossible to write something that handles _partial_ cases. Let me explain. Look at cmd_apply() in builtin-apply.c. Notice how it currently absolutely CANNOT sanely be turned into using "parse_options()", not because it needs any "recursive" handling, but simply because it wants to do *incremental* handling. It should be perfectly possible to change that argument loop from for (i = 1; i < argc; i++) { const char *arg = argv[i]; if (strcmp(arg, "-")) { .. handle <stdin> .. continue; } ... to doing something like this: for (;;) { const char *arg; argc = parse_options(argc, argv, options, usage, PARSE_OPT_STOP_AT_UNKNOWN); if (!argc) break; arg = argv[1]; argv++; argc--; if (strcmp(arg, "-")) { .. handle <stdin> .. continue; } ... or whatever. See? Could you handle that with callbacks? Of course. "You can solve any problem in computer science with an added level of indirection". But would it be simpler to convert existing users? Hell no. Could you handle the "recursive" use of parse_options() in builtin-blame.c by teaching it about recursion? Yes. But again, it's just _simpler_ to just teach parse_options() to parse the things it knows about, and leave the other things in place. Linus -- 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