Merge branch 'jk/maint-tag-show-fixes' into maint
* jk/maint-tag-show-fixes: tag: do not show non-tag contents with "-n" tag: die when listing missing or corrupt objects tag: fix output of "tag -n" when errors occur Conflicts: t/t7004-tag.sh
This commit is contained in:
commit
a95750c4e8
@ -83,18 +83,51 @@ static int contains(struct commit *candidate, const struct commit_list *want)
|
|||||||
return contains_recurse(candidate, want);
|
return contains_recurse(candidate, want);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int show_reference(const char *refname, const unsigned char *sha1,
|
static void show_tag_lines(const unsigned char *sha1, int lines)
|
||||||
int flag, void *cb_data)
|
|
||||||
{
|
{
|
||||||
struct tag_filter *filter = cb_data;
|
|
||||||
|
|
||||||
if (match_pattern(filter->patterns, refname)) {
|
|
||||||
int i;
|
int i;
|
||||||
unsigned long size;
|
unsigned long size;
|
||||||
enum object_type type;
|
enum object_type type;
|
||||||
char *buf, *sp, *eol;
|
char *buf, *sp, *eol;
|
||||||
size_t len;
|
size_t len;
|
||||||
|
|
||||||
|
buf = read_sha1_file(sha1, &type, &size);
|
||||||
|
if (!buf)
|
||||||
|
die_errno("unable to read object %s", sha1_to_hex(sha1));
|
||||||
|
if (type != OBJ_COMMIT && type != OBJ_TAG)
|
||||||
|
goto free_return;
|
||||||
|
if (!size)
|
||||||
|
die("an empty %s object %s?",
|
||||||
|
typename(type), sha1_to_hex(sha1));
|
||||||
|
|
||||||
|
/* skip header */
|
||||||
|
sp = strstr(buf, "\n\n");
|
||||||
|
if (!sp)
|
||||||
|
goto free_return;
|
||||||
|
|
||||||
|
/* only take up to "lines" lines, and strip the signature from a tag */
|
||||||
|
if (type == OBJ_TAG)
|
||||||
|
size = parse_signature(buf, size);
|
||||||
|
for (i = 0, sp += 2; i < lines && sp < buf + size; i++) {
|
||||||
|
if (i)
|
||||||
|
printf("\n ");
|
||||||
|
eol = memchr(sp, '\n', size - (sp - buf));
|
||||||
|
len = eol ? eol - sp : size - (sp - buf);
|
||||||
|
fwrite(sp, len, 1, stdout);
|
||||||
|
if (!eol)
|
||||||
|
break;
|
||||||
|
sp = eol + 1;
|
||||||
|
}
|
||||||
|
free_return:
|
||||||
|
free(buf);
|
||||||
|
}
|
||||||
|
|
||||||
|
static int show_reference(const char *refname, const unsigned char *sha1,
|
||||||
|
int flag, void *cb_data)
|
||||||
|
{
|
||||||
|
struct tag_filter *filter = cb_data;
|
||||||
|
|
||||||
|
if (match_pattern(filter->patterns, refname)) {
|
||||||
if (filter->with_commit) {
|
if (filter->with_commit) {
|
||||||
struct commit *commit;
|
struct commit *commit;
|
||||||
|
|
||||||
@ -110,33 +143,8 @@ static int show_reference(const char *refname, const unsigned char *sha1,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
printf("%-15s ", refname);
|
printf("%-15s ", refname);
|
||||||
|
show_tag_lines(sha1, filter->lines);
|
||||||
buf = read_sha1_file(sha1, &type, &size);
|
|
||||||
if (!buf || !size)
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
/* skip header */
|
|
||||||
sp = strstr(buf, "\n\n");
|
|
||||||
if (!sp) {
|
|
||||||
free(buf);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
/* only take up to "lines" lines, and strip the signature */
|
|
||||||
size = parse_signature(buf, size);
|
|
||||||
for (i = 0, sp += 2;
|
|
||||||
i < filter->lines && sp < buf + size;
|
|
||||||
i++) {
|
|
||||||
if (i)
|
|
||||||
printf("\n ");
|
|
||||||
eol = memchr(sp, '\n', size - (sp - buf));
|
|
||||||
len = eol ? eol - sp : size - (sp - buf);
|
|
||||||
fwrite(sp, len, 1, stdout);
|
|
||||||
if (!eol)
|
|
||||||
break;
|
|
||||||
sp = eol + 1;
|
|
||||||
}
|
|
||||||
putchar('\n');
|
putchar('\n');
|
||||||
free(buf);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -586,6 +586,19 @@ test_expect_success \
|
|||||||
test_cmp expect actual
|
test_cmp expect actual
|
||||||
'
|
'
|
||||||
|
|
||||||
|
test_expect_success 'annotations for blobs are empty' '
|
||||||
|
blob=$(git hash-object -w --stdin <<-\EOF
|
||||||
|
Blob paragraph 1.
|
||||||
|
|
||||||
|
Blob paragraph 2.
|
||||||
|
EOF
|
||||||
|
) &&
|
||||||
|
git tag tag-blob $blob &&
|
||||||
|
echo "tag-blob " >expect &&
|
||||||
|
git tag -n1 -l tag-blob >actual &&
|
||||||
|
test_cmp expect actual
|
||||||
|
'
|
||||||
|
|
||||||
# trying to verify annotated non-signed tags:
|
# trying to verify annotated non-signed tags:
|
||||||
|
|
||||||
test_expect_success GPG \
|
test_expect_success GPG \
|
||||||
|
Loading…
x
Reference in New Issue
Block a user