Message ID | 20230504131245.2985400-3-luca.fancellu@arm.com (mailing list archive) |
---|---|
State | Accepted |
Headers | show |
Series | Fix and improvements to xen-analysis.py | expand |
On 04/05/2023 2:12 pm, Luca Fancellu wrote: > Allow the use of Cppcheck version above 2.7, exception for 2.8 which > is known and documented do be broken. > > Signed-off-by: Luca Fancellu <luca.fancellu@arm.com> > --- > xen/scripts/xen_analysis/cppcheck_analysis.py | 20 +++++++++++++++---- > 1 file changed, 16 insertions(+), 4 deletions(-) > > diff --git a/xen/scripts/xen_analysis/cppcheck_analysis.py b/xen/scripts/xen_analysis/cppcheck_analysis.py > index 658795bb9f5b..c3783e8df343 100644 > --- a/xen/scripts/xen_analysis/cppcheck_analysis.py > +++ b/xen/scripts/xen_analysis/cppcheck_analysis.py > @@ -157,13 +157,25 @@ def generate_cppcheck_deps(): > "Error occured retrieving cppcheck version:\n{}\n\n{}" > ) > > - version_regex = re.search('^Cppcheck (.*)$', invoke_cppcheck, flags=re.M) > + version_regex = re.search('^Cppcheck (\d+).(\d+)(?:.\d+)?$', > + invoke_cppcheck, flags=re.M) > # Currently, only cppcheck version >= 2.7 is supported, but version 2.8 is > # known to be broken, please refer to docs/misra/cppcheck.txt > - if (not version_regex) or (not version_regex.group(1).startswith("2.7")): > + if (not version_regex) or len(version_regex.groups()) < 2: > raise CppcheckDepsPhaseError( > - "Can't find cppcheck version or version is not 2.7" > - ) > + "Can't find cppcheck version or version not identified: " > + "{}".format(invoke_cppcheck) > + ) > + major = int(version_regex.group(1)) > + minor = int(version_regex.group(2)) > + if major < 2 or (major == 2 and minor < 7): > + raise CppcheckDepsPhaseError( > + "Cppcheck version < 2.7 is not supported" > + ) > + if major == 2 and minor == 8: > + raise CppcheckDepsPhaseError( > + "Cppcheck version 2.8 is known to be broken, see the documentation" > + ) Python sorts tuples the helpful way around, so for example v = (2, 9) if v < (2, 7) or v == (2, 8): # handle error does what you want, and far more concisely. ~Andrew
> On 4 May 2023, at 14:19, Andrew Cooper <andrew.cooper3@citrix.com> wrote: > > On 04/05/2023 2:12 pm, Luca Fancellu wrote: >> Allow the use of Cppcheck version above 2.7, exception for 2.8 which >> is known and documented do be broken. >> >> Signed-off-by: Luca Fancellu <luca.fancellu@arm.com> >> --- >> xen/scripts/xen_analysis/cppcheck_analysis.py | 20 +++++++++++++++---- >> 1 file changed, 16 insertions(+), 4 deletions(-) >> >> diff --git a/xen/scripts/xen_analysis/cppcheck_analysis.py b/xen/scripts/xen_analysis/cppcheck_analysis.py >> index 658795bb9f5b..c3783e8df343 100644 >> --- a/xen/scripts/xen_analysis/cppcheck_analysis.py >> +++ b/xen/scripts/xen_analysis/cppcheck_analysis.py >> @@ -157,13 +157,25 @@ def generate_cppcheck_deps(): >> "Error occured retrieving cppcheck version:\n{}\n\n{}" >> ) >> >> - version_regex = re.search('^Cppcheck (.*)$', invoke_cppcheck, flags=re.M) >> + version_regex = re.search('^Cppcheck (\d+).(\d+)(?:.\d+)?$', >> + invoke_cppcheck, flags=re.M) >> # Currently, only cppcheck version >= 2.7 is supported, but version 2.8 is >> # known to be broken, please refer to docs/misra/cppcheck.txt >> - if (not version_regex) or (not version_regex.group(1).startswith("2.7")): >> + if (not version_regex) or len(version_regex.groups()) < 2: >> raise CppcheckDepsPhaseError( >> - "Can't find cppcheck version or version is not 2.7" >> - ) >> + "Can't find cppcheck version or version not identified: " >> + "{}".format(invoke_cppcheck) >> + ) >> + major = int(version_regex.group(1)) >> + minor = int(version_regex.group(2)) >> + if major < 2 or (major == 2 and minor < 7): >> + raise CppcheckDepsPhaseError( >> + "Cppcheck version < 2.7 is not supported" >> + ) >> + if major == 2 and minor == 8: >> + raise CppcheckDepsPhaseError( >> + "Cppcheck version 2.8 is known to be broken, see the documentation" >> + ) > > Python sorts tuples the helpful way around, so for example > > v = (2, 9) > > if v < (2, 7) or v == (2, 8): > # handle error > > does what you want, and far more concisely. Hi Andrew, Thank you, this is very helpful, it’s clear that I’m at my first experiences with Python, I will change the code to use this more coincise form. Cheers, Luca > > ~Andrew
On Thu, 4 May 2023, Luca Fancellu wrote: > Allow the use of Cppcheck version above 2.7, exception for 2.8 which > is known and documented do be broken. > > Signed-off-by: Luca Fancellu <luca.fancellu@arm.com> Acked-by: Stefano Stabellini <sstabellini@kernel.org> Tested-by: Stefano Stabellini <sstabellini@kernel.org> > --- > xen/scripts/xen_analysis/cppcheck_analysis.py | 20 +++++++++++++++---- > 1 file changed, 16 insertions(+), 4 deletions(-) > > diff --git a/xen/scripts/xen_analysis/cppcheck_analysis.py b/xen/scripts/xen_analysis/cppcheck_analysis.py > index 658795bb9f5b..c3783e8df343 100644 > --- a/xen/scripts/xen_analysis/cppcheck_analysis.py > +++ b/xen/scripts/xen_analysis/cppcheck_analysis.py > @@ -157,13 +157,25 @@ def generate_cppcheck_deps(): > "Error occured retrieving cppcheck version:\n{}\n\n{}" > ) > > - version_regex = re.search('^Cppcheck (.*)$', invoke_cppcheck, flags=re.M) > + version_regex = re.search('^Cppcheck (\d+).(\d+)(?:.\d+)?$', > + invoke_cppcheck, flags=re.M) > # Currently, only cppcheck version >= 2.7 is supported, but version 2.8 is > # known to be broken, please refer to docs/misra/cppcheck.txt > - if (not version_regex) or (not version_regex.group(1).startswith("2.7")): > + if (not version_regex) or len(version_regex.groups()) < 2: > raise CppcheckDepsPhaseError( > - "Can't find cppcheck version or version is not 2.7" > - ) > + "Can't find cppcheck version or version not identified: " > + "{}".format(invoke_cppcheck) > + ) > + major = int(version_regex.group(1)) > + minor = int(version_regex.group(2)) > + if major < 2 or (major == 2 and minor < 7): > + raise CppcheckDepsPhaseError( > + "Cppcheck version < 2.7 is not supported" > + ) > + if major == 2 and minor == 8: > + raise CppcheckDepsPhaseError( > + "Cppcheck version 2.8 is known to be broken, see the documentation" > + ) > > # If misra option is selected, append misra addon and generate cppcheck > # files for misra analysis > -- > 2.34.1 >
diff --git a/xen/scripts/xen_analysis/cppcheck_analysis.py b/xen/scripts/xen_analysis/cppcheck_analysis.py index 658795bb9f5b..c3783e8df343 100644 --- a/xen/scripts/xen_analysis/cppcheck_analysis.py +++ b/xen/scripts/xen_analysis/cppcheck_analysis.py @@ -157,13 +157,25 @@ def generate_cppcheck_deps(): "Error occured retrieving cppcheck version:\n{}\n\n{}" ) - version_regex = re.search('^Cppcheck (.*)$', invoke_cppcheck, flags=re.M) + version_regex = re.search('^Cppcheck (\d+).(\d+)(?:.\d+)?$', + invoke_cppcheck, flags=re.M) # Currently, only cppcheck version >= 2.7 is supported, but version 2.8 is # known to be broken, please refer to docs/misra/cppcheck.txt - if (not version_regex) or (not version_regex.group(1).startswith("2.7")): + if (not version_regex) or len(version_regex.groups()) < 2: raise CppcheckDepsPhaseError( - "Can't find cppcheck version or version is not 2.7" - ) + "Can't find cppcheck version or version not identified: " + "{}".format(invoke_cppcheck) + ) + major = int(version_regex.group(1)) + minor = int(version_regex.group(2)) + if major < 2 or (major == 2 and minor < 7): + raise CppcheckDepsPhaseError( + "Cppcheck version < 2.7 is not supported" + ) + if major == 2 and minor == 8: + raise CppcheckDepsPhaseError( + "Cppcheck version 2.8 is known to be broken, see the documentation" + ) # If misra option is selected, append misra addon and generate cppcheck # files for misra analysis
Allow the use of Cppcheck version above 2.7, exception for 2.8 which is known and documented do be broken. Signed-off-by: Luca Fancellu <luca.fancellu@arm.com> --- xen/scripts/xen_analysis/cppcheck_analysis.py | 20 +++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-)