Git Hook - Ruby Code - Интерактивный ввод

Я пытаюсь получить входные данные из кода выполнения git hook (hook-msg). Но рубин не может остановиться в точке ввода. И его выполнение кода, как если бы ввод был как оператор put. Вот код, который я попробовал и потерпел неудачу.

#!/usr/bin/env ruby
require 'open3'

def take_input_here

  Open3.popen3("pwd", :chdir=>"/") {|stdin, stdout, stderr, thread|
    p stdout.read.chomp #=> "/"
  }

  input_val = gets.chomp
  puts input_val
  puts 'Hellow World!'
end
take_input_here
puts "Commit Aborted."
Process.exit(1)

Кто-нибудь, пожалуйста, помогите мне принять этот интерактивный материал или предложите мне хороший язык для написания git-хуков. Заранее спасибо.

1 ответ

Большинство перехватчиков Git запускаются с помощью stdin, поступающего из канала, в который Git записывает информацию, или с stdin, полностью отключенным от терминала. commit-msg крюк попадает в эту вторую категорию.

Не имеет значения, какой язык вы используете: чтение стандартного commit-msg Hook сразу увидит EOF, так как STDIN подключен к /dev/null (Linux/Unix) или NUL: (Windows).

В Unix-подобных системах вы можете попробовать открыть /dev/tty, Обратите внимание, что если Git запускается из чего-то, что не имеет /dev/tty (какой-то отдельный процесс, например, через cron) или где читаешь /dev/tty Это плохо по какой-то другой причине, это может вызвать другие проблемы, поэтому будьте осторожны с этим.

Другие вопросы по тегам