Git pre-commit hook, чтобы проверить, что изменения в определенных файлах происходят только на главной ветви

Как новичок в Ruby, я пытаюсь оптимизировать этот скрипт, который является предварительным фиксацией на стороне клиента для git.

Я надеялся, что смогу получить обзор, чтобы убедиться, что я слежу за всеми рубиновыми идиомами, и чтобы у меня было самое элегантное решение.

#!/usr/bin/env ruby
#
# Pre-commit hook created to help ensure dns changes are being 
# committed to the correct branch.
#

# Hash of zone files to look for when a commit is attempted.
zone_files = { 
  development: ‘some_zone_file1’,
  prod: ‘some_zone_file2’
}

# Execute git diff to determine files includes as part of commit.
out_data = %x{git diff --cached --name-only}
pri_branch = "master"

# Iterate through the zone files, and check if any are found in the output. 
# Only one needs to be found. No need to find all.
zone_files.keys.each do |key| 
  if out_data.include?zone_files[key]
    current_branch = %x{git branch}.match(/\* (.+?)\n/m)
    if current_branch[1].include?pri_branch
      break
    else
      puts "Warning: You have triggered a git pre-commit hook."
      puts "Warning: Your current branch is: #{current_branch[1]}."
      puts "Warning: For dns, ensure you commit on branch: #{pri_branch}"
      puts "Warning: Include '-n' to bypass this check."
      puts "Exiting..."
      exit 1
    end
  end
end
11 голосов | спросил fr00z1 9 J000000Wednesday14 2014, 17:01:41

1 ответ


5

Некоторые примечания:

  • zone_files.keys.each, а затем zone_files[key]. Вы должны повторить пару: zone_files.each do |key, zone|

  • current_branch = %x{git branch}.match(/\* (.+?)\n/m). Разве это невозможно? затем лучше переместить его перед циклом. current_branch[1].include?pri_branch. Это довольно нечитаемо, поместите те круглые скобки: current_branch[1].include?(pri_branch)

В противном случае это выглядит очень хорошо для меня.

ответил tokland 9 J000000Wednesday14 2014, 22:18:59

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132