这个Ruby代码是什么意思?

时间:2016-08-10 09:16:47

标签: ruby git backup gitlab

我正在尝试对gitlab进行备份还原,但这种方法很有效,但命令行总是说存储库的还原失败了。我想我在代码中找到了负责[failed]语句的条件语句。有人知道这是在做什么或知道我应该去找我的错误的方向?

 if Kernel.system("git clone --bare #{path_to_bundle} #{project.repository.path_to_repo} > /dev/null 2>&1")
puts "[DONE]".green                                                                                                                                                               
          else                                                                                                                                                                                
            puts "[FAILED]".red                                                                                                                                                               
          end 

2 个答案:

答案 0 :(得分:1)

Kernel.system调用给定的shell命令。如果失败,则返回false值。

在您的情况下,这意味着git clone --bare #{path_to_bundle} #{project.repository.path_to_repo} > /dev/null 2>&1失败。

您可以在没有> /dev/null 2>&1的情况下手动在命令行上执行此命令来检查失败的原因。

要获得命令,您可以在命令

之前进行调试打印

if Kernel.system(pp("git clone --bare #{path_to_bundle} #{project.repository.path_to_repo} > /dev/null 2>&1"))

答案 1 :(得分:1)

来自docs

  如果命令为零退出状态,则

系统返回true,非零退出状态为false。如果命令执行失败,则返回nil$?中提供了错误状态。

这就是说:不断陷入失败状态意味着系统命令返回falsenil。您可能需要检查$?,原因如下:

command = Kernel.system("git clone --bare #{path_to_bundle} #{project.repository.path_to_repo} > /dev/null 2>&1")
if command
  puts "[DONE]".green
else
  puts "[FAILED]".red
  puts "Reason:"
  puts $?
end