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

Re: [PATCH 02/17] cocci: fix incorrect & verbose "the_repository" rules

From
Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Date
Mar 26, 2023, 05:02 UTC
Message-ID
<230326.86edpcw0yh.gmgdl@evledraar.gmail.com>
In-Reply-To
<kl6ledpge75s.fsf@chooglen-macbookpro.roam.corp.google.com>
On Wed, Mar 22 2023, Glen Choo wrote:
> Every time I try to read cocci and spatch docs, I'm impressed at how
> impenetrable they are ;)

FWIW you should ignore the manpage, which and instead read the "Coccinelle User’s manual", and particularly "The SmPL Grammar", both of which are available as PDFs on their website.

But their docs are rather terse, and sometimes even incomplete. I've often resorted to grepping their own test cases to figure out how something works.

Show 53 quoted lines
> Nevertheless, I'd still like to understand how
> the pattern works. I'll take a stab in the dark, and perhaps you can
> correct me.
>
> Ævar Arnfjörð Bjarmason         <avarab@gmail.com> writes:
>
>> +(
>> +- read_object_file
>> ++ repo_read_object_file
>> +|
>> +- has_object_file
>> ++ repo_has_object_file
>> +|
>> +- has_object_file_with_flags
>> ++ repo_has_object_file_with_flags
>> +|
>> +- parse_commit_internal
>> ++ repo_parse_commit_internal
>> +|
>> +- parse_commit
>> ++ repo_parse_commit
>> +|
>> +- get_merge_bases
>> ++ repo_get_merge_bases
>> +|
>> +- get_merge_bases_many
>> ++ repo_get_merge_bases_many
>> +|
>> +- get_merge_bases_many_dirty
>> ++ repo_get_merge_bases_many_dirty
>> +|
>> +- in_merge_bases
>> ++ repo_in_merge_bases
>> +|
>> +- in_merge_bases_many
>> ++ repo_in_merge_bases_many
>> +|
>> +- get_commit_buffer
>> ++ repo_get_commit_buffer
>> +|
>> +- unuse_commit_buffer
>> ++ repo_unuse_commit_buffer
>> +|
>> +- logmsg_reencode
>> ++ repo_logmsg_reencode
>> +|
>> +- format_commit_message
>> ++ repo_format_commit_message
>> +)
>
> I assume that `|` characters in parentheses are a logical OR, and each
> of the expressions checks for the `-` side in the original and replaces
> it with the `+` side.
Yes, just a simple "replace A with B".
Show 10 quoted lines
>> +  (
>> ++ the_repository,
>> +  ...)
>
> Then this is another expression that matches literal `()` after the
> previous expression? `+the_repository` adds `the_repository` right after
> the opening `(`, then leaves the uninteresting `...` in place.
>
> If so, I don't know how cocci/spatch tells the difference between
> literal `()` vs an expression in the syntax (preceding whitespace?).

Yes, whitespace is significant in the coccinelle syntax, generally its own "()" grouping goes at the beginning of a line, wheras you indent program text in the "diff" with whitespace.

E.g. our equals-null.cocci has two rules that use "(" and ")" in a way that would be ambiguous if this whitespace-disambiguation weren't being used.

