devtools: don't use bash extension in checkpatches

Message ID 20180815153346.11495-1-i.maximets@samsung.com (mailing list archive)
State Rejected, archived
Delegated to: Thomas Monjalon
Headers
Series devtools: don't use bash extension in checkpatches |

Checks

Context Check Description
ci/checkpatch success coding style OK
ci/Intel-compilation success Compilation OK

Commit Message

Ilya Maximets Aug. 15, 2018, 3:33 p.m. UTC
  'read -d' is a bash extension and doesn't work in POSIX shells.
For example 'checkpatches.sh' doesn't work properly on ubuntu,
where 'dash' is a default shell:

  ./devtools/checkpatches.sh: 52: read: Illegal option -d

Let's use single quotes instead of variable.

Fixes: 7413e7f2aeb3 ("devtools: alert on new calls to exit from libs")
CC: stable@dpdk.org

Signed-off-by: Ilya Maximets <i.maximets@samsung.com>
---
 devtools/checkpatches.sh | 34 ++++++++++++++++------------------
 1 file changed, 16 insertions(+), 18 deletions(-)
  

Comments

Arnon Warshavsky Aug. 16, 2018, 5:25 a.m. UTC | #1
Hi Ilya

Let's use single quotes instead of variable.


Using the script directly with single quotes loses the ability to reuse it
with an additional set of folders , expressions and RET_ON_FAIL.
If we wish to keep the awk code in this file and not in a separate file,
maybe receiving the awk script parameters from the function
 check_forbidden_additions( ) can also preserve the ability to reuse in
future cases.

thanks
/Arnon
  
Thomas Monjalon Sept. 14, 2018, 2:50 p.m. UTC | #2
16/08/2018 07:25, Arnon Warshavsky:
> Hi Ilya
> 
> Let's use single quotes instead of variable.
> 
> 
> Using the script directly with single quotes loses the ability to reuse it
> with an additional set of folders , expressions and RET_ON_FAIL.

I don't know awk. Please could you explain what we are loosing and why?

> If we wish to keep the awk code in this file and not in a separate file,
> maybe receiving the awk script parameters from the function
>  check_forbidden_additions( ) can also preserve the ability to reuse in
> future cases.

Yes I feel we could add some parameters to this function.
And yes, we could move the awk script in a separate file.
Actually, it would be better to keep checkpatches.sh as a wrapper script
calling various tools.

Thanks
  
Ilya Maximets Sept. 14, 2018, 3:10 p.m. UTC | #3
Hi Thomas.

Beside your questions,
There is another patch that targeted to fix this issue:
	http://patches.dpdk.org/patch/44020/
And one similar to mine that I missed while sending:
	http://patches.dpdk.org/patch/43692/

So, I'm not sure which one should be accepted and if I need to
update my version. What do you think? Stephen? Andrzej?

Best regards, Ilya Maximets.

On 14.09.2018 17:50, Thomas Monjalon wrote:
> 16/08/2018 07:25, Arnon Warshavsky:
>> Hi Ilya
>>
>> Let's use single quotes instead of variable.
>>
>>
>> Using the script directly with single quotes loses the ability to reuse it
>> with an additional set of folders , expressions and RET_ON_FAIL.
> 
> I don't know awk. Please could you explain what we are loosing and why?
> 
>> If we wish to keep the awk code in this file and not in a separate file,
>> maybe receiving the awk script parameters from the function
>>  check_forbidden_additions( ) can also preserve the ability to reuse in
>> future cases.
> 
> Yes I feel we could add some parameters to this function.
> And yes, we could move the awk script in a separate file.
> Actually, it would be better to keep checkpatches.sh as a wrapper script
> calling various tools.
> 
> Thanks
> 
> 
> 
>
  
Arnon Warshavsky Sept. 15, 2018, 7:07 p.m. UTC | #4
> HI
> >
> > Let's use single quotes instead of variable.
> >
> >
> > Using the script directly with single quotes loses the ability to reuse
> it
> > with an additional set of folders , expressions and RET_ON_FAIL.
>
> I don't know awk. Please could you explain what we are loosing and why?
>
The awk script was written with intention to be called with future optional
various folders and banned expressions.
The optional reuse takes place inside the function  check_forbidden_additions(
)
with  different instances passed to the awk script that is loaded using the
apparently unfriendly -d.
(currently only rte_panic)
If we move the parameters to the outer function, i.e
check_forbidden_additions(
params ...)
then there is no problem calling the awk script with single quotes

>
> > If we wish to keep the awk code in this file and not in a separate file,
> > maybe receiving the awk script parameters from the function
> >  check_forbidden_additions( ) can also preserve the ability to reuse in
> > future cases.
>
> Yes I feel we could add some parameters to this function.
> And yes, we could move the awk script in a separate file.
> Actually, it would be better to keep checkpatches.sh as a wrapper script
> calling various tools.
>
I was under the wrong impression the  opposite was desired, so yes,
moving the entire awk code to a separate file would indeed be the cleanest.

