Завершение метода с драгоценным камнем ruby-progressbar
Я пытаюсь использовать ruby-progressbar gem с ruby-git gem
Моя цель - захватить динамический индикатор выполнения во время клонирования git, чтобы я мог получить индикатор выполнения для этого git clone
Я пытаюсь использовать таким образом
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
Я не могу получить индикатор выполнения, как я ожидаю.
Что-то не так с тем, как я инициализировал индикатор выполнения?
Спасибо заранее!
Ответы
Ответ 1
Git.clone
(https://github.com/schacon/ruby-git/blob/master/lib/git.rb#L87) не ожидает блока. Таким образом, блок, который вы передаете, просто игнорируется.
Я не вижу, как это возможно, вместо модификации ruby-git
gem для включения уведомлений о ходе выполнения.
Ответ 2
Библиотека Git
добавляет 2>&1
ко всем командам. Итак, ваша команда clone запускается как:
git clone ... 2>&1
Конец заканчивается подавлением всего вывода. Все, что вам нужно сделать, это переопределить один метод под названием run_command
в Git::Lib
и удалить его 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 progress bar, it will keep updating
Он может не показывать индикатор выполнения в определенном формате, который вы ожидаете, но он все равно будет показывать динамические обновления при загрузке.
Изменить: Добавлены выходные данные