merge(3p/git): Merge git upstream at v2.26.2
This commit is contained in:
commit
5229c9b232
1006 changed files with 149006 additions and 60819 deletions
46
third_party/git/builtin/describe.c
vendored
46
third_party/git/builtin/describe.c
vendored
|
|
@ -15,7 +15,6 @@
|
|||
#include "argv-array.h"
|
||||
#include "run-command.h"
|
||||
#include "object-store.h"
|
||||
#include "revision.h"
|
||||
#include "list-objects.h"
|
||||
#include "commit-slab.h"
|
||||
|
||||
|
|
@ -64,19 +63,22 @@ static const char *prio_names[] = {
|
|||
};
|
||||
|
||||
static int commit_name_neq(const void *unused_cmp_data,
|
||||
const void *entry,
|
||||
const void *entry_or_key,
|
||||
const struct hashmap_entry *eptr,
|
||||
const struct hashmap_entry *entry_or_key,
|
||||
const void *peeled)
|
||||
{
|
||||
const struct commit_name *cn1 = entry;
|
||||
const struct commit_name *cn2 = entry_or_key;
|
||||
const struct commit_name *cn1, *cn2;
|
||||
|
||||
cn1 = container_of(eptr, const struct commit_name, entry);
|
||||
cn2 = container_of(entry_or_key, const struct commit_name, entry);
|
||||
|
||||
return !oideq(&cn1->peeled, peeled ? peeled : &cn2->peeled);
|
||||
}
|
||||
|
||||
static inline struct commit_name *find_commit_name(const struct object_id *peeled)
|
||||
{
|
||||
return hashmap_get_from_hash(&names, oidhash(peeled), peeled);
|
||||
return hashmap_get_entry_from_hash(&names, oidhash(peeled), peeled,
|
||||
struct commit_name, entry);
|
||||
}
|
||||
|
||||
static int replace_name(struct commit_name *e,
|
||||
|
|
@ -123,8 +125,8 @@ static void add_to_known_names(const char *path,
|
|||
if (!e) {
|
||||
e = xmalloc(sizeof(struct commit_name));
|
||||
oidcpy(&e->peeled, peeled);
|
||||
hashmap_entry_init(e, oidhash(peeled));
|
||||
hashmap_add(&names, e);
|
||||
hashmap_entry_init(&e->entry, oidhash(peeled));
|
||||
hashmap_add(&names, &e->entry);
|
||||
e->path = NULL;
|
||||
}
|
||||
e->tag = tag;
|
||||
|
|
@ -313,7 +315,7 @@ static void describe_commit(struct object_id *oid, struct strbuf *dst)
|
|||
*/
|
||||
append_name(n, dst);
|
||||
if (longformat)
|
||||
append_suffix(0, n->tag ? &n->tag->tagged->oid : oid, dst);
|
||||
append_suffix(0, n->tag ? get_tagged_oid(n->tag) : oid, dst);
|
||||
if (suffix)
|
||||
strbuf_addstr(dst, suffix);
|
||||
return;
|
||||
|
|
@ -330,8 +332,8 @@ static void describe_commit(struct object_id *oid, struct strbuf *dst)
|
|||
struct commit_name *n;
|
||||
|
||||
init_commit_names(&commit_names);
|
||||
n = hashmap_iter_first(&names, &iter);
|
||||
for (; n; n = hashmap_iter_next(&iter)) {
|
||||
hashmap_for_each_entry(&names, &iter, n,
|
||||
entry /* member name */) {
|
||||
c = lookup_commit_reference_gently(the_repository,
|
||||
&n->peeled, 1);
|
||||
if (c)
|
||||
|
|
@ -374,11 +376,25 @@ static void describe_commit(struct object_id *oid, struct strbuf *dst)
|
|||
if (!(c->object.flags & t->flag_within))
|
||||
t->depth++;
|
||||
}
|
||||
/* Stop if last remaining path already covered by best candidate(s) */
|
||||
if (annotated_cnt && !list) {
|
||||
if (debug)
|
||||
fprintf(stderr, _("finished search at %s\n"),
|
||||
oid_to_hex(&c->object.oid));
|
||||
break;
|
||||
int best_depth = INT_MAX;
|
||||
unsigned best_within = 0;
|
||||
for (cur_match = 0; cur_match < match_cnt; cur_match++) {
|
||||
struct possible_tag *t = &all_matches[cur_match];
|
||||
if (t->depth < best_depth) {
|
||||
best_depth = t->depth;
|
||||
best_within = t->flag_within;
|
||||
} else if (t->depth == best_depth) {
|
||||
best_within |= t->flag_within;
|
||||
}
|
||||
}
|
||||
if ((c->object.flags & best_within) == best_within) {
|
||||
if (debug)
|
||||
fprintf(stderr, _("finished search at %s\n"),
|
||||
oid_to_hex(&c->object.oid));
|
||||
break;
|
||||
}
|
||||
}
|
||||
while (parents) {
|
||||
struct commit *p = parents->item;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue