diff options
author | Abhishek Koneru <akoneru@redhat.com> | 2013-07-22 21:16:59 -0400 |
---|---|---|
committer | Abhishek Koneru <akoneru@redhat.com> | 2013-08-09 12:15:41 -0400 |
commit | 23cce978aedc948723a3cce211b4e743b0e7c444 (patch) | |
tree | 692fd70e3db88a37dff2cff7bf9c12e0b994c66a | |
parent | 68417821be716a300065c06d6c5c76828cb48c6a (diff) | |
download | pki-23cce978aedc948723a3cce211b4e743b0e7c444.tar.gz pki-23cce978aedc948723a3cce211b4e743b0e7c444.tar.xz pki-23cce978aedc948723a3cce211b4e743b0e7c444.zip |
Adding pylint scan to the build.
Adding the scripts and the pylintrc file to the build process.
The script is called before packaging the classes in the compose
scripts.
Ticket #316
-rw-r--r-- | dogtag.pylintrc | 262 | ||||
-rwxr-xr-x | pylint-build-scan.sh | 51 | ||||
-rw-r--r-- | scripts/compose_functions | 2 | ||||
-rw-r--r-- | specs/pki-core.spec | 12 |
4 files changed, 325 insertions, 2 deletions
diff --git a/dogtag.pylintrc b/dogtag.pylintrc new file mode 100644 index 000000000..aeb0a2362 --- /dev/null +++ b/dogtag.pylintrc @@ -0,0 +1,262 @@ +[MASTER] + +# Specify a configuration file. +#rcfile= + +# Python code to execute, usually for sys.path manipulation such as +# pygtk.require(). +#init-hook= + +# Profiled execution. +profile=no + +# Add files or directories to the blacklist. They should be base names, not +# paths. +ignore=CVS + +# Pickle collected data for later comparisons. +persistent=yes + +# List of plugins (as comma separated values of python modules names) to load, +# usually to register additional checkers. +load-plugins= + + +[MESSAGES CONTROL] + +# Enable the message, report, category or checker with the given id(s). You can +# either give multiple identifier separated by comma (,) or put this option +# multiple time. +#enable= + +# Disable the message, report, category or checker with the given id(s). You +# can either give multiple identifier separated by comma (,) or put this option +# multiple time (only on the command line, not in the configuration file where +# it should appear only once). +# W0105 (pointless-string-statement): +# String statement has no effect Used when a string is used as a statement (which of course has no effect). This is a particular case of W0104 with its own message so you can easily disable it if you’re # using those strings as documentation, instead of comments. +# W0511 (fixme): Used when a warning note as FIXME or XXX is detected. +disable=W0511,W0105 + + +[REPORTS] + +# Set the output format. Available formats are text, parseable, colorized, msvs +# (visual studio) and html. You can also give a reporter class, eg +# mypackage.mymodule.MyReporterClass. +output-format=text + +# Include message's id in output +include-ids=yes + +# Include symbolic ids of messages in output +symbols=no + +# Put messages in a separate file for each module / package specified on the +# command line instead of printing them on stdout. Reports (if any) will be +# written in a file name "pylint_global.[txt|html]". +files-output=no + +# Tells whether to display a full report or only the messages +reports=yes + +# Python expression which should return a note less than 10 (10 is the highest +# note). You have access to the variables errors warning, statement which +# respectively contain the number of errors / warnings messages and the total +# number of statements analyzed. This is used by the global evaluation report +# (RP0004). +evaluation=10.0 - ((float(5 * error + warning + refactor + convention) / statement) * 10) + +# Add a comment according to your evaluation note. This is used by the global +# evaluation report (RP0004). +comment=no + + +[FORMAT] + +# Maximum number of characters on a single line. +max-line-length=100 + +# Maximum number of lines in a module +max-module-lines=1000 + +# String used as indentation unit. This is usually " " (4 spaces) or "\t" (1 +# tab). +indent-string=' ' + + +[MISCELLANEOUS] + +# List of note tags to take in consideration, separated by a comma. +notes=FIXME,XXX,TODO + + +[VARIABLES] + +# Tells whether we should check for unused import in __init__ files. +init-import=no + +# A regular expression matching the beginning of the name of dummy variables +# (i.e. not used). +dummy-variables-rgx=_|dummy + +# List of additional names supposed to be defined in builtins. Remember that +# you should avoid to define new builtins when possible. +additional-builtins= + + +[SIMILARITIES] + +# Minimum lines number of a similarity. +min-similarity-lines=4 + +# Ignore comments when computing similarities. +ignore-comments=yes + +# Ignore docstrings when computing similarities. +ignore-docstrings=yes + +# Ignore imports when computing similarities. +ignore-imports=no + + +[TYPECHECK] + +# Tells whether missing members accessed in mixin class should be ignored. A +# mixin class is detected if its name ends with "mixin" (case insensitive). +ignore-mixin-members=yes + +# List of classes names for which member attributes should not be checked +# (useful for classes with attributes dynamically set). +ignored-classes=SQLObject + +# When zope mode is activated, add a predefined set of Zope acquired attributes +# to generated-members. +zope=no + +# List of members which are set dynamically and missed by pylint inference +# system, and so shouldn't trigger E0201 when accessed. Python regular +# expressions are accepted. +generated-members=REQUEST,acl_users,aq_parent + + +[BASIC] + +# Required attributes for module, separated by a comma +required-attributes= + +# List of builtins function names that should not be used, separated by a comma +bad-functions=map,filter,apply,input + +# Regular expression which should only match correct module names +module-rgx=(([a-z_][a-z0-9_]*)|([A-Z][a-zA-Z0-9]+))$ + +# Regular expression which should only match correct module level names +const-rgx=(([A-Z_][A-Z0-9_]*)|(__.*__))$ + +# Regular expression which should only match correct class names +class-rgx=[A-Z_][a-zA-Z0-9]+$ + +# Regular expression which should only match correct function names +function-rgx=[a-z_][a-z0-9_]{2,30}$ + +# Regular expression which should only match correct method names +method-rgx=[a-z_][a-z0-9_]{2,30}$ + +# Regular expression which should only match correct instance attribute names +attr-rgx=[a-z_][a-z0-9_]{2,30}$ + +# Regular expression which should only match correct argument names +argument-rgx=[a-z_][a-z0-9_]{2,30}$ + +# Regular expression which should only match correct variable names +variable-rgx=[a-z_][a-z0-9_]{2,30}$ + +# Regular expression which should only match correct list comprehension / +# generator expression variable names +inlinevar-rgx=[A-Za-z_][A-Za-z0-9_]*$ + +# Good variable names which should always be accepted, separated by a comma +good-names=i,j,k,ex,Run,rv,_ + +# Bad variable names which should always be refused, separated by a comma +bad-names=foo,bar,baz,toto,tutu,tata + +# Regular expression which should only match functions or classes name which do +# not require a docstring +no-docstring-rgx=__.*__ + + +[DESIGN] + +# Maximum number of arguments for function / method +max-args=5 + +# Argument names that match this expression will be ignored. Default to name +# with leading underscore +ignored-argument-names=_.* + +# Maximum number of locals for function / method body +max-locals=15 + +# Maximum number of return / yield for function / method body +max-returns=6 + +# Maximum number of branch for function / method body +max-branchs=12 + +# Maximum number of statements in function / method body +max-statements=50 + +# Maximum number of parents for a class (see R0901). +max-parents=7 + +# Maximum number of attributes for a class (see R0902). +max-attributes=7 + +# Minimum number of public methods for a class (see R0903). +min-public-methods=2 + +# Maximum number of public methods for a class (see R0904). +max-public-methods=20 + + +[CLASSES] + +# List of interface methods to ignore, separated by a comma. This is used for +# instance to not check methods defines in Zope's Interface base class. +ignore-iface-methods=isImplementedBy,deferred,extends,names,namesAndDescriptions,queryDescriptionFor,getBases,getDescriptionFor,getDoc,getName,getTaggedValue,getTaggedValueTags,isEqualOrExtendedBy,setTaggedValue,isImplementedByInstancesOf,adaptWith,is_implemented_by + +# List of method names used to declare (i.e. assign) instance attributes. +defining-attr-methods=__init__,__new__,setUp + +# List of valid names for the first argument in a class method. +valid-classmethod-first-arg=cls + +# List of valid names for the first argument in a metaclass class method. +valid-metaclass-classmethod-first-arg=mcs + + +[IMPORTS] + +# Deprecated modules which should not be used, separated by a comma +deprecated-modules=regsub,TERMIOS,Bastion,rexec + +# Create a graph of every (i.e. internal and external) dependencies in the +# given file (report RP0402 must not be disabled) +import-graph= + +# Create a graph of external dependencies in the given file (report RP0402 must +# not be disabled) +ext-import-graph= + +# Create a graph of internal dependencies in the given file (report RP0402 must +# not be disabled) +int-import-graph= + + +[EXCEPTIONS] + +# Exceptions that will emit a warning when being caught. Defaults to +# "Exception" +overgeneral-exceptions=Exception diff --git a/pylint-build-scan.sh b/pylint-build-scan.sh new file mode 100755 index 000000000..bc5efb711 --- /dev/null +++ b/pylint-build-scan.sh @@ -0,0 +1,51 @@ +#!/bin/sh -x + +### To be used only while building pki-core. ### + +if [ -z "$1" ] +then + echo "PKI codebase home not specified. Could not scan the python scripts. Returning 0 - for SUCCESS" + echo 0 + exit 0 +fi + +HOME_DIR=$1 + +PYLINT_RC_FILE_PATH="`cd $2/.. ; pwd`/dogtag.pylintrc" + +PYTHON_PACKAGE_DIR="$HOME_DIR`python -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())"`" + +PYLINT_REPORT_PATH="`cd $HOME_DIR/../.. ; pwd`/pylint-report" + +cd $PYTHON_PACKAGE_DIR + +rv=`pylint --rcfile=$PYLINT_RC_FILE_PATH pki/ $HOME_DIR/usr/sbin/pkispawn $HOME_DIR/usr/sbin/pkidestroy $HOME_DIR/usr/sbin/pki-upgrade $HOME_DIR/usr/sbin/pki-server-upgrade >> $PYLINT_REPORT_PATH` + +status=$? + +#Excerpt from pylint man page +#OUTPUT STATUS CODE +# Pylint should leave with following status code: +# * 0 if everything went fine +# * 1 if a fatal message was issued +# * 2 if an error message was issued +# * 4 if a warning message was issued +# * 8 if a refactor message was issued +# * 16 if a convention message was issued +# * 32 on usage error +# +# status 1 to 16 will be bit-ORed so you can know which different categories has been issued by analysing pylint output status code + +result=0 +if [ $(($status&1)) -eq 1 ] || [ $(($status&2)) -eq 2 ] || [ $(($status&4)) -eq 4 ] +then + echo -e "\n===============================================================================\n" + echo -e " Pylint has reported errors or warnings in the python code.\n" + echo -e " The report generated can be viewed at $PYLINT_REPORT_PATH.\n" + echo -e " If the issues shown are false positives, re-build pki-core after marking them" + echo -e " ignored in the configuration file dogtag.pylintrc, in the source code. \n" + echo -e "===============================================================================\n" + result=1 +fi + +exit $result diff --git a/scripts/compose_functions b/scripts/compose_functions index 7fbb941d6..3c08453e7 100644 --- a/scripts/compose_functions +++ b/scripts/compose_functions @@ -49,7 +49,7 @@ export PKI_BASE_DIR PKI_DOGTAG_DIR="${PKI_DIR}/dogtag" export PKI_DOGTAG_DIR -PKI_FILE_LIST="CMakeLists.txt COPYING CPackConfig.cmake ConfigureChecks.cmake DefineOptions.cmake README cmake_uninstall.cmake.in config.h.cmake" +PKI_FILE_LIST="CMakeLists.txt COPYING CPackConfig.cmake ConfigureChecks.cmake DefineOptions.cmake README cmake_uninstall.cmake.in config.h.cmake pylint-build-scan.sh dogtag.pylintrc" export PKI_FILE_LIST PKI_CMAKE_DIR="cmake" diff --git a/specs/pki-core.spec b/specs/pki-core.spec index 555f492af..c718b9d62 100644 --- a/specs/pki-core.spec +++ b/specs/pki-core.spec @@ -5,7 +5,7 @@ distutils.sysconfig import get_python_lib; print(get_python_lib(1))")} Name: pki-core Version: 10.1.0 -Release: 0.7%{?dist} +Release: 0.8%{?dist} Summary: Certificate System - PKI Core Components URL: http://pki.fedoraproject.org/ License: GPLv2 @@ -40,6 +40,7 @@ BuildRequires: resteasy-base-jettison-provider BuildRequires: resteasy >= 2.3.2-1 %endif +BuildRequires: pylint BuildRequires: junit BuildRequires: jpackage-utils >= 0:1.7.5-10 %if 0%{?rhel} || 0%{?fedora} >= 19 @@ -526,6 +527,12 @@ cd build cd build %{__make} install DESTDIR=%{buildroot} INSTALL="install -p" +# Scanning the python code with pylint. A return value of 0 represents there are no +# errors or warnings reported by pylint. +sh ../pylint-build-scan.sh %{buildroot} `pwd` +if [ $? -eq 1 ]; then + exit 1 +fi # Fedora 18 and 17: Substitute 'tomcat7jss.jar' for 'tomcatjss.jar' %if ! 0%{?rhel} && 0%{?fedora} <= 18 sed -i -e 's/grant codeBase "file:\/usr\/share\/java\/tomcatjss.jar" {/grant codeBase "file:\/usr\/share\/java\/tomcat7jss.jar" {/' %{buildroot}%{_datadir}/pki/server/conf/pki.policy @@ -1086,6 +1093,9 @@ fi %changelog +* Fri Aug 09 2013 Abhishek Koneru <akoneru@redhat.com> 10.1.0.0.8 +- Added pylint scan to the build process. + * Mon Jul 22 2013 Endi S. Dewata <edewata@redhat.com> 10.1.0-0.7 - Added man pages for upgrade tools. |