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
Это плохо по какой-то другой причине, это может вызвать другие проблемы, поэтому будьте осторожны с этим.