Skip to content

Commit 3f9d505

Browse files
committed
Merge branch 'en/name-rev-shorter-output'
"git name-rev" has been tweaked to give output that is shorter and easier to understand. * en/name-rev-shorter-output: name-rev: prefer shorter names over following merges
2 parents 13fa77b + 3656f84 commit 3f9d505

File tree

1 file changed

+13
-4
lines changed

1 file changed

+13
-4
lines changed

builtin/name-rev.c

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -44,19 +44,28 @@ static struct rev_name *get_commit_rev_name(const struct commit *commit)
4444
return is_valid_rev_name(name) ? name : NULL;
4545
}
4646

47+
static int effective_distance(int distance, int generation)
48+
{
49+
return distance + (generation > 0 ? MERGE_TRAVERSAL_WEIGHT : 0);
50+
}
51+
4752
static int is_better_name(struct rev_name *name,
4853
timestamp_t taggerdate,
54+
int generation,
4955
int distance,
5056
int from_tag)
5157
{
58+
int name_distance = effective_distance(name->distance, name->generation);
59+
int new_distance = effective_distance(distance, generation);
60+
5261
/*
5362
* When comparing names based on tags, prefer names
5463
* based on the older tag, even if it is farther away.
5564
*/
5665
if (from_tag && name->from_tag)
5766
return (name->taggerdate > taggerdate ||
5867
(name->taggerdate == taggerdate &&
59-
name->distance > distance));
68+
name_distance > new_distance));
6069

6170
/*
6271
* We know that at least one of them is a non-tag at this point.
@@ -69,8 +78,8 @@ static int is_better_name(struct rev_name *name,
6978
* We are now looking at two non-tags. Tiebreak to favor
7079
* shorter hops.
7180
*/
72-
if (name->distance != distance)
73-
return name->distance > distance;
81+
if (name_distance != new_distance)
82+
return name_distance > new_distance;
7483

7584
/* ... or tiebreak to favor older date */
7685
if (name->taggerdate != taggerdate)
@@ -88,7 +97,7 @@ static struct rev_name *create_or_update_name(struct commit *commit,
8897
struct rev_name *name = commit_rev_name_at(&rev_names, commit);
8998

9099
if (is_valid_rev_name(name)) {
91-
if (!is_better_name(name, taggerdate, distance, from_tag))
100+
if (!is_better_name(name, taggerdate, generation, distance, from_tag))
92101
return NULL;
93102

94103
/*

0 commit comments

Comments
 (0)