git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH v2 15/21] bisect: introduce distance_direction()

From
Junio C Hamano <gitster@pobox.com>
Date
Apr 15, 2016, 22:10 UTC
Message-ID
<xmqqbn5a8qw0.fsf@gitster.mtv.corp.google.com>
In-Reply-To
<1460294354-7031-16-git-send-email-s-beyer@gmx.net>
Stephan Beyer <s-beyer@gmx.net> writes:
Show 38 quoted lines
> We introduce the concept of rising and falling distances
> (in addition to a halfway distance).
> This will be useful in subsequent commits.
>
> Signed-off-by: Stephan Beyer <s-beyer@gmx.net>
> ---
>  bisect.c | 33 +++++++++++++++++++++++----------
>  1 file changed, 23 insertions(+), 10 deletions(-)
>
> diff --git a/bisect.c b/bisect.c
> index cfd406c..f737ce7 100644
> --- a/bisect.c
> +++ b/bisect.c
> @@ -46,6 +46,28 @@ static inline int get_distance(struct commit *commit, int total)
>  	return distance;
>  }
>  
> +/*
> + * Return -1 if the distance is falling.
> + * (A falling distance means that the distance of the
> + *  given commit is larger than the distance of its
> + *  child commits.)
> + * Return 0 if the distance is halfway.
> + * Return 1 if the distance is rising.
> + */
> +static inline int distance_direction(struct commit *commit, int total)
> +{
> +	int doubled_diff = 2 * node_data(commit)->weight - total;
> +	if (doubled_diff < -1)
> +		return 1;
> +	if (doubled_diff > 1)
> +		return -1;
> +	/*
> +	 * 2 and 3 are halfway of 5.
> +	 * 3 is halfway of 6 but 2 and 4 are not.
> +	 */
> +	return 0;
> +}

Nice. This makes it clear that to arrive at a half-way point, it is pointless to dig a commit to its parents if the direction says it will only take us further away from the half-way point.

Show 21 quoted lines
>  static int count_distance(struct commit *elem)
>  {
>  	int nr = 0;
> @@ -92,16 +114,7 @@ static inline int halfway(struct commit *commit, int nr)
>  	 */
>  	if (commit->object.flags & TREESAME)
>  		return 0;
> -	/*
> -	 * 2 and 3 are halfway of 5.
> -	 * 3 is halfway of 6 but 2 and 4 are not.
> -	 */
> -	switch (2 * node_data(commit)->weight - nr) {
> -	case -1: case 0: case 1:
> -		return 1;
> -	default:
> -		return 0;
> -	}
> +	return !distance_direction(commit, nr);
>  }
>  
>  #if !DEBUG_BISECT
Previous: Stephan BeyerNext: Stephan Beyer
Message 39 of 56 in “git bisect improvements”
  1. 00/21 git bisect improvementsStephan Beyer, Apr 10, 2016
  2. 01/21 bisect: write about `bisect next` in documentationStephan Beyer, Apr 10, 2016
  3. 02/21 bisect: allow 'bisect run' if no good commit is knownStephan Beyer, Apr 10, 2016
  4. 03/21 t/test-lib-functions.sh: generalize test_cmp_revStephan Beyer, Apr 10, 2016
  5. Eric SunshineApr 11, 2016
  6. Junio C HamanoApr 15, 2016
  7. Stephan BeyerApr 24, 2016
  8. Junio C HamanoApr 25, 2016
  9. 04/21 t: use test_cmp_rev() where appropriateStephan Beyer, Apr 10, 2016
  10. Eric SunshineApr 11, 2016
  11. Junio C HamanoApr 15, 2016
  12. 05/21 t6030: generalize test to not rely on current implementationStephan Beyer, Apr 10, 2016
  13. Torsten BögershausenApr 10, 2016
  14. Junio C HamanoApr 10, 2016
  15. Stephan BeyerApr 10, 2016
  16. Eric SunshineApr 11, 2016
  17. Junio C HamanoApr 15, 2016
  18. 06/21 bisect: add test for the bisect algorithmStephan Beyer, Apr 10, 2016
  19. Junio C HamanoApr 15, 2016
  20. 07/21 bisect: plug the biggest memory leakStephan Beyer, Apr 10, 2016
  21. Junio C HamanoApr 15, 2016
  22. 08/21 bisect: make bisect compile if DEBUG_BISECT is setStephan Beyer, Apr 10, 2016
  23. Junio C HamanoApr 15, 2016
  24. 09/21 bisect: make algorithm behavior independent of DEBUG_BISECTStephan Beyer, Apr 10, 2016
  25. Junio C HamanoApr 15, 2016
  26. 10/21 bisect: get rid of recursion in count_distance()Stephan Beyer, Apr 10, 2016
  27. Junio C HamanoApr 15, 2016
  28. 11/21 bisect: use struct node_data array instead of int arrayStephan Beyer, Apr 10, 2016
  29. Christian CouderApr 12, 2016
  30. Junio C HamanoApr 15, 2016
  31. 12/21 bisect: replace clear_distance() by unique markersStephan Beyer, Apr 10, 2016
  32. Christian CouderApr 12, 2016
  33. Junio C HamanoApr 15, 2016
  34. 13/21 bisect: use commit instead of commit list as arguments when appropriateStephan Beyer, Apr 10, 2016
  35. Junio C HamanoApr 15, 2016
  36. 14/21 bisect: extract get_distance() function from code duplicationStephan Beyer, Apr 10, 2016
  37. Junio C HamanoApr 15, 2016
  38. 15/21 bisect: introduce distance_direction()Stephan Beyer, Apr 10, 2016
  39. Junio C HamanoApr 15, 2016
  40. 16/21 bisect: make total number of commits globalStephan Beyer, Apr 10, 2016
  41. Christian CouderApr 13, 2016
  42. Junio C HamanoApr 15, 2016
  43. Junio C HamanoApr 16, 2016
  44. 17/21 bisect: rename count_distance() to compute_weight()Stephan Beyer, Apr 10, 2016
  45. Christian CouderApr 13, 2016
  46. Junio C HamanoApr 15, 2016
  47. 18/21 bisect: prepare for different algorithms based on find_allStephan Beyer, Apr 10, 2016
  48. Junio C HamanoApr 15, 2016
  49. 19/21 bisect: use a bottom-up traversal to find relevant weightsStephan Beyer, Apr 10, 2016
  50. Christian CouderApr 13, 2016
  51. Junio C HamanoApr 15, 2016
  52. Junio C HamanoApr 15, 2016
  53. Junio C HamanoApr 26, 2016
  54. 20/21 bisect: compute best bisection in compute_relevant_weights()Stephan Beyer, Apr 10, 2016
  55. 21/21 bisect: get back halfway shortcutStephan Beyer, Apr 10, 2016
  56. Junio C HamanoApr 15, 2016

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.