Я вполне уверен, что это либо невозможно, либо я упускаю очевидную опцию, но после консультации с классом Git Git , суть связывается в этом посте SO , идругие вопросы с пометкой grit на SO, я выхожу пустым.
Я использую grit для ряда граблей, которые устанавливают мое приложение.Одна из этих задач клонирует несколько репозиториев.
Используя в качестве примера код из связанных gist , это вывод git cloning in grit (должен работать из коробки послеgem install grit
в irb, ruby 1.9.2):
> require 'grit'
> gritty = Grit::Git.new('/tmp/filling-in')
=> #<Grit::Git:0x007f93ae105df8 @git_dir="/tmp/filling-in", @work_tree="/tmp/filling-in", @bytes_read=0>
> gritty.clone({:quiet => false, :verbose => true, :progress => true, :branch => '37s', :timeout => false}, "git://github.com/cookbooks/aws.git", "/tmp/aws")
=> "Cloning into /tmp/aws...\n"
Мой вопрос таков: могу ли я восстановить оставшуюся часть команды клона, предпочтительно, пока клон фактически происходит?«Cloning into /tmp/aws...\n» является первой строкой вывода и возвращается только после завершения клона.
Второстепенный вопрос: если невозможно восстановить прогресс клона, пока он происходит с песчинкой, есть ли другой способ показать прогресс команды, когда она происходит?Меня беспокоит то, что некоторые из наших репозиториев довольно велики, и я хотел бы дать пользователям моего rakefile что-то, чтобы они не пришли к выводу, что скрипт просто зависает при попытке связаться с удаленным.
Для справки«нормальным» выходом команды git clone будет:
$ git clone git://github.com/cookbooks/aws.git /tmp/test-aws
Cloning into /tmp/test-aws...
remote: Counting objects: 12364, done.
remote: Compressing objects: 100% (3724/3724), done.
remote: Total 12364 (delta 7220), reused 12330 (delta 7203)
Receiving objects: 100% (12364/12364), 5.92 MiB | 70 KiB/s, done.
Resolving deltas: 100% (7220/7220), done.
Краткое примечание: для некоторых функций, описанных здесь, а именно :process_info
, требуется обновленная версия гема,который не обновлялся с 23 января 2011 года, по состоянию на сегодня, 26 сентября 2011 года (большое спасибо Дэниелу Брокману за указание на это ниже).Вам нужно будет клонировать его из github и собрать его вручную.
РЕШЕНИЕ
Клон передает правильную информациюв stderr, если вы дадите ему :process_info
и :progress
(мой оригинальный пример не удался, потому что у меня был устаревший драгоценный камень).Ниже приведен рабочий код.Вам необходимо собрать драгоценный камень вручную по причинам, описанным выше, по крайней мере, на данный момент.
> require 'grit'
> repo = Grit::Git.new('/tmp/throw-away')
> process = repo.clone({:process_info => true, :progress => true, :timeout => false}, 'git://github.com/cookbooks/aws.git', '/tmp/testing-aws-again') # output supressed
> print process[2] # i.e. the stderr string of the output
remote: Counting objects: 12364, done.
remote: Compressing objects: 100% (3724/3724), done.
remote: Total 12364 (delta 7220), reused 12330 (delta 7203)
Receiving objects: 100% (12364/12364), 5.92 MiB | 801 KiB/s, done.
Resolving deltas: 100% (7220/7220), done.