Files
git/builtin
Benno Evers 30b1c7ad9d describe: don't abort too early when searching tags
When searching the commit graph for tag candidates, `git-describe`
will stop as soon as there is only one active branch left and
it already found an annotated tag as a candidate.

This works well as long as all branches eventually connect back
to a common root, but if the tags are found across branches
with no common ancestor

                  B
                  o----.
                        \
          o-----o---o----x
          A

it can happen that the search on one branch terminates prematurely
because a tag was found on another, independent branch. This scenario
isn't quite as obscure as it sounds, since cloning with a limited
depth often introduces many independent "dead ends" into the commit
graph.

The help text of `git-describe` states pretty clearly that when
describing a commit D, the number appended to the emitted tag X should
correspond to the number of commits found by `git log X..D`.

Thus, this commit modifies the stopping condition to only abort
the search when only one branch is left to search *and* all current
best candidates are descendants from that branch.

For repositories with a single root, this condition is always
true: When the search is reduced to a single active branch, the
current commit must be an ancestor of *all* tag candidates. This
means that in the common case, this change will have no negative
performance impact since the same number of commits as before will
be traversed.

Signed-off-by: Benno Evers <benno@bmevers.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2020-02-26 12:14:12 -08:00
..
2020-02-14 12:54:19 -08:00
2019-10-15 13:47:59 +09:00
2019-11-11 11:46:29 +09:00
2019-09-18 11:50:09 -07:00
2020-02-17 13:22:17 -08:00
2019-04-25 16:41:12 +09:00
2019-09-30 13:19:32 +09:00
2019-05-13 14:22:54 +09:00
2020-02-10 09:04:45 -08:00
2019-11-10 18:02:14 +09:00
2019-12-10 13:11:41 -08:00
2019-10-11 14:24:48 +09:00
2019-06-19 08:19:21 -07:00