Show 74 quoted lines
>> Signed-off-by: Michael J Gruber <git@drmicha.warpmail.net>
>> ---
>> builtin/log.c | 24 +++++++++++++++++++++---
>> t/t4030-diff-textconv.sh | 8 +++++++-
>> 2 files changed, 28 insertions(+), 4 deletions(-)
>>
>> diff --git a/builtin/log.c b/builtin/log.c
>> index 5f3ed77..fe0275e 100644
>> --- a/builtin/log.c
>> +++ b/builtin/log.c
>> @@ -436,10 +436,28 @@ static void show_tagger(char *buf, int len, struct rev_info *rev)
>> strbuf_release(&out);
>> }
>>
>> -static int show_blob_object(const unsigned char *sha1, struct rev_info *rev)
>> +static int show_blob_object(const unsigned char *sha1, struct rev_info *rev, const char *obj_name)
>> {
>> + unsigned char sha1c[20];
>> + struct object_context obj_context;
>> + char *buf;
>> + unsigned long size;
>> +
>> fflush(stdout);
>> - return stream_blob_to_fd(1, sha1, NULL, 0);
>> + if (!DIFF_OPT_TST(&rev->diffopt, ALLOW_TEXTCONV))
>> + return stream_blob_to_fd(1, sha1, NULL, 0);
>> +
>> + if (get_sha1_with_context(obj_name, 0, sha1c, &obj_context))
>> + die("Not a valid object name %s", obj_name);
>> + if (!obj_context.path[0] ||
>> + !textconv_object(obj_context.path, obj_context.mode, sha1c, 1, &buf, &size))
>> + return stream_blob_to_fd(1, sha1, NULL, 0);
>> +
>> + if (!buf)
>> + die("git show %s: bad file", obj_name);
>> +
>> + write_or_die(1, buf, size);
>> + return 0;
>> }
>>
>> static int show_tag_object(const unsigned char *sha1, struct rev_info *rev)
>> @@ -525,7 +543,7 @@ int cmd_show(int argc, const char **argv, const char *prefix)
>> const char *name = objects[i].name;
>> switch (o->type) {
>> case OBJ_BLOB:
>> - ret = show_blob_object(o->sha1, NULL);
>> + ret = show_blob_object(o->sha1, &rev, name);
>> break;
>> case OBJ_TAG: {
>> struct tag *t = (struct tag *)o;
>> diff --git a/t/t4030-diff-textconv.sh b/t/t4030-diff-textconv.sh
>> index 260ea92..f9d55e1 100755
>> --- a/t/t4030-diff-textconv.sh
>> +++ b/t/t4030-diff-textconv.sh
>> @@ -90,12 +90,18 @@ test_expect_success 'status -v produces text' '
>> git reset --soft HEAD@{1}
>> '
>>
>> -test_expect_failure 'show blob produces text' '
>> +test_expect_success 'show blob produces text' '
>> git show HEAD:file >actual &&
>> printf "0\\n1\\n" >expect &&
>> test_cmp expect actual
>> '
>>
>> +test_expect_success 'show --no-textconv blob produces binary' '
>> + git show --no-textconv HEAD:file >actual &&
>> + printf "\\0\\n\\1\\n" >expect &&
>> + test_cmp expect actual
>> +'
>> +
>> test_expect_success 'grep-diff (-G) operates on textconv data (add)' '
>> echo one >expect &&
>> git log --root --format=%s -G0 >actual &&