On Sat, Apr 13, 2019 at 05:16:00PM +0700, Nguyễn Thái Ngọc Duy wrote:
> OK how about this? set_commit_tree() is added to keeps that long line
> in commit.cocci down. I also make commit.cocci generate invalid
> repo_get_commit_tree() code this time.
> diff --git a/contrib/coccinelle/commit.cocci b/contrib/coccinelle/commit.cocci
> index c49aa558f0..ee1dc29234 100644
> --- a/contrib/coccinelle/commit.cocci
> +++ b/contrib/coccinelle/commit.cocci
> @@ -11,18 +11,14 @@ expression c;
> + get_commit_tree_oid(c)->hash
>
> // These excluded functions must access c->maybe_tree direcly.
> +// Note that if c->maybe_tree is written somewhere outside of these
> +// functions, then the recommended transformation will be bogus with
> +// repo_get_commit_tree() on the LHS.
We could prevent transformations putting repo_get_commit_tree() on the
LHS by inserting the semantic patch:
@@
identifier f !~ "^set_commit_tree$";
expression c;
expression s;
@@
f(...) {<...
- c->maybe_tree = s
+ set_commit_tree(c, s)
...>}
before this one.
> @@
> -identifier f !~
> "^(get_commit_tree|get_commit_tree_in_graph_one|load_tree_for_commit)$";
> +identifier f !~
> "^(repo_get_commit_tree|get_commit_tree_in_graph_one|load_tree_for_commit|set_commit_tree)$";
> expression c;
> @@
> f(...) {<...
> - c->maybe_tree
> -+ get_commit_tree(c)
> ++ repo_get_commit_tree(specify_the_right_repo_here, c)
> ...>}
> -
> -@@
> -expression c;
> -expression s;
> -@@
> -- get_commit_tree(c) = s
> -+ c->maybe_tree = s