From: Michael J Gruber <git@drmicha.warpmail.net>
To: Junio C Hamano <gitster@pobox.com>
Cc: git@vger.kernel.org, Jeff King <peff@peff.net>,
Matthieu Moy <Matthieu.Moy@imag.fr>
Subject: Re: [PATCHv3 3/7] show: honor --textconv for blobs
Date: Sat, 11 May 2013 10:54:25 +0200 [thread overview]
Message-ID: <518E0741.1060008@drmicha.warpmail.net> (raw)
In-Reply-To: <7vy5bm22f8.fsf@alter.siamese.dyndns.org>
Junio C Hamano venit, vidit, dixit 10.05.2013 19:02:
> Michael J Gruber <git@drmicha.warpmail.net> writes:
>
>> Currently, "diff" and "cat-file" for blobs honor "--textconv" options
>> (with the former defaulting to "--textconv" and the latter to
>> "--no-textconv") whereas "show" does not honor this option, even though
>> it takes diff options.
>>
>> Make "show" on blobs behave like "diff", i.e. honor "--textconv" by
>> default and "--no-textconv" when given.
>
> Hmm...
Sorry, I overlooked that ;)
>> +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_TOUCHED(&rev->diffopt, ALLOW_TEXTCONV) ||
>> + !DIFF_OPT_TST(&rev->diffopt, ALLOW_TEXTCONV))
>> + return stream_blob_to_fd(1, sha1, NULL, 0);
>
> It is surprising that the necessary change is only this, but I think
> it is correct ;-). We ignore textconv when the command line did not
> mention --[no-]textconv, or the command line said --no-textconv
> explicitly.
>
> This (especially the first condition) may deserve an in-code comment
> for anybody who wonders where this default behaviour is implemented.
It's not as if we would document behavior by in-code comments in
general, do we? The usual answer is "git log -S" or "git blame".
> So "show" on blobs does show the raw contents by default, but the
> user can explicitly ask to enable textconv with --[no-]textconv. Is
> the second paragraph in the log message still valid?
>
>> + if (get_sha1_with_context(obj_name, 0, sha1c, &obj_context))
>> + die("Not a valid object name %s", obj_name);
>
> This looks somewhat unfortunate.
>
> We already have sha1[]; actually we not just know sha1[] but have
> the struct object for it. How did we obtain it before we got here?
>
> Will we always have a valid name in rev.pending.objects->name? Will
> that name convert back to the same sha1 we got in sha1[]?
>
> I think the answers are "Yes (it is a command line argument), Yes
> (that is what setup_revisions() got by feeding the name to give us
> sha1[])".
>
> I wonder if enriching rev_info->pending with the context information
> might be a clean solution to avoid this redundant but unavoidable
> conversion, but that is a separate and future topic, I think.
Yes, I think both Jeff and I have thought it and came to the same
conclusion - "later" ;)
>> + 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)
>> @@ -526,7 +545,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 3950fc9..0ebb028 100755
>> --- a/t/t4030-diff-textconv.sh
>> +++ b/t/t4030-diff-textconv.sh
>> @@ -96,14 +96,14 @@ test_expect_success 'show blob produces binary' '
>> test_cmp expect actual
>> '
>>
>> -test_expect_failure 'show --textconv blob produces text' '
>> +test_expect_success 'show --textconv blob produces text' '
>> git show --textconv HEAD:file >actual &&
>> printf "0\\n1\\n" >expect &&
>> test_cmp expect actual
>> '
>>
>> -test_success 'show --no-textconv blob produces binary' '
>> - git show --textconv HEAD:file >actual &&
>> +test_expect_success 'show --no-textconv blob produces binary' '
>> + git show --no-textconv HEAD:file >actual &&
>> printf "\\0\\n\\01\\n" >expect &&
>> test_cmp expect actual
>> '
next prev parent reply other threads:[~2013-05-11 9:39 UTC|newest]
Thread overview: 78+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-04-19 16:44 [PATCH 0/6] grep with textconv Michael J Gruber
2013-04-19 16:44 ` [PATCH 1/6] t4030: demonstrate behavior of show " Michael J Gruber
2013-04-20 4:04 ` Jeff King
2013-04-20 13:35 ` Michael J Gruber
2013-04-19 16:44 ` [PATCH 2/6] show: obey --textconv for blobs Michael J Gruber
2013-04-20 4:06 ` Jeff King
2013-04-20 13:38 ` Michael J Gruber
2013-04-21 3:37 ` Jeff King
2013-04-22 10:29 ` Michael J Gruber
2013-04-22 15:25 ` Junio C Hamano
2013-04-22 15:29 ` Jeff King
2013-04-22 15:37 ` Jeremy Rosen
2013-04-22 15:54 ` Matthieu Moy
2013-04-23 8:58 ` Michael J Gruber
2013-04-19 16:44 ` [PATCH 3/6] cat-file: do not die on --textconv without textconv filters Michael J Gruber
2013-04-19 18:15 ` Junio C Hamano
2013-04-20 4:17 ` Jeff King
2013-04-20 14:27 ` Michael J Gruber
2013-04-19 16:44 ` [PATCH 4/6] t7008: demonstrate behavior of grep with textconv Michael J Gruber
2013-04-19 16:44 ` [PATCH 5/6] grep: allow to use textconv filters Michael J Gruber
2013-04-20 4:31 ` Jeff King
2013-04-19 16:44 ` [PATCH 6/6] grep: obey --textconv for the case rev:path Michael J Gruber
2013-04-20 4:24 ` Jeff King
2013-04-20 14:42 ` Michael J Gruber
2013-04-21 3:41 ` Jeff King
2013-04-19 18:24 ` [PATCH 0/6] grep with textconv Junio C Hamano
2013-04-20 4:26 ` Jeff King
2013-04-20 13:32 ` Michael J Gruber
2013-04-23 12:11 ` [PATCHv2 0/7] " Michael J Gruber
2013-04-23 12:11 ` [PATCHv2 1/7] t4030: demonstrate behavior of show " Michael J Gruber
2013-04-23 15:11 ` Junio C Hamano
2013-04-23 12:11 ` [PATCHv2 2/7] show: obey --textconv for blobs Michael J Gruber
2013-04-23 15:14 ` Junio C Hamano
2013-04-24 10:09 ` Michael J Gruber
2013-04-24 17:30 ` Junio C Hamano
2013-04-23 12:11 ` [PATCHv2 3/7] cat-file: do not die on --textconv without textconv filters Michael J Gruber
2013-04-23 15:15 ` Junio C Hamano
2013-04-23 12:11 ` [PATCHv2 4/7] t7008: demonstrate behavior of grep with textconv Michael J Gruber
2013-04-23 15:16 ` Junio C Hamano
2013-04-24 10:09 ` Michael J Gruber
2013-04-24 17:29 ` Junio C Hamano
2013-04-23 12:11 ` [PATCHv2 5/7] grep: allow to use textconv filters Michael J Gruber
2013-04-23 12:11 ` [PATCHv2 6/7] grep: honor --textconv for the case rev:path Michael J Gruber
2013-04-23 12:11 ` [PATCHv2 7/7] git grep: honor textconv by default Michael J Gruber
2013-04-23 15:20 ` Junio C Hamano
2013-04-24 10:05 ` Michael J Gruber
2013-04-24 17:35 ` Junio C Hamano
2013-04-24 17:57 ` Matthieu Moy
2013-04-24 18:55 ` Junio C Hamano
2013-04-26 11:59 ` Michael J Gruber
2013-04-26 13:23 ` Matthieu Moy
2013-04-29 9:04 ` Michael J Gruber
2013-04-29 15:04 ` Junio C Hamano
2013-05-10 15:08 ` [PATCHv3 0/7] textconv with grep and show Michael J Gruber
2013-05-10 15:10 ` [PATCHv3 1/7] t4030: demonstrate behavior of show with textconv Michael J Gruber
2013-05-10 15:10 ` [PATCHv3 2/7] diff_opt: track whether flags have been set explicitly Michael J Gruber
2013-05-10 15:31 ` Eric Sunshine
2013-05-10 15:10 ` [PATCHv3 3/7] show: honor --textconv for blobs Michael J Gruber
2013-05-10 17:02 ` Junio C Hamano
2013-05-10 17:34 ` Jeff King
2013-05-10 18:04 ` Junio C Hamano
2013-05-11 0:25 ` Jeff King
2013-05-11 19:54 ` Junio C Hamano
2013-05-11 8:54 ` Michael J Gruber [this message]
2013-05-11 10:00 ` Michael J Gruber
2013-05-13 5:01 ` Junio C Hamano
2013-05-13 11:55 ` Jeff King
2013-05-13 14:57 ` Michael J Gruber
2013-05-13 15:41 ` Junio C Hamano
2013-05-16 3:31 ` Jeff King
2013-05-11 17:36 ` Junio C Hamano
2013-05-12 12:13 ` Michael J Gruber
2013-05-10 15:10 ` [PATCHv3 4/7] cat-file: do not die on --textconv without textconv filters Michael J Gruber
2013-05-10 15:10 ` [PATCHv3 5/7] t7008: demonstrate behavior of grep with textconv Michael J Gruber
2013-05-10 15:10 ` [PATCHv3 6/7] grep: allow to use textconv filters Michael J Gruber
2013-05-10 15:10 ` [PATCHv3 7/7] grep: honor --textconv for the case rev:path Michael J Gruber
2013-05-10 18:11 ` Junio C Hamano
2013-05-10 18:31 ` Junio C Hamano
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=518E0741.1060008@drmicha.warpmail.net \
--to=git@drmicha.warpmail.net \
--cc=Matthieu.Moy@imag.fr \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=peff@peff.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).