git/list[1] front-page[2] threads[3] people[4] search[5] about
 

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
Previous: Matthieu MoyNext: Matthieu Moy
Message 8 of 17 in “git log --count”
  1. 0/4 git log --countLawrence Siebert, Jul 2, 2015
  2. 1/4 list-object: add get_commit_count functionLawrence Siebert, Jul 2, 2015
  3. Matthieu MoyJul 3, 2015
  4. Lawrence SiebertJul 3, 2015
  5. Matthieu MoyJul 3, 2015
  6. 2/4 log: add --count option to git logLawrence Siebert, Jul 2, 2015
  7. Matthieu MoyJul 3, 2015
  8. Lawrence SiebertJul 3, 2015
  9. Matthieu MoyJul 3, 2015
  10. 3/4 log --count: added testLawrence Siebert, Jul 2, 2015
  11. Matthieu MoyJul 3, 2015
  12. Lawrence SiebertJul 3, 2015
  13. Matthieu MoyJul 3, 2015
  14. Matthieu MoyJul 3, 2015
  15. Junio C HamanoJul 4, 2015
  16. Junio C HamanoJul 4, 2015
  17. 4/4 git-log: update man documentation for --countLawrence Siebert, Jul 2, 2015

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.