churn 1.0.2 → 1.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +5 -5
- data/{LICENSE → LICENSE.txt} +0 -0
- data/README.md +137 -120
- data/bin/churn +27 -12
- data/churn.gemspec +7 -21
- data/lib/churn/calculator.rb +24 -11
- data/lib/churn/history.rb +1 -1
- data/lib/churn/location_mapping.rb +1 -1
- data/lib/churn/options.rb +7 -3
- data/lib/churn/scm/bzr_analyzer.rb +11 -4
- data/lib/churn/scm/git_analyzer.rb +5 -3
- data/lib/churn/scm/hg_analyzer.rb +11 -4
- data/lib/churn/scm/source_control.rb +6 -8
- data/lib/churn/scm/svn_analyzer.rb +9 -3
- data/lib/churn/version.rb +1 -1
- metadata +24 -190
- data/.deferred_server +0 -1
- data/.document +0 -5
- data/.gitignore +0 -11
- data/.travis.yml +0 -6
- data/Gemfile +0 -3
- data/Gemfile.lock +0 -79
- data/Rakefile +0 -41
- data/doc/Churn.html +0 -165
- data/doc/Churn/BzrAnalyzer.html +0 -276
- data/doc/Churn/ChurnCalculator.html +0 -578
- data/doc/Churn/ChurnHistory.html +0 -250
- data/doc/Churn/ChurnOptions.html +0 -393
- data/doc/Churn/GitAnalyzer.html +0 -311
- data/doc/Churn/HgAnalyzer.html +0 -276
- data/doc/Churn/LocationMapping.html +0 -448
- data/doc/Churn/SourceControl.html +0 -451
- data/doc/Churn/SvnAnalyzer.html +0 -311
- data/doc/LICENSE.html +0 -123
- data/doc/Object.html +0 -246
- data/doc/created.rid +0 -15
- data/doc/images/add.png +0 -0
- data/doc/images/arrow_up.png +0 -0
- data/doc/images/brick.png +0 -0
- data/doc/images/brick_link.png +0 -0
- data/doc/images/bug.png +0 -0
- data/doc/images/bullet_black.png +0 -0
- data/doc/images/bullet_toggle_minus.png +0 -0
- data/doc/images/bullet_toggle_plus.png +0 -0
- data/doc/images/date.png +0 -0
- data/doc/images/delete.png +0 -0
- data/doc/images/find.png +0 -0
- data/doc/images/loadingAnimation.gif +0 -0
- data/doc/images/macFFBgHack.png +0 -0
- data/doc/images/package.png +0 -0
- data/doc/images/page_green.png +0 -0
- data/doc/images/page_white_text.png +0 -0
- data/doc/images/page_white_width.png +0 -0
- data/doc/images/plugin.png +0 -0
- data/doc/images/ruby.png +0 -0
- data/doc/images/tag_blue.png +0 -0
- data/doc/images/tag_green.png +0 -0
- data/doc/images/transparent.png +0 -0
- data/doc/images/wrench.png +0 -0
- data/doc/images/wrench_orange.png +0 -0
- data/doc/images/zoom.png +0 -0
- data/doc/index.html +0 -100
- data/doc/js/darkfish.js +0 -155
- data/doc/js/jquery.js +0 -18
- data/doc/js/navigation.js +0 -142
- data/doc/js/search.js +0 -94
- data/doc/js/search_index.js +0 -1
- data/doc/js/searcher.js +0 -228
- data/doc/rdoc.css +0 -595
- data/doc/table_of_contents.html +0 -167
- data/test/data/churn_calculator.rb +0 -217
- data/test/data/test_helper.rb +0 -14
- data/test/test_helper.rb +0 -21
- data/test/unit/bzr_analyzer_test.rb +0 -65
- data/test/unit/churn_calculator_test.rb +0 -181
- data/test/unit/churn_history_test.rb +0 -24
- data/test/unit/churn_options_test.rb +0 -16
- data/test/unit/git_analyzer_test.rb +0 -88
- data/test/unit/hg_analyzer_test.rb +0 -66
- data/test/unit/location_mapping_test.rb +0 -35
- data/test/unit/source_control_test.rb +0 -22
- data/test/unit/svn_analyzer_test.rb +0 -65
data/lib/churn/history.rb
CHANGED
@@ -14,7 +14,7 @@ module Churn
|
|
14
14
|
def self.load_revision_data(revision, data_directory)
|
15
15
|
#load revision data from scratch folder if it exists
|
16
16
|
filename = "#{data_directory}/#{revision}.json"
|
17
|
-
if File.
|
17
|
+
if File.exist?(filename)
|
18
18
|
begin
|
19
19
|
json_data = File.read(filename)
|
20
20
|
data = JSON.parse(json_data)
|
@@ -2,7 +2,7 @@ module Churn
|
|
2
2
|
|
3
3
|
# Given a ruby file, map the klass and methods to a range of line numbers
|
4
4
|
# The klass and method to line numbers mappings, are stored in
|
5
|
-
#
|
5
|
+
# klasses_collection and methods_collection
|
6
6
|
# this is based off https://github.com/seattlerb/ruby_parser which seems to have some known line number bugs
|
7
7
|
# perhaps look at and move more to the style of line numbers from metric_fu
|
8
8
|
# https://github.com/metricfu/metric_fu/blob/master/lib/data_structures/line_numbers.rb
|
data/lib/churn/options.rb
CHANGED
@@ -9,8 +9,8 @@ module Churn
|
|
9
9
|
DEFAULT_START_TIME = '3 months ago'
|
10
10
|
DEFAULT_REPORT_HOST = 'http://churn.picoappz.com'
|
11
11
|
|
12
|
-
attr_accessor :data_directory, :minimum_churn_count, :ignores, :start_date, :history, :report_host, :name
|
13
|
-
|
12
|
+
attr_accessor :data_directory, :minimum_churn_count, :ignores, :start_date, :history, :report_host, :name, :file_extension, :file_prefix
|
13
|
+
|
14
14
|
def initialize()
|
15
15
|
@data_directory = DEFAULT_CHURN_DIRECTORY
|
16
16
|
@minimum_churn_count = DEFAULT_MINIMUM_CHURN_COUNT
|
@@ -19,12 +19,16 @@ module Churn
|
|
19
19
|
@history = nil
|
20
20
|
@report_host = nil
|
21
21
|
@name = nil
|
22
|
+
@file_extension = nil
|
23
|
+
@file_prefix = nil
|
22
24
|
end
|
23
25
|
|
24
26
|
def set_options(options = {})
|
25
27
|
@data_directory = options.fetch(:data_directory){ @data_directory } unless options[:data_directory]==''
|
28
|
+
@file_extension = options.fetch(:file_extension){ @file_extension } unless options[:file_extension]==''
|
29
|
+
@file_prefix = options.fetch(:file_prefix){ @file_prefix } unless options[:file_prefix]==''
|
26
30
|
@minimum_churn_count = options.fetch(:minimum_churn_count){ @minimum_churn_count }.to_i
|
27
|
-
@ignores = (options.fetch(:
|
31
|
+
@ignores = (options.fetch(:ignore_files){ options[:ignores] || @ignores }).to_s.split(',').map(&:strip)
|
28
32
|
@ignores << '/dev/null' unless @ignores.include?('/dev/null')
|
29
33
|
@start_date = options[:start_date] if !options[:start_date].nil? && options[:start_date]!=''
|
30
34
|
@history = options[:history] if !options[:history].nil? && options[:history]!=''
|
@@ -1,26 +1,34 @@
|
|
1
1
|
module Churn
|
2
2
|
|
3
|
-
#
|
3
|
+
# Analyzes Bzr / Bazaar SCM, to find recently changed files, and what lines have been altered
|
4
4
|
class BzrAnalyzer < SourceControl
|
5
5
|
|
6
|
+
# @return [Boolean]
|
6
7
|
def self.supported?
|
7
|
-
!!(`bzr nick 2>&1` &&
|
8
|
+
!!(`bzr nick 2>&1` && cmd_success?)
|
8
9
|
end
|
9
10
|
|
11
|
+
# @return [Array]
|
10
12
|
def get_logs
|
11
13
|
`bzr log -v --short #{date_range}`.split("\n").reject{|line| line !~ /^[ ]*(M|A) /}.map{|line| line.strip.split(" ")[1..-1]}.flatten
|
12
14
|
end
|
13
15
|
|
16
|
+
# @return [Array]
|
14
17
|
def get_revisions
|
15
18
|
`bzr log --line #{date_range}`.split("\n").map{|line| line[/^(\S+):/, 1] }
|
16
19
|
end
|
17
20
|
|
21
|
+
# @raise RunTimeError Currently, the generate history option does not support Bazaar
|
18
22
|
def generate_history(starting_point)
|
19
|
-
raise "currently the generate history option does not support bazaar"
|
23
|
+
raise NotImplementedError, "currently the generate history option does not support bazaar"
|
20
24
|
end
|
21
25
|
|
22
26
|
private
|
23
27
|
|
28
|
+
def self.cmd_success?
|
29
|
+
$?.success?
|
30
|
+
end
|
31
|
+
|
24
32
|
def get_diff(revision, previous_revision)
|
25
33
|
`bzr diff -r #{previous_revision}..#{revision}`.split(/\n/).select{|line| /^@@|^---|^\+\+\+/ =~ line }
|
26
34
|
end
|
@@ -35,6 +43,5 @@ module Churn
|
|
35
43
|
def get_recent_file(line)
|
36
44
|
super(line).split("\t")[0]
|
37
45
|
end
|
38
|
-
|
39
46
|
end
|
40
47
|
end
|
@@ -1,16 +1,19 @@
|
|
1
1
|
module Churn
|
2
2
|
|
3
|
-
#
|
3
|
+
# Analyzes git SCM to find recently changed files, and what lines have been altered
|
4
4
|
class GitAnalyzer < SourceControl
|
5
5
|
|
6
|
+
# @return [Boolean]
|
6
7
|
def self.supported?
|
7
8
|
!!(`git branch 2>&1` && $?.success?)
|
8
9
|
end
|
9
10
|
|
11
|
+
# @return [Array]
|
10
12
|
def get_logs
|
11
13
|
`git log #{date_range} --name-only --pretty=format:`.split(/\n/).reject{|line| line == ""}
|
12
14
|
end
|
13
15
|
|
16
|
+
# @return [Array]
|
14
17
|
def get_revisions
|
15
18
|
`git log #{date_range} --pretty=format:"%H"`.split(/\n/).reject{|line| line == ""}
|
16
19
|
end
|
@@ -36,7 +39,7 @@ module Churn
|
|
36
39
|
end
|
37
40
|
|
38
41
|
def get_diff(revision, previous_revision)
|
39
|
-
`git diff #{revision} #{previous_revision} --unified=0`.split(/\n/).select{|line| /^@@|^---|^\+\+\+/ =~ line }
|
42
|
+
`git diff #{revision} #{previous_revision} --no-ext-diff --unified=0`.split(/\n/).select{|line| /^@@|^---|^\+\+\+/ =~ line }
|
40
43
|
end
|
41
44
|
|
42
45
|
def date_range
|
@@ -45,6 +48,5 @@ module Churn
|
|
45
48
|
"--after=#{date.strftime('%Y-%m-%d')}"
|
46
49
|
end
|
47
50
|
end
|
48
|
-
|
49
51
|
end
|
50
52
|
end
|
@@ -1,26 +1,34 @@
|
|
1
1
|
module Churn
|
2
2
|
|
3
|
-
#
|
3
|
+
# Analyzes Hg / Mercurial SCM to find recently changed files, and what lines have been altered
|
4
4
|
class HgAnalyzer < SourceControl
|
5
5
|
|
6
|
+
# @return [Array]
|
6
7
|
def self.supported?
|
7
|
-
!!(`hg branch 2>&1` &&
|
8
|
+
!!(`hg branch 2>&1` && cmd_success?)
|
8
9
|
end
|
9
10
|
|
11
|
+
# @return [Array]
|
10
12
|
def get_logs
|
11
13
|
`hg log -v#{date_range}`.split("\n").reject{|line| line !~ /^files:/}.map{|line| line.split(" ")[1..-1]}.flatten
|
12
14
|
end
|
13
15
|
|
16
|
+
# @return [Array]
|
14
17
|
def get_revisions
|
15
18
|
`hg log#{date_range}`.split("\n").reject{|line| line !~ /^changeset:/}.map{|line| line[/:(\S+)$/, 1] }
|
16
19
|
end
|
17
20
|
|
21
|
+
# @raise RunTimeError Currently, the generate history option does not support Mercurial
|
18
22
|
def generate_history(starting_point)
|
19
|
-
raise "currently the generate history option does not support mercurial"
|
23
|
+
raise NotImplementedError, "currently the generate history option does not support mercurial"
|
20
24
|
end
|
21
25
|
|
22
26
|
private
|
23
27
|
|
28
|
+
def self.cmd_success?
|
29
|
+
$?.success?
|
30
|
+
end
|
31
|
+
|
24
32
|
def get_diff(revision, previous_revision)
|
25
33
|
`hg diff -r #{revision}:#{previous_revision} -U 0`.split(/\n/).select{|line| /^@@|^---|^\+\+\+/ =~ line }
|
26
34
|
end
|
@@ -35,6 +43,5 @@ module Churn
|
|
35
43
|
def get_recent_file(line)
|
36
44
|
super(line).split("\t")[0]
|
37
45
|
end
|
38
|
-
|
39
46
|
end
|
40
47
|
end
|
@@ -1,6 +1,6 @@
|
|
1
1
|
module Churn
|
2
2
|
|
3
|
-
# Base
|
3
|
+
# Base class for analyzing various SCM systems like git, HG, and SVN
|
4
4
|
class SourceControl
|
5
5
|
|
6
6
|
def self.set_source_control(start_date)
|
@@ -13,8 +13,9 @@ module Churn
|
|
13
13
|
end
|
14
14
|
end
|
15
15
|
|
16
|
+
# @api public
|
16
17
|
def self.supported?
|
17
|
-
raise "child class must implement"
|
18
|
+
raise NotImplementedError, "child class must implement"
|
18
19
|
end
|
19
20
|
|
20
21
|
def initialize(start_date=nil)
|
@@ -22,15 +23,15 @@ module Churn
|
|
22
23
|
end
|
23
24
|
|
24
25
|
def get_logs
|
25
|
-
raise "child class must implement"
|
26
|
+
raise NotImplementedError, "child class must implement"
|
26
27
|
end
|
27
28
|
|
28
29
|
def get_revisions
|
29
|
-
raise "child class must implement"
|
30
|
+
raise NotImplementedError, "child class must implement"
|
30
31
|
end
|
31
32
|
|
32
33
|
def generate_history(starting_point)
|
33
|
-
raise "child class must implement"
|
34
|
+
raise NotImplementedError, "child class must implement"
|
34
35
|
end
|
35
36
|
|
36
37
|
def get_updated_files_change_info(revision, revisions)
|
@@ -49,7 +50,6 @@ module Churn
|
|
49
50
|
updated[recent_file] << removed_range
|
50
51
|
updated[recent_file] << added_range
|
51
52
|
else
|
52
|
-
puts /^---/ =~ line
|
53
53
|
raise "diff lines that don't match the two patterns aren't expected: '#{line}'"
|
54
54
|
end
|
55
55
|
end
|
@@ -87,7 +87,5 @@ module Churn
|
|
87
87
|
def get_recent_file(line)
|
88
88
|
line.gsub(/^--- /,'').gsub(/^\+\+\+ /,'').gsub(/^a\//,'').gsub(/^b\//,'')
|
89
89
|
end
|
90
|
-
|
91
90
|
end
|
92
|
-
|
93
91
|
end
|
@@ -1,25 +1,31 @@
|
|
1
1
|
module Churn
|
2
2
|
|
3
|
-
#
|
3
|
+
# Analyzes SVN SCM to find recently changed files, and what lines have been altered
|
4
4
|
class SvnAnalyzer < SourceControl
|
5
5
|
|
6
|
+
# @return [Boolean]
|
6
7
|
def self.supported?
|
7
8
|
File.exist?(".svn")
|
8
9
|
end
|
9
10
|
|
11
|
+
# @return [Array]
|
10
12
|
def get_logs
|
11
13
|
`svn log --verbose#{date_range}#{svn_credentials}`.split(/\n/).map { |line| clean_up_svn_line(line) }.compact
|
12
14
|
end
|
13
15
|
|
16
|
+
# @raise RunTimeError Currently, the generate history option does not support Subversion
|
14
17
|
def generate_history(starting_point)
|
15
|
-
raise "currently the generate history option does not support subversion"
|
18
|
+
raise NotImplementedError, "currently the generate history option does not support subversion"
|
16
19
|
end
|
17
20
|
|
18
|
-
#
|
21
|
+
# This method is not supported by SVN
|
22
|
+
# @return [Array]
|
19
23
|
def get_revisions
|
20
24
|
[]
|
21
25
|
end
|
22
26
|
|
27
|
+
# This method is not supported by SVN
|
28
|
+
# @return [Hash]
|
23
29
|
def get_updated_files_change_info(revision, revisions)
|
24
30
|
{}
|
25
31
|
end
|
data/lib/churn/version.rb
CHANGED
metadata
CHANGED
@@ -1,209 +1,111 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: churn
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Dan Mayer
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2019-09-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
-
- !ruby/object:Gem::Dependency
|
14
|
-
name: minitest
|
15
|
-
requirement: !ruby/object:Gem::Requirement
|
16
|
-
requirements:
|
17
|
-
- - ~>
|
18
|
-
- !ruby/object:Gem::Version
|
19
|
-
version: '5.3'
|
20
|
-
type: :development
|
21
|
-
prerelease: false
|
22
|
-
version_requirements: !ruby/object:Gem::Requirement
|
23
|
-
requirements:
|
24
|
-
- - ~>
|
25
|
-
- !ruby/object:Gem::Version
|
26
|
-
version: '5.3'
|
27
|
-
- !ruby/object:Gem::Dependency
|
28
|
-
name: shoulda
|
29
|
-
requirement: !ruby/object:Gem::Requirement
|
30
|
-
requirements:
|
31
|
-
- - '>='
|
32
|
-
- !ruby/object:Gem::Version
|
33
|
-
version: '0'
|
34
|
-
type: :development
|
35
|
-
prerelease: false
|
36
|
-
version_requirements: !ruby/object:Gem::Requirement
|
37
|
-
requirements:
|
38
|
-
- - '>='
|
39
|
-
- !ruby/object:Gem::Version
|
40
|
-
version: '0'
|
41
|
-
- !ruby/object:Gem::Dependency
|
42
|
-
name: test_construct
|
43
|
-
requirement: !ruby/object:Gem::Requirement
|
44
|
-
requirements:
|
45
|
-
- - ~>
|
46
|
-
- !ruby/object:Gem::Version
|
47
|
-
version: 2.0.0
|
48
|
-
type: :development
|
49
|
-
prerelease: false
|
50
|
-
version_requirements: !ruby/object:Gem::Requirement
|
51
|
-
requirements:
|
52
|
-
- - ~>
|
53
|
-
- !ruby/object:Gem::Version
|
54
|
-
version: 2.0.0
|
55
|
-
- !ruby/object:Gem::Dependency
|
56
|
-
name: rake
|
57
|
-
requirement: !ruby/object:Gem::Requirement
|
58
|
-
requirements:
|
59
|
-
- - '>='
|
60
|
-
- !ruby/object:Gem::Version
|
61
|
-
version: '0'
|
62
|
-
type: :development
|
63
|
-
prerelease: false
|
64
|
-
version_requirements: !ruby/object:Gem::Requirement
|
65
|
-
requirements:
|
66
|
-
- - '>='
|
67
|
-
- !ruby/object:Gem::Version
|
68
|
-
version: '0'
|
69
|
-
- !ruby/object:Gem::Dependency
|
70
|
-
name: mocha
|
71
|
-
requirement: !ruby/object:Gem::Requirement
|
72
|
-
requirements:
|
73
|
-
- - ~>
|
74
|
-
- !ruby/object:Gem::Version
|
75
|
-
version: 1.1.0
|
76
|
-
type: :development
|
77
|
-
prerelease: false
|
78
|
-
version_requirements: !ruby/object:Gem::Requirement
|
79
|
-
requirements:
|
80
|
-
- - ~>
|
81
|
-
- !ruby/object:Gem::Version
|
82
|
-
version: 1.1.0
|
83
|
-
- !ruby/object:Gem::Dependency
|
84
|
-
name: simplecov
|
85
|
-
requirement: !ruby/object:Gem::Requirement
|
86
|
-
requirements:
|
87
|
-
- - '>='
|
88
|
-
- !ruby/object:Gem::Version
|
89
|
-
version: '0'
|
90
|
-
type: :development
|
91
|
-
prerelease: false
|
92
|
-
version_requirements: !ruby/object:Gem::Requirement
|
93
|
-
requirements:
|
94
|
-
- - '>='
|
95
|
-
- !ruby/object:Gem::Version
|
96
|
-
version: '0'
|
97
|
-
- !ruby/object:Gem::Dependency
|
98
|
-
name: rdoc
|
99
|
-
requirement: !ruby/object:Gem::Requirement
|
100
|
-
requirements:
|
101
|
-
- - '>='
|
102
|
-
- !ruby/object:Gem::Version
|
103
|
-
version: '0'
|
104
|
-
type: :development
|
105
|
-
prerelease: false
|
106
|
-
version_requirements: !ruby/object:Gem::Requirement
|
107
|
-
requirements:
|
108
|
-
- - '>='
|
109
|
-
- !ruby/object:Gem::Version
|
110
|
-
version: '0'
|
111
13
|
- !ruby/object:Gem::Dependency
|
112
14
|
name: main
|
113
15
|
requirement: !ruby/object:Gem::Requirement
|
114
16
|
requirements:
|
115
|
-
- -
|
17
|
+
- - ">="
|
116
18
|
- !ruby/object:Gem::Version
|
117
19
|
version: '0'
|
118
20
|
type: :runtime
|
119
21
|
prerelease: false
|
120
22
|
version_requirements: !ruby/object:Gem::Requirement
|
121
23
|
requirements:
|
122
|
-
- -
|
24
|
+
- - ">="
|
123
25
|
- !ruby/object:Gem::Version
|
124
26
|
version: '0'
|
125
27
|
- !ruby/object:Gem::Dependency
|
126
28
|
name: json_pure
|
127
29
|
requirement: !ruby/object:Gem::Requirement
|
128
30
|
requirements:
|
129
|
-
- -
|
31
|
+
- - ">="
|
130
32
|
- !ruby/object:Gem::Version
|
131
33
|
version: '0'
|
132
34
|
type: :runtime
|
133
35
|
prerelease: false
|
134
36
|
version_requirements: !ruby/object:Gem::Requirement
|
135
37
|
requirements:
|
136
|
-
- -
|
38
|
+
- - ">="
|
137
39
|
- !ruby/object:Gem::Version
|
138
40
|
version: '0'
|
139
41
|
- !ruby/object:Gem::Dependency
|
140
42
|
name: chronic
|
141
43
|
requirement: !ruby/object:Gem::Requirement
|
142
44
|
requirements:
|
143
|
-
- -
|
45
|
+
- - ">="
|
144
46
|
- !ruby/object:Gem::Version
|
145
47
|
version: 0.2.3
|
146
48
|
type: :runtime
|
147
49
|
prerelease: false
|
148
50
|
version_requirements: !ruby/object:Gem::Requirement
|
149
51
|
requirements:
|
150
|
-
- -
|
52
|
+
- - ">="
|
151
53
|
- !ruby/object:Gem::Version
|
152
54
|
version: 0.2.3
|
153
55
|
- !ruby/object:Gem::Dependency
|
154
56
|
name: sexp_processor
|
155
57
|
requirement: !ruby/object:Gem::Requirement
|
156
58
|
requirements:
|
157
|
-
- - ~>
|
59
|
+
- - "~>"
|
158
60
|
- !ruby/object:Gem::Version
|
159
61
|
version: '4.1'
|
160
62
|
type: :runtime
|
161
63
|
prerelease: false
|
162
64
|
version_requirements: !ruby/object:Gem::Requirement
|
163
65
|
requirements:
|
164
|
-
- - ~>
|
66
|
+
- - "~>"
|
165
67
|
- !ruby/object:Gem::Version
|
166
68
|
version: '4.1'
|
167
69
|
- !ruby/object:Gem::Dependency
|
168
70
|
name: ruby_parser
|
169
71
|
requirement: !ruby/object:Gem::Requirement
|
170
72
|
requirements:
|
171
|
-
- - ~>
|
73
|
+
- - "~>"
|
172
74
|
- !ruby/object:Gem::Version
|
173
75
|
version: '3.0'
|
174
76
|
type: :runtime
|
175
77
|
prerelease: false
|
176
78
|
version_requirements: !ruby/object:Gem::Requirement
|
177
79
|
requirements:
|
178
|
-
- - ~>
|
80
|
+
- - "~>"
|
179
81
|
- !ruby/object:Gem::Version
|
180
82
|
version: '3.0'
|
181
83
|
- !ruby/object:Gem::Dependency
|
182
84
|
name: hirb
|
183
85
|
requirement: !ruby/object:Gem::Requirement
|
184
86
|
requirements:
|
185
|
-
- -
|
87
|
+
- - ">="
|
186
88
|
- !ruby/object:Gem::Version
|
187
89
|
version: '0'
|
188
90
|
type: :runtime
|
189
91
|
prerelease: false
|
190
92
|
version_requirements: !ruby/object:Gem::Requirement
|
191
93
|
requirements:
|
192
|
-
- -
|
94
|
+
- - ">="
|
193
95
|
- !ruby/object:Gem::Version
|
194
96
|
version: '0'
|
195
97
|
- !ruby/object:Gem::Dependency
|
196
98
|
name: rest-client
|
197
99
|
requirement: !ruby/object:Gem::Requirement
|
198
100
|
requirements:
|
199
|
-
- -
|
101
|
+
- - ">="
|
200
102
|
- !ruby/object:Gem::Version
|
201
103
|
version: 1.6.0
|
202
104
|
type: :runtime
|
203
105
|
prerelease: false
|
204
106
|
version_requirements: !ruby/object:Gem::Requirement
|
205
107
|
requirements:
|
206
|
-
- -
|
108
|
+
- - ">="
|
207
109
|
- !ruby/object:Gem::Version
|
208
110
|
version: 1.6.0
|
209
111
|
description: 'High method and class churn has been shown to have increased bug and
|
@@ -213,68 +115,12 @@ email: dan@mayerdan.com
|
|
213
115
|
executables:
|
214
116
|
- churn
|
215
117
|
extensions: []
|
216
|
-
extra_rdoc_files:
|
217
|
-
- LICENSE
|
218
|
-
- README.md
|
118
|
+
extra_rdoc_files: []
|
219
119
|
files:
|
220
|
-
- .
|
221
|
-
- .document
|
222
|
-
- .gitignore
|
223
|
-
- .travis.yml
|
224
|
-
- Gemfile
|
225
|
-
- Gemfile.lock
|
226
|
-
- LICENSE
|
120
|
+
- LICENSE.txt
|
227
121
|
- README.md
|
228
|
-
- Rakefile
|
229
122
|
- bin/churn
|
230
123
|
- churn.gemspec
|
231
|
-
- doc/Churn.html
|
232
|
-
- doc/Churn/BzrAnalyzer.html
|
233
|
-
- doc/Churn/ChurnCalculator.html
|
234
|
-
- doc/Churn/ChurnHistory.html
|
235
|
-
- doc/Churn/ChurnOptions.html
|
236
|
-
- doc/Churn/GitAnalyzer.html
|
237
|
-
- doc/Churn/HgAnalyzer.html
|
238
|
-
- doc/Churn/LocationMapping.html
|
239
|
-
- doc/Churn/SourceControl.html
|
240
|
-
- doc/Churn/SvnAnalyzer.html
|
241
|
-
- doc/LICENSE.html
|
242
|
-
- doc/Object.html
|
243
|
-
- doc/created.rid
|
244
|
-
- doc/images/add.png
|
245
|
-
- doc/images/arrow_up.png
|
246
|
-
- doc/images/brick.png
|
247
|
-
- doc/images/brick_link.png
|
248
|
-
- doc/images/bug.png
|
249
|
-
- doc/images/bullet_black.png
|
250
|
-
- doc/images/bullet_toggle_minus.png
|
251
|
-
- doc/images/bullet_toggle_plus.png
|
252
|
-
- doc/images/date.png
|
253
|
-
- doc/images/delete.png
|
254
|
-
- doc/images/find.png
|
255
|
-
- doc/images/loadingAnimation.gif
|
256
|
-
- doc/images/macFFBgHack.png
|
257
|
-
- doc/images/package.png
|
258
|
-
- doc/images/page_green.png
|
259
|
-
- doc/images/page_white_text.png
|
260
|
-
- doc/images/page_white_width.png
|
261
|
-
- doc/images/plugin.png
|
262
|
-
- doc/images/ruby.png
|
263
|
-
- doc/images/tag_blue.png
|
264
|
-
- doc/images/tag_green.png
|
265
|
-
- doc/images/transparent.png
|
266
|
-
- doc/images/wrench.png
|
267
|
-
- doc/images/wrench_orange.png
|
268
|
-
- doc/images/zoom.png
|
269
|
-
- doc/index.html
|
270
|
-
- doc/js/darkfish.js
|
271
|
-
- doc/js/jquery.js
|
272
|
-
- doc/js/navigation.js
|
273
|
-
- doc/js/search.js
|
274
|
-
- doc/js/search_index.js
|
275
|
-
- doc/js/searcher.js
|
276
|
-
- doc/rdoc.css
|
277
|
-
- doc/table_of_contents.html
|
278
124
|
- lib/churn.rb
|
279
125
|
- lib/churn/calculator.rb
|
280
126
|
- lib/churn/history.rb
|
@@ -289,18 +135,6 @@ files:
|
|
289
135
|
- lib/tasks/churn_tasks.rb
|
290
136
|
- man/churn.1
|
291
137
|
- man/churn.html
|
292
|
-
- test/data/churn_calculator.rb
|
293
|
-
- test/data/test_helper.rb
|
294
|
-
- test/test_helper.rb
|
295
|
-
- test/unit/bzr_analyzer_test.rb
|
296
|
-
- test/unit/churn_calculator_test.rb
|
297
|
-
- test/unit/churn_history_test.rb
|
298
|
-
- test/unit/churn_options_test.rb
|
299
|
-
- test/unit/git_analyzer_test.rb
|
300
|
-
- test/unit/hg_analyzer_test.rb
|
301
|
-
- test/unit/location_mapping_test.rb
|
302
|
-
- test/unit/source_control_test.rb
|
303
|
-
- test/unit/svn_analyzer_test.rb
|
304
138
|
homepage: http://github.com/danmayer/churn
|
305
139
|
licenses:
|
306
140
|
- MIT
|
@@ -311,17 +145,17 @@ require_paths:
|
|
311
145
|
- lib
|
312
146
|
required_ruby_version: !ruby/object:Gem::Requirement
|
313
147
|
requirements:
|
314
|
-
- -
|
148
|
+
- - ">="
|
315
149
|
- !ruby/object:Gem::Version
|
316
|
-
version:
|
150
|
+
version: 1.9.3
|
317
151
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
318
152
|
requirements:
|
319
|
-
- -
|
153
|
+
- - ">="
|
320
154
|
- !ruby/object:Gem::Version
|
321
155
|
version: '0'
|
322
|
-
requirements:
|
323
|
-
|
324
|
-
rubygems_version:
|
156
|
+
requirements:
|
157
|
+
- bzr, git, hg or svn
|
158
|
+
rubygems_version: 3.0.3
|
325
159
|
signing_key:
|
326
160
|
specification_version: 4
|
327
161
|
summary: Providing additional churn metrics over the original metric_fu churn
|