revision: make pseudo-opt flags read via stdin behave consistently
When reading revisions from stdin via git-rev-list(1)'s --stdin
option
then these revisions never honor flags like --not
which have been
passed on the command line. Thus, an invocation like e.g. git rev-list --all --not --stdin
will not treat all revisions read from stdin as
uninteresting. While this behaviour may be surprising to a user, it's
been this way ever since it has been introduced via 42cabc34 (Teach
rev-list an option to read revs from the standard input., 2006-09-05).
With that said, in c40f0b78 (revision: handle pseudo-opts in --stdin
mode, 2023-06-15) we have introduced a new mode to read pseudo opts from
standard input where this behaviour is a lot more confusing. If you pass
--not
via stdin, it will:
- Influence subsequent revisions or pseudo-options passed on the
command line.
- Influence pseudo-options passed via standard input.
- _Not_ influence normal revisions passed via standard input.
This behaviour is extremely inconsistent and bound to cause confusion.
While it would be nice to retroactively change the behaviour for how
--not
and --stdin
behave together, chances are quite high that this
would break existing scripts that expect the current behaviour that has
been around for many years by now. This is thus not really a viable
option to explore to fix the inconsistency.
Instead, we change the behaviour of how pseudo-opts read via standard
input influence the flags such that the effect is fully localized. With
this change, when reading --not
via standard input, it will:
- _Not_ influence subsequent revisions or pseudo-options passed on the command
line, which is a change in behaviour.
- Influence pseudo-options passed via standard input.
- Influence normal revisions passed via standard input, which is a
change in behaviour.
Thus, all flags read via standard input are fully self-contained to that standard input, only.
While this is a breaking change as well, the behaviour has only been recently introduced with Git v2.42.0. Furthermore, the current behaviour can be regarded as a simple bug. With that in mind it feels like the right thing to do retroactively change it and make the behaviour sane.
Signed-off-by: Patrick Steinhardt ps@pks.im Reported-by: Christian Couder christian.couder@gmail.com