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

From: Glen Choo <[email-masked]>
Date: Wed, 22 Mar 2023 15:46:23 -0700

Every time I try to read cocci and spatch docs, I'm impressed at how
impenetrable they are ;) 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         <[email-masked]> 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.

> +  (
> ++ 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?).

Either way, as Elijah said, your plain explanation is clear enough that
I feel comfortable with this.

> -- 
> 2.40.0.rc1.1034.g5867a1b10c5