Re: [RFC] bisect: Introduce skip-when to automatically skip commits

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

 



On 07/04/2024 15:52, Olliver Schinagl wrote:
Hey Phillip,

On 07-04-2024 16:09, phillip.wood123@xxxxxxxxx wrote:
On 06/04/2024 20:17, Olliver Schinagl wrote:
Hey Phillip,

On 06-04-2024 15:50, Phillip Wood wrote:
Hi Olliver

On 06/04/2024 11:06, Olliver Schinagl wrote:
On 06-04-2024 03:08, Junio C Hamano wrote:
Olliver Schinagl <oliver@xxxxxxxxxxx> writes:
If you search builtin/bisect.c you'll see some existing callers of strbuf_read_file() that read other files like BISECT_START. Those callers should give you an idea of how to use it.

Yeah, I found after Junio's hint :) What threw me off, as I wrote earlier, get_terms(). I wonder now, why is get_terms() implemented as it is, and should it not use the same functions? Or is it because terms is a multi-line file, whereas the others are all single line (I didn't look, though I see addline functions for the strbuf functions. Should this be refactored?

get_terms() wants to read the first line into `term_bad` and the second line into `term_good` so it makes sense that it uses two calls to `strbuf_getline()` to do that. It does not want to read the whole file into a single buffer as we do here.

Right, but I why not use strbuf_getline()?

Because you want the whole file, not just one line as the script name could potentially contain a newline

So with the name, I started to think some more about it, and after playing with some names, I settled on 'bisect-post-checkout'. Things then sort of fell more into place. It is still a hook/commandline option, but it's a much smaller change (since we don't have any special code to check the exit code anymore) as we can (obviously) run `git bisect skip` instead of `exit 125` as well of course.

Does that mean you will be starting "git bisect skip" from the script run by the current "git bisect" process. I don't think calling git recursively like that is a good idea as you'll potentially end up with a bunch of "git bisect" processes all waiting for their post checkout script to finish running.

Well the process is inherently recursive, though that's up to the user depending on what they put in their script of course. I don't think git is 'waiting' is it? In that, git bisect runs the command, the command runs git bisect, git bisect stores the commit hash in the skip file and 'exists', which goes then back to the bisect job, which then continues as it normally would.

So technically, we're not doing anything bad in git, but a user might do something bad.

If I understand correctly we're encouraging the user to run "git bisect skip" from the post checkout script. Doesn't that mean we'll end up with a set of processes that look like

	- git bisect start
	  - post checkout script
            - git bisect skip
              - post checkout script
                - git bisect skip
                  ...

as the "git bisect start" is waiting for the post checkout script to finish running, but that script is waiting for "git bisect skip" to finish running and so on. Each of those processes takes up system resources, similar to how a recursive function can exhaust the available stack space by calling itself over and over again.

Best Wishes

Phillip




[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]

  Powered by Linux