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