class Repokeeper::Analyzers::SimilarCommits

Checks for similar commits messages in commit ant its parents commits level analyzer

Public Instance Methods

min_edit_distance() click to toggle source
# File lib/repokeeper/analyzers/commits/similar_commits.rb, line 7
def min_edit_distance
  @config['min_edit_distance']
end
process_commit(commit) click to toggle source
# File lib/repokeeper/analyzers/commits/similar_commits.rb, line 11
def process_commit(commit)
  commit.parents.map do |parent|
    compare_commits(commit, parent)
  end.compact
end

Private Instance Methods

clean_commit_message(commit) click to toggle source
# File lib/repokeeper/analyzers/commits/similar_commits.rb, line 40
def clean_commit_message(commit)
  commit.message.gsub(/[\t\n]/, ' ').strip
end
compare_commits(newer, older) click to toggle source
# File lib/repokeeper/analyzers/commits/similar_commits.rb, line 19
def compare_commits(newer, older)
  new_message = clean_commit_message(newer)
  old_message = clean_commit_message(older)

  distance = Repokeeper::Utils.edit_distance(new_message, old_message)
  error = error_message_by_distance(distance, new_message, old_message)
  create_offense_for_error(error, newer, older)
end
create_offense_for_error(error, newer, older) click to toggle source
# File lib/repokeeper/analyzers/commits/similar_commits.rb, line 36
def create_offense_for_error(error, newer, older)
  create_offense(newer, "#{error}. See #{older.oid}") if error
end
error_message_by_distance(distance, new_message, old_message) click to toggle source
# File lib/repokeeper/analyzers/commits/similar_commits.rb, line 28
def error_message_by_distance(distance, new_message, old_message)
  if distance == 0
    "Same commit message: '#{new_message}'"
  elsif distance < min_edit_distance
    "Similar commit messages: '#{new_message}' and '#{old_message}'"
  end
end