From: Christian Couder <chriscool@tuxfamily.org>
To: Junio C Hamano <gitster@pobox.com>
Cc: git@vger.kernel.org, Sam Vilain <sam@vilain.net>,
"H. Peter Anvin" <hpa@zytor.com>, Ingo Molnar <mingo@elte.hu>
Subject: Re: [PATCH v3 0/3] automatically skip away from broken commits
Date: Sun, 7 Jun 2009 09:32:36 +0200 [thread overview]
Message-ID: <200906070932.36913.chriscool@tuxfamily.org> (raw)
In-Reply-To: <7vskidcf9s.fsf@alter.siamese.dyndns.org>
Le Saturday 06 June 2009, Junio C Hamano a écrit :
> Here is a fairly unscientific test to see how these three patches improve
> things. It involves two test scripts:
>
> - ./+runme is a "bisect run" script. It says "tests OK" for all the
> commits given, except that it says "untestable" for all commits that
> are on the side branch of a merge that we first test. I think this
> reflects what happens in the real world setting very well, in that a
> merge brings in a topic whose breakge is irrelevant to the bug we are
> hunting.
>
> - ./+runall is run in one git tree with two parameters (bad commit and
> good commit); it assumes that
>
> - ./+runme script above is in /var/tmp/+runme;
>
> - a version of git without these three patches is installed with
> prefix=/var/tmp/cc-original;
>
> - a version of git with these three patches is installed with
> prefix=/var/tmp/cc-updated;
>
> and runs the bisection using both versions of git.
>
> The results are not that great; these three patches do not give clear win
> as we hoped:
>
> $ linux-2.6/master; /var/tmp/+runall v2.6.30-rc8 v2.6.30-rc1
> Total 2681 commits...
> Marked 254 commits as untestable
> Took 14 rounds with cc-updated
> Marked 254 commits as untestable
> Took 13 rounds with cc-original
> $ linux-2.6/master; /var/tmp/+runall v2.6.30-rc8 v2.6.29
> Total 12917 commits...
> Marked 141 commits as untestable
> Took 15 rounds with cc-updated
> Marked 141 commits as untestable
> Took 15 rounds with cc-original
> $ linux-2.6/master; /var/tmp/+runall v2.6.30-rc1 v2.6.29
> Total 10236 commits...
> Marked 7749 commits as untestable
> Took 15 rounds with cc-updated
> Marked 7749 commits as untestable
> Took 14 rounds with cc-original
>
> I think this shows that the "skip ratio" heuristics based on the distance
> in the "goodness scale" space does not help in avoiding commits that are
> close in topological space. There may be cases where the version with
> patch gives fewer rounds especially when the history is very linear, but
> I was mostly interested in the number of commits at least in the
> thousands, which I think is what we should optimize things for, not a toy
> history of linear 100 commits.
I get the same results as yours, and I think that in these tests cases "git
bisect" was not stuck with having only untestable commits with the
highest "goodness" values. So in these cases the original behavior does
quite well and that's why the updated behavior can't do better.
> Here are the test scripts you can use to reproduce the results.
>
> diff --git a/+runall b/+runall
> new file mode 100755
> index 0000000..291d000
> --- /dev/null
> +++ b/+runall
> @@ -0,0 +1,23 @@
> +#!/bin/sh
> +
> +BAD=${1?BAD}
> +GOOD=${2?GOOD}
> +TOTAL=$(git rev-list $GOOD..$BAD | wc -l)
> +
> +echo Total $TOTAL commits...
> +
> +for git in cc-updated cc-original
> +do
> + logfile=/var/tmp/log-$git-$BAD-$GOOD
> + (
> + PATH=/var/tmp/$git/bin:$PATH
> + export PATH
> + rm -f .git/UNTESTABLE
> + git bisect reset
> + git bisect start $BAD $GOOD
> + git bisect run /var/tmp/+runme
> + git bisect reset
> + ) >$logfile 2>&1
> + grep "^Marked " $logfile
> + echo Took $(grep -c "Bisecting:" $logfile) rounds with $git
> +done
> diff --git a/+runme b/+runme
> new file mode 100755
> index 0000000..7b77338
> --- /dev/null
> +++ b/+runme
> @@ -0,0 +1,23 @@
> +#!/bin/sh
> +
> +# Pretend that the first merged branch were untestable
> +
> +THIS=$(git rev-parse HEAD)
> +
> +if ! test -f .git/UNTESTABLE
> +then
> + if MERGED=$(git rev-parse HEAD^2 2>/dev/null)
> + then
> + git rev-list HEAD^ ^$MERGED >.git/UNTESTABLE
> + echo Marked $(wc -l <.git/UNTESTABLE) commits as untestable
> + exit 125
> + else
> + exit 0
> + fi
> +fi
> +
> +if grep "$THIS" .git/UNTESTABLE >/dev/null
> +then
> + exit 125
> +fi
> +exit 0
Thanks.
I renamed your +runme to +runme-good and created a +runme-bad script with
the following changes:
$ diff -u +runme-good +runme-bad
--- +runme-good 2009-06-07 03:53:08.000000000 +0200
+++ +runme-bad 2009-06-07 08:11:33.000000000 +0200
@@ -12,7 +12,7 @@
echo Marked $(wc -l <.git/UNTESTABLE) commits as untestable
exit 125
else
- exit 0
+ exit 1
fi
fi
@@ -20,4 +20,4 @@
then
exit 125
fi
-exit 0
+exit 1
So that the +runme-bad says "tests KO" (instead of "tests OK" for
+runme-good) for all the commits given, except that it says "untestable"
for all commits that are on the side branch of a merge that we first test.
Then I created the "+runme -> +runme-bad" symlink and tried your examples:
$ /var/tmp/+runall v2.6.30-rc8 v2.6.30-rc1
Total 2681 commits...
Marked 254 commits as untestable
Took 11 rounds with cc-updated
Marked 254 commits as untestable
Took 12 rounds with cc-original
$ /var/tmp/+runall v2.6.30-rc8 v2.6.29
Total 12917 commits...
Marked 141 commits as untestable
Took 15 rounds with cc-updated
Marked 141 commits as untestable
Took 15 rounds with cc-original
$ /var/tmp/+runall v2.6.30-rc1 v2.6.29
Total 10236 commits...
Marked 1777 commits as untestable
Took 9 rounds with cc-updated
Marked 1777 commits as untestable
Took 492 rounds with cc-original
The last one is very interesting. It seems that the original implementation
got stuck while the updated one did a great job...
Best regards,
Christian.
next prev parent reply other threads:[~2009-06-07 7:32 UTC|newest]
Thread overview: 37+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-06-06 4:41 [PATCH v3 0/3] automatically skip away from broken commits Christian Couder
2009-06-06 4:41 ` [PATCH v3 1/3] bisect: add parameters to "filter_skipped" Christian Couder
2009-06-06 4:41 ` [PATCH v3 2/3] bisect: when skipping, choose a commit away from a skipped commit Christian Couder
2009-06-06 4:41 ` [PATCH v3 3/3] t6030: test skipping away from an already " Christian Couder
2009-06-06 19:51 ` [PATCH v3 0/3] automatically skip away from broken commits Junio C Hamano
2009-06-07 7:32 ` Christian Couder [this message]
2009-06-08 6:06 ` H. Peter Anvin
2009-06-08 7:25 ` Junio C Hamano
2009-06-08 15:51 ` H. Peter Anvin
2009-06-08 21:02 ` Junio C Hamano
2009-06-08 21:10 ` H. Peter Anvin
2009-06-09 4:24 ` Christian Couder
2009-06-09 10:02 ` Jakub Narebski
2009-06-09 15:11 ` H. Peter Anvin
2009-06-09 21:55 ` Jakub Narebski
2009-06-09 22:54 ` H. Peter Anvin
2009-06-09 12:26 ` Christian Couder
2009-06-09 15:25 ` H. Peter Anvin
2009-06-09 18:35 ` Junio C Hamano
2009-06-09 18:42 ` H. Peter Anvin
2009-06-09 19:28 ` Christian Couder
2009-06-09 19:32 ` H. Peter Anvin
2009-06-10 8:14 ` Christian Couder
2009-06-09 20:37 ` Junio C Hamano
2009-06-10 19:37 ` Christian Couder
2009-06-10 21:17 ` Junio C Hamano
2009-06-10 22:43 ` H. Peter Anvin
2009-06-11 4:02 ` Christian Couder
2009-06-11 4:43 ` H. Peter Anvin
2009-06-11 5:05 ` H. Peter Anvin
2009-06-12 11:56 ` Christian Couder
2009-06-13 19:03 ` H. Peter Anvin
2009-06-13 19:35 ` Jakub Narebski
2009-06-13 19:57 ` H. Peter Anvin
2009-06-15 7:59 ` Christian Couder
2009-06-15 13:16 ` H. Peter Anvin
2009-06-13 7:50 ` Christian Couder
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=200906070932.36913.chriscool@tuxfamily.org \
--to=chriscool@tuxfamily.org \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=hpa@zytor.com \
--cc=mingo@elte.hu \
--cc=sam@vilain.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).