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 mergesmaint
commit
3f9d5059c6
|
@ -44,11 +44,20 @@ static struct rev_name *get_commit_rev_name(const struct commit *commit)
|
||||||
return is_valid_rev_name(name) ? name : NULL;
|
return is_valid_rev_name(name) ? name : NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int effective_distance(int distance, int generation)
|
||||||
|
{
|
||||||
|
return distance + (generation > 0 ? MERGE_TRAVERSAL_WEIGHT : 0);
|
||||||
|
}
|
||||||
|
|
||||||
static int is_better_name(struct rev_name *name,
|
static int is_better_name(struct rev_name *name,
|
||||||
timestamp_t taggerdate,
|
timestamp_t taggerdate,
|
||||||
|
int generation,
|
||||||
int distance,
|
int distance,
|
||||||
int from_tag)
|
int from_tag)
|
||||||
{
|
{
|
||||||
|
int name_distance = effective_distance(name->distance, name->generation);
|
||||||
|
int new_distance = effective_distance(distance, generation);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* When comparing names based on tags, prefer names
|
* When comparing names based on tags, prefer names
|
||||||
* based on the older tag, even if it is farther away.
|
* based on the older tag, even if it is farther away.
|
||||||
|
@ -56,7 +65,7 @@ static int is_better_name(struct rev_name *name,
|
||||||
if (from_tag && name->from_tag)
|
if (from_tag && name->from_tag)
|
||||||
return (name->taggerdate > taggerdate ||
|
return (name->taggerdate > taggerdate ||
|
||||||
(name->taggerdate == taggerdate &&
|
(name->taggerdate == taggerdate &&
|
||||||
name->distance > distance));
|
name_distance > new_distance));
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* We know that at least one of them is a non-tag at this point.
|
* 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,
|
||||||
* We are now looking at two non-tags. Tiebreak to favor
|
* We are now looking at two non-tags. Tiebreak to favor
|
||||||
* shorter hops.
|
* shorter hops.
|
||||||
*/
|
*/
|
||||||
if (name->distance != distance)
|
if (name_distance != new_distance)
|
||||||
return name->distance > distance;
|
return name_distance > new_distance;
|
||||||
|
|
||||||
/* ... or tiebreak to favor older date */
|
/* ... or tiebreak to favor older date */
|
||||||
if (name->taggerdate != taggerdate)
|
if (name->taggerdate != taggerdate)
|
||||||
|
@ -88,7 +97,7 @@ static struct rev_name *create_or_update_name(struct commit *commit,
|
||||||
struct rev_name *name = commit_rev_name_at(&rev_names, commit);
|
struct rev_name *name = commit_rev_name_at(&rev_names, commit);
|
||||||
|
|
||||||
if (is_valid_rev_name(name)) {
|
if (is_valid_rev_name(name)) {
|
||||||
if (!is_better_name(name, taggerdate, distance, from_tag))
|
if (!is_better_name(name, taggerdate, generation, distance, from_tag))
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
Loading…
Reference in New Issue