class Churn::HgAnalyzer

Analyzes Hg / Mercurial SCM to find recently changed files, and what lines have been altered

Public Class Methods

supported?() click to toggle source

@return [Array]

# File lib/churn/scm/hg_analyzer.rb, line 7
def self.supported?
  !!(`hg branch 2>&1` && cmd_success?)
end

Private Class Methods

cmd_success?() click to toggle source
# File lib/churn/scm/hg_analyzer.rb, line 28
def self.cmd_success?
  $?.success?
end

Public Instance Methods

generate_history(starting_point) click to toggle source

@raise RunTimeError Currently, the generate history option does not support Mercurial

# File lib/churn/scm/hg_analyzer.rb, line 22
def generate_history(starting_point)
  raise NotImplementedError, "currently the generate history option does not support mercurial"
end
get_logs() click to toggle source

@return [Array]

# File lib/churn/scm/hg_analyzer.rb, line 12
def get_logs
  `hg log -v#{date_range}`.split("\n").reject{|line| line !~ /^files:/}.map{|line| line.split(" ")[1..-1]}.flatten
end
get_revisions() click to toggle source

@return [Array]

# File lib/churn/scm/hg_analyzer.rb, line 17
def get_revisions
  `hg log#{date_range}`.split("\n").reject{|line| line !~ /^changeset:/}.map{|line| line[/:(\S+)$/, 1] }
end

Private Instance Methods

date_range() click to toggle source
# File lib/churn/scm/hg_analyzer.rb, line 36
def date_range
  if @start_date
    date = Chronic.parse(@start_date)
    " -d \"> #{date.strftime('%Y-%m-%d')}\""
  end
end
get_diff(revision, previous_revision) click to toggle source
# File lib/churn/scm/hg_analyzer.rb, line 32
def get_diff(revision, previous_revision)
  `hg diff -r #{revision}:#{previous_revision} -U 0`.split(/\n/).select{|line| /^@@|^---|^\+\+\+/ =~ line }
end
get_recent_file(line) click to toggle source
Calls superclass method
# File lib/churn/scm/hg_analyzer.rb, line 43
def get_recent_file(line)
  super(line).split("\t")[0]
end