On Tue, Feb 14, 2017 at 10:56:21AM -0800, Brandon Williams wrote: > On 02/14, Jeff King wrote: > > - /* Check revs and then paths */ > > + /* > > + * We have to find "--" in a separate pass, because its presence > > + * influences how we will parse arguments that come before it. > > + */ > > + for (i = 0; i < argc; i++) { > > + if (!strcmp(argv[i], "--")) { > > + seen_dashdash = 1; > > + break; > > + } > > + } > > So this simply checks if "--" is an argument that was provided. This > then allows grep to know ahead of time how to handle revs/paths > preceding a "--" or in the absences of the "--". Seems sensible to me. By the way, we have to check again later for "--" when parsing the revs themselves. In theory you could set seen_dashdash to the offset of the dashdash in the array, and do the iteration more like: for (i = 0; i < dashdash_pos; i++) handle_rev(argv[i]); for (i = dashdash_pos + 1; i < argc; i++) handle_path(argv[i]); But our loops also handle the case where there is no "--" at all, and I think that approach ends up convoluting the logic. I didn't go very far in that direction before giving it up, though. -Peff