[v2] dim: Avoid false positives with BUG detection
diff mbox

Message ID 1457710283-12722-1-git-send-email-tvrtko.ursulin@linux.intel.com
State New
Headers show

Commit Message

Tvrtko Ursulin March 11, 2016, 3:31 p.m. UTC
From: Tvrtko Ursulin <tvrtko.ursulin@intel.com>

Makes sure that the diff line adding the BUG is not immediately
preceded by the diff line removing the BUG. Or in other words,
avoids false positives when existing BUG is edited.

v2: Sent the incomplete version out...

Signed-off-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
---
 dim | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

Comments

Tvrtko Ursulin March 17, 2016, 10:06 a.m. UTC | #1
On 11/03/16 15:31, Tvrtko Ursulin wrote:
> From: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
>
> Makes sure that the diff line adding the BUG is not immediately
> preceded by the diff line removing the BUG. Or in other words,
> avoids false positives when existing BUG is edited.
>
> v2: Sent the incomplete version out...
>
> Signed-off-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
> ---
>   dim | 3 ++-
>   1 file changed, 2 insertions(+), 1 deletion(-)
>
> diff --git a/dim b/dim
> index 1e7622a1e902..5392c64bf5b4 100755
> --- a/dim
> +++ b/dim
> @@ -691,7 +691,8 @@ function shell_checkpatch
>   	local cmd=$1
>
>   	$cmd | scripts/checkpatch.pl -q --strict - || true
> -	if $cmd | grep '^\+.*\WBUG' > /dev/null; then
> +	local bug_lines=$("$cmd" | grep -m 1 -B 1 '^\+.*\WBUG' | grep -c '^[+-].*\WBUG')
> +	if test "$bug_lines" -eq 1; then
>   		warn_or_fail "New BUG macro added"
>   	fi
>   	$cmd | grep '^\+.*drm_i915_private_t' > /dev/null && echo "WARNING: New drm_i915_private_t added" || true
>

Are we interested in this?

Regards,

Tvrtko
Jani Nikula March 17, 2016, 11:27 a.m. UTC | #2
On Thu, 17 Mar 2016, Tvrtko Ursulin <tvrtko.ursulin@linux.intel.com> wrote:
> [ text/plain ]
>
>
> On 11/03/16 15:31, Tvrtko Ursulin wrote:
>> From: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
>>
>> Makes sure that the diff line adding the BUG is not immediately
>> preceded by the diff line removing the BUG. Or in other words,
>> avoids false positives when existing BUG is edited.
>>
>> v2: Sent the incomplete version out...
>>
>> Signed-off-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
>> ---
>>   dim | 3 ++-
>>   1 file changed, 2 insertions(+), 1 deletion(-)
>>
>> diff --git a/dim b/dim
>> index 1e7622a1e902..5392c64bf5b4 100755
>> --- a/dim
>> +++ b/dim
>> @@ -691,7 +691,8 @@ function shell_checkpatch
>>   	local cmd=$1
>>
>>   	$cmd | scripts/checkpatch.pl -q --strict - || true
>> -	if $cmd | grep '^\+.*\WBUG' > /dev/null; then
>> +	local bug_lines=$("$cmd" | grep -m 1 -B 1 '^\+.*\WBUG' | grep -c '^[+-].*\WBUG')
>> +	if test "$bug_lines" -eq 1; then
>>   		warn_or_fail "New BUG macro added"
>>   	fi
>>   	$cmd | grep '^\+.*drm_i915_private_t' > /dev/null && echo "WARNING: New drm_i915_private_t added" || true
>>
>
> Are we interested in this?

Yes. Sorry, I've updated these lines so you'll need to rebase, I'm
afraid.

I'd also be fine with comparing the results of $(grep -c '^\+.*\WBUG)
and $(grep -c '^\-.*\WBUG) and complaining if there are more +'s than
-'s. But your stricter version is fine too.

BR,
Jani.




>
> Regards,
>
> Tvrtko
Dave Gordon March 18, 2016, 3:42 p.m. UTC | #3
On 17/03/16 11:27, Jani Nikula wrote:
> On Thu, 17 Mar 2016, Tvrtko Ursulin <tvrtko.ursulin@linux.intel.com> wrote:
>> [ text/plain ]
>>
>>
>> On 11/03/16 15:31, Tvrtko Ursulin wrote:
>>> From: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
>>>
>>> Makes sure that the diff line adding the BUG is not immediately
>>> preceded by the diff line removing the BUG. Or in other words,
>>> avoids false positives when existing BUG is edited.
>>>
>>> v2: Sent the incomplete version out...
>>>
>>> Signed-off-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
>>> ---
>>>    dim | 3 ++-
>>>    1 file changed, 2 insertions(+), 1 deletion(-)
>>>
>>> diff --git a/dim b/dim
>>> index 1e7622a1e902..5392c64bf5b4 100755
>>> --- a/dim
>>> +++ b/dim
>>> @@ -691,7 +691,8 @@ function shell_checkpatch
>>>    	local cmd=$1
>>>
>>>    	$cmd | scripts/checkpatch.pl -q --strict - || true
>>> -	if $cmd | grep '^\+.*\WBUG' > /dev/null; then
>>> +	local bug_lines=$("$cmd" | grep -m 1 -B 1 '^\+.*\WBUG' | grep -c '^[+-].*\WBUG')
>>> +	if test "$bug_lines" -eq 1; then
>>>    		warn_or_fail "New BUG macro added"
>>>    	fi
>>>    	$cmd | grep '^\+.*drm_i915_private_t' > /dev/null && echo "WARNING: New drm_i915_private_t added" || true
>>>
>>
>> Are we interested in this?
>
> Yes. Sorry, I've updated these lines so you'll need to rebase, I'm
> afraid.
>
> I'd also be fine with comparing the results of $(grep -c '^\+.*\WBUG)
> and $(grep -c '^\-.*\WBUG) and complaining if there are more +'s than
> -'s. But your stricter version is fine too.
>
> BR,
> Jani.

The version above doesn't really avoid all the issues, though; for 
example if the edited BUG spans multiple lines, or if the pattern 
spotted (first added line containing a word beginning with BUG) is in a 
comment or string, or what's actually happened is that some code has 
been moved from before an existing BUG() to after or vice-versa, but 
diff thinks you've deleted the old BUG() and added a new one :(

.Dave.

Patch
diff mbox

diff --git a/dim b/dim
index 1e7622a1e902..5392c64bf5b4 100755
--- a/dim
+++ b/dim
@@ -691,7 +691,8 @@  function shell_checkpatch
 	local cmd=$1
 
 	$cmd | scripts/checkpatch.pl -q --strict - || true
-	if $cmd | grep '^\+.*\WBUG' > /dev/null; then
+	local bug_lines=$("$cmd" | grep -m 1 -B 1 '^\+.*\WBUG' | grep -c '^[+-].*\WBUG')
+	if test "$bug_lines" -eq 1; then
 		warn_or_fail "New BUG macro added"
 	fi
 	$cmd | grep '^\+.*drm_i915_private_t' > /dev/null && echo "WARNING: New drm_i915_private_t added" || true