Taylor Blau <[email protected]> writes:
> I re-read your note and understand more clearly now what your suggestion
> is. To ensure that we're in agreement, do you mean:
>
> 1. '--column -v' will _never_ give a column, but will never die(),
> either
No, I don't.
> 2. '--column --[and | or | not]' will never give a column, but will
> also never die(), either.
No, I don't.
If a file does not have substring "foo", then
git grep -v -e foo file
git grep --not -e foo file
would hit all lines, just like
git grep -e '.*' file
does.
I would expect that all of these
git grep --column/-o -v -e foo file
git grep --column/-o --not -e foo file
git grep --column/-o -e '.*' file
give the same output, which is what we would get if we consider the
hit from "choose lines that lack 'foo'" on a line without 'foo' is
caused by the entire contents on the line. That is in line with
"choose lines that has anything (including nothing)" aka ".*" would
result in the entire line being reported via -o. The byte offset of
the first hit on such a line reported by --column is also 1, and
that is a good and real answer to the question "git grep --column/-o"
can give.
In an earlier message, you sounded like you do not think "we did not
have 'foo' on that line, and that is why we are emitting because we
are operating under -v" lack a definite answer for --column, but I
think you are wrong. "On the entire line, we didn't find 'foo'
anywhere" is good enough reason for me to make the answer "the
entire line contributed to this hit" a definite one.
Exactly the same applies for "git grep --not -e foo".
When "git grep -e bar [--or] --not -e foo" shows a line because the
line has 'bar' on it, we have --column that points at 'b' of the
first 'bar' on the line. When it shows a line because the line has
neither 'bar' or 'foo', then "--not -e foo" part would give a
definite "the entire line contributed to this decision that it does
not have 'foo'".