Re: [BUG REPORT] Git does not correctly replay bisect log
- From
- Lukáš Krejčí <lskrejci@gmail.com>
- Date
- Dec 6, 2018, 17:30 UTC
- Message-ID
- <5ab4e3fb2e22097753bde7702e67d6ce924283a2.camel@gmail.com>
- In-Reply-To
- <CAP8UFD3VCzEdtfRqi_d2ibPtTN0uocGW+CshY_5m16TW1_YUdw@mail.gmail.com>
On Thu, 2018-12-06 at 17:31 +0100, Christian Couder wrote:
Show 10 quoted lines
> > When Git replays the bisect log, it only updates refs/bisect/bad, > > refs/bisect/good-*, refs/bisect/skip-* and reconstructs the log in > > .git/BISECT_LOG. After that check_good_are_ancestors_of_bad() verifies > > that all good commits are ancestors of the bad commit, and if not, the > > message "Bisecting: a merge base must be tested" is printed and the > > branch is switched to the merge base of the bad and all the good > > commits. > > I am not sure if you are talking about running `git bisect replay` or > sourcing the log in the above.
I am talking about `git bisect replay`. The shell script, as far as I can see, only updates the references (ref/bisect/*) and never checks if the revisions marked as 'good' are ancestors of the 'bad' one. Therefore, $GIT_DIR/BISECT_ANCESTORS_OK file is never created.
The first time the ancestors are checked is in the helper (`git-bisect- -help --next-all`) that has only limited information from refs/bisect*.