Previous: Glen ChooNext: Ævar Arnfjörð Bjarmason
Message 5 of 60 in “cocci: remove "the_index" wrapper macros”
  1. 00/17 cocci: remove "the_index" wrapper macrosÆvar Arnfjörð Bjarmason, Mar 17, 2023
  2. 02/17 cocci: fix incorrect & verbose "the_repository" rulesÆvar Arnfjörð Bjarmason, Mar 17, 2023
  3. Elijah NewrenMar 19, 2023
  4. Glen ChooMar 22, 2023
  5. Ævar Arnfjörð BjarmasonMar 26, 2023
  6. 01/17 cocci: remove dead rule from "the_repository.pending.cocci"Ævar Arnfjörð Bjarmason, Mar 17, 2023
  7. Eric SunshineMar 17, 2023
  8. Elijah NewrenMar 19, 2023
  9. 03/17 cocci: sort "the_repository" rules by headerÆvar Arnfjörð Bjarmason, Mar 17, 2023
  10. Elijah NewrenMar 19, 2023
  11. 04/17 cocci: add missing "the_repository" macros to "pending"Ævar Arnfjörð Bjarmason, Mar 17, 2023
  12. Elijah NewrenMar 19, 2023
  13. 08/17 cocci: apply the "diff.h" part of "the_repository.pending"Ævar Arnfjörð Bjarmason, Mar 17, 2023
  14. 06/17 cocci: apply the "commit-reach.h" part of "the_repository.pending"Ævar Arnfjörð Bjarmason, Mar 17, 2023
  15. 10/17 cocci: apply the "pretty.h" part of "the_repository.pending"Ævar Arnfjörð Bjarmason, Mar 17, 2023
  16. 05/17 cocci: apply the "cache.h" part of "the_repository.pending"Ævar Arnfjörð Bjarmason, Mar 17, 2023
  17. Elijah NewrenMar 19, 2023
  18. Glen ChooMar 22, 2023
  19. 07/17 cocci: apply the "commit.h" part of "the_repository.pending"Ævar Arnfjörð Bjarmason, Mar 17, 2023
  20. 11/17 cocci: apply the "packfile.h" part of "the_repository.pending"Ævar Arnfjörð Bjarmason, Mar 17, 2023
  21. 12/17 cocci: apply the "promisor-remote.h" part of "the_repository.pending"Ævar Arnfjörð Bjarmason, Mar 17, 2023
  22. 14/17 cocci: apply the "rerere.h" part of "the_repository.pending"Ævar Arnfjörð Bjarmason, Mar 17, 2023
  23. 09/17 cocci: apply the "object-store.h" part of "the_repository.pending"Ævar Arnfjörð Bjarmason, Mar 17, 2023
  24. 13/17 cocci: apply the "refs.h" part of "the_repository.pending"Ævar Arnfjörð Bjarmason, Mar 17, 2023
  25. 15/17 cocci: apply the "revision.h" part of "the_repository.pending"Ævar Arnfjörð Bjarmason, Mar 17, 2023
  26. Glen ChooMar 22, 2023
  27. Glen ChooMar 22, 2023
  28. Ævar Arnfjörð BjarmasonMar 26, 2023
  29. 16/17 post-cocci: adjust comments for recent repo_* migrationÆvar Arnfjörð Bjarmason, Mar 17, 2023
  30. Elijah NewrenMar 19, 2023
  31. 17/17 libs: use "struct repository *" argument, not "the_repository"Ævar Arnfjörð Bjarmason, Mar 17, 2023
  32. Elijah NewrenMar 19, 2023
  33. Ævar Arnfjörð BjarmasonMar 28, 2023
  34. Junio C HamanoMar 17, 2023
  35. 00/17 cocci: remove "the_repository" wrapper macrosÆvar Arnfjörð Bjarmason, Mar 28, 2023
  36. 01/17 cocci: remove dead rule from "the_repository.pending.cocci"Ævar Arnfjörð Bjarmason, Mar 28, 2023
  37. 02/17 cocci: fix incorrect & verbose "the_repository" rulesÆvar Arnfjörð Bjarmason, Mar 28, 2023
  38. Taylor BlauMar 29, 2023
  39. 03/17 cocci: sort "the_repository" rules by headerÆvar Arnfjörð Bjarmason, Mar 28, 2023
  40. 04/17 cocci: add missing "the_repository" macros to "pending"Ævar Arnfjörð Bjarmason, Mar 28, 2023
  41. 06/17 cocci: apply the "commit-reach.h" part of "the_repository.pending"Ævar Arnfjörð Bjarmason, Mar 28, 2023
  42. 05/17 cocci: apply the "cache.h" part of "the_repository.pending"Ævar Arnfjörð Bjarmason, Mar 28, 2023
  43. 08/17 cocci: apply the "diff.h" part of "the_repository.pending"Ævar Arnfjörð Bjarmason, Mar 28, 2023
  44. 07/17 cocci: apply the "commit.h" part of "the_repository.pending"Ævar Arnfjörð Bjarmason, Mar 28, 2023
  45. 10/17 cocci: apply the "pretty.h" part of "the_repository.pending"Ævar Arnfjörð Bjarmason, Mar 28, 2023
  46. 11/17 cocci: apply the "packfile.h" part of "the_repository.pending"Ævar Arnfjörð Bjarmason, Mar 28, 2023
  47. 09/17 cocci: apply the "object-store.h" part of "the_repository.pending"Ævar Arnfjörð Bjarmason, Mar 28, 2023
  48. 12/17 cocci: apply the "promisor-remote.h" part of "the_repository.pending"Ævar Arnfjörð Bjarmason, Mar 28, 2023
  49. 13/17 cocci: apply the "refs.h" part of "the_repository.pending"Ævar Arnfjörð Bjarmason, Mar 28, 2023
  50. 14/17 cocci: apply the "rerere.h" part of "the_repository.pending"Ævar Arnfjörð Bjarmason, Mar 28, 2023
  51. 15/17 cocci: apply the "revision.h" part of "the_repository.pending"Ævar Arnfjörð Bjarmason, Mar 28, 2023
  52. 16/17 post-cocci: adjust comments for recent repo_* migrationÆvar Arnfjörð Bjarmason, Mar 28, 2023
  53. Taylor BlauMar 29, 2023
  54. 17/17 libs: use "struct repository *" argument, not "the_repository"Ævar Arnfjörð Bjarmason, Mar 28, 2023
  55. Junio C HamanoMar 28, 2023
  56. Junio C HamanoMar 28, 2023
  57. Junio C HamanoMar 29, 2023
  58. Taylor BlauMar 29, 2023
  59. Elijah NewrenMar 30, 2023
  60. Glen ChooMar 30, 2023

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.