You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mesos.apache.org by kl...@apache.org on 2017/11/09 15:14:44 UTC
mesos git commit: Created virtual environment for linters in /support.
Repository: mesos
Updated Branches:
refs/heads/master 8ffc35414 -> 102a36304
Created virtual environment for linters in /support.
This change affects the Python linter but not the C++ linter as we
use a customized version of cpplint that we cannot get using pip.
Review: https://reviews.apache.org/r/63581/
Project: http://git-wip-us.apache.org/repos/asf/mesos/repo
Commit: http://git-wip-us.apache.org/repos/asf/mesos/commit/102a3630
Tree: http://git-wip-us.apache.org/repos/asf/mesos/tree/102a3630
Diff: http://git-wip-us.apache.org/repos/asf/mesos/diff/102a3630
Branch: refs/heads/master
Commit: 102a36304ca1a78384b8841c94b122a4a93e5a4e
Parents: 8ffc354
Author: Armand Grillet <ag...@mesosphere.io>
Authored: Thu Nov 9 16:10:22 2017 +0100
Committer: Kevin Klues <kl...@gmail.com>
Committed: Thu Nov 9 16:14:14 2017 +0100
----------------------------------------------------------------------
src/python/pylint.config | 31 ----------
support/.gitignore | 1 +
support/build-virtualenv | 65 ++++++++++++++++++++
support/mesos-style.py | 122 ++++++++++++++++++--------------------
support/pip-requirements.txt | 1 +
support/pylint.config | 31 ++++++++++
6 files changed, 157 insertions(+), 94 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/mesos/blob/102a3630/src/python/pylint.config
----------------------------------------------------------------------
diff --git a/src/python/pylint.config b/src/python/pylint.config
deleted file mode 100644
index f74f553..0000000
--- a/src/python/pylint.config
+++ /dev/null
@@ -1,31 +0,0 @@
-[MASTER]
-ignore=.git
-
-[MESSAGES CONTROL]
-disable=I0011,no-self-use,fixme,invalid-name,file-ignored
-
-[REPORTS]
-reports=no
-
-[BASIC]
-bad-functions=input,file
-good-names=i,j,k,f,ip,_
-min-public-methods=0
-
-[FORMAT]
-max-line-length=80
-indent-string=' '
-
-[DESIGN]
-max-branches=20
-max-returns=100
-
-[EXCEPTIONS]
-overgeneral-exceptions=
-
-[TYPECHECK]
-ignored-modules = netifaces
-
-[SIMILARITIES]
-ignore-imports=yes
-min-similarity-lines=100
http://git-wip-us.apache.org/repos/asf/mesos/blob/102a3630/support/.gitignore
----------------------------------------------------------------------
diff --git a/support/.gitignore b/support/.gitignore
new file mode 100644
index 0000000..a21a0f9
--- /dev/null
+++ b/support/.gitignore
@@ -0,0 +1 @@
+.virtualenv
http://git-wip-us.apache.org/repos/asf/mesos/blob/102a3630/support/build-virtualenv
----------------------------------------------------------------------
diff --git a/support/build-virtualenv b/support/build-virtualenv
new file mode 100755
index 0000000..b46a86a
--- /dev/null
+++ b/support/build-virtualenv
@@ -0,0 +1,65 @@
+#!/usr/bin/env bash
+
+# This script sets up a Python virtualenv for the Web UI. This creates
+# a new virtualenv and installs nodeenv inside the virtualenv.
+
+set -e
+trap "exit 1" INT
+
+CURRDIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
+
+: ${VIRTUALENV_NAME:="linters"}
+: ${VIRTUALENV_DIRECTORY:="${CURRDIR}/.virtualenv"}
+
+: ${PYTHON:="$(which python)"}
+: ${VIRTUALENV:="$(which virtualenv)"}
+
+OLD_PYTHONPATH="${PYTHONPATH}"
+PYTHONPATH=""
+
+# If we already have a virtual environment activated,
+# bail out and advise the user to deactivate.
+OLD_VIRTUAL_ENV="${VIRTUAL_ENV}"
+if [ "${OLD_VIRTUAL_ENV}" != "" ]; then
+ echo "Please deactivate your current virtual environment in order to continue!"
+ echo "source deactivate"
+ exit 1
+fi
+
+# Verify that python and virtualenv are installed.
+if [ "${PYTHON}" = "" ]; then
+ echo "You must have python installed in order to continue..."
+ exit 1
+fi
+
+if [ "${VIRTUALENV}" = "" ]; then
+ # Search for a locally installed virtualenv.
+ # See https://docs.python.org/2/library/site.html#site.USER_SITE for details.
+ VIRTUALENV=$(${PYTHON} -c "import site; print site.USER_SITE")/virtualenv.py
+
+ if [ ! -f "${VIRTUALENV}" ]; then
+ echo "You must have virtualenv installed in order to continue..."
+ exit 1
+ fi
+fi
+
+PYTHON_MAJOR=$(${PYTHON} -c 'import sys; print(sys.version_info[0])')
+PYTHON_MINOR=$(${PYTHON} -c 'import sys; print(sys.version_info[1])')
+
+if [ "${PYTHON_MAJOR}" != "2" ] || [ "${PYTHON_MINOR}" -lt "6" ]; then
+ echo "You must be running python 2.6 or 2.7 in order to continue."
+ echo "Consider running as 'PYTHON=python2 ./bootstrap' or similar."
+ exit 1
+fi
+
+# Set up a virtual environment for the linters.
+${PYTHON} ${VIRTUALENV} --python=${PYTHON} \
+ --clear \
+ --no-site-packages \
+ --prompt="(${VIRTUALENV_NAME}) " \
+ ${VIRTUALENV_DIRECTORY} || true
+
+source ${VIRTUALENV_DIRECTORY}/bin/activate
+pip install --upgrade pip
+pip install -r ${CURRDIR}/pip-requirements.txt
+deactivate
http://git-wip-us.apache.org/repos/asf/mesos/blob/102a3630/support/mesos-style.py
----------------------------------------------------------------------
diff --git a/support/mesos-style.py b/support/mesos-style.py
index b2fdac9..96030f2 100755
--- a/support/mesos-style.py
+++ b/support/mesos-style.py
@@ -153,62 +153,6 @@ class LinterBase(object):
return error_count
- def should_build_virtualenv(self, modified_files):
- """
- Check if we should build the virtual environment required.
- This is the case if the requirements of the environment
- have changed or if the support script is run with no
- arguments (meaning that the entire codebase should be linted).
- """
- work_dir = os.path.abspath(self.source_dirs[0])
-
- if not os.path.isdir(os.path.join(work_dir, '.virtualenv')):
- print 'Virtualenv not detected... building'
- return True
-
- # NOTE: If the file list is empty, we are linting the entire
- # codebase. We should always rebuild the virtualenv in this case.
- if len(modified_files) <= 0:
- return True
-
- basenames = []
- if modified_files:
- basenames = [os.path.basename(path) for path in modified_files]
-
- if 'pip-requirements.txt' in basenames:
- print 'The "pip-requirements.txt" file has changed.'
- return True
-
- # This is only useful for the Python linter.
- if 'mesos.bash_completion' in basenames:
- print 'The "mesos.bash_completion" file has changed.'
- return True
-
- return False
-
- def build_virtualenv(self):
- """
- Rebuild the virtualenv by running a bootstrap script.
- This will exit the program if there is a failure.
- """
- work_dir = os.path.abspath(self.source_dirs[0])
-
- print 'Rebuilding virtualenv...'
-
- process = subprocess.Popen(
- [os.path.join(work_dir, 'bootstrap')],
- stdout=subprocess.PIPE)
-
- output = ''
- for line in process.stdout:
- output += line
-
- process.wait()
-
- if process.returncode != 0:
- sys.stderr.write(output)
- sys.exit(1)
-
def main(self, modified_files):
"""
This function takes a list of files and lints them for the
@@ -315,6 +259,9 @@ class CppLinter(LinterBase):
'whitespace/todo']
rules_filter = '--filter=-,+' + ',+'.join(active_rules)
+
+ # We do not use a version of cpplint available through pip as
+ # we use a custom version (see cpplint.path) to lint C++ files.
process = subprocess.Popen(
['python', 'support/cpplint.py', rules_filter] + source_paths,
stderr=subprocess.PIPE,
@@ -356,9 +303,10 @@ class PyLinter(LinterBase):
self.config = {
'bootstrap_dir': cli_dir,
- 'virtualenv_dir': os.path.join(cli_dir, '.virtualenv'),
- 'pylint_config': os.path.join(python_dir, 'pylint.config'),
- 'pylint_cmd': os.path.join(cli_dir, '.virtualenv', 'bin', 'pylint')
+ 'virtualenv_dir': os.path.join(support_dir, '.virtualenv'),
+ 'pylint_config': os.path.join(support_dir, 'pylint.config'),
+ 'pylint_cmd': os.path.join(
+ support_dir, '.virtualenv', 'bin', 'pylint')
}
self.source_dirs = [cli_dir, lib_dir, support_dir]
@@ -394,14 +342,62 @@ class PyLinter(LinterBase):
return num_errors
def main(self, modified_files):
- """Override main to rebuild our virtualenv if necessary."""
- if self.should_build_virtualenv(modified_files):
- self.build_virtualenv()
-
return super(PyLinter, self).main(modified_files)
+def should_build_virtualenv(modified_files):
+ """
+ Check if we should build the virtual environment required.
+ This is the case if the requirements of the environment
+ have changed or if the support script is run with no
+ arguments (meaning that the entire codebase should be linted).
+ """
+ if not os.path.isdir(os.path.join('support', '.virtualenv')):
+ print 'Virtualenv not detected... building'
+ return True
+
+ # NOTE: If the file list is empty, we are linting the entire
+ # codebase. We should always rebuild the virtualenv in this case.
+ if not modified_files:
+ return True
+
+ basenames = [os.path.basename(path) for path in modified_files]
+
+ if 'pip-requirements.txt' in basenames:
+ print 'The "pip-requirements.txt" file has changed.'
+ return True
+
+ if 'build-virtualenv' in basenames:
+ print 'The "build-virtualenv" file has changed.'
+ return True
+
+ return False
+
+
+def build_virtualenv():
+ """
+ Rebuild the virtualenv by running a bootstrap script.
+ This will exit the program if there is a failure.
+ """
+ print 'Rebuilding virtualenv...'
+
+ process = subprocess.Popen(
+ [os.path.join('support', 'build-virtualenv')],
+ stdout=subprocess.PIPE)
+
+ output = ''
+ for line in process.stdout:
+ output += line
+
+ process.wait()
+
+ if process.returncode != 0:
+ sys.stderr.write(output)
+ sys.exit(1)
+
if __name__ == '__main__':
+ if should_build_virtualenv(sys.argv[1:]):
+ build_virtualenv()
CPP_LINTER = CppLinter()
CPP_ERRORS = CPP_LINTER.main(sys.argv[1:])
PY_LINTER = PyLinter()
http://git-wip-us.apache.org/repos/asf/mesos/blob/102a3630/support/pip-requirements.txt
----------------------------------------------------------------------
diff --git a/support/pip-requirements.txt b/support/pip-requirements.txt
new file mode 100644
index 0000000..6ae67d0
--- /dev/null
+++ b/support/pip-requirements.txt
@@ -0,0 +1 @@
+pylint==1.6.4
http://git-wip-us.apache.org/repos/asf/mesos/blob/102a3630/support/pylint.config
----------------------------------------------------------------------
diff --git a/support/pylint.config b/support/pylint.config
new file mode 100644
index 0000000..f74f553
--- /dev/null
+++ b/support/pylint.config
@@ -0,0 +1,31 @@
+[MASTER]
+ignore=.git
+
+[MESSAGES CONTROL]
+disable=I0011,no-self-use,fixme,invalid-name,file-ignored
+
+[REPORTS]
+reports=no
+
+[BASIC]
+bad-functions=input,file
+good-names=i,j,k,f,ip,_
+min-public-methods=0
+
+[FORMAT]
+max-line-length=80
+indent-string=' '
+
+[DESIGN]
+max-branches=20
+max-returns=100
+
+[EXCEPTIONS]
+overgeneral-exceptions=
+
+[TYPECHECK]
+ignored-modules = netifaces
+
+[SIMILARITIES]
+ignore-imports=yes
+min-similarity-lines=100