cat-file: add mailmap support to -s option
Even though the cat-file command with `-s` option does not complain when `--use-mailmap` option is given, the latter option is ignored. Compute the size of the object after replacing the idents and report it instead. In order to make `-s` option honour the mailmap mechanism we have to read the contents of the commit/tag object. Make use of the call to `oid_object_info_extended()` to get the contents of the object and store in `buf`. `buf` is later freed in the function. Mentored-by: Christian Couder <christian.couder@gmail.com> Mentored-by: John Cai <johncai86@gmail.com> Helped-by: Taylor Blau <me@ttaylorr.com> Helped-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com> Signed-off-by: Siddharth Asthana <siddharthasthana31@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
63bba4fdd8
commit
49050a043b
@ -45,7 +45,9 @@ OPTIONS
|
|||||||
|
|
||||||
-s::
|
-s::
|
||||||
Instead of the content, show the object size identified by
|
Instead of the content, show the object size identified by
|
||||||
`<object>`.
|
`<object>`. If used with `--use-mailmap` option, will show
|
||||||
|
the size of updated object after replacing idents using the
|
||||||
|
mailmap mechanism.
|
||||||
|
|
||||||
-e::
|
-e::
|
||||||
Exit with zero status if `<object>` exists and is a valid
|
Exit with zero status if `<object>` exists and is a valid
|
||||||
|
@ -132,8 +132,21 @@ static int cat_one_file(int opt, const char *exp_type, const char *obj_name,
|
|||||||
|
|
||||||
case 's':
|
case 's':
|
||||||
oi.sizep = &size;
|
oi.sizep = &size;
|
||||||
|
|
||||||
|
if (use_mailmap) {
|
||||||
|
oi.typep = &type;
|
||||||
|
oi.contentp = (void**)&buf;
|
||||||
|
}
|
||||||
|
|
||||||
if (oid_object_info_extended(the_repository, &oid, &oi, flags) < 0)
|
if (oid_object_info_extended(the_repository, &oid, &oi, flags) < 0)
|
||||||
die("git cat-file: could not get object info");
|
die("git cat-file: could not get object info");
|
||||||
|
|
||||||
|
if (use_mailmap && (type == OBJ_COMMIT || type == OBJ_TAG)) {
|
||||||
|
size_t s = size;
|
||||||
|
buf = replace_idents_using_mailmap(buf, &s);
|
||||||
|
size = cast_size_t_to_ulong(s);
|
||||||
|
}
|
||||||
|
|
||||||
printf("%"PRIuMAX"\n", (uintmax_t)size);
|
printf("%"PRIuMAX"\n", (uintmax_t)size);
|
||||||
ret = 0;
|
ret = 0;
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
|
@ -1022,4 +1022,33 @@ test_expect_success '--mailmap enables mailmap in cat-file for annotated tag obj
|
|||||||
test_cmp expect actual
|
test_cmp expect actual
|
||||||
'
|
'
|
||||||
|
|
||||||
|
test_expect_success 'git cat-file -s returns correct size with --use-mailmap' '
|
||||||
|
test_when_finished "rm .mailmap" &&
|
||||||
|
cat >.mailmap <<-\EOF &&
|
||||||
|
C O Mitter <committer@example.com> Orig <orig@example.com>
|
||||||
|
EOF
|
||||||
|
git cat-file commit HEAD >commit.out &&
|
||||||
|
echo $(wc -c <commit.out) >expect &&
|
||||||
|
git cat-file --use-mailmap commit HEAD >commit.out &&
|
||||||
|
echo $(wc -c <commit.out) >>expect &&
|
||||||
|
git cat-file -s HEAD >actual &&
|
||||||
|
git cat-file --use-mailmap -s HEAD >>actual &&
|
||||||
|
test_cmp expect actual
|
||||||
|
'
|
||||||
|
|
||||||
|
test_expect_success 'git cat-file -s returns correct size with --use-mailmap for tag objects' '
|
||||||
|
test_when_finished "rm .mailmap" &&
|
||||||
|
cat >.mailmap <<-\EOF &&
|
||||||
|
Orig <orig@example.com> C O Mitter <committer@example.com>
|
||||||
|
EOF
|
||||||
|
git tag -a -m "annotated tag" v3 &&
|
||||||
|
git cat-file tag v3 >tag.out &&
|
||||||
|
echo $(wc -c <tag.out) >expect &&
|
||||||
|
git cat-file --use-mailmap tag v3 >tag.out &&
|
||||||
|
echo $(wc -c <tag.out) >>expect &&
|
||||||
|
git cat-file -s v3 >actual &&
|
||||||
|
git cat-file --use-mailmap -s v3 >>actual &&
|
||||||
|
test_cmp expect actual
|
||||||
|
'
|
||||||
|
|
||||||
test_done
|
test_done
|
||||||
|
Loading…
Reference in New Issue
Block a user