Re: Mismatched HEAD default behavior from git log
- From
Junio C Hamano <gitster@pobox.com>
- Date
- Aug 25, 2020, 19:51 UTC
- Message-ID
- <xmqq4koq1p28.fsf@gitster.c.googlers.com>
- In-Reply-To
- <20200825194619.GB1419759@coredump.intra.peff.net>
Jeff King <peff@peff.net> writes:
Show 11 quoted lines
>> 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.
Show 52 quoted lines
> 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