Git Hook - Ruby代码 - 交互式输入

时间:2017-11-24 17:22:27

标签: ruby git githooks popen3 ruby-thread

我试图从git hook执行代码(commit-msg hook)获取输入。但红宝石无法在输入点停下来。它执行代码就好像输入就像一个puts语句。这是我尝试过但失败的代码。

#!/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 hooks。提前谢谢。

1 个答案:

答案 0 :(得分:0)

大多数Git钩子都是使用stdin来运行的,这些stdin来自Git写入信息的管道,或者stdin与终端完全断开连接。 commit-msg挂钩属于第二类。

使用哪种语言无关紧要:在commit-msg挂钩中读取stdin将立即看到EOF,因为stdin已连接到/dev/null(Linux / Unix)或{{1} (Windows)。

在类Unix系统上,您可以尝试打开NUL:。请注意,如果Git是从没有拥有 /dev/tty(某些分离的过程,例如,通过/dev/tty)或阅读cron的内容中运行的因某些其他原因而不好,这可能会导致其他问题,所以要小心。