2013-05-13 5 views
10

मैं ruby-git मणिरैपिंग अप माणिक प्रगतिबार मणि के साथ एक विधि

मेरा उद्देश्य के साथ ruby-progressbar मणि उपयोग करने के लिए कोशिश कर रहा हूँ 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.clone (https://github.com/schacon/ruby-git/blob/master/lib/git.rb#L87) ब्लॉक की अपेक्षा नहीं करता है। तो आपके द्वारा पारित ब्लॉक को केवल अनदेखा किया जाता है।

मुझे नहीं लगता कि यह कैसे संभव है, प्रगति अधिसूचनाओं को सक्षम करने के लिए ruby-git मणि को संशोधित करने से कम।

+0

हम्म, ठीक है तो अगर मैं माणिक Git मणि का उपयोग करें और मैं सामान्य 'Git क्लोन Git का उपयोग के बारे में भूल: // github.com/ankit8898/rubymotion-inspect.git'। मैं अभी भी क्लोन की प्रगति पट्टी कैसे पा सकता हूं। रूबी-गिट मणि या सरल गिट क्लोन का उपयोग कर प्रगति पट्टी को पकड़ने का मेरा मुख्य उद्देश्य। – AnkitG

+0

इस शेल कमांड के आउटपुट को पढ़ने और व्याख्या करने का प्रयास करें। शायद आप भाग्यशाली हो जाएगा। –

+0

अच्छी तरह से, यह एक बैकअप योजना है। :) लेकिन अभी भी प्रगति पट्टी के साथ गिट क्लोन का उपयोग करने का कोई और तरीका नहीं है। चूंकि मुझे गिट क्लोन के साथ वास्तव में प्रगति पट्टी देखने में दिलचस्पी है। – AnkitG

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::Lib.verbose = true सेट करें और Git.clone या कोई अन्य आदेश चलाएं, और वास्तविक आउटपुट मुद्रित किए जाएंगे।

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 

यह विशिष्ट प्रारूप है कि आप की उम्मीद में प्रगति बार नहीं दिखा सकता है: एक बार आप Git::Lib.verbose = true सेट और फिर Git.clone फोन

, क्या यह कर देगा है, तो वह ऐसा Git प्रगति बार प्रदर्शित करेगा , लेकिन यह अभी भी गतिशील अपडेट दिखाएगा क्योंकि डाउनलोड होता है।

संपादित करें: जोड़ा गया नमूना आउटपुट

+0

उसे अभी भी आउटपुट को पार्स और व्याख्या करने की आवश्यकता है। मुझे नहीं लगता कि वह कच्चे 'गिट क्लोन 'आउटपुट में रूचि रखता है। –

+0

प्रश्न से, मैंने सोचा कि समग्र उद्देश्य केवल प्रगति पट्टी को प्रदर्शित करना था। मुझे ओपी को प्रदर्शित करने के अलावा प्रगति के साथ कुछ भी नहीं दिख रहा है। तो गिट के डिफ़ॉल्ट प्रगति बार आउटपुट का उपयोग करना आसान नहीं होगा? – Subhas

+0

कमांड न केवल प्रगति पट्टी, अन्य सामग्री प्रिंट करता है। इसके अलावा ओपी एक विशिष्ट प्रारूप में बार चाहता है, जैसा कि आप देख सकते हैं। –

संबंधित मुद्दे