jscruggs-metric_fu 0.7.6 → 0.8.0
Sign up to get free protection for your applications and to get access to all the features.
- data/History.txt +8 -0
- data/README +3 -3
- data/TODO.txt +1 -2
- data/lib/metric_fu/flog_reporter/base.rb +1 -2
- data/lib/metric_fu/flog_reporter/generator.rb +1 -1
- data/lib/tasks/churn.rake +24 -9
- data/lib/tasks/flog.rake +0 -3
- data/metric_fu.gemspec +1 -1
- data/test/test_helper.rb +0 -2
- metadata +1 -1
data/History.txt
CHANGED
@@ -1,3 +1,11 @@
|
|
1
|
+
=== MetricFu 0.8.0 / 2008-10-06
|
2
|
+
|
3
|
+
* Source Control Churn now supports git (thanks to Erik St Martin)
|
4
|
+
* Flog Results are sorted by Highest Flog Score
|
5
|
+
* Fix for a bunch of 'already initialized constant' warnings that metric_fu caused
|
6
|
+
* Fixing bug so the flog reporter can handle methods with digits in the name (thanks to Andy Gregorowicz)
|
7
|
+
* Internal Rake task now allows metric_fu to flog/churn itself
|
8
|
+
|
1
9
|
=== MetricFu 0.7.6 / 2008-09-15
|
2
10
|
|
3
11
|
* CHURN_OPTIONS has become MetricFu::CHURN_OPTIONS
|
data/README
CHANGED
@@ -57,11 +57,11 @@ When creating a coverage report, metric_fu runs all the tests in the test folder
|
|
57
57
|
|
58
58
|
Saikuro is bundled with metric_fu so you don't have to install it. Look at the SAIKURO_README (or the internet) for more documentation on Saikuro. If you wish to change the options Saikuro is run with, then set this constant in your Rakefile:
|
59
59
|
|
60
|
-
SAIKURO_OPTIONS = { "--warn_cyclo" => "3", "--error_cyclo" => "4" }
|
60
|
+
MetricFu::SAIKURO_OPTIONS = { "--warn_cyclo" => "3", "--error_cyclo" => "4" }
|
61
61
|
|
62
|
-
|
62
|
+
MetricFu::SAIKURO_OPTIONS is a hash that gets merged with the default options hash. The above example will set the warn_cyclo to 3 and the error_cyclo to 4 (which is way too low -- it's just an example) instructing Saikuro to flag methods with a higher cyclomatic complexity in it's report.
|
63
63
|
|
64
|
-
If you want to have Saikuro look at multiple folders you can put something like this in
|
64
|
+
If you want to have Saikuro look at multiple folders you can put something like this in your rakefile:
|
65
65
|
MetricFu::SAIKURO_OPTIONS = {"--input_directory" => '"cms/app | cms/lib"'}
|
66
66
|
|
67
67
|
|
data/TODO.txt
CHANGED
@@ -1,7 +1,6 @@
|
|
1
1
|
== TODO list
|
2
2
|
|
3
|
-
*
|
4
|
-
* Get churn to work with git
|
3
|
+
* Color code flog results with scale from: http://jakescruggs.blogspot.com/2008/08/whats-good-flog-score.html
|
5
4
|
* Extract functionality from rake files and put under test
|
6
5
|
* Change churn start_date to not rely on Rails 1.day.ago functionality (so metric_fu can be used in non-Rails apps)
|
7
6
|
* Make integration with RSpec better (use SpecTask?)
|
@@ -1,6 +1,5 @@
|
|
1
1
|
module MetricFu::FlogReporter
|
2
2
|
|
3
|
-
THRESHOLD = (ENV['FLOG_THRESHOLD'] || 120)
|
4
3
|
SCORE_FORMAT = "%0.2f"
|
5
4
|
|
6
5
|
class InvalidFlog < RuntimeError
|
@@ -8,7 +7,7 @@ module MetricFu::FlogReporter
|
|
8
7
|
|
9
8
|
class Base
|
10
9
|
MODULE_NAME = "([A-Z][a-z]+)+"
|
11
|
-
METHOD_NAME = "#([a-
|
10
|
+
METHOD_NAME = "#([a-z0-9]+_?)+\\??\\!?"
|
12
11
|
SCORE = "\\d+\\.\\d+"
|
13
12
|
|
14
13
|
METHOD_NAME_RE = Regexp.new("#{MODULE_NAME}#{METHOD_NAME}")
|
@@ -48,7 +48,7 @@ module MetricFu::FlogReporter
|
|
48
48
|
html << "<table class='report'>\n"
|
49
49
|
html << "<tr><th>File</th><th>Total score</th><th>Methods</th><th>Average score</th><th>Highest score</th></tr>"
|
50
50
|
count = 0
|
51
|
-
flog_hashes.each do |flog_hash|
|
51
|
+
flog_hashes.sort {|x,y| y[:page].highest_score <=> x[:page].highest_score }.each do |flog_hash|
|
52
52
|
html << <<-EOF
|
53
53
|
<tr class='#{Base.cycle("light", "dark", count)}'>
|
54
54
|
<td><a href='#{flog_hash[:path]}'>#{flog_hash[:path].sub('.html', '.rb')}</a></td>
|
data/lib/tasks/churn.rake
CHANGED
@@ -3,13 +3,23 @@ namespace :metrics do
|
|
3
3
|
|
4
4
|
desc "Which files change the most"
|
5
5
|
task :churn do
|
6
|
-
date_range, minimum_churn_count = churn_options()
|
7
|
-
|
8
|
-
|
6
|
+
date_range, minimum_churn_count, scm = churn_options()
|
7
|
+
|
9
8
|
changes = {}
|
10
|
-
|
11
|
-
|
12
|
-
|
9
|
+
if scm == :git
|
10
|
+
git_logs = `git log #{date_range} --name-only --pretty=format:`.split(/\n/)
|
11
|
+
git_logs.reject!{|line| line == ""}
|
12
|
+
|
13
|
+
git_logs.each do |line|
|
14
|
+
changes[line] ? changes[line] += 1 : changes[line] = 1
|
15
|
+
end
|
16
|
+
else
|
17
|
+
svn_logs = `svn log #{date_range} --verbose`.split(/\n/).select {|line| line.strip =~ /^[A,M]/}
|
18
|
+
|
19
|
+
svn_logs.each do |line|
|
20
|
+
line.strip =~ /^[A,M] (.*)/
|
21
|
+
changes[$1] ? changes[$1] += 1 : changes[$1] = 1
|
22
|
+
end
|
13
23
|
end
|
14
24
|
write_churn_file(changes.reject {|file, change_count| change_count < minimum_churn_count})
|
15
25
|
system("open #{CHURN_DIR}/index.html") if PLATFORM['darwin']
|
@@ -20,12 +30,17 @@ namespace :metrics do
|
|
20
30
|
options = defined?(MetricFu::CHURN_OPTIONS) ? MetricFu::CHURN_OPTIONS : {}
|
21
31
|
if options[:start_date]
|
22
32
|
require RAILS_ROOT + '/config/environment'
|
23
|
-
|
33
|
+
if options[:scm] == :git
|
34
|
+
date_range = "--after=#{options[:start_date].call.strftime('%Y-%m-%d')}"
|
35
|
+
else
|
36
|
+
date_range = "--revision {#{options[:start_date].call.strftime('%Y-%m-%d')}}:{#{Time.now.strftime('%Y-%m-%d')}}"
|
37
|
+
end
|
24
38
|
else
|
25
39
|
date_range = ""
|
26
40
|
end
|
27
41
|
minimum_churn_count = options[:minimum_churn_count] ? options[:minimum_churn_count] : 5
|
28
|
-
|
42
|
+
scm = options[:scm] == :git ? :git : :svn
|
43
|
+
return date_range, minimum_churn_count, scm
|
29
44
|
end
|
30
45
|
|
31
46
|
def write_churn_file changes
|
@@ -93,4 +108,4 @@ namespace :metrics do
|
|
93
108
|
</body>
|
94
109
|
</html>
|
95
110
|
EOS
|
96
|
-
end
|
111
|
+
end
|
data/lib/tasks/flog.rake
CHANGED
data/metric_fu.gemspec
CHANGED
data/test/test_helper.rb
CHANGED