aboutsummaryrefslogtreecommitdiffstats
path: root/contrib/coccinelle
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/coccinelle')
-rw-r--r--contrib/coccinelle/commit.cocci3
-rw-r--r--contrib/coccinelle/meson.build79
-rw-r--r--contrib/coccinelle/the_repository.cocci2
3 files changed, 82 insertions, 2 deletions
diff --git a/contrib/coccinelle/commit.cocci b/contrib/coccinelle/commit.cocci
index af6dd4c20c..c5284604c5 100644
--- a/contrib/coccinelle/commit.cocci
+++ b/contrib/coccinelle/commit.cocci
@@ -25,7 +25,8 @@ expression s;
// functions, then the recommended transformation will be bogus with
// repo_get_commit_tree() on the LHS.
@@
-identifier f !~ "^(repo_get_commit_tree|get_commit_tree_in_graph_one|load_tree_for_commit|set_commit_tree)$";
+identifier f != { repo_get_commit_tree, get_commit_tree_in_graph_one,
+ load_tree_for_commit, set_commit_tree };
expression c;
@@
f(...) {<...
diff --git a/contrib/coccinelle/meson.build b/contrib/coccinelle/meson.build
new file mode 100644
index 0000000000..dc3f73c2e7
--- /dev/null
+++ b/contrib/coccinelle/meson.build
@@ -0,0 +1,79 @@
+coccinelle_opt = get_option('coccinelle').require(
+ fs.exists(meson.project_source_root() / '.git'),
+ error_message: 'coccinelle can only be run from a git checkout',
+)
+
+spatch = find_program('spatch', required: coccinelle_opt)
+if not spatch.found()
+ subdir_done()
+endif
+
+rules = [
+ 'array.cocci',
+ 'commit.cocci',
+ 'config_fn_ctx.pending.cocci',
+ 'equals-null.cocci',
+ 'flex_alloc.cocci',
+ 'free.cocci',
+ 'git_config_number.cocci',
+ 'hashmap.cocci',
+ 'index-compatibility.cocci',
+ 'object_id.cocci',
+ 'preincr.cocci',
+ 'qsort.cocci',
+ 'refs.cocci',
+ 'strbuf.cocci',
+ 'swap.cocci',
+ 'the_repository.cocci',
+ 'xcalloc.cocci',
+ 'xopen.cocci',
+ 'xstrdup_or_null.cocci',
+ 'xstrncmpz.cocci',
+]
+
+concatenated_rules = custom_target(
+ command: [
+ 'cat', '@INPUT@',
+ ],
+ input: rules,
+ output: 'rules.cocci',
+ capture: true,
+)
+
+coccinelle_sources = []
+foreach source : run_command(git, '-C', meson.project_source_root(), 'ls-files', '--deduplicate', '*.c', third_party_excludes, check: true).stdout().split()
+ coccinelle_sources += source
+endforeach
+
+coccinelle_headers = []
+foreach header : headers_to_check
+ coccinelle_headers += meson.project_source_root() / header
+endforeach
+
+patches = [ ]
+foreach source : coccinelle_sources
+ patches += custom_target(
+ command: [
+ spatch,
+ '--all-includes',
+ '--sp-file', concatenated_rules,
+ '--patch', meson.project_source_root(),
+ '@INPUT@',
+ ],
+ input: meson.project_source_root() / source,
+ output: source.underscorify() + '.patch',
+ capture: true,
+ depend_files: coccinelle_headers,
+ )
+endforeach
+
+concatenated_patch = custom_target(
+ command: [
+ 'cat', '@INPUT@',
+ ],
+ input: patches,
+ output: 'cocci.patch',
+ capture: true,
+)
+
+alias_target('coccicheck', concatenated_patch)
diff --git a/contrib/coccinelle/the_repository.cocci b/contrib/coccinelle/the_repository.cocci
index 765ad68967..ea7fe1c8db 100644
--- a/contrib/coccinelle/the_repository.cocci
+++ b/contrib/coccinelle/the_repository.cocci
@@ -77,7 +77,7 @@
|
- diff_setup
+ repo_diff_setup
-// object-store.h
+// odb.h
|
- read_object_file
+ repo_read_object_file