Class: Diggit::DevelopersActivity::Analyses::MonthsActivityAnalysis

Inherits:
ActivityAnalysis
  • Object
show all
Defined in:
lib/diggit/developers_activity/analyses/months_activity_analysis.rb

Instance Method Summary collapse

Methods inherited from ActivityAnalysis

#load_options, #source_options

Methods included from Diggit::DevelopersActivity::ActivityExtractor

#extract_developers_activity

Constructor Details

#initialize(*args) ⇒ MonthsActivityAnalysis

Returns a new instance of MonthsActivityAnalysis.



17
18
19
20
21
22
# File 'lib/diggit/developers_activity/analyses/months_activity_analysis.rb', line 17

def initialize(*args)
	super(*args)
	# can be :before, :after, or :both
	@months_to_extract = @options.key?(OPT_MONTHS_TO_EXTRACT) ? @options[OPT_MONTHS_TO_EXTRACT].to_sym : :before
	@num_months_to_extract = @options.key?(OPT_NUM_MONTHS_TO_EXTRACT) ? @options[OPT_NUM_MONTHS_TO_EXTRACT].to_i : 12
end

Instance Method Details

#cleanObject



29
30
31
32
# File 'lib/diggit/developers_activity/analyses/months_activity_analysis.rb', line 29

def clean
	@addons[:db].db[MONTHS_BEFORE_COL].remove({ project: @source }) unless @months_to_extract == :after
	@addons[:db].db[MONTHS_AFTER_COL].remove({ project: @source }) unless @months_to_extract == :before
end

#extract_months_afterObject



64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
# File 'lib/diggit/developers_activity/analyses/months_activity_analysis.rb', line 64

def extract_months_after
	Renames.clear
	r_0 = @repo.lookup(source_options["cloc-commit-id"])
	r_last = @repo.lookup(source_options["R_last"])
	t_0 = r_0.author[:time]

	walker = Rugged::Walker.new(@repo)
	walker.sorting(Rugged::SORT_DATE | Rugged::SORT_REVERSE)
	walker.push(r_last)
	t_next_month = t_0 + MONTH_SECONDS
	month_num = 1
	commits = []
	walker.each do |commit|
		t = commit.author[:time]
		next if t < t_0
		Renames.extract_commit_renames(commit, false)
		commits << commit if commit.parents.size == 1
		if t > t_next_month
			puts "Month #{month_num}, #{commits.size} commits"
			m = ActivityExtractor.extract_developers_activity(@source, commits, month_num)
			@addons[:db].db[MONTHS_AFTER_COL].insert(m) unless m.empty?
			month_num += 1
			t_next_month += MONTH_SECONDS
			commits = []
		end
		break if month_num > @num_months_to_extract
	end
end

#extract_months_beforeObject



34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
# File 'lib/diggit/developers_activity/analyses/months_activity_analysis.rb', line 34

def extract_months_before
	Renames.clear
	r_0 = @repo.lookup(source_options["cloc-commit-id"])
	t_first = @repo.lookup(source_options["R_first"]).author[:time]

	t_0 = r_0.author[:time]

	walker = Rugged::Walker.new(@repo)
	walker.sorting(Rugged::SORT_DATE)
	walker.push(r_0)

	t_previous_month = t_0 - MONTH_SECONDS
	month_num = 1
	commits = []
	walker.each do |commit|
		t = commit.author[:time]
		Renames.extract_commit_renames(commit, true)
		commits << commit if commit.parents.size == 1
		if t < t_previous_month || t < t_first
			puts "Month #{month_num}, #{commits.size} commits"
			m = extract_developers_activity(@source, commits, month_num)
			@addons[:db].db[MONTHS_BEFORE_COL].insert(m) unless m.empty?
			month_num += 1
			t_previous_month -= MONTH_SECONDS
			commits = []
		end
		break if t < t_first || month_num > @num_months_to_extract
	end
end

#runObject



24
25
26
27
# File 'lib/diggit/developers_activity/analyses/months_activity_analysis.rb', line 24

def run
	extract_months_before unless @months_to_extract == :after
	extract_months_after unless @months_to_extract == :before
end