73 lines
2.7 KiB
Ruby
73 lines
2.7 KiB
Ruby
def run_pylint(system, report_dir, flags='')
|
|
apps = Dir["#{system}", "#{system}/djangoapps/*"]
|
|
if system != 'lms'
|
|
apps += Dir["#{system}/lib/*"]
|
|
end
|
|
|
|
apps = apps.map do |app|
|
|
File.basename(app)
|
|
end.select do |app|
|
|
app !=~ /.pyc$/
|
|
end.map do |app|
|
|
if app =~ /.py$/
|
|
app.gsub('.py', '')
|
|
else
|
|
app
|
|
end
|
|
end
|
|
|
|
pythonpath_prefix = "PYTHONPATH=#{system}:#{system}/djangoapps:#{system}/lib:common/djangoapps:common/lib"
|
|
sh("#{pythonpath_prefix} pylint #{flags} -f parseable #{apps.join(' ')} | tee #{report_dir}/pylint.report")
|
|
end
|
|
|
|
|
|
[:lms, :cms, :common].each do |system|
|
|
report_dir = report_dir_path(system)
|
|
directory report_dir
|
|
|
|
namespace :pylint do
|
|
namespace system do
|
|
desc "Run pylint checking for #{system} checking for errors only, and aborting if there are any"
|
|
task :errors do
|
|
run_pylint(system, report_dir, '-E')
|
|
end
|
|
end
|
|
|
|
desc "Run pylint on all #{system} code"
|
|
task system => [report_dir, :install_python_prereqs] do
|
|
run_pylint(system, report_dir)
|
|
end
|
|
end
|
|
task :pylint => :"pylint:#{system}"
|
|
|
|
namespace :pep8 do
|
|
desc "Run pep8 on all #{system} code"
|
|
task system => [report_dir, :install_python_prereqs] do
|
|
sh("pep8 #{system} | tee #{report_dir}/pep8.report")
|
|
end
|
|
end
|
|
task :pep8 => :"pep8:#{system}"
|
|
end
|
|
|
|
dquality_dir = File.join(REPORT_DIR, "diff_quality")
|
|
directory dquality_dir
|
|
|
|
desc "Build the html diff quality reports, and print the reports to the console."
|
|
task :quality => [dquality_dir, :install_python_prereqs] do
|
|
|
|
# Generage diff-quality html report for pep8, and print to console
|
|
# If pep8 reports exist, use those
|
|
# Otherwise, `diff-quality` will call pep8 itself
|
|
pep8_reports = FileList[File.join(REPORT_DIR, '**/pep8.report')].join(' ')
|
|
sh("diff-quality --violations=pep8 --html-report #{dquality_dir}/diff_quality_pep8.html #{pep8_reports}")
|
|
sh("diff-quality --violations=pep8 #{pep8_reports}")
|
|
|
|
# Generage diff-quality html report for pylint, and print to console
|
|
# If pylint reports exist, use those
|
|
# Otherwise, `diff-quality` will call pylint itself
|
|
pylint_reports = FileList[File.join(REPORT_DIR, '**/pylint.report')].join(' ')
|
|
pythonpath_prefix = "PYTHONPATH=$PYTHONPATH:lms:lms/djangoapps:lms/lib:cms:cms/djangoapps:cms/lib:common:common/djangoapps:common/lib"
|
|
sh("#{pythonpath_prefix} diff-quality --violations=pylint --html-report #{dquality_dir}/diff_quality_pylint.html #{pylint_reports}")
|
|
sh("#{pythonpath_prefix} diff-quality --violations=pylint #{pylint_reports}")
|
|
end
|