class AutoReleaseNote::GitLog

Attributes

issues[R]
logs[R]

Public Class Methods

new(tag_query) click to toggle source
# File lib/auto_release_note/git_log.rb, line 7
def initialize(tag_query)
  @logs = []
  @issues = []
  @git = Git.open(Dir.pwd)
  parse_merge_log(get_merge_log(tag_query))
  get_issue
end

Public Instance Methods

repositories() click to toggle source
# File lib/auto_release_note/git_log.rb, line 19
def repositories
  @git.remotes.map {|remote| remote.url.gsub(/.git$/, '') }
end
repository(username) click to toggle source
# File lib/auto_release_note/git_log.rb, line 15
def repository(username)
  repositories.find {|url| url.include?(username) }
end

Private Instance Methods

get_branch_name(log) click to toggle source
# File lib/auto_release_note/git_log.rb, line 43
def get_branch_name(log)
  log.match(/Merge pull request .+ from (.+)/)[1]
end
get_issue() click to toggle source
# File lib/auto_release_note/git_log.rb, line 47
def get_issue
  get_issue_id_by_branch_name
  substitute_pull_req_for_issue
end
get_issue_id_by_branch_name() click to toggle source
# File lib/auto_release_note/git_log.rb, line 52
def get_issue_id_by_branch_name
  @logs.each do |log|
    id = log[:branch].match(/\D*(\d+)\D*/)
    log[:issue] = id[1] if id
  end
end
get_merge_log(tag_query) click to toggle source
# File lib/auto_release_note/git_log.rb, line 24
def get_merge_log(tag_query)
  # `git log --merges --oneline #{tag_query} | grep 'Merge pull request #'`
  # FIXME: don't use 200
  @git.log(200).between(tag_query.split("..")[0], tag_query.split("..")[1]).select do |commit|
    commit.message.match(/Merge pull request #/)
  end
end
get_pull_req_id(log) click to toggle source
# File lib/auto_release_note/git_log.rb, line 39
def get_pull_req_id(log)
  log.match(/Merge pull request #(.+) from .*/)[1]
end
parse_merge_log(merge_log) click to toggle source
# File lib/auto_release_note/git_log.rb, line 32
def parse_merge_log(merge_log)
  merge_log.each do |log|
    logs << { pull_req_id: get_pull_req_id(log.message), branch: get_branch_name(log.message), issue: nil }
  end
  logs.compact!
end
substitute_pull_req_for_issue() click to toggle source
# File lib/auto_release_note/git_log.rb, line 59
def substitute_pull_req_for_issue
  @logs.each do |log|
    log[:issue] = log[:pull_req_id] unless log[:issue]
  end
end