class Danger::LocalGitRepo

Attributes

base_commit[RW]
found_pull_request[R]
head_commit[RW]
remote_info[R]

Public Class Methods

new(env = {}) click to toggle source
# File lib/danger/ci_source/local_git_repo.rb, line 45
def initialize(env = {})
  @remote_info = find_remote_info(env)
  @found_pull_request = find_pull_request(env)
  self.repo_slug = remote_info.slug
  raise_error_for_missing_remote if remote_info.kind_of?(NoRepoInfo)

  self.pull_request_id = found_pull_request.pull_request_id

  if sha
    self.base_commit = commits.base
    self.head_commit = commits.head
  else
    self.base_commit = found_pull_request.base
    self.head_commit = found_pull_request.head
  end
end
validates_as_ci?(env) click to toggle source
# File lib/danger/ci_source/local_git_repo.rb, line 20
def self.validates_as_ci?(env)
  env.key? "DANGER_USE_LOCAL_GIT"
end
validates_as_pr?(_env) click to toggle source
# File lib/danger/ci_source/local_git_repo.rb, line 24
def self.validates_as_pr?(_env)
  false
end

Public Instance Methods

git() click to toggle source
# File lib/danger/ci_source/local_git_repo.rb, line 28
def git
  @git ||= GitRepo.new
end
run_git(command) click to toggle source
# File lib/danger/ci_source/local_git_repo.rb, line 32
def run_git(command)
  git.exec(command).encode("UTF-8", "binary", invalid: :replace, undef: :replace, replace: "")
end
supported_request_sources() click to toggle source
# File lib/danger/ci_source/local_git_repo.rb, line 36
def supported_request_sources
  @supported_request_sources ||= [
    Danger::RequestSources::GitHub,
    Danger::RequestSources::BitbucketServer,
    Danger::RequestSources::BitbucketCloud,
    Danger::RequestSources::VSTS
  ]
end

Private Instance Methods

commits() click to toggle source
# File lib/danger/ci_source/local_git_repo.rb, line 112
def commits
  @_commits ||= Commits.new(run_git("rev-list --parents -n 1 #{sha}"))
end
find_pull_request(env) click to toggle source
# File lib/danger/ci_source/local_git_repo.rb, line 86
def find_pull_request(env)
  if given_pull_request_url?(env)
    PullRequestFinder.new(
      remote_info.id,
      remote_info.slug,
      remote: true,
      remote_url: env["LOCAL_GIT_PR_URL"]
    ).call(env: env)
  else
    PullRequestFinder.new(
      env.fetch("LOCAL_GIT_PR_ID") { "" },
      remote_info.slug,
      remote: false,
      git_logs: run_git("log --oneline -1000000")
    ).call(env: env)
  end
end
find_remote_info(env) click to toggle source
# File lib/danger/ci_source/local_git_repo.rb, line 75
def find_remote_info(env)
  if given_pull_request_url?(env)
    FindRepoInfoFromURL.new(env["LOCAL_GIT_PR_URL"]).call
  else
    FindRepoInfoFromLogs.new(
      env["DANGER_GITHUB_HOST"] || "github.com",
      run_git("remote show origin -n")
    ).call
  end || NoRepoInfo.new
end
given_pull_request_url?(env) click to toggle source
# File lib/danger/ci_source/local_git_repo.rb, line 104
def given_pull_request_url?(env)
  env["LOCAL_GIT_PR_URL"] && !env["LOCAL_GIT_PR_URL"].empty?
end
missing_remote_error_message() click to toggle source
# File lib/danger/ci_source/local_git_repo.rb, line 70
def missing_remote_error_message
  "danger cannot find your git remote, please set a remote. " \
  "And the repository must host on GitHub.com or GitHub Enterprise."
end
raise_error_for_missing_remote() click to toggle source
# File lib/danger/ci_source/local_git_repo.rb, line 66
def raise_error_for_missing_remote
  raise missing_remote_error_message
end
sha() click to toggle source
# File lib/danger/ci_source/local_git_repo.rb, line 108
def sha
  @_sha ||= found_pull_request.sha
end