From 87412be33dd61254975632cfc904d9d5060c60bc Mon Sep 17 00:00:00 2001 From: Tod Beardsley Date: Fri, 31 Jan 2014 14:19:04 -0600 Subject: [PATCH] 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 Date: Fri Jan 31 14:17:02 2014 -0600 Add a jacked up title to test travis. Revert this! commit 2f00c190be71aeb456a7a546071286fd6d670bc1 Author: Tod Beardsley Date: Fri Jan 31 11:39:42 2014 -0600 Allow for checking and spotchecking. commit db11e8dfad5381030b08c431a183dbafe7a5f304 Author: Tod Beardsley Date: Thu Jan 30 17:16:37 2014 -0600 Whoops, need to exit an Integer always. commit 12d131d3157a78ff11e597476138323ed0a062fc Author: Tod Beardsley Date: Thu Jan 30 16:59:35 2014 -0600 Allow for exit statuses from msftidy. commit 2c3b294ff17416f49935472caf2b6be3dbdd93a4 Author: Tod Beardsley Date: Thu Jan 30 15:36:43 2014 -0600 Be more dynamic about tag checking years commit d5d8a0b05ac17fb18666a9c252dbb6928d6b5e56 Author: Tod Beardsley Date: Thu Jan 30 14:36:44 2014 -0600 Don't warn when there's really nothing commit fb44a3142fb01eb2647c1c240bb1cc2e7bf59120 Author: Tod Beardsley 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 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 Date: Thu Jan 30 13:11:04 2014 -0600 Update msftidy pre-commit-hook for spotchecking commit 3f255e36dad9ed3081aaf359f845525d96872ef0 Author: Tod Beardsley Date: Thu Jan 30 12:35:16 2014 -0600 Travis should run msftidy via precommit hook commit 0959d9d2d281590a94c0ac960e43b74354e4e21b Author: Tod Beardsley Date: Thu Jan 30 12:25:53 2014 -0600 Add SPOTCHECK_RECENT to msftidy.rb --- .travis.yml | 2 ++ tools/msftidy.rb | 59 +++++++++++++++++++++++++++++++++++++----------- 2 files changed, 48 insertions(+), 13 deletions(-) diff --git a/.travis.yml b/.travis.yml index 6e4c13c878..6c815d2340 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,9 +1,11 @@ language: ruby +env: MSF_SPOTCHECK_RECENT=1 before_install: - rake --version - sudo apt-get update -qq - sudo apt-get install -qq libpcap-dev before_script: + - ./tools/msftidy.rb - cp config/database.yml.travis config/database.yml - bundle exec rake --version - bundle exec rake db:create diff --git a/tools/msftidy.rb b/tools/msftidy.rb index 13d9422b0a..6ac20a384c 100755 --- a/tools/msftidy.rb +++ b/tools/msftidy.rb @@ -8,8 +8,10 @@ # require 'fileutils' require 'find' +require 'time' CHECK_OLD_RUBIES = !!ENV['MSF_CHECK_OLD_RUBIES'] +SPOTCHECK_RECENT = !!ENV['MSF_SPOTCHECK_RECENT'] if CHECK_OLD_RUBIES require 'rvm' @@ -38,34 +40,47 @@ class Msftidy 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) @full_filepath = source_file @source = load_file(source_file) + @status = OK @name = File.basename(source_file) end public - ## # - # The following two functions only print what you throw at them, - # with the option of displying the line number. error() is meant - # for mistakes that might actually break something. + # Display a warning message, given some text and a number. Warnings + # are usually style issues that may be okay for people who aren't core + # Framework developers. # - ## - - def warn(txt, line=0) - line_msg = (line>0) ? ":#{line}" : '' + # @return status [Integer] Returns WARNINGS unless we already have an + # error. + def warn(txt, line=0) line_msg = (line>0) ? ":#{line}" : '' puts "#{@full_filepath}#{line_msg} - [#{'WARNING'.yellow}] #{txt}" + @status == ERRORS ? @status = ERRORS : @status = WARNINGS 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) line_msg = (line>0) ? ":#{line}" : '' puts "#{@full_filepath}#{line_msg} - [#{'ERROR'.red}] #{txt}" + @status = ERRORS end + # Currently unused, but some day msftidy will fix errors for you. def fixed(txt, line=0) line_msg = (line>0) ? ":#{line}" : '' puts "#{@full_filepath}#{line_msg} - [#{'FIXED'.green}] #{txt}" @@ -465,6 +480,11 @@ class Msftidy 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) tidy = Msftidy.new(full_filepath) tidy.check_mode @@ -484,6 +504,7 @@ def run_checks(full_filepath) tidy.check_snake_case_filename tidy.check_comment_splat tidy.check_vuln_codes + return tidy end ## @@ -494,9 +515,18 @@ end dirs = ARGV -if dirs.length < 1 - $stderr.puts "Usage: #{File.basename(__FILE__)} " - exit(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__)} " + exit(0x01) + end end dirs.each do |dir| @@ -505,9 +535,12 @@ dirs.each do |dir| next if full_filepath =~ /\.git[\x5c\x2f]/ next unless File.file? full_filepath 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 rescue Errno::ENOENT $stderr.puts "#{File.basename(__FILE__)}: #{dir}: No such file or directory" end end + +exit(@exit_status.to_i)