17.08.2015, 20:49, "Junio C Hamano" <[email protected]>:
>  Duy Nguyen <[email protected]> writes:
>
>>   On Wed, Aug 5, 2015 at 7:47 PM, Ivan Chernyavsky <[email protected]> 
>> wrote:
>
>  That is a dangeous thought. I'd understand if it were internally
>  two step process, i.e. (1) the first pass finds commits that hits
>  the --grep criteria and then (2) the second pass does "--contains"
>  for all the hits found in the first pass using existing code, but
>  still, this operation is bound to dig all the way through the root
>  of the history when asked to find something that does not exist.

My intention was to use existing git-branch filters such as -a or -r and 
pattern to limit the scope, then apply --grep machinery.

But now I had a look on the source and I can see that builtin/branch.c builds 
the list of references and prints them in a single place (print_ref_list()) so 
I will have to split that function into two in order to reuse existing 
functionality.

Another problem is that builtin/branch.c currently does not use 
setup_revisions(), so I'll have to hook it there as well.

Then, I assume, I'll need to use the initial ref_list (filled the same as for 
the current "list" case) to configure the rev_info structure after 
setup_revisions(), and start revision traversal.

I'm not sure I've got it all right from the source in those few days, so I 
apologize in advance if it's stupid in some part or as a whole.

That said, do you think the goal is worth such changes? Seems like git-branch 
currently has it's own way of doing things and I'm trying to teach it to use 
git-rev-list's.

Maybe it is more reasonable to add an option to "git log --all --source 
--grep=..." to print *all* branch tips which are reachable from the found 
commits, not only the first one encountered? E.g. --decorate-all or 
--source-all?

>  You should at least feed all --contains to a single invocation of
>  "git branch". They are designed to be OR'ed together.


Yep thanks I overlooked that. In my repository, this takes 40 seconds instead 
of 2 minutes 30 seconds for my construct.

-- 
  Ivan
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to