同步执行带有node.js的git命令

时间:2013-04-24 11:37:09

标签: node.js asynchronous exec sync

我正在编写node.js模块。我正在使用node.js api中的var exec = require('child_process').exec;。但是我必须连续执行带有exec的2个git命令。 我总是收到以下错误消息:

  

exec错误:错误:命令失败:致命:无法创建   '〜/ Git / project / .git / index.lock':文件存在。

     

如果当前没有其他git进程正在运行,这可能意味着a   git进程先前在此存储库中崩溃了。确保没有其他的git   进程正在运行并手动删除文件以继续。

我需要在第一个完成后执行seconed命令 - keyword:sync 到目前为止,我尝试使用execSync,但它不能在Windows系统上运行,这是不行的。

目前我正在使用asyncblock模块,但我也给了我上面提到的错误。

如果updateList中的两个值都为true,则会发生这种情况,如果一个值为false则全部按预期工作。

var loadPackageJson = function(updateList){

        if(updateList.foo === true){
            update('foo/package.json');
        }

        if (updateList.bar === true){
            update('bar/package.json');
        }       
    };

        var update = function(path){
                var packageJson = JSON.parse(fs.readFileSync(path,'utf8'));
                incrementVersion(packageJson);

                asyncblock(function(flow){
                    exec('git log -1 HEAD', flow.add('commit'));
                    var result = flow.wait('commit');
                    var commit=result.split('\n');
                    console.info(commit[0]);

                    setValueInPackageJson('commit', commit[0], packageJson);
                    writeUpdatedPackageJson(path, packageJson);

                    flow.wait();

                    exec('git add ' + path, flow.add('add'));
                    flow.wait('add'); //error is thrown here
                    console.info('added ' + path + ' successful to commit');
                });
    };

如何同步执行两个git命令?

/ edit我知道以下Thread on SO,但我帮助我解决这个问题。我在这个帖子上找到了asyncblock的提示。

/ EDIT2 控制台上的输出如下所示:

Version: 0.6.14
Version: 0.0.901
commit a3ed4fd8545b736aa9feea1bea52c5e0aa6a07ac
foo/package.json successfully updated
commit a3ed4fd8545b736aa9feea1bea52c5e0aa6a07ac
bar/package.json successfully updated

在我看来,这似乎是节点并行处理loadPackageJson函数的处理。

BR&谢谢, mybecks

0 个答案:

没有答案