2

現在、node.js モジュールを作成しています。私はvar exec = require('child_process').exec;node.js APIから使用しています。しかし、exec を使用して 2 つの git コマンドを連続して実行する必要があります。常に次のエラー メッセージが表示されます。

exec エラー: エラー: コマンドが失敗しました: 致命的: '~/Git/project/.git/index.lock' を作成できません: ファイルが存在します。

他の git プロセスが現在実行されていない場合、これはおそらく、以前にこのリポジトリで git プロセスがクラッシュしたことを意味します。他の git プロセスが実行されていないことを確認し、ファイルを手動で削除して続行します。

最初のコマンドが完了したら、seconed コマンドを実行する必要があります - キーワード: 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 SO で次の Threadを知っていますが、この問題を修正しないように助けてくれます。このスレッドで 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 & ありがとう、マイベックス

4

0 に答える 0