class Buildkite::Builder::FileResolver

Attributes

cache[RW]
modified_files[R]

Public Class Methods

new() click to toggle source
# File lib/buildkite/builder/file_resolver.rb, line 22
def initialize
  @modified_files = Set.new(pull_request? ? files_from_pull_request.sort! : files_from_git.sort!)
end
resolve(reset = false) click to toggle source
# File lib/buildkite/builder/file_resolver.rb, line 16
def resolve(reset = false)
  @resolve = nil if !cache || reset
  @resolve ||= new
end

Private Instance Methods

command(cmd) click to toggle source
# File lib/buildkite/builder/file_resolver.rb, line 48
def command(cmd)
  output, status = Open3.capture2(*cmd.split)

  if status.success?
    output
  else
    raise "Command failed (exit #{status.exitstatus}): #{cmd}"
  end
end
files_from_git() click to toggle source
# File lib/buildkite/builder/file_resolver.rb, line 32
def files_from_git
  if Buildkite.env
    changed_files = command("git diff-tree --no-commit-id --name-only -r #{Buildkite.env.commit}")
  else
    default_branch = command('git symbolic-ref refs/remotes/origin/HEAD').strip
    changed_files = command("git diff --name-only #{default_branch}")
    changed_files << command('git diff --name-only')
  end

  changed_files.split.uniq.sort
end
files_from_pull_request() click to toggle source
# File lib/buildkite/builder/file_resolver.rb, line 28
def files_from_pull_request
  Github.pull_request_files.map { |f| f.fetch('filename') }
end
pull_request?() click to toggle source
# File lib/buildkite/builder/file_resolver.rb, line 44
def pull_request?
  Buildkite.env&.pull_request
end