Meta/Reintegrate: allow applying cocci transformation

Junio C Hamano committed Oct 23, 2018 at 16:01 UTC f4fe00f88755d0f4e4468a6ad20bc9111a79d03b
1 file changed +32 -2
Reintegrate
+32 -2
@@ -1,6 +1,9 @@
1 #!/bin/sh
2
3 -accept_rerere="--rerere-autoupdate" generate=no update= diff= edit= stop_at_cut=
3 +accept_rerere="--rerere-autoupdate"
4 +generate=no
5 +exec=:
6 +update= diff= edit= stop_at_cut= skip_cocci=
7 while case "$#,$1" in 0,*) break;; *,-*) ;; esac
8 do
9 case "$1" in
@@ -15,6 +18,9 @@ do
18 -u) update=${2?"update what?"}
19 generate=yes
20 shift ;;
21 + -x) exec=${2?exec}; shift ;;
22 + -x?*) exec=${1#-x} ;;
23 + -ss) skip_cocci=t ;;
24 *) generate=yes
25 break ;;
26 esac
@@ -29,7 +35,7 @@ annotate_merge () {
35 s/^\s*//;
36 if (/^Will (?:\S+ ){0,2}(fast-track|hold|keep|merge|drop|discard|cook|kick|defer|eject|be re-?rolled|wait)[,. ]/ ||
37 /^Not urgent/ || /^Not ready/ || /^Waiting for / ||
32 - /^Can wait in / || /^Still / ||
38 + /^Can wait in / || /^Still / || /^Stuck / ||
39 /^Needs? / || /^Expecting / || /^May want to /) {
40 return 1;
41 }
@@ -108,6 +114,8 @@ annotate_merge () {
114 ' "$1"
115 }
116
117 +cocci_mark="treewide: apply cocci patch"
118 +
119 case "$generate" in
120 no)
121 accept_rerere () {
@@ -151,6 +159,23 @@ no)
159 count_since_last_cut=0
160 fi
161 continue ;;
162 + '#cocci')
163 + if test -n "$skip_cocci" && test -n "$eh"
164 + then
165 + git cherry-pick --no-commit "$eh"
166 + else
167 + rm -f contrib/coccinelle/*.patch
168 + Meta/Make -j8 coccicheck
169 + cat contrib/coccinelle/*.patch | git apply --index ||
170 + exit
171 + git diff --quiet HEAD && continue
172 + fi
173 + git commit -m "$cocci_mark" || exit
174 +
175 + mark_cut
176 +
177 + continue
178 + ;;
179 '#'* | '')
180 continue ;;
181 esac
@@ -198,6 +223,8 @@ no)
223 git cherry-pick "$branch" || exit ;;
224 *) echo >&2 "Eh? $branch $eh"; exit ;;
225 esac
226 +
227 + eval "$exec" || exit
228 done
229 exit
230 esac
@@ -269,6 +296,9 @@ generate () {
296 if other=$(git rev-parse -q --verify "$commit^2")
297 then
298 show_merge
299 + elif test "$msg" = "$cocci_mark"
300 + then
301 + merged="#cocci "$(git rev-parse "$commit^0")
302 else
303 show_pick
304 fi