Re: GSoC Project | Improvise git bisect

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Sat, Mar 19, 2016 at 9:44 PM, Christian Couder
<christian.couder@xxxxxxxxx> wrote:
> Hi,
>
> On Sat, Mar 19, 2016 at 1:48 PM, Matthieu Moy
> <Matthieu.Moy@xxxxxxxxxxxxxxx> wrote:
>>> Subject: Re: GSoC Project | Improvise git bisect
>>                                    ^^^^
>>
>> "Improve" I guess.
>>
>> Pranit Bauva <pranit.bauva@xxxxxxxxx> writes:
>>
>>> Hey everyone!
>>
>> Hi,
>>
>>> What I understood is that let's say the repository is like :
>>>
>>>          C13
>>>            |
>>>          C12
>>>            |
>>>          C11 (merge commit)
>>>        /   |
>>>      |   C10
>>>      |     |
>>>      |   C9
>>>      |     |
>>>      |   C6 (merge commit)
>>>    C8    |   \
>>>      |   C3    |
>>>    C7    |     |
>>>        \   |     C5
>>>          C2    |
>>>            |     C4
>>>            |    /
>>>           C1
>>>  (master branch)
>>
>> When drawing ascii-art diagrams like this, try to use a fixed-width
>> font. It looks ugly in my mailer.
>
> Ah, it looks ok in gmail.
>
>>> The commits numbers ie. C1...C13 are according to the time stamp, C1
>>> being the first.
>>
>> One information is missing: which is the first parent.
>
> Yeah it is not clear but we can suppose that the first parents are
> among C1, C2, C3,C6, C9, C10, C11, C12 and C13.
> So the first parent of C11 would be C10 and the first parent of C6 would be C3.
>
>>> On starting to debug with git bisect, given that C12 is bad and C1 is
>>> good, it starts a binary search from C1...C13. ie. It first goes to
>>> C7,
>
> First if C1 is good and C12 is bad then the binary search is between C1 and C12.
> C13 is excluded.
>
>> I don't think so. It tries to find a commit which cuts the graph into 2
>> sub-graphs with roughly the same number of commits. If you pick C7, then
>> C7 is bad, the regression may be anywhere except C1, C2, C7. This does
>> not reduce the scope much.
>
> If C7 is bad then, as C1 is good the "first bad commit" is C7 or C2.
> It's when C7 is good that C7 and C2 are excluded.
>
>> I guess you picked C7 because of the timestamps. "bisect" picks the
>> commit according to the graph topology.
>
> Yeah. Basically it will pick the commit that is the farther away from
> the "bad" and "good" commits.
> That means C6 or C9 will be picked, so it looks like the graph is not
> a good example of why --first-parent could be useful.
>
>>> if its all good, it goes to C10 and so on an so forth. If C7 is not
>>> good, it goes to C4 and so on and so forth. This just makes the job of
>>> debugging a bit difficult for a repo which has only 1 mainstream
>>> repository and it just has some short-term branches to instantly get
>>> stuff done.
>>
>> Why?
>>
>>> It can be simplified by using --first-parent. Given C1 is good and C12
>>> is bad, it will find the mean between {C1, C2, C3, C6, C9, C10, C11,
>>> C12, C13} which is C9, see if its good.
>
> It would find C6 or C9 even without --first-parent.
>
>> Do you mean that C10 is the first parent of C11, and C3 the first parent
>> of C6? That's an un-usual graphical convention: usually we represent
>> first parent as leftmost parent.
>
> Yeah.
>
>>> If not then it will go to C3
>>> and then C2, if good then it will go to C6, if not good then it will
>>> go to C5 and then C4. This will greatly simplify the job of debugging.
>>
>> Again, why?
>>
>> The missing part in your explanation is probably:
>>
>> Some projects do not enforce the policy "each commit must be compilable
>> and correct", but instead consider that only commits on the mainline
>> should have this property.
>
> Yeah. And there were previous discussions on the mailing list where
> --first-parent was discussed.
> It would be nice if they were refered to. They might talk about other
> interesting use cases.
>
>> This typically allows history like
>>
>>  A Merge feature A
>>  |\
>>  | B fix bug in feature A
>>  | |
>>  | C fix compilation error in previous commit
>>  | |
>>  | D implement feature A
>>  |/
>>  E Merge feature B
>>  ...
>>
>> When bisecting through such history, testing commits B and C is
>> meaningless, but it still makes sense to bisect through the mainling
>> commits A and E. In this case, we can consider that if E is good and A
>> is bad, then the regression was introduced in A.
>>
>> Once we know that, we can actually continue the bisection: "OK, the
>> regression was introduced in mainline at merge commit A, let's see if
>> the branch being merged is bisectable", which could be recursive if the
>> topic branch contains merge commits.

I guess I had quite a lot of conceptual doubts regarding this. I will
search more about this.

>>
>>>  - Rewrite git-bisect.sh as bisect.c and bisect.h
>>>
>>>  For this I plan to go along the guidelines of Paul Tan's previous
>>> year work. I have followed his work and his way seems nice to go about
>>> with rewriting.
>>
>> Please elaborate. Your proposal needs to be convincing enough that
>> mentors accept to commit to mentoring the project. "I'll do like Paul
>> Tan" is by far not sufficient.
>>
>> I'm actually not sure the same plan applies here: there's already a C
>> helper for bisect, so an incremental rewrite may be more appropriate:
>> port functions one by one from shell to C untill the shell part is
>> empty.
>
> Yeah, I think an incremental rewrite is more appropriate.
>
>> I don't know the bisect code well enough to know which approach would
>> work best.

Sorry it was a mistake on my part. I should have explained it in very
detail. I will do it within a day.
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]