2014-02-02 2 views
1

Я пытаюсь настроить плиту котла для новых проектов, создав новый генератор йоменов, одна вещь, которая должна произойти, - это большой репозиторий Git, созданный как подмодуль а затем проверили на определенный тег. У меня все работает, но я бы хотел сообщить некоторые отзывы о ходе выполнения заказа.Показать сообщение от GIt при запуске процесса с порожденным узлом

При запуске submodule add вручную, вы обновлены следующим образом:

Receiving objects: 14% (22925/163744), 5.41 MiB | 1.30 MiB/s 

Я хотел бы иметь, что выход шоу во время моего сценария узла подмодуль добавить, но я не могу показаться, чтобы получить его, чтобы показать что-нибудь , Вот что у меня есть:

MyGenerator.prototype.addSubmodule = function() { 
    var done = this.async(); 

    console.log('Initializing submodule. This may take a minute.'); 

    var git = spawn('git', ['submodule', 'add', 'git://github.com/PathTo/Submodule.git', 'submodule']);$ 

    git.stdout.on('data', function(data){ 
    console.log(data); 
    }); 

    git.stderr.on('data', function(data){ 
    console.log(data); 
    }); 

    git.on('close', function(){$ 
    process.chdir('submodule');$ 

    console.log('Checking out %s branch of Submodule', this.submoduleVersion); 

    var checkout = spawn('git', ['checkout', this.submoduleVersion]); 

    checkout.stdout.on('data', function(data) { 
     console.log(data); 
    }); 

    checkout.on('close', function() { 
     process.chdir('../'); 
     done(); 
    }); 

    }); 

спасибо заранее.

ответ

0

Если ваш код выполняется в оболочке, то я считаю, используя { stdio: 'inherit'} бы это исправить:

var git = spawn('git', ['submodule', 'add', 
         'git://github.com/PathTo/Submodule.git', 'submodule'], 
       { stdio: 'inherit' }); 

Объяснение: через испытания в Баш оболочки, я нашел, что если мерзавец считает, что он не взаимодействует с tty, он не выводит никакой информации о ходе. Если ваше программное обеспечение запущено из оболочки, и вы сообщите spawn, чтобы просто передать stdin, stdout и stderr дочернему процессу, тогда ребенок должен увидеть информацию о ходе и выходе.

+0

Это сработало. Мне просто пришлось переключить обработчики событий с 'childProcess.stdout.on' на' process.stdout.on' – jhummel

1

Это связано с Running shell script in rails only outputs the 1 line, но похоже, что --progress описанный вариант не поддерживается git submodule. Вы должны иметь возможность получить желаемый результат выполнения, разрешив Git-процессу наследовать дескриптор файла stderr из текущего процесса (может также выходить в stdout в одно и то же время), который в соответствии с child_process documentation может быть выполнен следующим образом:

var git = spawn(
    'git', 
    ['submodule', 'add', 'git://github.com/PathTo/Submodule.git', 'submodule'], 
    { stdio: ['pipe', process.stdout, process.stderr]); 
Смежные вопросы