Re: An idea for "git bisect" and a GSoC enquiry
From: Jacopo Notarstefano <hidden>
Date: 2016-06-15 23:00:08
I am not sure I understand what you are trying to say. Are you saying that we should stick to good/bad and allow the users use nothing else, because allowing "fixed" will be confusing?
No! Pretty much the opposite of that. My idea (the "mark" subcommand) is to let people define their own pairs of labels to represent two opposite states of a commit. My point was that, if people choose pairs of words that are not opposites (such as "good" and "fixed") then it's their error, not something that git should attempt to fix or detect.
For a young tool or a feature, catering to perfect human perfectly is a good first goal---if it does not work well even for error-free human input, it would be worthless. However, its second goal after achieving that first goal ought to be to help imperfect humans.
Loved this.
Why do you think there is nothing it can do to help the user? Upon seeing "bad", the tool should at least be able to say "Excuse me, but you earlier said 'fixed' for one of the commits, so your vocabulary now is limited to 'fixed' and 'broken'". I think it also should be able to add "Did you mean to say 'broken'?", or even "I'd assume that you meant 'broken' and will continue."
I haven't said this, but this is pretty much what I had in mind. Suppose a user wants to find a bugfix between HEAD and HEAD~10, this is what she would do: $ git bisect start $ git bisect mark working HEAD $ git bisect mark broken HEAD~10 [git will now start bisecting as usual. Suppose that she is now at HEAD~5] $ git bisect mark bad -> Error: unrecognized label 'bad'. You previously used 'working' and 'fixed' to describe commits in this git bisect session. Please mark commits with one of these labels. I suppose that we could cater a little better to imperfect humans if we had two predefined parallel list of antonyms in which to search for given labels and infer whether they are positive or negative labels, but this is beyond the scope of my proposal.
I have always wondered if we can introduce a value neutral synonyms
to good and bad. For a bisect session, we care only about two
states: "still-X" and "no-longer-X" where X may be 'working' for the
normal bug-hunting bisection and 'broken' for the fix-hunting one.
$ git bisect still-working v1.6.0
$ git bisect no-longer-working v1.8.0
would be a way to find a bug that was introduced during v1.6.0..v1.8.0,
while
$ git bisect still-broken v1.6.0
$ git bisect no-longer-broken v1.8.0
would be a way to find a fix in the same range. The lowest-level
bisection machinery could just _ignore_ anything after still/no-longer
and do its thing, [...]This is remarkably similar to my proposal. Using "mark", these would be: $ git bisect mark working v1.6.0 $ git bisect mark not-working v1.8.0 and $ git bisect mark broken v1.6.0 $ git bisect mark not-broken v1.8.0
while the end-user facing layer could enforce,
once one commit is marked as still-X (or no-longer-X), that nothing
other than the same X is used, and issue an error message, perhaps
like this:
$ git bisect still-broken v1.6.0
$ git bisect still-working v1.8.0
error: You earlier marked v1.6.0 as "still-broken" and
error: are hunting for the first commit that can be marked
error: as "no-longer-broken". Say either "still-broken" or
error: "no-longer-broken", not "still-working".
and that can be done without having to understand that "broken" is
the opposite of "working" (of course if we understood that, we could
even offer to guess that the user meant "no-longer-broken" by
"still-working", but we do not want to go there).Here my proposal differs in that I have no way of knowing which label is good and which label is bad: I blindly accept two distinct labels and bisect with those. I gave an example of this behaviour above.