2013-05-13 53 views
10

我试图使用ruby-progressbar宝石与ruby-git宝石包装了红宝石进度宝石的方法

我的目标是git的克隆过程中捕获的动态进度条,这样我可以得到这个混帐进度条克隆

我想用这种方式

def my_method 
    p = ProgressBar.create(:format => '%a %B %p%% %t') 
    Git.clone('git://github.com/ankit8898/rubymotion-inspect.git','my_repo',:path => '.') do 
    p.increment 
    end 
end 

我不能,因为我希望它变得进度条使用。

任何错误的方式,我已经初始化进度栏?

在此先感谢!

回答

4

Git.clonehttps://github.com/schacon/ruby-git/blob/master/lib/git.rb#L87)不期望一个块。所以你通过的块简单地被忽略。

我不明白这是如何可能的,短缺修改ruby-git宝石启用进度通知。

+0

嗯,好了,所以忘了,如果我使用Ruby-git的宝石和我正常使用'混帐混帐克隆:// github.com/ankit8898/ruby​​motion-inspect.git'。我怎样才能找到克隆的进度条。我的主要目标是通过使用ruby-git gem或简单的git clone来捕获进度条。 – AnkitG 2013-05-19 18:27:58

+0

尝试阅读并解释此shell命令的输出。也许你会很幸运。 – 2013-05-19 18:29:54

+0

好吧,那是一个备份计划。 :)但仍然没有任何其他方式来使用git clone和progressbar gem。因为我有兴趣看到使用git clone的实际进度条。 – AnkitG 2013-05-20 06:55:06

1

Git库将2>&1添加到所有命令。所以你的克隆命令最终被执行如下:

git clone ... 2>&1 

哪个结束抑制所有输出。您只需要在Git::Lib中覆盖一个名为run_command的方法,然后删除那个2>&1。你可以在irb试试这个:

class Git::Lib 
    class << self 
    attr_accessor :verbose 
    end 

    def run_command(git_cmd, &block) 
    git_cmd = git_cmd.gsub("2>&1", "").chomp if self.class.verbose 
    if block_given? 
     IO.popen(git_cmd, &block) 
    else 
     `#{git_cmd}`.chomp 
    end 
    end 
end 

我定义了一个额外的属性verbose。因此,只要您需要实际的git输出,只需设置Git::Lib.verbose = true并运行Git.clone或任何其他命令,实际输出将被打印。

这将完成,一旦你设置Git::Lib.verbose = true然后调用Git.clone,它会显示git的进度条是这样的:

Cloning into 'rapidftr-addon-cpims'... 
remote: Counting objects: 207, done. 
remote: Compressing objects: 100% (108/108), done. 
remote: Total 207 (delta 95), reused 201 (delta 90) 
Receiving objects: 50% (105/207), 83.10 KiB | 112 KiB/s... 
# ^^ The above line is git's progress bar, it will keep updating 

它可能不会显示在您所期望的特定格式的进度条,但它会在下载过程中显示动态更新。

编辑:新增样本输出

+0

他仍然需要解析和解释输出。我不认为他对原始'git clone'输出感兴趣。 – 2013-05-19 20:37:32

+0

从这个问题来看,我认为总体目标只是显示进度条。除了显示它之外,我没有看到OP对进度做任何事情。那么使用git本身的默认进度条输出会不会更容易? – Subhas 2013-05-19 21:07:19

+0

该命令还打印其他内容,不仅仅是进度条。正如你所看到的那样,OP也想要特定格式的栏。 – 2013-05-19 21:10:55