Squash commit Travis-able msftidy checks
This change updates msftidy to be run automatically for new modules added since the last tag release because we can't rely on folks using tools/dev/pre-commit-hook before submitting a PR. Now, when one attempts to open a PR with a non-tidy'ed module, the build will fail out of the gate. Related to the 100s of msftidy errors extant today. [SeeRM #8498] commit c894e52de5705a1133191be5e9caf3ebdee33621 Author: Tod Beardsley <tod_beardsley@rapid7.com> Date: Fri Jan 31 14:17:02 2014 -0600 Add a jacked up title to test travis. Revert this! commit 2f00c190be71aeb456a7a546071286fd6d670bc1 Author: Tod Beardsley <tod_beardsley@rapid7.com> Date: Fri Jan 31 11:39:42 2014 -0600 Allow for checking and spotchecking. commit db11e8dfad5381030b08c431a183dbafe7a5f304 Author: Tod Beardsley <tod_beardsley@rapid7.com> Date: Thu Jan 30 17:16:37 2014 -0600 Whoops, need to exit an Integer always. commit 12d131d3157a78ff11e597476138323ed0a062fc Author: Tod Beardsley <tod_beardsley@rapid7.com> Date: Thu Jan 30 16:59:35 2014 -0600 Allow for exit statuses from msftidy. commit 2c3b294ff17416f49935472caf2b6be3dbdd93a4 Author: Tod Beardsley <tod_beardsley@rapid7.com> Date: Thu Jan 30 15:36:43 2014 -0600 Be more dynamic about tag checking years commit d5d8a0b05ac17fb18666a9c252dbb6928d6b5e56 Author: Tod Beardsley <tod_beardsley@rapid7.com> Date: Thu Jan 30 14:36:44 2014 -0600 Don't warn when there's really nothing commit fb44a3142fb01eb2647c1c240bb1cc2e7bf59120 Author: Tod Beardsley <tod_beardsley@rapid7.com> Date: Thu Jan 30 14:21:50 2014 -0600 Revert the intentional failure This reverts commit 99a7630b0da301b27ac495cb027009a8cd9e2caf. Fun fact: Reverting a commit does not automatically sign with my current aliases, one must git revert then git c --amend. commit 99a7630b0da301b27ac495cb027009a8cd9e2caf Author: Tod Beardsley <tod_beardsley@rapid7.com> Date: Thu Jan 30 14:08:05 2014 -0600 Cause an exit status in precommit check Maybe travis will see these and fail the build. Don't forget to revert this commit @todb-r7 ! commit 5a3b2fcd9598fae51a0dd2c7c87680c703a85448 Author: Tod Beardsley <tod_beardsley@rapid7.com> Date: Thu Jan 30 13:11:04 2014 -0600 Update msftidy pre-commit-hook for spotchecking commit 3f255e36dad9ed3081aaf359f845525d96872ef0 Author: Tod Beardsley <tod_beardsley@rapid7.com> Date: Thu Jan 30 12:35:16 2014 -0600 Travis should run msftidy via precommit hook commit 0959d9d2d281590a94c0ac960e43b74354e4e21b Author: Tod Beardsley <tod_beardsley@rapid7.com> Date: Thu Jan 30 12:25:53 2014 -0600 Add SPOTCHECK_RECENT to msftidy.rbbug/bundler_fix
parent
b67ac39a33
commit
87412be33d
|
@ -1,9 +1,11 @@
|
||||||
language: ruby
|
language: ruby
|
||||||
|
env: MSF_SPOTCHECK_RECENT=1
|
||||||
before_install:
|
before_install:
|
||||||
- rake --version
|
- rake --version
|
||||||
- sudo apt-get update -qq
|
- sudo apt-get update -qq
|
||||||
- sudo apt-get install -qq libpcap-dev
|
- sudo apt-get install -qq libpcap-dev
|
||||||
before_script:
|
before_script:
|
||||||
|
- ./tools/msftidy.rb
|
||||||
- cp config/database.yml.travis config/database.yml
|
- cp config/database.yml.travis config/database.yml
|
||||||
- bundle exec rake --version
|
- bundle exec rake --version
|
||||||
- bundle exec rake db:create
|
- bundle exec rake db:create
|
||||||
|
|
|
@ -8,8 +8,10 @@
|
||||||
#
|
#
|
||||||
require 'fileutils'
|
require 'fileutils'
|
||||||
require 'find'
|
require 'find'
|
||||||
|
require 'time'
|
||||||
|
|
||||||
CHECK_OLD_RUBIES = !!ENV['MSF_CHECK_OLD_RUBIES']
|
CHECK_OLD_RUBIES = !!ENV['MSF_CHECK_OLD_RUBIES']
|
||||||
|
SPOTCHECK_RECENT = !!ENV['MSF_SPOTCHECK_RECENT']
|
||||||
|
|
||||||
if CHECK_OLD_RUBIES
|
if CHECK_OLD_RUBIES
|
||||||
require 'rvm'
|
require 'rvm'
|
||||||
|
@ -38,34 +40,47 @@ class Msftidy
|
||||||
|
|
||||||
LONG_LINE_LENGTH = 200 # From 100 to 200 which is stupidly long
|
LONG_LINE_LENGTH = 200 # From 100 to 200 which is stupidly long
|
||||||
|
|
||||||
attr_reader :full_filepath, :source, :stat, :name
|
# Status codes
|
||||||
|
OK = 0x00
|
||||||
|
WARNINGS = 0x10
|
||||||
|
ERRORS = 0x20
|
||||||
|
|
||||||
|
attr_reader :full_filepath, :source, :stat, :name, :status
|
||||||
|
|
||||||
def initialize(source_file)
|
def initialize(source_file)
|
||||||
@full_filepath = source_file
|
@full_filepath = source_file
|
||||||
@source = load_file(source_file)
|
@source = load_file(source_file)
|
||||||
|
@status = OK
|
||||||
@name = File.basename(source_file)
|
@name = File.basename(source_file)
|
||||||
end
|
end
|
||||||
|
|
||||||
public
|
public
|
||||||
|
|
||||||
##
|
|
||||||
#
|
#
|
||||||
# The following two functions only print what you throw at them,
|
# Display a warning message, given some text and a number. Warnings
|
||||||
# with the option of displying the line number. error() is meant
|
# are usually style issues that may be okay for people who aren't core
|
||||||
# for mistakes that might actually break something.
|
# Framework developers.
|
||||||
#
|
#
|
||||||
##
|
# @return status [Integer] Returns WARNINGS unless we already have an
|
||||||
|
# error.
|
||||||
def warn(txt, line=0)
|
def warn(txt, line=0) line_msg = (line>0) ? ":#{line}" : ''
|
||||||
line_msg = (line>0) ? ":#{line}" : ''
|
|
||||||
puts "#{@full_filepath}#{line_msg} - [#{'WARNING'.yellow}] #{txt}"
|
puts "#{@full_filepath}#{line_msg} - [#{'WARNING'.yellow}] #{txt}"
|
||||||
|
@status == ERRORS ? @status = ERRORS : @status = WARNINGS
|
||||||
end
|
end
|
||||||
|
|
||||||
|
#
|
||||||
|
# Display an error message, given some text and a number. Errors
|
||||||
|
# can break things or are so egregiously bad, style-wise, that they
|
||||||
|
# really ought to be fixed.
|
||||||
|
#
|
||||||
|
# @return status [Integer] Returns ERRORS
|
||||||
def error(txt, line=0)
|
def error(txt, line=0)
|
||||||
line_msg = (line>0) ? ":#{line}" : ''
|
line_msg = (line>0) ? ":#{line}" : ''
|
||||||
puts "#{@full_filepath}#{line_msg} - [#{'ERROR'.red}] #{txt}"
|
puts "#{@full_filepath}#{line_msg} - [#{'ERROR'.red}] #{txt}"
|
||||||
|
@status = ERRORS
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# Currently unused, but some day msftidy will fix errors for you.
|
||||||
def fixed(txt, line=0)
|
def fixed(txt, line=0)
|
||||||
line_msg = (line>0) ? ":#{line}" : ''
|
line_msg = (line>0) ? ":#{line}" : ''
|
||||||
puts "#{@full_filepath}#{line_msg} - [#{'FIXED'.green}] #{txt}"
|
puts "#{@full_filepath}#{line_msg} - [#{'FIXED'.green}] #{txt}"
|
||||||
|
@ -465,6 +480,11 @@ class Msftidy
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
#
|
||||||
|
# Run all the msftidy checks.
|
||||||
|
#
|
||||||
|
# @param full_filepath [String] The full file path to check
|
||||||
|
# @return status [Integer] A status code suitable for use as an exit status
|
||||||
def run_checks(full_filepath)
|
def run_checks(full_filepath)
|
||||||
tidy = Msftidy.new(full_filepath)
|
tidy = Msftidy.new(full_filepath)
|
||||||
tidy.check_mode
|
tidy.check_mode
|
||||||
|
@ -484,6 +504,7 @@ def run_checks(full_filepath)
|
||||||
tidy.check_snake_case_filename
|
tidy.check_snake_case_filename
|
||||||
tidy.check_comment_splat
|
tidy.check_comment_splat
|
||||||
tidy.check_vuln_codes
|
tidy.check_vuln_codes
|
||||||
|
return tidy
|
||||||
end
|
end
|
||||||
|
|
||||||
##
|
##
|
||||||
|
@ -494,9 +515,18 @@ end
|
||||||
|
|
||||||
dirs = ARGV
|
dirs = ARGV
|
||||||
|
|
||||||
if dirs.length < 1
|
if SPOTCHECK_RECENT
|
||||||
|
last_release =%x{git tag -l #{DateTime.now.year}*}.split.last
|
||||||
|
new_modules = %x{git diff #{last_release}..HEAD --raw | grep -P 'A\tmodules' | sed 's/.*A\t//'}
|
||||||
|
dirs = dirs | new_modules.split
|
||||||
|
end
|
||||||
|
|
||||||
|
# Don't print an error if there's really nothing to check.
|
||||||
|
unless SPOTCHECK_RECENT
|
||||||
|
if dirs.length < 1
|
||||||
$stderr.puts "Usage: #{File.basename(__FILE__)} <directory or file>"
|
$stderr.puts "Usage: #{File.basename(__FILE__)} <directory or file>"
|
||||||
exit(1)
|
exit(0x01)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
dirs.each do |dir|
|
dirs.each do |dir|
|
||||||
|
@ -505,9 +535,12 @@ dirs.each do |dir|
|
||||||
next if full_filepath =~ /\.git[\x5c\x2f]/
|
next if full_filepath =~ /\.git[\x5c\x2f]/
|
||||||
next unless File.file? full_filepath
|
next unless File.file? full_filepath
|
||||||
next unless full_filepath =~ /\.rb$/
|
next unless full_filepath =~ /\.rb$/
|
||||||
run_checks(full_filepath)
|
msftidy = run_checks(full_filepath)
|
||||||
|
@exit_status = msftidy.status if (msftidy.status > @exit_status.to_i)
|
||||||
end
|
end
|
||||||
rescue Errno::ENOENT
|
rescue Errno::ENOENT
|
||||||
$stderr.puts "#{File.basename(__FILE__)}: #{dir}: No such file or directory"
|
$stderr.puts "#{File.basename(__FILE__)}: #{dir}: No such file or directory"
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
exit(@exit_status.to_i)
|
||||||
|
|
Loading…
Reference in New Issue