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

Re: [PATCH] git-cget: prints elements of C code in the git repository

From
RKRoel Kluin <roel.kluin@gmail.com>
Date
Mar 24, 2009, 13:30 UTC
Message-ID
<49C8E074.4030808@gmail.com>
In-Reply-To
<alpine.DEB.1.00.0903241257430.7493@intel-tinevez-2-302>
Hi Johannes,
thanks for your pointers.
> - the name is not expressive enough,
How about get-def? If it's too long it will become tiresome to type.
> - the commit message is severely lacking (I had to apply it and run it to 
>   find out what problem it tries to solve),
This is probably better:

This script shows where elements of C code are defined in the git-repository. It is still experimental, although it should work in most cases.

As invoking it with -? will tell:
USAGE: git get-def [OPTION]... PATTERN [FILE]...
print elements of C code with name PATTERN in the git repository,
where PATTERN is an extended regular expression
Options to specify which element(s) should be printed:
        -f      function
        -s      struct
        -d      definition
        -m      macro
        -e      enum
        -u      union
Options to alter the output:
        -b      only print body
        -n      only print file and lineranges
The pattern is required.

If no files are specified it will search the entire repository for the specified elements with name PATTERN.

If no element is specified, it will search for any of the above elements and print these when found.

> - it still uses dashed git commands,
Should be fixed in my next version
> - it might be better to put it into contrib/, otherwise it needs 
>   documentation with examples, and tests,
Ok.
Show 28 quoted lines
> - it misdetects functions: trying
> 
> 	$ ./git-cget -f get_sha1.*
> 
>   shows this, amongst others:
> 
> -- snip --
> // vi sha1_name.c +59
>                 return get_sha1_hex(hex, sha1) == 0;
>         return found;
> }
> 
> static int match_sha(unsigned len, const unsigned char *a, const unsigned 
> char *b)
> {
>         do {
>                 if (*a != *b)
>                         return 0;
>                 a++;
>                 b++;
>                 len -= 2;
>         } while (len > 1);
>         if (len)
>                 if ((*a ^ *b) & 0xf0)
>                         return 0;
>         return 1;
> }
> -- snap --
Yes, it doesn't always work yet, I'll try to fix this in my next version.
> - maybe it would be nicer to integrate this into git grep itself?  Maybe 
>   by allowing multi-line matches and default patterns, or pattern 
>   templates?

I did attempt to program it in C, but I am more comfortable with bash. Also, what would be more appropriate for this purpose, I think, is a git sed.

However, allowing multi-line matches may be an option, I'll look into it.
> Ciao,
> Dscho
Thanks,
Roel
Previous: Johannes SchindelinNext: Johannes Schindelin
Message 3 of 16 in “git-cget: prints elements of C code in the git repository”
  1. git-cget: prints elements of C code in the git repositoryRoel Kluin, Mar 24, 2009
  2. Johannes SchindelinMar 24, 2009
  3. Roel KluinMar 24, 2009
  4. Johannes SchindelinMar 24, 2009
  5. Ping YinMar 24, 2009
  6. Jeff KingMar 24, 2009
  7. Stefan KarpinskiMar 24, 2009
  8. Johannes SchindelinMar 24, 2009
  9. Mike RalphsonMar 24, 2009
  10. Johannes SchindelinMar 24, 2009
  11. Mike RalphsonMar 24, 2009
  12. Steven TweedMar 24, 2009
  13. Jeff KingMar 25, 2009
  14. roel kluinMar 24, 2009
  15. roel kluinMar 27, 2009
  16. Johannes SchindelinMar 27, 2009

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.