From: Michael J Gruber <git@drmicha.warpmail.net>
To: Jeff King <peff@peff.net>
Cc: Junio C Hamano <gitster@pobox.com>,
Git Mailing List <git@vger.kernel.org>
Subject: Re: [RFC/PATCH 4/4] grep: obey --textconv for the case rev:path
Date: Thu, 07 Feb 2013 10:47:55 +0100 [thread overview]
Message-ID: <5113784B.10103@drmicha.warpmail.net> (raw)
In-Reply-To: <20130207092640.GC15727@sigill.intra.peff.net>
Jeff King venit, vidit, dixit 07.02.2013 10:26:
> On Thu, Feb 07, 2013 at 10:05:57AM +0100, Michael J Gruber wrote:
>
>>>> @@ -265,9 +260,28 @@ void add_object_array_with_mode(struct object *obj, const char *name, struct obj
>>>> objects[nr].item = obj;
>>>> objects[nr].name = name;
>>>> objects[nr].mode = mode;
>>>> + objects[nr].context = context;
>>>> array->nr = ++nr;
>>>> }
>>>
>>> This seems a little gross. Who is responsible for allocating the
>>> context? Who frees it? It looks like we duplicate it in cmd_grep. Which
>>
>> Well, who is responsible for allocating and freeing name and item? I
>> didn't want to introduce a new member which is a struct when all other
>> complex members are pointers. Wouldn't that be confusing?
>
> We cheat on those two. "item" is always a pointer to a "struct object",
> which lasts forever and never gets freed. When "name" is set by
> setup_revisions, it comes from the argv list, which is assumed to last
> forever (and when we add pending blobs for a "--objects" traversal, it
> is the empty string (literal).
I see, so they are really different.
> I'd be OK if we had an exterior object_context that could be handled
> in the same way. But how do we tell setup_revisions that we are
> interested in seeing the object_context from each parsed item, where
> does the allocation come from (is it malloc'd by setup_revisions?), and
> who is responsible for freeing it when we pop pending objects in
> get_revisions and similar?
Do we really need all of tree, path and mode in object_context (I mean
not just here, but other users), or only the path? I'd try and resurrect
the virtual path name objects then, they would be just like "item"
storage-wise.
> I don't think it's as clear cut.
>
> I wonder, though...what we really care about here is just the pathname.
> But if it is a pending object that comes from a blob revision argument,
> won't it always be of the form "treeish:path"? Could we not even resolve
> the sha1 again, but instead just parse out the ":path" bit?
Do we have that, and in what form (e.g. magic expanded etc.)?
> That is sort of like what the repeated call to get_sha1_with_context
> does in your first patch. Except that we do not actually want to lookup
> the sha1, and it is harmful to do so (e.g., if the ref had moved on to a
> new tree that does not have that path, get_sha1 would fail, but we do
> not even care what is in the tree; we only want the parsing side effects
> of get_sha1).
>
> Hmm.
>
> -Peff
>
> PS By the way, while looking at the object_array code (which I have not
> really used much before), I noticed that add_pending_commit_list sets
> the "name" field to the result of sha1_to_hex. Which means that it is
> likely to be completely bogus by the time you read it. I'm not even
> sure where it gets read or if this matters. And obviously it's
> completely unrelated to what we were discussing; just something I
> noticed.
Another thing I noted is that our path mangling at least for grep has
some issues:
(cd t && git grep GET_SHA1_QUIETLY HEAD:../cache.h)
../HEAD:../cache.h:#define GET_SHA1_QUIETLY 01
Taking everything right of ":" could still work.
Michael
next prev parent reply other threads:[~2013-02-07 9:48 UTC|newest]
Thread overview: 37+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-02-04 15:27 [WIP/RFH/RFD/PATCH] grep: allow to use textconv filters Michael J Gruber
2013-02-04 17:12 ` Junio C Hamano
2013-02-05 8:48 ` Michael J Gruber
2013-02-05 11:13 ` Jeff King
2013-02-05 16:21 ` Michael J Gruber
2013-02-05 20:11 ` Jeff King
2013-02-06 15:08 ` [RFC/PATCH 0/4] textconv for show and grep Michael J Gruber
2013-02-06 15:08 ` [RFC/PATCH 1/4] show: obey --textconv for blobs Michael J Gruber
2013-02-06 16:53 ` Junio C Hamano
2013-02-06 22:12 ` Jeff King
2013-02-06 23:49 ` Junio C Hamano
2013-02-07 0:10 ` Jeff King
2013-02-07 0:26 ` Junio C Hamano
2013-02-07 8:48 ` Michael J Gruber
2013-02-06 22:06 ` Jeff King
2013-02-07 9:05 ` Michael J Gruber
2013-02-07 9:11 ` Jeff King
2013-02-07 9:34 ` Michael J Gruber
2013-02-07 9:43 ` Jeff King
2013-02-06 15:08 ` [RFC/PATCH 2/4] cat-file: do not die on --textconv without textconv filters Michael J Gruber
2013-02-06 16:47 ` Junio C Hamano
2013-02-06 22:19 ` Jeff King
2013-02-06 22:23 ` Junio C Hamano
2013-02-06 22:43 ` Jeff King
2013-02-06 15:08 ` [RFC/PATCH 3/4] grep: allow to use " Michael J Gruber
2013-02-06 15:12 ` Matthieu Moy
2013-02-06 22:23 ` Jeff King
2013-02-06 15:08 ` [RFC/PATCH 4/4] grep: obey --textconv for the case rev:path Michael J Gruber
2013-02-06 22:36 ` Jeff King
2013-02-07 9:05 ` Michael J Gruber
2013-02-07 9:26 ` Jeff King
2013-02-07 9:47 ` Michael J Gruber [this message]
2013-02-07 9:55 ` Jeff King
2013-02-07 10:31 ` Michael J Gruber
2013-02-07 18:03 ` Junio C Hamano
2013-02-08 11:27 ` Michael J Gruber
2013-02-06 16:55 ` [RFC/PATCH 0/4] textconv for show and grep 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=5113784B.10103@drmicha.warpmail.net \
--to=git@drmicha.warpmail.net \
--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).