]> git.ipfire.org Git - thirdparty/git.git/commitdiff
name-rev: refactor logic to see if a new candidate is a better name
authorJunio C Hamano <gitster@pobox.com>
Wed, 29 Mar 2017 14:39:15 +0000 (16:39 +0200)
committerJunio C Hamano <gitster@pobox.com>
Wed, 29 Mar 2017 17:53:30 +0000 (10:53 -0700)
When we encounter a new ref that could describe the commit we are
looking at, we compare the name that is formed using that ref and
the name we found so far and pick a better one.

Factor the comparison logic out to a separate helper function, while
keeping the current logic the same (i.e. a name that is based on an
older tag is better, and if two tags of the same age can reach the
commit, the one with fewer number of hops to reach the commit is
better).

Signed-off-by: Junio C Hamano <gitster@pobox.com>
Signed-off-by: Michael J Gruber <git@grubix.eu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
builtin/name-rev.c

index 8bdc3eaa6fa4472d8352e7de10ef9d816e8ca83f..7890f826ce7f061d31e0009660d01da18e5f83db 100644 (file)
@@ -20,6 +20,17 @@ static long cutoff = LONG_MAX;
 /* How many generations are maximally preferred over _one_ merge traversal? */
 #define MERGE_TRAVERSAL_WEIGHT 65535
 
+static int is_better_name(struct rev_name *name,
+                         const char *tip_name,
+                         unsigned long taggerdate,
+                         int generation,
+                         int distance)
+{
+       return (name->taggerdate > taggerdate ||
+               (name->taggerdate == taggerdate &&
+                name->distance > distance));
+}
+
 static void name_rev(struct commit *commit,
                const char *tip_name, unsigned long taggerdate,
                int generation, int distance,
@@ -45,9 +56,8 @@ static void name_rev(struct commit *commit,
                name = xmalloc(sizeof(rev_name));
                commit->util = name;
                goto copy_data;
-       } else if (name->taggerdate > taggerdate ||
-                       (name->taggerdate == taggerdate &&
-                        name->distance > distance)) {
+       } else if (is_better_name(name, tip_name, taggerdate,
+                                 generation, distance)) {
 copy_data:
                name->tip_name = tip_name;
                name->taggerdate = taggerdate;