thanks
/Arnon
  
Thomas Monjalon Sept. 15, 2018, 8:37 p.m. UTC | #5
15/09/2018 21:07, Arnon Warshavsky:
> > > If we wish to keep the awk code in this file and not in a separate file,
> > > maybe receiving the awk script parameters from the function
> > >  check_forbidden_additions( ) can also preserve the ability to reuse in
> > > future cases.
> >
> > Yes I feel we could add some parameters to this function.
> > And yes, we could move the awk script in a separate file.
> > Actually, it would be better to keep checkpatches.sh as a wrapper script
> > calling various tools.
> >
> I was under the wrong impression the  opposite was desired, so yes,
> moving the entire awk code to a separate file would indeed be the cleanest.

OK, who can do this change please?
  
Thomas Monjalon Sept. 15, 2018, 9:07 p.m. UTC | #6
14/09/2018 17:10, Ilya Maximets:
> Hi Thomas.
> 
> Beside your questions,
> There is another patch that targeted to fix this issue:
> 	http://patches.dpdk.org/patch/44020/
> And one similar to mine that I missed while sending:
> 	http://patches.dpdk.org/patch/43692/
> 
> So, I'm not sure which one should be accepted and if I need to
> update my version. What do you think? Stephen? Andrzej?

Generally speaking, I think it's better to avoid bash extensions
and comply with POSIX. That's why I support the proposal of moving
the awk script in its own file, removing the need for "read -d".
  
Arnon Warshavsky Sept. 16, 2018, 3:13 a.m. UTC | #7
> > I was under the wrong impression the  opposite was desired, so yes,
> > moving the entire awk code to a separate file would indeed be the
> cleanest.
>
> OK, who can do this change please?
>
>
> I will do the move to a different file later on this week
thanks
/Arnon
  

Patch

diff --git a/devtools/checkpatches.sh b/devtools/checkpatches.sh
index ba795ad1d..aad35275c 100755
--- a/devtools/checkpatches.sh
+++ b/devtools/checkpatches.sh
@@ -44,12 +44,18 @@  print_usage () {
 }
 
 check_forbidden_additions() {
-    # This awk script receives a list of expressions to monitor
-    # and a list of folders to search these expressions in
-    # - No search is done inside comments
-    # - Both additions and removals of the expressions are checked
-    #   A positive balance of additions fails the check
-	read -d '' awk_script << 'EOF'
+	# This awk script receives a list of expressions to monitor
+	# and a list of folders to search these expressions in
+	# - No search is done inside comments
+	# - Both additions and removals of the expressions are checked
+	#   A positive balance of additions fails the check
+	# ---------------------------------
+	# refrain from new additions of rte_panic() and rte_exit()
+	# multiple folders and expressions are separated by spaces
+	awk -v FOLDERS="lib drivers" \
+		-v EXPRESSIONS="rte_panic\\\( rte_exit\\\(" \
+		-v RET_ON_FAIL=1 \
+	'
 	BEGIN {
 		split(FOLDERS,deny_folders," ");
 		split(EXPRESSIONS,deny_expr," ");
@@ -70,7 +76,7 @@  check_forbidden_additions() {
 		# non comment code
 		if (in_comment == 0) {
 			for (i in deny_expr) {
-				forbidden_added = "^\+.*" deny_expr[i];
+				forbidden_added = "^+.*" deny_expr[i];
 				forbidden_removed="^-.*" deny_expr[i];
 				current = expressions[deny_expr[i]]
 				if ($0 ~ forbidden_added) {
@@ -90,13 +96,13 @@  check_forbidden_additions() {
 	}
 	# switch to next file , check if the balance of add/remove
 	# of previous filehad new additions
-	($0 ~ "^\+\+\+ b/") {
+	($0 ~ "^+++ b/") {
 		in_file = 0;
 		if (count > 0) {
 			exit;
 		}
 		for (i in deny_folders) {
-			re = "^\+\+\+ b/" deny_folders[i];
+			re = "^+++ b/" deny_folders[i];
 			if ($0 ~ deny_folders[i]) {
 				in_file = 1
 				last_file = $0
@@ -114,15 +120,7 @@  check_forbidden_additions() {
 			}
 			exit RET_ON_FAIL
 		}
-	}
-EOF
-	# ---------------------------------
-	# refrain from new additions of rte_panic() and rte_exit()
-	# multiple folders and expressions are separated by spaces
-	awk -v FOLDERS="lib drivers" \
-		-v EXPRESSIONS="rte_panic\\\( rte_exit\\\(" \
-		-v RET_ON_FAIL=1 \
-		"$awk_script" -
+	}' -
 }
 
 number=0