| @ get_fn @ |
| identifier fn, R; |
| @@ |
| ( |
| ( |
| git_config_from_file |
| | |
| git_config_from_file_with_options |
| | |
| git_config_from_mem |
| | |
| git_config_from_blob_oid |
| | |
| read_early_config |
| | |
| read_very_early_config |
| | |
| config_with_options |
| | |
| git_config |
| | |
| git_protected_config |
| | |
| config_from_gitmodules |
| ) |
| (fn, ...) |
| | |
| repo_config(R, fn, ...) |
| ) |
| |
| @ extends get_fn @ |
| identifier C1, C2, D; |
| @@ |
| int fn(const char *C1, const char *C2, |
| + const struct config_context *ctx, |
| void *D); |
| |
| @ extends get_fn @ |
| @@ |
| int fn(const char *, const char *, |
| + const struct config_context *, |
| void *); |
| |
| @ extends get_fn @ |
| // Don't change fns that look like callback fns but aren't |
| identifier fn2 != tar_filter_config && != git_diff_heuristic_config && |
| != git_default_submodule_config && != git_color_config && |
| != bundle_list_update && != parse_object_filter_config; |
| identifier C1, C2, D1, D2, S; |
| attribute name UNUSED; |
| @@ |
| int fn(const char *C1, const char *C2, |
| + const struct config_context *ctx, |
| void *D1) { |
| <+... |
| ( |
| fn2(C1, C2 |
| + , ctx |
| , D2); |
| | |
| if(fn2(C1, C2 |
| + , ctx |
| , D2) < 0) { ... } |
| | |
| return fn2(C1, C2 |
| + , ctx |
| , D2); |
| | |
| S = fn2(C1, C2 |
| + , ctx |
| , D2); |
| ) |
| ...+> |
| } |
| |
| @ extends get_fn@ |
| identifier C1, C2, D; |
| attribute name UNUSED; |
| @@ |
| int fn(const char *C1, const char *C2, |
| + const struct config_context *ctx UNUSED, |
| void *D) {...} |
| |
| |
| // The previous rules don't catch all callbacks, especially if they're defined |
| // in a separate file from the git_config() call. Fix these manually. |
| @@ |
| identifier C1, C2, D; |
| attribute name UNUSED; |
| @@ |
| int |
| ( |
| git_ident_config |
| | |
| urlmatch_collect_fn |
| | |
| write_one_config |
| | |
| forbid_remote_url |
| | |
| credential_config_callback |
| ) |
| (const char *C1, const char *C2, |
| + const struct config_context *ctx UNUSED, |
| void *D) {...} |
| |
| @@ |
| identifier C1, C2, D, D2, S, fn2; |
| @@ |
| int |
| ( |
| http_options |
| | |
| git_status_config |
| | |
| git_commit_config |
| | |
| git_default_core_config |
| | |
| grep_config |
| ) |
| (const char *C1, const char *C2, |
| + const struct config_context *ctx, |
| void *D) { |
| <+... |
| ( |
| fn2(C1, C2 |
| + , ctx |
| , D2); |
| | |
| if(fn2(C1, C2 |
| + , ctx |
| , D2) < 0) { ... } |
| | |
| return fn2(C1, C2 |
| + , ctx |
| , D2); |
| | |
| S = fn2(C1, C2 |
| + , ctx |
| , D2); |
| ) |
| ...+> |
| } |