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

Reply via email to