Class: Churn::SourceControl
- Inherits:
-
Object
- Object
- Churn::SourceControl
show all
- Defined in:
- lib/churn/scm/source_control.rb
Overview
Base clase for analyzing various SCM systems like git, HG, and SVN
Class Method Summary
collapse
Instance Method Summary
collapse
Constructor Details
#initialize(start_date = nil) ⇒ SourceControl
Returns a new instance of SourceControl.
24
25
26
|
# File 'lib/churn/scm/source_control.rb', line 24
def initialize(start_date=nil)
@start_date = start_date
end
|
Class Method Details
.set_source_control(start_date) ⇒ Object
6
7
8
9
10
11
12
13
14
15
16
17
18
|
# File 'lib/churn/scm/source_control.rb', line 6
def self.set_source_control(start_date)
if GitAnalyzer.supported?
GitAnalyzer.new(start_date)
elsif HgAnalyzer.supported?
HgAnalyzer.new(start_date)
elsif BzrAnalyzer.supported?
BzrAnalyzer.new(start_date)
elsif SvnAnalyzer.supported?
SvnAnalyzer.new(start_date)
else
raise "Churn requires a bazaar, git, mercurial, or subversion source control"
end
end
|
.supported? ⇒ Boolean
20
21
22
|
# File 'lib/churn/scm/source_control.rb', line 20
def self.supported?
raise "child class must implement"
end
|
Instance Method Details
#get_logs ⇒ Object
28
29
30
|
# File 'lib/churn/scm/source_control.rb', line 28
def get_logs
raise "child class must implement"
end
|
#get_revisions ⇒ Object
32
33
34
|
# File 'lib/churn/scm/source_control.rb', line 32
def get_revisions
raise "child class must implement"
end
|
#get_updated_files_change_info(revision, revisions) ⇒ Object
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
|
# File 'lib/churn/scm/source_control.rb', line 36
def get_updated_files_change_info(revision, revisions)
updated = {}
logs = get_updated_files_from_log(revision, revisions)
recent_file = nil
logs.each do |line|
if line.match(/^---/) || line.match(/^\+\+\+/)
recent_file = get_recent_file(line)
updated[recent_file] = [] unless updated.include?(recent_file)
elsif line.match(/^@@/)
removed_range = get_changed_range(line, '-')
added_range = get_changed_range(line, '\+')
updated[recent_file] << removed_range
updated[recent_file] << added_range
else
puts line.match(/^---/)
raise "diff lines that don't match the two patterns aren't expected: '#{line}'"
end
end
updated
end
|
#get_updated_files_from_log(revision, revisions) ⇒ Object
59
60
61
62
63
64
65
66
67
68
|
# File 'lib/churn/scm/source_control.rb', line 59
def get_updated_files_from_log(revision, revisions)
current_index = revisions.index(revision)
previous_index = current_index+1
previous_revision = revisions[previous_index] unless revisions.length < previous_index
if revision && previous_revision
get_diff(revision, previous_revision)
else
[]
end
end
|