Jeff King <peff@xxxxxxxx> writes: >> As the intent for adding the "--stdin" option to any subcommand has >> always been "we may need to feed many many things, that may bust the >> command line length limit, hence we let you feed these things from >> the standard input, but otherwise there should be no change in >> behaviour or semantics", when the behaviour of command line and >> "--stdin" differ, it is a bug in the latter. > > Agreed. It also helps in this case that the command-line behavior is > sensible and the --stdin one is not. :) > > I think the solution is probably something like: You beat me to it while I was wondering what to do between the local got_rev_arg variable and the revs->rev_input_given field. > diff --git a/revision.c b/revision.c > index 96630e3186..f5bbefa091 100644 > --- a/revision.c > +++ b/revision.c > @@ -2099,12 +2099,13 @@ static void read_pathspec_from_stdin(struct strbuf *sb, > strvec_push(prune, sb->buf); > } > > -static void read_revisions_from_stdin(struct rev_info *revs, > - struct strvec *prune) > +static int read_revisions_from_stdin(struct rev_info *revs, > + struct strvec *prune) > { > struct strbuf sb; > int seen_dashdash = 0; > int save_warning; > + int got_rev_arg = 0; > > save_warning = warn_on_object_refname_ambiguity; > warn_on_object_refname_ambiguity = 0; > @@ -2124,12 +2125,14 @@ static void read_revisions_from_stdin(struct rev_info *revs, > if (handle_revision_arg(sb.buf, revs, 0, > REVARG_CANNOT_BE_FILENAME)) > die("bad revision '%s'", sb.buf); > + got_rev_arg = 1; > } > if (seen_dashdash) > read_pathspec_from_stdin(&sb, prune); > > strbuf_release(&sb); > warn_on_object_refname_ambiguity = save_warning; > + return got_rev_arg; > } > > static void add_grep(struct rev_info *revs, const char *ptn, enum grep_pat_token what) > @@ -2754,7 +2757,8 @@ int setup_revisions(int argc, const char **argv, struct rev_info *revs, struct s > } > if (revs->read_from_stdin++) > die("--stdin given twice?"); > - read_revisions_from_stdin(revs, &prune_data); > + if (read_revisions_from_stdin(revs, &prune_data)) > + got_rev_arg = 1; > continue; > } > > > Possibly it would make sense to push that flag into rev_info, though, > and let handle_revision_arg() set it. That would fix this bug and > prevent similar ones in other code paths (though we're not likely to get > revisions from anywhere else, I suppose). > > -Peff