class Gergich::Commit

Attributes

ref[R]

Public Class Methods

new(ref = ENV.fetch("GERRIT_PATCHSET_REVISION", "HEAD"), revision_number = nil) click to toggle source
# File lib/gergich.rb, line 41
def initialize(ref = ENV.fetch("GERRIT_PATCHSET_REVISION", "HEAD"), revision_number = nil)
  @ref = ref
  @revision_number = revision_number
  logger.debug "Commit initialized with ref: #{ref}"
end

Public Instance Methods

change_id() click to toggle source
# File lib/gergich.rb, line 92
def change_id
  if info[:project] && info[:branch]
    "#{info[:project]}~#{ERB::Util.url_encode info[:branch]}~#{info[:change_id]}"
  else
    info[:change_id]
  end
end
files() click to toggle source
# File lib/gergich.rb, line 65
def files
  @files ||= if Gergich.use_git?
    Gergich.git("diff-tree --no-commit-id --name-only -r #{ref}").split
  else
    raw = API.get("/changes/#{change_id}/revisions/#{revision_id}/patch", raw: true)
    raw.unpack1("m")
      .scan(%r{^diff --git a/.*? b/(.*?)$})
      .flatten
  end
end
info() click to toggle source
# File lib/gergich.rb, line 47
def info
  @info ||= begin
    if Gergich.use_git?
      output = Gergich.git("log -1 #{ref}")
      /\Acommit (?<revision_id>[0-9a-f]+).*^\s*Change-Id: (?<change_id>\w+)/m =~ output
    else
      revision_id = ENV["GERRIT_PATCHSET_REVISION"] \
        || raise(GergichError, "No .git directory, and GERRIT_PATCHSET_REVISION not set")
      change_id = ENV["GERRIT_CHANGE_ID"] \
        || raise(GergichError, "No .git directory, and GERRIT_CHANGE_ID not set")
    end
    project = ENV["GERRIT_PROJECT"]
    branch = ENV["GERRIT_BRANCH"]

    { revision_id: revision_id, change_id: change_id, project: project, branch: branch }
  end
end
revision_id() click to toggle source
# File lib/gergich.rb, line 76
def revision_id
  info[:revision_id]
end
revision_number() click to toggle source
# File lib/gergich.rb, line 80
def revision_number
  @revision_number ||= begin
    patchset_number = ENV["GERRIT_PATCHSET_NUMBER"]
    return patchset_number unless patchset_number.nil? # rubocop:disable Lint/NoReturnInBeginEndBlocks

    gerrit_info = API.get("/changes/?q=#{change_id}&o=ALL_REVISIONS")[0]
    raise GergichError, "Gerrit patchset not found" unless gerrit_info

    gerrit_info["revisions"][revision_id]["_number"]
  end
end