module Diggit::DevelopersActivity::ActivityExtractor
Set of functions extracting developers activity for a given set of commits
Public Instance Methods
extract_developers_activity(source, commits, commits_group_id = nil)
click to toggle source
# File lib/diggit/developers_activity/activity_extractor.rb, line 15 def extract_developers_activity(source, commits, commits_group_id = nil) return [] if commits.empty? contributions = Hash.new { |hash, key| hash[key] = { touches: 0, churn: 0 } } num_commits = 0 commits.each do |commit| num_commits += 1 author = Authors.get_author(commit) commit.parents.each do |parent| diff = parent.diff(commit, DIFF_OPTIONS) diff.find_similar!(DIFF_RENAME_OPTIONS) diff.each do |patch| maudule = Modules.get_patch_module(patch) next if maudule.nil? key = { author: author, 'module' => maudule } contributions[key] = { touches: contributions[key][:touches] + 1, churn: contributions[key][:churn] + patch.stat[0] + patch.stat[1] } end end end first_commit_date = commits[0].author[:time] # compute metrics and write to result developer_metrics = [] contributions.each do |key, value| developer_metrics << { project: source.url, developer: key[:author], 'module' => key['module'], touches: value[:touches], churn: value[:churn], releaseDate: first_commit_date, commits_group_id: commits_group_id } end developer_metrics end