Linus Torvalds <torva...@linux-foundation.org> writes:

> But this patch is small and simple, and has some excuses for its
> behavior. What do people think?

I like it that you call it "excuse" not "rationale", as I couldn't
form a logical connection between your "4 (2) letters" and "10000
(100)" at all ;-)

Modulo the usual style issues (e.g. we frown upon patches in
attachement that makes it harder to quote and comment), I think this
is a strict improvement and is a good measure until somebody does a
full "topologically closest" solution.

>                  Linus
>
>  builtin/name-rev.c | 16 ++++++++++------
>  1 file changed, 10 insertions(+), 6 deletions(-)
>
> diff --git a/builtin/name-rev.c b/builtin/name-rev.c
> index 092e03c3cc9b..0354c8d222e1 100644
> --- a/builtin/name-rev.c
> +++ b/builtin/name-rev.c
> @@ -16,9 +16,6 @@ typedef struct rev_name {
>  
>  static long cutoff = LONG_MAX;
>  
> -/* How many generations are maximally preferred over _one_ merge traversal? 
> */
> -#define MERGE_TRAVERSAL_WEIGHT 65535
> -
>  static void name_rev(struct commit *commit,
>               const char *tip_name, int generation, int distance,
>               int deref)
> @@ -55,19 +52,26 @@ copy_data:
>                       parents;
>                       parents = parents->next, parent_number++) {
>               if (parent_number > 1) {
> +                     int weight;
>                       size_t len;
>                       char *new_name;
>  
>                       strip_suffix(tip_name, "^0", &len);
> -                     if (generation > 0)
> +
> +                     // The extra merge traversal "weight" depends
> +                     // on how complex the resulting name is.
> +                     if (generation > 0) {
> +                             weight = 10000;
>                               new_name = xstrfmt("%.*s~%d^%d", (int)len, 
> tip_name,
>                                                  generation, parent_number);
> -                     else
> +                     } else {
> +                             weight = 100;
>                               new_name = xstrfmt("%.*s^%d", (int)len, 
> tip_name,
>                                                  parent_number);
> +                     }
>  
>                       name_rev(parents->item, new_name, 0,
> -                             distance + MERGE_TRAVERSAL_WEIGHT, 0);
> +                             distance + weight, 0);
>               } else {
>                       name_rev(parents->item, tip_name, generation + 1,
>                               distance + 1, 0);
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to