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.rb
bug/bundler_fix
Tod Beardsley 2014-01-31 14:19:04 -06:00
parent b67ac39a33
commit 87412be33d
No known key found for this signature in database
GPG Key ID: 1EFFB682ADB9F193
2 changed files with 48 additions and 13 deletions

View File

@ -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

View File

@ -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)