Re: Reachability lists in git
- From
- Alan Stern <stern@rowland.harvard.edu>
- Date
- Nov 18, 2014, 21:16 UTC
- Message-ID
- <Pine.LNX.4.44L0.1411181610070.2918-100000@iolanthe.rowland.org>
- In-Reply-To
- <xmqqa93ousme.fsf@gitster.dls.corp.google.com>
On Tue, 18 Nov 2014, Junio C Hamano wrote:
Show 35 quoted lines
> Alan Stern <stern@rowland.harvard.edu> writes: > > > On Tue, 18 Nov 2014, Jonathan Nieder wrote: > > > >> Alan Stern wrote: > >> > >> > Tracking down regressions. Bisection isn't perfect. Suppose a > >> > bisection run ends up saying that B is the first bad commit. It's easy > >> > enough to build B and test it, to verify that it really is bad. > >> > > >> > But to be sure that B introduced the fault, it would help to find the > >> > latest commit that doesn't include B's changes -- that is, the latest > >> > commit that B isn't reachable from (or the maximal elements in the set > >> > of all such commits). > >> > >> Isn't that B^ (or B^ and B^2, if B is a merge)? > > > > No. Here's a simple example: > > > > Y > > / > > / > > X--B > > > > In this diagram, X = B^. But B isn't reachable from either X or Y, > > whereas it is reachable from one of X's children (namely Y). > > Around here when we draw history horizontally we place parents on > the left hand side and the children on the right hand side. X is > B's parent and does not include B's changes. Y is not B's parent. > Y is a child of X so it has all the imperfection of X inherited to > it (except the ones that is fixed by Y itself), but there is no way > it inherited the bug B introduced relative to X. > > Why do you say B is reachable from Y?
I omitted a negation by mistake, sorry. I meant to say: "But B isn't reachable from either X or Y, and it isn't reachable from one of X's children (namely Y)."
Thus, if B introduced a bug, that bug would not be present in Y. But Y might be better for testing than X, because Y might fix some other problems that are present in X.
Alan Stern