2013-05-13 89 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