Re: [PATCH v2 2/4] log: add --count option to git log
- From
Lawrence Siebert <lawrencesiebert@gmail.com>
- Date
- Jul 3, 2015, 08:05 UTC
- Message-ID
- <CAKDoJU5vHP8c+Cvk1vBjjMG3kHD_rN3XwmfVngMYLN2Tkcg-tQ@mail.gmail.com>
- In-Reply-To
- <vpqa8vd66ms.fsf@anie.imag.fr>
traverse_commit_list requires a function to be passed to it. That said, after further review it can probably pass NULL and have it work fine. If not, I'll use your naming convention.
`git rev-list --count` (or actually `git rev-list --count HEAD`, which this borrows the code from, produces a single value, a numeric count. I think walking the entire list is necessary to get the final value, which is what we want with --count.
Thanks, Lawrence Siebert
On Fri, Jul 3, 2015 at 12:29 AM, Matthieu Moy <Matthieu.Moy@grenoble-inp.fr> wrote:
Show 55 quoted lines
> Lawrence Siebert <lawrencesiebert@gmail.com> writes:
>
>> +static void show_object(struct object *obj,
>> + const struct name_path *path, const char *component,
>> + void *cb_data)
>> +{
>> + return;
>> +}
>
> It seems streange to me to have a function named show_object when it
> does not show anything. Maybe name it null_travers_cb to make it clear
> it's a callback and it does nothing?
>
> Not a strong objection though, it's only a static function.
>
>> +static void show_commit(struct commit *commit, void *data)
>> +{
>> + struct rev_info *revs = (struct rev_info *)data;
>> + if (commit->object.flags & PATCHSAME)
>> + revs->count_same++;
>> + else if (commit->object.flags & SYMMETRIC_LEFT)
>> + revs->count_left++;
>> + else
>> + revs->count_right++;
>> + if (commit->parents) {
>> + free_commit_list(commit->parents);
>> + commit->parents = NULL;
>> + }
>> + free_commit_buffer(commit);
>> +}
>> +
>> static int cmd_log_walk(struct rev_info *rev)
>> {
>> struct commit *commit;
>> int saved_nrl = 0;
>> int saved_dcctc = 0;
>>
>> + if (rev->count) {
>> + prepare_revision_walk(rev);
>> + traverse_commit_list(rev, show_commit, show_object, rev);
>> + get_commit_count(rev);
>> + }
>
> I didn't test, but it seems this does a full graph traversal before
> starting the output. A very important property of "git log" is that it
> starts showing revisions immediately, even when ran on a very long
> history (it shows the first screen immediately and continues working in
> the background while the first page is displayed in the pager).
>
> Is it the case? If so, it should be changed. If not, perhaps explain why
> in the commit message.
>
> --
> Matthieu Moy
> http://www-verimag.imag.fr/~moy/-- About Me: http://about.me/lawrencesiebert Constantly Coding: http://constantcoding.blogspot.com