A larger v2, this:
* Renames string_list.cocci to string-list.cocci (to be consistent
with the string-list.[ch])
* Answers Elijah's question about why the previous 2/2 left out one
case, it's due to --disable-worth-trying-opt. That's now split out
into its own commit.
FWIW it's the only case with "make coccicheck" that we've "missed",
including existing rules, but we just got lucky there.
I have some follow-up patches to fix various such bugs in our
coccicheck, but let's leave the larger fixes for now.
* The new 4/6 duplicates Junio's
https://lore.kernel.org/git/xmqq7d471dns.fsf@gitster.g/, but now
we've got a coccinelle rule for it and similar inverse cases. It's
still the only in-tree case, but it's probably good to keep the
rule around regardless.
I could also eject that *.C change and say this is based on
Junio's, or both could make the same change and "merge" will sort
it out. I do think 4/6 is a bit easier to read with an actual case
where we change things, but then again there's the added tests...
* A new 5/6 tweaks some "strdup_strings" dancing to a simpler
pattern, this is adjusted from my local WIP branch of larger
string_list API fixes.
* A new 6/6 fixes a confusing case of dup v.s. nodup to use a more
obvious callback pattern where we don't flip-flop.
Ævar Arnfjörð Bjarmason (6):
string_list API users + cocci: use string_list_init_dup()
cocci: apply string_list.cocci with --disable-worth-trying-opt
reflog-walk.c: use string_list_init_dup()
cocci: add "string_list" rule to swap "DUP" <-> "NODUP"
string-list API users: don't tweak "strdup_strings" to free dupes
notes.c: make "struct string_list display_notes_refs" non-static
bisect.c | 7 +++---
builtin/remote.c | 3 +--
contrib/coccinelle/string-list.cocci | 26 ++++++++++++++++++++++
contrib/coccinelle/tests/string-list.c | 20 +++++++++++++++++
contrib/coccinelle/tests/string-list.res | 18 +++++++++++++++
notes-utils.c | 4 ++--
notes.c | 28 ++++++++++++++----------
reflog-walk.c | 2 +-
refs.c | 4 ++--
resolve-undo.c | 8 +++----
revision.c | 4 ++--
11 files changed, 95 insertions(+), 29 deletions(-)
create mode 100644 contrib/coccinelle/string-list.cocci
create mode 100644 contrib/coccinelle/tests/string-list.c
create mode 100644 contrib/coccinelle/tests/string-list.res
Range-diff against v1:
1: c89758491e7 ! 1: 61a62bdf8e9 string_list API users + cocci: use string_list_init_dup()
@@ Commit message
Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
- ## contrib/coccinelle/string_list.cocci (new) ##
+ ## contrib/coccinelle/string-list.cocci (new) ##
@@
+@@
+struct string_list *P;
@@ contrib/coccinelle/string_list.cocci (new)
+- (P)->strdup_strings = 1;
++ string_list_init_dup(P);
- ## contrib/coccinelle/tests/string_list.c (new) ##
+ ## contrib/coccinelle/tests/string-list.c (new) ##
@@
+int init(void)
+{
@@ contrib/coccinelle/tests/string_list.c (new)
+ list->strdup_strings = 1;
+}
- ## contrib/coccinelle/tests/string_list.res (new) ##
+ ## contrib/coccinelle/tests/string-list.res (new) ##
@@
+int init(void)
+{
2: 5d8baa9cbc4 ! 2: 33e551a2f4c string-list API users: manually use string_list_init_*()
@@ Metadata
Author: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
## Commit message ##
- string-list API users: manually use string_list_init_*()
+ cocci: apply string_list.cocci with --disable-worth-trying-opt
- Convert various code that didn't use string_list_init_*() to do so, in
- cases where the only thing being allocated was the string list we can
- change from CALLOC_ARRAY() to ALLOC_ARRAY(), the string_list_init_*()
- function will zero out the memory.
+ Apply the new string-list.cocci added in the preceding commit with
+ --disable-worth-trying-opt. For optimization purposes we run spatch in
+ a mode where even though we run it with --all-includes we'll miss some
+ changes because we don't use --disable-worth-trying-opt.
- This covers cases that weren't matched by tho coccinelle rule in the
- preceding commit, which is conservative enough to care about the type
- of what we're modifying.
+ This is because without that option it'll take a look at
+ notes-utils.c, and conclude that it doesn't need to process
+ it (irrelevant output excluded with "[...]"):
+
+ $ spatch --sp-file contrib/coccinelle/string-list.cocci --patch . notes-utils.c
+ [...]
+ (ONCE) Expected tokens string_list strdup_strings CALLOC_ARRAY
+ Skipping: notes-utils.c
+
+ This is just one of the known (and probably some unknown) issues where
+ our "make coccicheck" fails to include changes for whatever
+ reason. That should be fixed more generally, but let's just fix this
+ manually for now.
Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
@@ notes-utils.c: struct notes_rewrite_cfg *init_copy_notes_for_rewrite(const char
c->refs_from_env = 0;
c->mode_from_env = 0;
if (rewrite_mode_env) {
-
- ## reflog-walk.c ##
-@@ reflog-walk.c: struct reflog_walk_info {
- void init_reflog_walk(struct reflog_walk_info **info)
- {
- CALLOC_ARRAY(*info, 1);
-- (*info)->complete_reflogs.strdup_strings = 1;
-+ string_list_init_dup(&((*info)->complete_reflogs));
- }
-
- void reflog_walk_info_release(struct reflog_walk_info *info)
-: ----------- > 3: 62aab32ae77 reflog-walk.c: use string_list_init_dup()
-: ----------- > 4: 2d858c49243 cocci: add "string_list" rule to swap "DUP" <-> "NODUP"
-: ----------- > 5: 8c0ac6cbd96 string-list API users: don't tweak "strdup_strings" to free dupes
-: ----------- > 6: b0de7a63d1c notes.c: make "struct string_list display_notes_refs" non-static