зеркало из https://github.com/microsoft/git.git
Merge branch 'ak/maint-for-each-ref-no-lookup' into maint
* ak/maint-for-each-ref-no-lookup: for-each-ref: Do not lookup objects when they will not be used
This commit is contained in:
Коммит
a69f8c9809
|
@ -561,14 +561,6 @@ static void populate_value(struct refinfo *ref)
|
||||||
|
|
||||||
ref->value = xcalloc(sizeof(struct atom_value), used_atom_cnt);
|
ref->value = xcalloc(sizeof(struct atom_value), used_atom_cnt);
|
||||||
|
|
||||||
buf = get_obj(ref->objectname, &obj, &size, &eaten);
|
|
||||||
if (!buf)
|
|
||||||
die("missing object %s for %s",
|
|
||||||
sha1_to_hex(ref->objectname), ref->refname);
|
|
||||||
if (!obj)
|
|
||||||
die("parse_object_buffer failed on %s for %s",
|
|
||||||
sha1_to_hex(ref->objectname), ref->refname);
|
|
||||||
|
|
||||||
/* Fill in specials first */
|
/* Fill in specials first */
|
||||||
for (i = 0; i < used_atom_cnt; i++) {
|
for (i = 0; i < used_atom_cnt; i++) {
|
||||||
const char *name = used_atom[i];
|
const char *name = used_atom[i];
|
||||||
|
@ -621,6 +613,22 @@ static void populate_value(struct refinfo *ref)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for (i = 0; i < used_atom_cnt; i++) {
|
||||||
|
struct atom_value *v = &ref->value[i];
|
||||||
|
if (v->s == NULL)
|
||||||
|
goto need_obj;
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
|
||||||
|
need_obj:
|
||||||
|
buf = get_obj(ref->objectname, &obj, &size, &eaten);
|
||||||
|
if (!buf)
|
||||||
|
die("missing object %s for %s",
|
||||||
|
sha1_to_hex(ref->objectname), ref->refname);
|
||||||
|
if (!obj)
|
||||||
|
die("parse_object_buffer failed on %s for %s",
|
||||||
|
sha1_to_hex(ref->objectname), ref->refname);
|
||||||
|
|
||||||
grab_values(ref->value, 0, obj, buf, size);
|
grab_values(ref->value, 0, obj, buf, size);
|
||||||
if (!eaten)
|
if (!eaten)
|
||||||
free(buf);
|
free(buf);
|
||||||
|
@ -926,7 +934,7 @@ int cmd_for_each_ref(int argc, const char **argv, const char *prefix)
|
||||||
|
|
||||||
memset(&cbdata, 0, sizeof(cbdata));
|
memset(&cbdata, 0, sizeof(cbdata));
|
||||||
cbdata.grab_pattern = argv;
|
cbdata.grab_pattern = argv;
|
||||||
for_each_ref(grab_single_ref, &cbdata);
|
for_each_rawref(grab_single_ref, &cbdata);
|
||||||
refs = cbdata.grab_array;
|
refs = cbdata.grab_array;
|
||||||
num_refs = cbdata.grab_cnt;
|
num_refs = cbdata.grab_cnt;
|
||||||
|
|
||||||
|
|
Загрузка…
Ссылка в новой задаче