зеркало из https://github.com/microsoft/git.git
builtin/show-ref: rewrite to take an object_id argument
Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu> Signed-off-by: brian m. carlson <sandals@crustytoothpaste.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Родитель
a0cde90ebf
Коммит
6c4461e8d9
|
@ -176,7 +176,7 @@ static enum contains_result contains(struct commit *candidate,
|
|||
return contains_test(candidate, want);
|
||||
}
|
||||
|
||||
static void show_tag_lines(const unsigned char *sha1, int lines)
|
||||
static void show_tag_lines(const struct object_id *oid, int lines)
|
||||
{
|
||||
int i;
|
||||
unsigned long size;
|
||||
|
@ -184,14 +184,14 @@ static void show_tag_lines(const unsigned char *sha1, int lines)
|
|||
char *buf, *sp, *eol;
|
||||
size_t len;
|
||||
|
||||
buf = read_sha1_file(sha1, &type, &size);
|
||||
buf = read_sha1_file(oid->hash, &type, &size);
|
||||
if (!buf)
|
||||
die_errno("unable to read object %s", sha1_to_hex(sha1));
|
||||
die_errno("unable to read object %s", oid_to_hex(oid));
|
||||
if (type != OBJ_COMMIT && type != OBJ_TAG)
|
||||
goto free_return;
|
||||
if (!size)
|
||||
die("an empty %s object %s?",
|
||||
typename(type), sha1_to_hex(sha1));
|
||||
typename(type), oid_to_hex(oid));
|
||||
|
||||
/* skip header */
|
||||
sp = strstr(buf, "\n\n");
|
||||
|
@ -215,7 +215,7 @@ free_return:
|
|||
free(buf);
|
||||
}
|
||||
|
||||
static int show_reference(const char *refname, const unsigned char *sha1,
|
||||
static int show_reference(const char *refname, const struct object_id *oid,
|
||||
int flag, void *cb_data)
|
||||
{
|
||||
struct tag_filter *filter = cb_data;
|
||||
|
@ -224,14 +224,14 @@ static int show_reference(const char *refname, const unsigned char *sha1,
|
|||
if (filter->with_commit) {
|
||||
struct commit *commit;
|
||||
|
||||
commit = lookup_commit_reference_gently(sha1, 1);
|
||||
commit = lookup_commit_reference_gently(oid->hash, 1);
|
||||
if (!commit)
|
||||
return 0;
|
||||
if (!contains(commit, filter->with_commit))
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (points_at.nr && !match_points_at(refname, sha1))
|
||||
if (points_at.nr && !match_points_at(refname, oid->hash))
|
||||
return 0;
|
||||
|
||||
if (!filter->lines) {
|
||||
|
@ -242,7 +242,7 @@ static int show_reference(const char *refname, const unsigned char *sha1,
|
|||
return 0;
|
||||
}
|
||||
printf("%-15s ", refname);
|
||||
show_tag_lines(sha1, filter->lines);
|
||||
show_tag_lines(oid, filter->lines);
|
||||
putchar('\n');
|
||||
}
|
||||
|
||||
|
@ -260,8 +260,6 @@ static int list_tags(const char **patterns, int lines,
|
|||
struct commit_list *with_commit, int sort)
|
||||
{
|
||||
struct tag_filter filter;
|
||||
struct each_ref_fn_sha1_adapter wrapped_show_reference =
|
||||
{show_reference, (void *)&filter};
|
||||
|
||||
filter.patterns = patterns;
|
||||
filter.lines = lines;
|
||||
|
@ -270,7 +268,7 @@ static int list_tags(const char **patterns, int lines,
|
|||
memset(&filter.tags, 0, sizeof(filter.tags));
|
||||
filter.tags.strdup_strings = 1;
|
||||
|
||||
for_each_tag_ref(each_ref_fn_adapter, &wrapped_show_reference);
|
||||
for_each_tag_ref(show_reference, (void *)&filter);
|
||||
if (sort) {
|
||||
int i;
|
||||
if ((sort & SORT_MASK) == VERCMP_SORT)
|
||||
|
|
Загрузка…
Ссылка в новой задаче