class Overcommit::Hook::PreCommit::BundleCheck

Check if local Gemfile.lock matches Gemfile when either changes, unless Gemfile.lock is ignored by git.

@see bundler.io/

Constants

LOCK_FILE

Public Instance Methods

run() click to toggle source
# File lib/overcommit/hook/pre_commit/bundle_check.rb, line 11
def run
  # Ignore if Gemfile.lock is not tracked by git
  ignored_files = execute(%w[git ls-files -o -i --exclude-standard]).stdout.split("\n")
  return :pass if ignored_files.include?(LOCK_FILE)

  previous_lockfile = File.read(LOCK_FILE) if File.exist?(LOCK_FILE)

  result = execute(command)
  unless result.success?
    return :fail, result.stdout
  end

  new_lockfile = File.read(LOCK_FILE) if File.exist?(LOCK_FILE)
  if previous_lockfile != new_lockfile
    return :fail, "#{LOCK_FILE} is not up-to-date -- run \
    `#{command.join(' ')}` or add the Gemfile and/or Gemfile.lock".squeeze
  end

  :pass
end